faf-mcp 3.0.1 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/CHANGELOG.md +30 -1
  2. package/CLAUDE.md +2 -2
  3. package/README.md +36 -18
  4. package/dist/src/cli.js +2 -1
  5. package/dist/src/cli.js.map +1 -1
  6. package/dist/src/faf-core/commands/agents.js +19 -5
  7. package/dist/src/faf-core/commands/agents.js.map +1 -1
  8. package/dist/src/faf-core/commands/claude.d.ts +0 -1
  9. package/dist/src/faf-core/commands/claude.js +1 -2
  10. package/dist/src/faf-core/commands/claude.js.map +1 -1
  11. package/dist/src/faf-core/commands/conductor.js +35 -10
  12. package/dist/src/faf-core/commands/conductor.js.map +1 -1
  13. package/dist/src/faf-core/commands/cursor.js +19 -5
  14. package/dist/src/faf-core/commands/cursor.js.map +1 -1
  15. package/dist/src/faf-core/commands/gemini.js +19 -5
  16. package/dist/src/faf-core/commands/gemini.js.map +1 -1
  17. package/dist/src/faf-core/commands/git-context.d.ts +12 -3
  18. package/dist/src/faf-core/commands/git-context.js +28 -6
  19. package/dist/src/faf-core/commands/git-context.js.map +1 -1
  20. package/dist/src/faf-core/commands/sync.d.ts +8 -0
  21. package/dist/src/faf-core/commands/sync.js +20 -23
  22. package/dist/src/faf-core/commands/sync.js.map +1 -1
  23. package/dist/src/faf-core/fix-once/yaml.js +12 -13
  24. package/dist/src/faf-core/fix-once/yaml.js.map +1 -1
  25. package/dist/src/faf-core/parsers/faf-git-generator.d.ts +0 -1
  26. package/dist/src/faf-core/parsers/faf-git-generator.js +13 -34
  27. package/dist/src/faf-core/parsers/faf-git-generator.js.map +1 -1
  28. package/dist/src/handlers/engine-adapter.js +5 -3
  29. package/dist/src/handlers/engine-adapter.js.map +1 -1
  30. package/dist/src/handlers/tools.js +95 -80
  31. package/dist/src/handlers/tools.js.map +1 -1
  32. package/package.json +6 -6
  33. package/project.faf +2 -2
  34. package/scripts/sync-version.js +2 -1
  35. package/skills/faf-ide/SKILL.md +4 -4
package/CHANGELOG.md CHANGED
@@ -1,5 +1,5 @@
1
1
  <!-- faf: faf-mcp | TypeScript | mcp | The Interop MCP for Context — the Cursor / IDE Edition. Persistent context for Cursor, VS Code, and every MCP-compatible IDE. IANA-registered application/vnd.faf+yaml. Start with "Use FAF". -->
2
- <!-- faf: doc=changelog | latest=v3.0.1 | canonical=project.faf | family=FAF -->
2
+ <!-- faf: doc=changelog | latest=v4.0.0 | canonical=project.faf | family=FAF -->
3
3
 
4
4
  # Changelog
5
5
 
@@ -8,6 +8,35 @@ All notable changes to faf-mcp will be documented in this file.
8
8
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
9
9
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
10
10
 
