faf-python-sdk 1.3.0__py3-none-any.whl → 1.3.1__py3-none-any.whl

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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: faf-python-sdk
3
- Version: 1.3.0
3
+ Version: 1.3.1
4
4
  Summary: Persistent project context for Python — parse, validate, and score `.faf` files. The foundation other Python FAF tools (gemini-faf-mcp, custom MCP servers, CI validators) build on. IANA-registered application/vnd.faf+yaml.
5
5
  Project-URL: Homepage, https://faf.one
6
6
  Project-URL: Documentation, https://github.com/Wolfe-Jam/faf-python-sdk
@@ -46,10 +46,12 @@ The foundation other Python FAF tools build on. If you're building MCP servers,
46
46
 
47
47
  **Media Type:** `application/vnd.faf+yaml` (IANA registered)
48
48
 
49
- ## What's New in v1.3.0 — The Interop Edition
49
+ ## What's New in v1.3.1 — The Interop Edition
50
50
 
51
51
  The SDK can now author AI-context files, not just parse and score them.
52
52
 
53
+ > **v1.3.1** is a copy patch — "generate" removed from external text (module docstring, the blockquote written into every AGENTS.md, README, CHANGELOG). No API change; the `faf_sdk.interop` functions below are unchanged.
54
+
53
55
  `faf_sdk.interop` — `generate_agents_md(faf)` and `generate_gemini_md(faf)`, Python ports of faf-cli's `src/interop/agents.ts` + `gemini.ts`, in parity with the canonical TypeScript. Deterministic BETTER-shaped projection: setup (install→build→dev ordered) · tests · layout · conventions · three-tier guardrails · definition of done · security · commit · stack. Human Context (who/why marketing) is intentionally omitted from AGENTS.md — it belongs in the README / .faf DNA, not agent ops.
54
56
 
55
57
  ```python
@@ -59,7 +61,7 @@ faf = parse_file("project.faf")
59
61
  print(generate_agents_md(faf.data.raw)) # takes the raw dict — carries top-level commands / key_files / security
60
62
  ```
61
63
 
62
- Any Python FAF tool that authors an AI-context file wraps this now — never hand-roll a Markdown generator. `gemini-faf-mcp` 2.7.0's `faf_agents` / `faf_gemini` are the reference wrappers.
64
+ Any Python FAF tool that authors an AI-context file wraps this now — never hand-roll one. `gemini-faf-mcp` 2.7.0's `faf_agents` / `faf_gemini` are the reference wrappers.
63
65
 
64
66
  ## What's New in v1.2.0 — The Dart Edition
65
67
 
@@ -1,14 +1,14 @@
1
- faf_sdk/__init__.py,sha256=1ARRF6IEkjcvf0zJwqWQF30TjTGtgrzWi8O3YwigASc,1842
1
+ faf_sdk/__init__.py,sha256=_HepiDZAIejVARbFBkTIK3yXyefmemLZlP9Ao6O29NE,1842
2
2
  faf_sdk/dart_detection.json,sha256=jFtKnyyMVVFsunizteFZ2pLhYC1qC2nCIWQB9SdOqKE,1195
3
3
  faf_sdk/detect.py,sha256=GothQNKChKSEwke74MRy63VyBYLqOzN1j3yzjsSVpJA,6310
4
4
  faf_sdk/discovery.py,sha256=3Jj3lSzPAj9l0_VjJneLAwo1dMXvhneFhcVN4m2ejOw,8643
5
- faf_sdk/interop.py,sha256=fgIm13pLZIxSrjJiq7ZXXvR5ViWezuGUxhzCbsz_eZQ,13465
5
+ faf_sdk/interop.py,sha256=V2gdR4Y2w8R2mUtRBPq-pSlu4glzpeFuWfpQazvPOGI,13450
6
6
  faf_sdk/mk4.py,sha256=dA8o3YB0W19Mt_bqcR67HAw4S08zxj6IzEmubTy-pQY,5708
7
7
  faf_sdk/parser.py,sha256=lJJysj52X0Q_aGhl4PMXY2PuMqASFHdVRiSZFDdampk,4925
