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.
- {faf_python_sdk-1.3.0.dist-info → faf_python_sdk-1.3.1.dist-info}/METADATA +5 -3
- {faf_python_sdk-1.3.0.dist-info → faf_python_sdk-1.3.1.dist-info}/RECORD +6 -6
- faf_sdk/__init__.py +1 -1
- faf_sdk/interop.py +6 -6
- {faf_python_sdk-1.3.0.dist-info → faf_python_sdk-1.3.1.dist-info}/WHEEL +0 -0
- {faf_python_sdk-1.3.0.dist-info → faf_python_sdk-1.3.1.dist-info}/licenses/LICENSE +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: faf-python-sdk
|
|
3
|
-
Version: 1.3.
|
|
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.
|
|
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
|
|
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=
|
|
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=
|
|
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.
|
|
12
|
-
faf_python_sdk-1.3.
|
|
13
|
-
faf_python_sdk-1.3.
|
|
14
|
-
faf_python_sdk-1.3.
|
|
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
faf_sdk/interop.py
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"""
|
|
2
|
-
AI-context file
|
|
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-
|
|
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
|
|
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 —
|
|
191
|
-
"`faf_agents` MCP tool.
|
|
192
|
-
"
|
|
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
|
|
|
File without changes
|
|
File without changes
|