11
+ ## [4.0.0] - 2026-09-26 — The Always33 Edition
12
+
13
+ **One engine, one number: faf-mcp 4 scores all 33 slots with faf-cli 8's always-33 kernel — the same score faf-cli, claude-faf-mcp 7 and faf-kernel give.** 402 tests.
14
+
15
+ **4.0.0 is a major release because scores can move.** A `.faf` without the 12 enterprise `slotignored` markers now counts them as empty (21 filled = 64%). Run `faf_auto` — it writes the markers and the score returns (a v3-era mcp-context-card file: 56% → 100%). Anything that gates on `faf_score` should re-check its threshold.
16
+
17
+ ### Changed
18
+ - **The always-33 engine.** faf-mcp composes **faf-cli ^8.0.0** (was ^7.12.0, which could never resolve 8.x). Every tool's score is faf-cli 8's: all 33 Mk4 slots, one Rust kernel (`faf-scoring-kernel` 3.0.0). Verified live: `faf_score` on faf-python-sdk 56, mcp-context-card 56, faf-cli ✪ 100 — identical to faf-cli 8.0.0 and claude-faf-mcp 7.0.0 (which ships first).
19
+ - **One kernel copy.** The direct `faf-scoring-kernel ^2.0.3` dependency is gone (nothing imported it); the only kernel in an install is faf-cli's own.
20
+ - **The 12 enterprise slots stay in view** — marked `slotignored` unless your app-type uses them. `faf_score` scores against all 33; `slotignored` slots drop out of the denominator.
21
+ - **faf-cli's owner rule for the blocks it writes** (faf-cli 7.13+, which npm installs of 3.0.2 already had): a block faf can prove is its own is replaced in place; an ambiguous one — a marker with trailing whitespace, a marker behind an unclosed or misread fence, a metastamp-only file — is left whole below a fresh block. Nothing is ever partly wiped.
22
+ - `tbd` and `todo` (any case) count as empty.
23
+
24
+ ### Tests
25
+ - The doctor fixtures carry the 12 enterprise markers; the injector tests assert the owner rule against faf-cli 8's actual output.
26
+
27
+ ## [3.0.2] - 2026-09-10 — The Compose Edition
28
+
29
+ **Tools that say what they do: `faf_git` scores with faf-cli and asks before overwriting, `faf_sync` previews each change, and imports say when nothing was written.**
30
+
31
+ ### Fixed
32
+ - **`faf_git` has one scorer.** It reported its own slot count (100% Trophy on files faf-cli scores 5–14%); it now reports faf-cli's score of the bytes it authored. It writes the .faf slots faf-cli scores (`project.goal`, `project.main_language`, `human_context`), so the score reflects what it found, and it refuses to replace an existing `project.faf` unless you pass `force: true`.
33
+ - **`faf_sync` previews each change.** The dry run lists every field it would update, once, with the value `apply: true` will write. It used to give a count and suggest a CLI flag the tool does not take.
34
+ - **Imports say when nothing was written.** `faf_agents`, `faf_cursor`, `faf_gemini` and `faf_conductor` import without `merge` now say so; `merge: true` with no `project.faf` fails with a clear message. `faf_conductor` export fills its sections from the .faf fields.
35
+ - **Errors speak MCP.** YAML parse errors no longer carry terminal colour codes or a CLI command, and the `faf_score` headline no longer carries stray control bytes.
36
+ - **Descriptions and annotations match the handlers.** `faf_dna` is marked as writing; `faf_write`, `faf_conductor` and `faf_git` as able to overwrite; `faf_check` protect is described as advisory; `faf_trust`, `faf_doctor`, `faf_formats`, `faf_clear`, `faf_context`, `faf_auto` and `faf_quick` say what they do. `faf_debug` checks write access without writing a file, `faf_guide` teaches the MCP tools, and `faf_quick` writes a format version and no default language.
37
+ - Repo: `ABOUT.md` (a false "Anthropic stewardship" line and a monorepo layout that no longer exists) and `demo-server.js` (an HTTP demo with retired tools) are archived under git tags and removed; `SECURITY.md` supports 3.x; `CONTRIBUTING.md` lists Node 22 and Bun.
38
+ - A version bump now re-stamps the project's release line and re-renders CLAUDE.md and the Copilot file from it.
39
+
11
40
  ## [3.0.1] - 2026-09-10 — The Compose Edition
12
41
 
13
42
  **Names that match the code: `faf_bi_sync` is now `faf_claude`, `faf_init` writes what `faf init` writes, and the listings lead with .FAF Context.**
package/CLAUDE.md CHANGED
@@ -25,12 +25,12 @@ The Interop MCP for Context — the Cursor / IDE Edition. Persistent context for
25
25
  - **What:** The Cursor / IDE Edition — persistent context for Cursor, VS Code, and every MCP-compatible IDE — 29 MCP tools (15 essential shown by default), interop with AGENTS.md, .cursorrules, GEMINI.md
26
26
  - **Why:** Eliminate the 20-minute AI context tax — give AI instant project understanding in 30 seconds
27
27
  - **Where:** npm · MCP Registry · any MCP-compatible IDE — people get it how they wish
28
- - **When:** Production/Stable — v3.0.1 The Compose Edition, WJTTC certified
28
+ - **When:** Production/Stable — v4.0.0 The Always33 Edition, WJTTC certified
29
29
  - **How:** npx faf-mcp or npm install -g faf-mcp, then add to your MCP config
30
30
 
31
31
  ---
32
32
 
33
- *STATUS: BI-SYNC ACTIVE — 2026-09-10T19:01:58.786Z*
33
+ *STATUS: SYNC ACTIVE — 2026-09-26T17:54:17.189Z*
34
34
  <!-- faf:end -->
35
35
 
36
36
  ## Working here
package/README.md CHANGED
@@ -27,14 +27,24 @@
27
27
 
28
28
  ---
29
29
 
30
- ## What's New in 3.0.1 — The Compose Edition
30
+ ## What's New in 4.0.0 — The Always33 Edition
31
31
 
