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,213 @@
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
+ import fs from 'node:fs/promises';
13
+ import path from 'node:path';
14
+ import { parseSemanticMemory, isSuperseded, listEpisodicDates, readEpisodicEntry, listProceduralSkills, readProceduralEntry, } from '../memory/index.js';
15
+ // ---------------------------------------------------------------------------
16
+ // Output helpers
17
+ // ---------------------------------------------------------------------------
18
+ function print(line) {
19
+ process.stdout.write(line + '\n');
20
+ }
21
+ function printErr(line) {
22
+ process.stderr.write(line + '\n');
23
+ }
24
+ // ---------------------------------------------------------------------------
25
+ // Show semantic memory
26
+ // ---------------------------------------------------------------------------
27
+ async function showSemantic(vaultRoot) {
28
+ const semanticPath = path.join(vaultRoot, '.agentos/memory/semantic.md');
29
+ let content;
30
+ try {
31
+ content = await fs.readFile(semanticPath, 'utf8');
32
+ }
33
+ catch {
34
+ printErr('No semantic memory found. Run `agentfs onboard` first.');
35
+ return 1;
36
+ }
37
+ const entries = parseSemanticMemory(content);
38
+ if (entries.length === 0) {
39
+ print('Semantic memory is empty.');
40
+ return 0;
41
+ }
42
+ print('');
43
+ print('Semantic Memory');
44
+ print('═'.repeat(50));
45
+ let activeCount = 0;
46
+ let supersededCount = 0;
47
+ for (const entry of entries) {
48
+ const superseded = isSuperseded(entry);
49
+ if (superseded) {
50
+ supersededCount++;
51
+ }
52
+ else {
53
+ activeCount++;
54
+ }
55
+ const statusTag = superseded ? ' [superseded]' : '';
56
+ const confidenceTag = entry.type === 'PATTERN' && entry.confidence !== undefined
57
+ ? ` (${(entry.confidence * 100).toFixed(0)}%)`
58
+ : '';
59
+ const marker = superseded ? ' ○' : ' ●';
60
+ print(`${marker} ${entry.type}: ${entry.content}${confidenceTag}${statusTag}`);
61
+ }
62
+ print('');
63
+ print(` Active: ${activeCount} | Superseded: ${supersededCount} | Total: ${entries.length}`);
64
+ print('');
65
+ return 0;
66
+ }
67
+ // ---------------------------------------------------------------------------
68
+ // Show episodic memory
69
+ // ---------------------------------------------------------------------------
70
+ async function showEpisodic(vaultRoot, date) {
71
+ if (date) {
72
+ const content = await readEpisodicEntry(vaultRoot, date);
73
+ if (content === null) {
74
+ printErr(`No episodic entry found for ${date}.`);
75
+ return 1;
76
+ }
77
+ print('');
78
+ print(content);
79
+ return 0;
80
+ }
81
+ // List all dates
82
+ const dates = await listEpisodicDates(vaultRoot);
83
+ if (dates.length === 0) {
84
+ print('No episodic memories recorded yet.');
85
+ return 0;
86
+ }
87
+ print('');
88
+ print('Episodic Memory — Session History');
89
+ print('═'.repeat(50));
90
+ for (const d of dates) {
91
+ print(` 📅 ${d}`);
92
+ }
93
+ print('');
94
+ print(` Total: ${dates.length} entries`);
95
+ print(' Use: agentfs memory show episodic <date> for details');
96
+ print('');
97
+ return 0;
98
+ }
99
+ // ---------------------------------------------------------------------------
100
+ // Show procedural memory
101
+ // ---------------------------------------------------------------------------
102
+ async function showProcedural(vaultRoot, name) {
103
+ if (name) {
104
+ const content = await readProceduralEntry(vaultRoot, name);
105
+ if (content === null) {
106
+ printErr(`No procedural skill found for "${name}".`);
107
+ return 1;
108
+ }
109
+ print('');
110
+ print(content);
111
+ return 0;
112
+ }
113
+ // List all skills
114
+ const skills = await listProceduralSkills(vaultRoot);
115
+ if (skills.length === 0) {
116
+ print('No procedural skills learned yet.');
117
+ return 0;
118
+ }
119
+ print('');
120
+ print('Procedural Memory — Learned Skills');
121
+ print('═'.repeat(50));
122
+ for (const s of skills) {
123
+ print(` 🔧 ${s}`);
124
+ }
125
+ print('');
126
+ print(` Total: ${skills.length} skills`);
127
+ print(' Use: agentfs memory show procedural <name> for details');
128
+ print('');
129
+ return 0;
130
+ }
131
+ // ---------------------------------------------------------------------------
132
+ // Consolidate
133
+ // ---------------------------------------------------------------------------
134
+ async function consolidate(vaultRoot) {
135
+ const semanticPath = path.join(vaultRoot, '.agentos/memory/semantic.md');
136
+ let content;
137
+ try {
138
+ content = await fs.readFile(semanticPath, 'utf8');
139
+ }
140
+ catch {
141
+ printErr('No semantic memory found. Nothing to consolidate.');
142
+ return 1;
143
+ }
144
+ const entries = parseSemanticMemory(content);
145
+ const active = entries.filter((e) => !isSuperseded(e));
146
+ const superseded = entries.filter((e) => isSuperseded(e));
147
+ print('');
148
+ print('Memory Consolidation');
149
+ print('═'.repeat(50));
150
+ print(` Semantic entries: ${entries.length}`);
151
+ print(` Active: ${active.length}`);
152
+ print(` Superseded: ${superseded.length}`);
153
+ // List episodic dates
154
+ const dates = await listEpisodicDates(vaultRoot);
155
+ print(` Episodic entries: ${dates.length}`);
156
+ // List procedural skills
157
+ const skills = await listProceduralSkills(vaultRoot);
158
+ print(` Procedural skills: ${skills.length}`);
159
+ print('');
160
+ print(' Consolidation complete. No entries were modified.');
161
+ print(' (Future: auto-decay stale PATTERN entries here.)');
162
+ print('');
163
+ return 0;
164
+ }
165
+ // ---------------------------------------------------------------------------
166
+ // Main command entry
167
+ // ---------------------------------------------------------------------------
168
+ /**
169
+ * Entry point for the `agentfs memory` subcommand.
170
+ *
171
+ * @param args - Arguments after the `memory` subcommand token
172
+ * @returns 0 on success, 1 on error
173
+ */
174
+ export async function memoryCommand(args) {
175
+ const vaultRoot = process.cwd();
176
+ const action = args[0];
177
+ if (action === undefined || action === '--help' || action === '-h') {
178
+ printMemoryUsage();
179
+ return 0;
180
+ }
181
+ if (action === 'show') {
182
+ const target = args[1];
183
+ if (target === 'episodic') {
184
+ return showEpisodic(vaultRoot, args[2]);
185
+ }
186
+ if (target === 'procedural') {
187
+ return showProcedural(vaultRoot, args[2]);
188
+ }
189
+ // Default: show semantic (includes optional `target === 'semantic'`)
190
+ return showSemantic(vaultRoot);
191
+ }
192
+ if (action === 'consolidate') {
193
+ return consolidate(vaultRoot);
194
+ }
195
+ printErr(`agentfs memory: unknown action '${action}'`);
196
+ printMemoryUsage();
197
+ return 1;
198
+ }
199
+ // ---------------------------------------------------------------------------
200
+ // Usage
201
+ // ---------------------------------------------------------------------------
202
+ function printMemoryUsage() {
203
+ print('');
204
+ print('Usage: agentfs memory <action>');
205
+ print('');
206
+ print('Actions:');
207
+ print(' show Show semantic memory');
208
+ print(' show episodic [date] Show episodic memory (list or by date)');
209
+ print(' show procedural [name] Show procedural skills (list or by name)');
210
+ print(' consolidate Run memory consolidation');
211
+ print('');
212
+ }
213
+ //# sourceMappingURL=memory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.js","sourceRoot":"","sources":["../../src/commands/memory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * `agentfs onboard` command implementation.
3
+ *
4
+ * Runs an interactive interview to fill in the owner identity and bootstrap
5
+ * semantic memory from the user's answers. Rewrites `.agentos/init.d/00-identity.md`
6
+ * and appends new entries to `.agentos/memory/semantic.md` (never overwrites,
7
+ * never duplicates).
8
+ *
9
+ * Usage:
10
+ * ```
11
+ * agentfs onboard
12
+ * ```
13
+ *
14
+ * @module commands/onboard
15
+ */
16
+ /**
17
+ * Entry point for the `agentfs onboard` subcommand.
18
+ *
19
+ * Orchestrates:
20
+ * 1. Verify `.agentos/manifest.yaml` exists (fails fast if not).
21
+ * 2. Run the interactive interview (pre-fills name from manifest).
22
+ * 3. Rewrite `.agentos/init.d/00-identity.md` (preserves custom sections).
23
+ * 4. Append new entries to `.agentos/memory/semantic.md` (no duplicates).
24
+ * 5. Print a human-readable summary of what changed.
25
+ *
26
+ * @param args - Arguments after the `onboard` subcommand token.
27
+ * Currently unused — reserved for future flags.
28
+ * @returns 0 on success, 1 on error.
29
+ */
30
+ export declare function onboardCommand(_args: string[]): Promise<number>;
31
+ //# sourceMappingURL=onboard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"onboard.d.ts","sourceRoot":"","sources":["../../src/commands/onboard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAmSH;;;;;;;;;;;;;GAaG;AACH,wBAAsB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAsIrE"}
@@ -0,0 +1,362 @@
1
+ /**
2
+ * `agentfs onboard` command implementation.
3
+ *
4
+ * Runs an interactive interview to fill in the owner identity and bootstrap
5
+ * semantic memory from the user's answers. Rewrites `.agentos/init.d/00-identity.md`
6
+ * and appends new entries to `.agentos/memory/semantic.md` (never overwrites,
7
+ * never duplicates).
8
+ *
9
+ * Usage:
10
+ * ```
11
+ * agentfs onboard
12
+ * ```
13
+ *
14
+ * @module commands/onboard
15
+ */
16
+ import fs from 'node:fs/promises';
17
+ import path from 'node:path';
18
+ import inquirer from 'inquirer';
19
+ import { readManifest } from '../compilers/base.js';
20
+ // ---------------------------------------------------------------------------
21
+ // Constants
22
+ // ---------------------------------------------------------------------------
23
+ /** Marker that separates AgentFS-managed content from user-added content. */
24
+ const CUSTOM_MARKER = '<!-- custom -->';
25
+ // ---------------------------------------------------------------------------
26
+ // Output helpers
27
+ // ---------------------------------------------------------------------------
28
+ /** Write a line to stdout. */
29
+ function print(line) {
30
+ process.stdout.write(line + '\n');
31
+ }
32
+ /** Write a line to stderr. */
33
+ function printErr(line) {
34
+ process.stderr.write(line + '\n');
35
+ }
36
+ // ---------------------------------------------------------------------------
37
+ // Identity file builder
38
+ // ---------------------------------------------------------------------------
39
+ /**
40
+ * Formats the FHS path table for the 00-identity.md vault paths section.
41
+ *
42
+ * Each line maps an FHS key to its vault directory:
43
+ * - tmp → Inbox
44
+ *
45
+ * @param paths - Resolved FhsPaths from the manifest.
46
+ * @returns Markdown bullet list with one mapping per defined path.
47
+ */
48
+ function formatPathMappings(paths) {
49
+ return Object.entries(paths)
50
+ .filter((entry) => entry[1] !== undefined)
51
+ .map(([key, dir]) => `- ${key} → ${dir}`)
52
+ .join('\n');
53
+ }
54
+ /**
55
+ * Builds the managed section of `00-identity.md` from interview answers.
56
+ *
57
+ * The trailing newline before `<!-- custom -->` ensures the marker sits on
58
+ * its own line without an extra blank line when there is no custom content.
59
+ *
60
+ * @param answers - Collected interview answers.
61
+ * @param paths - FHS paths from the manifest (auto-generated path table).
62
+ * @returns Full file content up to and including the custom marker.
63
+ */
64
+ function buildIdentityContent(answers, paths) {
65
+ return `# Agent Identity
66
+
67
+ ## Owner
68
+ - Name: ${answers.name}
69
+ - Role: ${answers.role}
70
+ - Style: ${answers.style}
71
+
72
+ ## Agent Rules
73
+ - Follow vault conventions (frontmatter, naming, paths)
74
+ - Challenge weak decisions
75
+ - Don't repeat the obvious
76
+
77
+ ## Vault Paths
78
+ ${formatPathMappings(paths)}
79
+
80
+ ${CUSTOM_MARKER}
81
+ `;
82
+ }
83
+ /**
84
+ * Rewrites `.agentos/init.d/00-identity.md`, preserving any content the user
85
+ * added below the `<!-- custom -->` marker on a previous run.
86
+ *
87
+ * Strategy:
88
+ * 1. If the file exists, split on the marker and keep everything after it.
89
+ * 2. Rebuild the managed section from current answers.
90
+ * 3. Re-attach the preserved custom tail (if any).
91
+ *
92
+ * @param identityPath - Absolute path to `00-identity.md`.
93
+ * @param answers - Interview answers.
94
+ * @param paths - FHS paths from the manifest.
95
+ * @returns `'updated'` when the file was written, `'created'` when new.
96
+ */
97
+ async function rewriteIdentityFile(identityPath, answers, paths) {
98
+ let customTail = '';
99
+ let existed = false;
100
+ try {
101
+ const existing = await fs.readFile(identityPath, 'utf-8');
102
+ existed = true;
103
+ const markerIndex = existing.indexOf(CUSTOM_MARKER);
104
+ if (markerIndex !== -1) {
105
+ // Capture everything after the marker line (including a trailing newline
106
+ // on the marker line itself).
107
+ const afterMarker = existing.slice(markerIndex + CUSTOM_MARKER.length);
108
+ // Preserve only non-empty custom content.
109
+ if (afterMarker.trim().length > 0) {
110
+ customTail = afterMarker;
111
+ }
112
+ }
113
+ }
114
+ catch {
115
+ // File does not exist yet — that is fine.
116
+ }
117
+ const managedSection = buildIdentityContent(answers, paths);
118
+ const finalContent = customTail.length > 0
119
+ ? managedSection + customTail
120
+ : managedSection;
121
+ await fs.mkdir(path.dirname(identityPath), { recursive: true });
122
+ await fs.writeFile(identityPath, finalContent, 'utf-8');
123
+ return existed ? 'updated' : 'created';
124
+ }
125
+ /**
126
+ * Formats a semantic entry line.
127
+ *
128
+ * PREF and AVOID entries have no status bracket (they are always active by
129
+ * convention). FACT entries include `[active]`.
130
+ *
131
+ * Architecture format (from docs/architecture.md §4):
132
+ * ```
133
+ * PREF: no emoji in headings
134
+ * FACT: [active] primary stack is Kubernetes + ArgoCD
135
+ * AVOID: don't suggest LangChain
136
+ * ```
137
+ *
138
+ * @param entry - The pending entry to format.
139
+ * @returns A single-line string ready to append to `semantic.md`.
140
+ */
141
+ function formatSemanticLine(entry) {
142
+ if (entry.type === 'FACT') {
143
+ return `FACT: [active] ${entry.content}`;
144
+ }
145
+ return `${entry.type}: ${entry.content}`;
146
+ }
147
+ /**
148
+ * Checks whether an entry already exists in the semantic memory file content.
149
+ *
150
+ * Deduplication is by substring match on the entry content (case-insensitive)
151
+ * so trivial re-runs don't produce duplicate lines.
152
+ *
153
+ * @param fileContent - Current contents of `semantic.md`.
154
+ * @param entry - The entry to check.
155
+ * @returns `true` if the content is already present.
156
+ */
157
+ function entryExists(fileContent, entry) {
158
+ return fileContent.toLowerCase().includes(entry.content.toLowerCase());
159
+ }
160
+ /**
161
+ * Derives semantic memory entries from the interview answers.
162
+ *
163
+ * Mapping:
164
+ * - role → FACT ("role is {role}")
165
+ * - techStack → FACT ("primary stack is {techStack}")
166
+ * - style → PREF ("communication style: {style}")
167
+ * - neverDo → AVOID (raw text)
168
+ * - prefs → PREF (raw text, only if non-empty)
169
+ *
170
+ * Blank answers produce no entries (the user skipped that question).
171
+ *
172
+ * @param answers - Interview answers.
173
+ * @returns Array of entries to potentially append.
174
+ */
175
+ function deriveSemanticEntries(answers) {
176
+ const entries = [];
177
+ if (answers.role.trim().length > 0) {
178
+ entries.push({ type: 'FACT', content: `role is ${answers.role.trim()}` });
179
+ }
180
+ if (answers.techStack.trim().length > 0) {
181
+ entries.push({ type: 'FACT', content: `primary stack is ${answers.techStack.trim()}` });
182
+ }
183
+ if (answers.style.trim().length > 0) {
184
+ entries.push({ type: 'PREF', content: `communication style: ${answers.style.trim()}` });
185
+ }
186
+ if (answers.neverDo.trim().length > 0) {
187
+ entries.push({ type: 'AVOID', content: answers.neverDo.trim() });
188
+ }
189
+ if (answers.preferences.trim().length > 0) {
190
+ entries.push({ type: 'PREF', content: answers.preferences.trim() });
191
+ }
192
+ return entries;
193
+ }
194
+ /**
195
+ * Appends new semantic memory entries to `semantic.md`, skipping duplicates.
196
+ *
197
+ * The file is created with a header if it does not already exist.
198
+ * Existing content is never modified — only new lines are appended.
199
+ *
200
+ * @param semanticPath - Absolute path to `semantic.md`.
201
+ * @param entries - Candidate entries derived from interview answers.
202
+ * @returns Array of lines that were actually appended (may be empty).
203
+ */
204
+ async function appendSemanticEntries(semanticPath, entries) {
205
+ let existingContent = '';
206
+ try {
207
+ existingContent = await fs.readFile(semanticPath, 'utf-8');
208
+ }
209
+ catch {
210
+ // File does not exist — will be created below.
211
+ }
212
+ const toAppend = entries.filter((e) => !entryExists(existingContent, e));
213
+ if (toAppend.length === 0) {
214
+ return [];
215
+ }
216
+ const lines = toAppend.map(formatSemanticLine);
217
+ // If the file is new, prepend a minimal header.
218
+ const header = existingContent.length === 0
219
+ ? `# Semantic Memory\n\n`
220
+ : '';
221
+ // Ensure existing content ends with a newline before appending.
222
+ const separator = existingContent.length > 0 && !existingContent.endsWith('\n')
223
+ ? '\n'
224
+ : '';
225
+ await fs.mkdir(path.dirname(semanticPath), { recursive: true });
226
+ await fs.appendFile(semanticPath, header + separator + lines.join('\n') + '\n', 'utf-8');
227
+ return lines;
228
+ }
229
+ // ---------------------------------------------------------------------------
230
+ // Main command
231
+ // ---------------------------------------------------------------------------
232
+ /**
233
+ * Entry point for the `agentfs onboard` subcommand.
234
+ *
235
+ * Orchestrates:
236
+ * 1. Verify `.agentos/manifest.yaml` exists (fails fast if not).
237
+ * 2. Run the interactive interview (pre-fills name from manifest).
238
+ * 3. Rewrite `.agentos/init.d/00-identity.md` (preserves custom sections).
239
+ * 4. Append new entries to `.agentos/memory/semantic.md` (no duplicates).
240
+ * 5. Print a human-readable summary of what changed.
241
+ *
242
+ * @param args - Arguments after the `onboard` subcommand token.
243
+ * Currently unused — reserved for future flags.
244
+ * @returns 0 on success, 1 on error.
245
+ */
246
+ export async function onboardCommand(_args) {
247
+ const vaultRoot = process.cwd();
248
+ // -------------------------------------------------------------------------
249
+ // 1. Verify manifest exists.
250
+ // -------------------------------------------------------------------------
251
+ let manifest;
252
+ try {
253
+ manifest = await readManifest(vaultRoot);
254
+ }
255
+ catch (err) {
256
+ const isNotFound = err !== null &&
257
+ typeof err === 'object' &&
258
+ err !== null &&
259
+ 'code' in err &&
260
+ err.code === 'ENOENT';
261
+ if (isNotFound) {
262
+ printErr('No AgentFS vault found. Run `npx create-agentfs` first.');
263
+ }
264
+ else {
265
+ printErr(`agentfs onboard: failed to read manifest — ${err instanceof Error ? err.message : String(err)}`);
266
+ }
267
+ return 1;
268
+ }
269
+ // -------------------------------------------------------------------------
270
+ // 2. Interactive interview.
271
+ // -------------------------------------------------------------------------
272
+ print('');
273
+ print('AgentFS onboard — teaching your agent who you are.');
274
+ print('');
275
+ const answers = await inquirer.prompt([
276
+ {
277
+ type: 'input',
278
+ name: 'name',
279
+ message: 'What is your name?',
280
+ default: manifest.vault.owner,
281
+ validate: (v) => v.trim().length > 0 || 'Name cannot be empty.',
282
+ },
283
+ {
284
+ type: 'input',
285
+ name: 'role',
286
+ message: 'What is your role?',
287
+ default: '',
288
+ // e.g. "Platform Engineer", "Student", "Founder"
289
+ },
290
+ {
291
+ type: 'input',
292
+ name: 'style',
293
+ message: 'Describe your communication style:',
294
+ default: '',
295
+ // e.g. "direct, technical, no fluff"
296
+ },
297
+ {
298
+ type: 'input',
299
+ name: 'techStack',
300
+ message: 'What is your primary tech stack?',
301
+ default: '',
302
+ // e.g. "Kubernetes, ArgoCD, TypeScript"
303
+ },
304
+ {
305
+ type: 'input',
306
+ name: 'neverDo',
307
+ message: 'What should the agent NEVER do?',
308
+ default: '',
309
+ // e.g. "don't suggest LangChain, no emoji"
310
+ },
311
+ {
312
+ type: 'input',
313
+ name: 'preferences',
314
+ message: 'Any preferences the agent should know?',
315
+ default: '',
316
+ },
317
+ ]);
318
+ // -------------------------------------------------------------------------
319
+ // 3. Rewrite 00-identity.md.
320
+ // -------------------------------------------------------------------------
321
+ const identityPath = path.join(vaultRoot, '.agentos', 'init.d', '00-identity.md');
322
+ let identityStatus;
323
+ try {
324
+ identityStatus = await rewriteIdentityFile(identityPath, answers, manifest.paths);
325
+ }
326
+ catch (err) {
327
+ printErr(`agentfs onboard: failed to write identity file — ${err instanceof Error ? err.message : String(err)}`);
328
+ return 1;
329
+ }
330
+ // -------------------------------------------------------------------------
331
+ // 4. Append semantic memory entries.
332
+ // -------------------------------------------------------------------------
333
+ const semanticPath = path.join(vaultRoot, '.agentos', 'memory', 'semantic.md');
334
+ const entries = deriveSemanticEntries(answers);
335
+ let appended = [];
336
+ try {
337
+ appended = await appendSemanticEntries(semanticPath, entries);
338
+ }
339
+ catch (err) {
340
+ printErr(`agentfs onboard: failed to update semantic memory — ${err instanceof Error ? err.message : String(err)}`);
341
+ return 1;
342
+ }
343
+ // -------------------------------------------------------------------------
344
+ // 5. Summary.
345
+ // -------------------------------------------------------------------------
346
+ print('');
347
+ print('Onboard complete.');
348
+ print('');
349
+ print(` .agentos/init.d/00-identity.md — ${identityStatus}`);
350
+ if (appended.length > 0) {
351
+ print(` .agentos/memory/semantic.md — ${appended.length} entr${appended.length === 1 ? 'y' : 'ies'} appended`);
352
+ for (const line of appended) {
353
+ print(` + ${line}`);
354
+ }
355
+ }
356
+ else {
357
+ print(' .agentos/memory/semantic.md — no new entries (all already present)');
358
+ }
359
+ print('');
360
+ return 0;
361
+ }
362
+ //# sourceMappingURL=onboard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"onboard.js","sourceRoot":"","sources":["../../src/commands/onboard.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
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
+ export declare function secretCommand(args: string[]): Promise<number>;
13
+ //# sourceMappingURL=secret.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secret.d.ts","sourceRoot":"","sources":["../../src/commands/secret.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAyBH,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CA2EnE"}