8
8
  faf_sdk/types.py,sha256=sm1ezSzCc-93bszr4ite31_xZRKjwqf2utlqN6_0QuM,6615
9
9
  faf_sdk/validator.py,sha256=6uneOwar4GYUF52BnAQTu159kE4mh4RWRgG6onVbiG4,5730
10
10
  faf_sdk/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
11
- faf_python_sdk-1.3.0.dist-info/METADATA,sha256=L_RFAhO35YJ9RRSGyl5M8IIdFBU6rndw5bnKmUJmBpk,8784
12
- faf_python_sdk-1.3.0.dist-info/WHEEL,sha256=zOwg4jB6zX2kU910N-cMawjivD6tO8NEWvE12je1bVk,87
13
- faf_python_sdk-1.3.0.dist-info/licenses/LICENSE,sha256=ARScF5tFhbQnYO2V5QAuCwhDHcxKdOWTOV81Pxx_j7U,1065
14
- faf_python_sdk-1.3.0.dist-info/RECORD,,
11
+ faf_python_sdk-1.3.1.dist-info/METADATA,sha256=df6Rn6Y5FFupYES2dA_98R-0K6kb6vtQJJQow510RHM,8991
12
+ faf_python_sdk-1.3.1.dist-info/WHEEL,sha256=zOwg4jB6zX2kU910N-cMawjivD6tO8NEWvE12je1bVk,87
13
+ faf_python_sdk-1.3.1.dist-info/licenses/LICENSE,sha256=ARScF5tFhbQnYO2V5QAuCwhDHcxKdOWTOV81Pxx_j7U,1065
14
+ faf_python_sdk-1.3.1.dist-info/RECORD,,
faf_sdk/__init__.py CHANGED
@@ -36,7 +36,7 @@ from .types import (
36
36
  AIScoring
37
37
  )
38
38
 
39
- __version__ = "1.3.0"
39
+ __version__ = "1.3.1"
40
40
  __all__ = [
41
41
  # Parser
42
42
  "parse",
faf_sdk/interop.py CHANGED
@@ -1,5 +1,5 @@
1
1
  """
2
- AI-context file generators — AGENTS.md and GEMINI.md from .faf data.
2
+ AI-context file authoring — AGENTS.md and GEMINI.md from .faf data.
3
3
 
4
4
  Python port of faf-cli's `src/interop/agents.ts` + `gemini.ts`, kept in
5
5
  parity with the canonical TypeScript. Deterministic projection from curated
@@ -90,7 +90,7 @@ def slot_label(path: str) -> str:
90
90
 
91
91
 
92
92
  def faf_meta_tag(faf: dict) -> str:
93
- """The two-line `<!-- faf: ... -->` metastamp every faf-generated file opens with."""
93
+ """The two-line `<!-- faf: ... -->` metastamp every faf-authored file opens with."""
94
94
  proj = faf.get("project") or {}
95
95
  name = str(proj.get("name") or "").strip()
96
96
  lang = str(proj.get("main_language") or "").strip()
@@ -102,7 +102,7 @@ def faf_meta_tag(faf: dict) -> str:
102
102
  return f"{line1}\n{line2}"
103
103
 
104
104
 
105
- # --- command classification (shared by both generators) ---------------------
105
+ # --- command classification (shared by both) --------------------------------
106
106
 
107
107
  def _classify_commands(faf: dict) -> dict:
108
108
  commands = faf.get("commands") or {}
@@ -187,9 +187,9 @@ def generate_agents_md(faf: dict) -> str:
187
187
  push(orientation)
188
188
  push()
189
189
  push(
190
- "> Authored by faf — refresh with `faf export --agents` or the "
191
- "`faf_agents` MCP tool. The managed block is regenerated each time; "
192
- "hand-written content outside it is preserved."
190
+ "> Authored by faf — do not edit the managed block; refresh with "
191
+ "`faf export --agents` or the `faf_agents` MCP tool. Hand-written "
192
+ "content outside it is preserved."
193
193
  )
194
194
  push()
195
195