32
- **Names that match the code: `faf_bi_sync` is now `faf_claude`, `faf_init` writes what `faf init` writes, and the listings lead with .FAF Context.**
32
+ **One engine, one number: faf-mcp 4 scores all 33 slots with faf-cli 8's always-33 kernel — the same score faf-cli, claude-faf-mcp 7 and faf-kernel give.**
33
33
 
34
- - **`faf_bi_sync` is now `faf_claude`.** It writes CLAUDE.md from `project.faf`, one direction, which is all it ever did. The old name still answers, so existing configs keep working.
35
- - **`faf_init` writes what `faf init` writes.** It runs faf-cli's own init on the folder: a valid file, scored from what is there, and the new project becomes the current one.
36
- - **The interop tools say what `sync` does.** `faf_agents`, `faf_cursor` and `faf_gemini` re-write their file from `project.faf`; `import` with `merge: true` brings a file back in.
37
- - **Surfaces corrected.** The docs page hero, the npm, MCP Registry, Glama and Smithery descriptions, the registry receipt, the birth certificate and dozens of tool strings now match 3.0.
34
+ - **The always-33 engine.** Every tool scores with faf-cli 8.0.0 — all 33 Mk4 slots, one Rust kernel, one copy of it. Checked live: faf-python-sdk 56, mcp-context-card 56, faf-cli ✪ 100.
35
+ - **Your 21 slots, and the 12 enterprise slots in view.** The enterprise slots (infra, app, ops) are marked `slotignored` unless your app-type uses them. `faf_score` scores against all 33; `slotignored` slots drop out of the denominator.
36
+ - **Upgrading from 3.x:** a `.faf` without the 12 markers now scores against 33. **Run `faf_auto`** — it writes them and your score returns.
37
+
38
+ ## 3.0.2 — The Compose Edition
39
+
40
+ **Tools that say what they do: `faf_git` scores with faf-cli and asks before overwriting, `faf_sync` previews each change, and imports say when nothing was written.**
41
+
42
+ - **`faf_git` has one scorer.** It reports faf-cli's score of the file it authored, writes the slots faf-cli scores, and asks before replacing an existing `project.faf`.
43
+ - **`faf_sync` previews each change.** The dry run lists every field it would update and names `apply: true`.
44
+ - **Imports say when nothing was written,** and `merge: true` with no `project.faf` fails clearly.
45
+ - **Descriptions, annotations and errors match the code.** No CLI commands or terminal colour codes in tool output.
46
+
47
+ 3.0.1 renamed `faf_bi_sync` to `faf_claude` and made `faf_init` write what `faf init` writes. The full history is in the [CHANGELOG](CHANGELOG.md).
38
48
 
39
49
  ## The Compose Edition (3.0)
40
50
 
@@ -123,7 +133,7 @@ faf_claude { all: true }
123
133
  faf_git { url: "https://github.com/facebook/react" }
124
134
  ```
125
135
 
126
- **Core tier:** 15 essential tools shown by default; set `FAF_TOOLS=all` for the full **29** (every tool stays callable by name either way) · **25 test suites** · **7 bundled parsers**
136
+ **Core tier:** 15 essential tools shown by default; set `FAF_TOOLS=all` for the full **29** (every tool stays callable by name either way) · **26 test suites** · **7 bundled parsers**
127
137
 
128
138
  ---
129
139
 
@@ -179,20 +189,28 @@ Works on all platforms — stops web search, forces tool usage.
179
189
 
180
190
  ## 29 MCP Tools
181
191
 
192
+ The 15 Core tools, shown by default:
193
+
182
194
  | Tool | Purpose |
183
195
  |------|---------|
184
- | `faf_init` | Initialize project.faf |
185
- | `faf_score` | Check AI-readiness (0-100%) |
186
- | `faf_sync` | Reconcile project.faf with package.json / git (dry-run; `apply:true` writes) |
187
- | `faf_claude` | Write CLAUDE.md (+ AGENTS.md, .cursorrules, GEMINI.md) from project.faf |
188
- | `faf_read` | Parse and validate FAF files |
189
- | `faf_write` | Create/update FAF with validation |
196
+ | `faf_init` | Create a new `project.faf` (use `faf_auto` to enhance an existing one) |
197
+ | `faf_auto` | One-call setup: init or merge, stack detection, CLAUDE.md, score |
198
+ | `faf_go` | Guided interview that fills the missing human-context and goal fields toward 100% |
199
+ | `faf_score` | AI-readiness score (0-100%) and tier; `details:true` adds a slot-by-slot breakdown |
200
+ | `faf_doctor` | Diagnose a low score: missing files, slot counts, config issues, each with a fix |
201
+ | `faf_check` | Rate each `human_context` field empty / generic / good |
202
+ | `faf_trust` | Validate the required fields and `about.*` block with faf-cli's validator |
203
+ | `faf_sync` | Reconcile `project.faf` with package.json (dry-run; `apply:true` writes) |
204
+ | `faf_context` | Set or show the active project path |
205
+ | `faf_about` | What the IANA-registered `.faf` format is, in plain language |
190
206
  | **Interop Tools** | |
191
- | `faf_agents` | Import/export/sync AGENTS.md |
192
- | `faf_cursor` | Import/export/sync .cursorrules |
193
- | `faf_gemini` | Import/export/sync GEMINI.md |
194
- | `faf_conductor` | Import/export directory structure |
195
- | `faf_git` | Author .faf from GitHub repo URL |
207
+ | `faf_claude` | Write CLAUDE.md from `project.faf` (`all:true` also writes AGENTS.md, .cursorrules, GEMINI.md) |
208
+ | `faf_agents` | Import AGENTS.md into `project.faf`, or write it from `project.faf` |
209
+ | `faf_cursor` | Import .cursorrules into `project.faf`, or write it from `project.faf` |
210
+ | `faf_gemini` | Import GEMINI.md into `project.faf`, or write it from `project.faf` |
211
+ | `faf_git` | Author a `project.faf` from a public GitHub repo URL |
212
+
213
+ **+14 more with `FAF_TOOLS=all`:** `faf_status` · `faf_what` · `faf_guide` · `faf_debug` · `faf_clear` · `faf_list` · `faf_read` (read a file within the allowed roots: cwd, the OS temp dir, or `FAF_ALLOWED_ROOTS`) · `faf_write` (write a file within the same roots) · `faf_readme` · `faf_human_add` · `faf_quick` · `faf_formats` · `faf_dna` · `faf_conductor`
196
214
 
197
215
  **Built on faf-cli.** Every tool composes the bundled [faf-cli](https://www.npmjs.com/package/faf-cli) in-process — the same scorer, the same renderers, the same block injector the CLI uses. Nothing shells out to a `faf` on your PATH.
198
216
 
package/dist/src/cli.js CHANGED
@@ -10,7 +10,8 @@ async function main() {
10
10
  cors: true
11
11
  });
12
12
  await server.start();
13
- console.log('FAF MCP Server started in stdio mode');
13
+ // stderr: stdout is the JSON-RPC stream in stdio mode.
14
+ console.error('FAF MCP Server started in stdio mode');
14
15
  }
15
16
  main().catch((error) => {
16
17
  console.error('Failed to start MCP server:', error);
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":";;;AAEA,qCAAwC;AAExC,KAAK,UAAU,IAAI;IACjB,MAAM,MAAM,GAAG,IAAI,qBAAY,CAAC;QAC9B,SAAS,EAAE,OAAO;QAClB,aAAa,EAAE,KAAK;QACpB,KAAK,EAAE,IAAI;QACX,IAAI,EAAE,IAAI;KACX,CAAC,CAAC;IAEH,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IAErB,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;AACtD,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC,CAAC;IACpD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":";;;AAEA,qCAAwC;AAExC,KAAK,UAAU,IAAI;IACjB,MAAM,MAAM,GAAG,IAAI,qBAAY,CAAC;QAC9B,SAAS,EAAE,OAAO;QAClB,aAAa,EAAE,KAAK;QACpB,KAAK,EAAE,IAAI;QACX,IAAI,EAAE,IAAI;KACX,CAAC,CAAC;IAEH,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IAErB,uDAAuD;IACvD,OAAO,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;AACxD,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC,CAAC;IACpD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -74,15 +74,29 @@ async function agentsImportCommand(projectPath, options = {}) {
74
74
  warnings: result.warnings,
75
75
  };
76
76
  }
77
- catch {
78
- // Fall through to create new
77
+ catch (error) {
78
+ return {
79
+ success: false,
80
+ action: 'import',
81
+ message: `Could not merge AGENTS.md into project.faf: ${error instanceof Error ? error.message : String(error)}`,
82
+ warnings: result.warnings,
83
+ };
79
84
  }
80
85
  }
86
+ // merge was asked for and there is nothing to merge into: say so rather
87
+ // than report a no-op as an import.
88
+ return {
89
+ success: false,
90
+ action: 'import',
91
+ message: 'No project.faf to merge into — run faf_init first',
92
+ warnings: result.warnings,
93
+ };
81
94
  }
95
+ // Without merge nothing is written: say exactly that.
82
96
  return {
83
97
  success: true,
84
98
  action: 'import',
85
- message: `Imported AGENTS.md (${result.sectionsFound.length} sections found)`,
99
+ message: `Parsed AGENTS.md (${result.sectionsFound.length} sections) — nothing written; pass merge: true to write it into project.faf`,
86
100
  data: { faf: result.faf, sectionsFound: result.sectionsFound },
87
101
  warnings: result.warnings,
88
102
  };
@@ -97,7 +111,7 @@ async function agentsExportCommand(projectPath, options = {}) {
97
111
  return {
98
112
  success: false,
99
113
  action: 'export',
100
- message: 'No .faf file found. Run faf init first.',
114
+ message: 'No .faf file found. Run faf_init first.',
101
115
  };
102
116
  }
103
117
  // Check if AGENTS.md already exists
@@ -108,7 +122,7 @@ async function agentsExportCommand(projectPath, options = {}) {
108
122
  return {
109
123
  success: false,
110
124
  action: 'export',
111
- message: 'AGENTS.md already exists. Use force: true to overwrite.',
125
+ message: 'AGENTS.md already exists. Pass force: true to update its faf-managed block (content outside it is kept).',
112
126
  };
113
127
  }
114
128
  catch {
@@ -1 +1 @@
1
- {"version":3,"file":"agents.js","sourceRoot":"","sources":["../../../../src/faf-core/commands/agents.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agents.js","sourceRoot":"","sources":["../../../../src/faf-core/commands/agents.ts"],"names":[],"mappings":"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"}
@@ -19,7 +19,6 @@ export interface ClaudeExportResult {
19
19
  success: boolean;
20
20
  direction: 'faf-to-claude' | 'none';
21
21
  filesChanged: string[];
22
- conflicts: string[];
23
22
  duration: number;
24
23
  message: string;
25
24
  }
@@ -63,7 +63,6 @@ async function claudeExportCommand(projectPath, _options = {}) {
63
63
  success: false,
64
64
  direction: 'none',
65
65
  filesChanged: [],
66
- conflicts: [],
67
66
  duration: 0,
68
67
  message: ''
69
68
  };
@@ -71,7 +70,7 @@ async function claudeExportCommand(projectPath, _options = {}) {
71
70
  // Find project.faf file
72
71
  const fafPath = projectPath ? path.join(projectPath, 'project.faf') : await (0, file_utils_1.findFafFile)();
73
72
  if (!fafPath || !await (0, file_utils_1.fileExists)(fafPath)) {
74
- result.message = 'No project.faf file found. Run faf init first.';
73
+ result.message = 'No project.faf file found. Run faf_init first.';
75
74
  result.duration = Date.now() - startTime;
76
75
  return result;
77
76
  }
@@ -1 +1 @@
1
- {"version":3,"file":"claude.js","sourceRoot":"","sources":["../../../../src/faf-core/commands/claude.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiCH,kDAiHC;AAhJD,2CAAsD;AACtD,2CAA6B;AAC7B,2BAAoC;AACpC,oDAA8D;AAC9D,2CAAkD;AAClD,2CAAkD;AAClD,2CAAkD;AAClD,qEAAuD;AAmBvD;;;;GAIG;AACI,KAAK,UAAU,mBAAmB,CAAC,WAAoB,EAAE,WAAgC,EAAE;IAChG,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,MAAM,MAAM,GAAuB;QACjC,OAAO,EAAE,KAAK;QACd,SAAS,EAAE,MAAM;QACjB,YAAY,EAAE,EAAE;QAChB,SAAS,EAAE,EAAE;QACb,QAAQ,EAAE,CAAC;QACX,OAAO,EAAE,EAAE;KACZ,CAAC;IAEF,IAAI,CAAC;QACH,wBAAwB;QACxB,MAAM,OAAO,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,MAAM,IAAA,wBAAW,GAAE,CAAC;QAE1F,IAAI,CAAC,OAAO,IAAI,CAAC,MAAM,IAAA,uBAAU,EAAC,OAAO,CAAC,EAAE,CAAC;YAC3C,MAAM,CAAC,OAAO,GAAG,gDAAgD,CAAC;YAClE,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;YACzC,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACzC,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;QAExD,oBAAoB;QACpB,MAAM,cAAc,GAAG,MAAM,IAAA,uBAAU,EAAC,YAAY,CAAC,CAAC;QAEtD,oBAAoB;QACpB,MAAM,UAAU,GAAG,MAAM,aAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACvD,IAAA,YAAS,EAAC,UAAU,CAAC,CAAC,CAAC,sDAAsD;QAC7E,qEAAqE;QACrE,0DAA0D;QAC1D,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,GAAG,MAAM,0BAAM,CAAC;QAC9E,IAAI,YAAY,GAAG,SAAS,CAAC;QAC7B,IAAI,CAAC;YACH,YAAY,GAAG,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC,KAAK,GAAG,CAAC;QACtD,CAAC;QAAC,MAAM,CAAC;YACP,6DAA6D;QAC/D,CAAC;QAED,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,gEAAgE;YAChE,mEAAmE;YACnE,uEAAuE;YACvE,aAAa,CAAC,UAAU,EAAE,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAE5D,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;YACtB,MAAM,CAAC,SAAS,GAAG,eAAe,CAAC;YACnC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACtC,MAAM,CAAC,OAAO,GAAG,kDAAkD,YAAY,EAAE,CAAC;QAEpF,CAAC;aAAM,CAAC;YACN,gEAAgE;YAChE,mEAAmE;YACnE,uEAAuE;YACvE,aAAa,CAAC,UAAU,EAAE,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAE5D,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;YACtB,MAAM,CAAC,SAAS,GAAG,eAAe,CAAC;YACnC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACtC,MAAM,CAAC,OAAO,GAAG,oDAAoD,YAAY,EAAE,CAAC;QACtF,CAAC;QAED,+CAA+C;QAC/C,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,GAAG,CAAC;QACjD,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,GAAG,CAAC;QACjD,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,GAAG,CAAC;QAEjD,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,CAAC;gBACH,MAAM,YAAY,GAAG,MAAM,IAAA,+BAAmB,EAAC,UAAU,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC5E,IAAI,YAAY,CAAC,OAAO,EAAE,CAAC;oBACzB,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBACxC,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,oDAAoD;YACtD,CAAC;QACH,CAAC;QAED,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,CAAC;gBACH,MAAM,YAAY,GAAG,MAAM,IAAA,+BAAmB,EAAC,UAAU,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC5E,IAAI,YAAY,CAAC,OAAO,EAAE,CAAC;oBACzB,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;gBAC3C,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,YAAY;YACd,CAAC;QACH,CAAC;QAED,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,CAAC;gBACH,MAAM,YAAY,GAAG,MAAM,IAAA,+BAAmB,EAAC,UAAU,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC5E,IAAI,YAAY,CAAC,OAAO,EAAE,CAAC;oBACzB,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBACxC,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,YAAY;YACd,CAAC;QACH,CAAC;QAED,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnC,MAAM,CAAC,OAAO,IAAI,kBAAkB,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACtG,CAAC;QAED,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QACzC,OAAO,MAAM,CAAC;IAEhB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QACzC,MAAM,CAAC,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,wBAAwB,CAAC;QACnF,OAAO,MAAM,CAAC;IAChB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"claude.js","sourceRoot":"","sources":["../../../../src/faf-core/commands/claude.ts"],"names":[],"mappings":"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"}
@@ -78,15 +78,29 @@ async function conductorImportCommand(projectPath, options = {}) {
78
78
  warnings: result.warnings,
79
79
  };
80
80
  }
81
- catch {
82
- // Fall through
81
+ catch (error) {
82
+ return {
83
+ success: false,
84
+ action: 'import',
85
+ message: `Could not merge conductor/ into project.faf: ${error instanceof Error ? error.message : String(error)}`,
86
+ warnings: result.warnings,
87
+ };
83
88
  }
84
89
  }
90
+ // merge was asked for and there is nothing to merge into: say so rather
91
+ // than report a no-op as an import.
92
+ return {
93
+ success: false,
94
+ action: 'import',
95
+ message: 'No project.faf to merge into — run faf_init first',
96
+ warnings: result.warnings,
97
+ };
85
98
  }
99
+ // Without merge nothing is written: say exactly that.
86
100
  return {
87
101
  success: true,
88
102
  action: 'import',
89
- message: `Imported conductor/ (${result.filesProcessed.length} files processed)`,
103
+ message: `Parsed conductor/ (${result.filesProcessed.length} files) — nothing written; pass merge: true to write it into project.faf`,
90
104
  data: { faf: result.faf, filesProcessed: result.filesProcessed },
91
105
  warnings: result.warnings,
92
106
  };
@@ -100,7 +114,7 @@ async function conductorExportCommand(projectPath, options = {}) {
100
114
  return {
101
115
  success: false,
102
116
  action: 'export',
103
- message: 'No .faf file found. Run faf init first.',
117
+ message: 'No .faf file found. Run faf_init first.',
104
118
  };
105
119
  }
106
120
  const outputPath = path_1.default.join(projectPath, 'conductor');
@@ -122,18 +136,29 @@ async function conductorExportCommand(projectPath, options = {}) {
122
136
  }
123
137
  const fafContent = await fs_1.promises.readFile(fafPath, 'utf-8');
124
138
  const fafData = (0, yaml_js_1.parse)(fafContent);
125
- // Build the conductor-compatible structure
139
+ // Build the conductor-compatible structure. Read the spec fields a
140
+ // project.faf actually carries (project.main_language / goal, stack.*);
141
+ // the list-shaped fields (stack.languages, project.goals, …) that a
142
+ // conductor merge writes stay as a fallback.
143
+ const specValues = (...values) => values.filter((v) => typeof v === 'string' && v !== '' && v !== 'slotignored');
144
+ const firstNonEmpty = (...lists) => {
145
+ for (const list of lists) {
146
+ if (Array.isArray(list) && list.length > 0)
147
+ return list;
148
+ }
149
+ return [];
150
+ };
126
151
  const conductorFaf = {
127
152
  project: {
128
153
  name: fafData.project?.name || 'Unknown',
129
154
  description: fafData.project?.description || fafData.project?.goal || '',
130
155
  type: fafData.project?.type || 'application',
131
- goals: fafData.project?.goals || [],
156
+ goals: firstNonEmpty(specValues(fafData.project?.goal), fafData.project?.goals),
132
157
  stack: {
133
- languages: fafData.stack?.languages || fafData.project?.stack?.languages || [],
134
- frameworks: fafData.stack?.frameworks || fafData.project?.stack?.frameworks || [],
135
- databases: fafData.stack?.databases || fafData.project?.stack?.databases || [],
136
- infrastructure: fafData.stack?.infrastructure || fafData.project?.stack?.infrastructure || [],
158
+ languages: firstNonEmpty(specValues(fafData.project?.main_language), fafData.stack?.languages, fafData.project?.stack?.languages),
159
+ frameworks: firstNonEmpty(specValues(fafData.stack?.frontend, fafData.stack?.backend), fafData.stack?.frameworks, fafData.project?.stack?.frameworks),
160
+ databases: firstNonEmpty(specValues(fafData.stack?.database), fafData.stack?.databases, fafData.project?.stack?.databases),
161
+ infrastructure: firstNonEmpty(specValues(fafData.stack?.hosting, fafData.stack?.cicd), fafData.stack?.infrastructure, fafData.project?.stack?.infrastructure),
137
162
  },
138
163
  rules: fafData.project?.rules || [],
139
164
  guidelines: fafData.project?.guidelines || [],
@@ -1 +1 @@
1
- {"version":3,"file":"conductor.js","sourceRoot":"","sources":["../../../../src/faf-core/commands/conductor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"conductor.js","sourceRoot":"","sources":["../../../../src/faf-core/commands/conductor.ts"],"names":[],"mappings":"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"}
@@ -73,15 +73,29 @@ async function cursorImportCommand(projectPath, options = {}) {
73
73
  warnings: result.warnings,
74
74
  };
75
75
  }
76
- catch {
77
- // Fall through to return import data
76
+ catch (error) {
77
+ return {
78
+ success: false,
79
+ action: 'import',
80
+ message: `Could not merge .cursorrules into project.faf: ${error instanceof Error ? error.message : String(error)}`,
81
+ warnings: result.warnings,
82
+ };
78
83
  }
79
84
  }
85
+ // merge was asked for and there is nothing to merge into: say so rather
86
+ // than report a no-op as an import.
87
+ return {
88
+ success: false,
89
+ action: 'import',
90
+ message: 'No project.faf to merge into — run faf_init first',
91
+ warnings: result.warnings,
92
+ };
80
93
  }
94
+ // Without merge nothing is written: say exactly that.
81
95
  return {
82
96
  success: true,
83
97
  action: 'import',
84
- message: `Imported .cursorrules (${result.sectionsFound.length} sections found)`,
98
+ message: `Parsed .cursorrules (${result.sectionsFound.length} sections) — nothing written; pass merge: true to write it into project.faf`,
85
99
  data: { faf: result.faf, sectionsFound: result.sectionsFound },
86
100
  warnings: result.warnings,
87
101
  };
@@ -95,7 +109,7 @@ async function cursorExportCommand(projectPath, options = {}) {
95
109
  return {
96
110
  success: false,
97
111
  action: 'export',
98
- message: 'No .faf file found. Run faf init first.',
112
+ message: 'No .faf file found. Run faf_init first.',
99
113
  };
100
114
  }
101
115
  const outputPath = path_1.default.join(projectPath, '.cursorrules');
@@ -105,7 +119,7 @@ async function cursorExportCommand(projectPath, options = {}) {
105
119
  return {
106
120
  success: false,
107
121
  action: 'export',
108
- message: '.cursorrules already exists. Use force: true to overwrite.',
122
+ message: '.cursorrules already exists. Pass force: true to update its faf-managed block (content outside it is kept).',
109
123
  };
110
124
  }
111
125
  catch {
@@ -1 +1 @@
1
- {"version":3,"file":"cursor.js","sourceRoot":"","sources":["../../../../src/faf-core/commands/cursor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cursor.js","sourceRoot":"","sources":["../../../../src/faf-core/commands/cursor.ts"],"names":[],"mappings":"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"}
@@ -72,15 +72,29 @@ async function geminiImportCommand(projectPath, options = {}) {
72
72
  warnings: result.warnings,
73
73
  };
74
74
  }
75
- catch {
76
- // Fall through
75
+ catch (error) {
76
+ return {
77
+ success: false,
78
+ action: 'import',
79
+ message: `Could not merge GEMINI.md into project.faf: ${error instanceof Error ? error.message : String(error)}`,
80
+ warnings: result.warnings,
81
+ };
77
82
  }
78
83
  }
84
+ // merge was asked for and there is nothing to merge into: say so rather
85
+ // than report a no-op as an import.
86
+ return {
87
+ success: false,
88
+ action: 'import',
89
+ message: 'No project.faf to merge into — run faf_init first',
90
+ warnings: result.warnings,
91
+ };
79
92
  }
93
+ // Without merge nothing is written: say exactly that.
80
94
  return {
81
95
  success: true,
82
96
  action: 'import',
83
- message: `Imported GEMINI.md (${result.sectionsFound.length} sections found)`,
97
+ message: `Parsed GEMINI.md (${result.sectionsFound.length} sections) — nothing written; pass merge: true to write it into project.faf`,
84
98
  data: { faf: result.faf, sectionsFound: result.sectionsFound },
85
99
  warnings: result.warnings,
86
100
  };
@@ -94,7 +108,7 @@ async function geminiExportCommand(projectPath, options = {}) {
94
108
  return {
95
109
  success: false,
96
110
  action: 'export',
97
- message: 'No .faf file found. Run faf init first.',
111
+ message: 'No .faf file found. Run faf_init first.',
98
112
  };
99
113
  }
100
114
  const outputPath = path_1.default.join(projectPath, 'GEMINI.md');
@@ -104,7 +118,7 @@ async function geminiExportCommand(projectPath, options = {}) {
104
118
  return {
105
119
  success: false,
106
120
  action: 'export',
107
- message: 'GEMINI.md already exists. Use force: true to overwrite.',
121
+ message: 'GEMINI.md already exists. Pass force: true to update its faf-managed block (content outside it is kept).',
108
122
  };
109
123
  }
110
124
  catch {
@@ -1 +1 @@
1
- {"version":3,"file":"gemini.js","sourceRoot":"","sources":["../../../../src/faf-core/commands/gemini.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"gemini.js","sourceRoot":"","sources":["../../../../src/faf-core/commands/gemini.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,19 @@
1
1
  /**
2
2
  * Git Context Command — Interop (faf-mcp 2.0.0; ported from faf-cli 4.5.0 via claude-faf-mcp 4.5.0)
3
3
  *
4
- * Generate project.faf from a GitHub repository URL.
4
+ * Author project.faf from a GitHub repository URL.
5
5
  * Fetches metadata, README, package.json — no cloning needed.
6
6
  * Bundled command — no CLI dependency required.
7
+ *
8
+ * The score it reports is faf-cli's scorer on the exact bytes authored —
9
+ * the same number faf_score gives that file. The ported slot counter that
10
+ * used to supply it credited defaults and 'slotignored' slots that were
11
+ * never written, so a 10% file was announced as 100% (Trophy).
7
12
  */
13
+ export interface GitContextOptions {
14
+ /** Replace an existing <outputPath>/project.faf. Without it the command refuses. */
15
+ force?: boolean;
16
+ }
8
17
  export interface GitContextResult {
9
18
  success: boolean;
10
19
  message: string;
@@ -18,6 +27,6 @@ export interface GitContextResult {
18
27
  };
19
28
  }
20
29
  /**
21
- * Generate project.faf from a GitHub URL
30
+ * Author project.faf from a GitHub URL
22
31
  */
23
- export declare function gitContextCommand(url: string, outputPath?: string): Promise<GitContextResult>;
32
+ export declare function gitContextCommand(url: string, outputPath?: string, options?: GitContextOptions): Promise<GitContextResult>;