faf-python-sdk 1.3.0__tar.gz → 1.3.1__tar.gz
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 → faf_python_sdk-1.3.1}/CHANGELOG.md +12 -1
- {faf_python_sdk-1.3.0 → faf_python_sdk-1.3.1}/CLAUDE.md +1 -1
- {faf_python_sdk-1.3.0 → faf_python_sdk-1.3.1}/PKG-INFO +5 -3
- {faf_python_sdk-1.3.0 → faf_python_sdk-1.3.1}/README.md +4 -2
- {faf_python_sdk-1.3.0 → faf_python_sdk-1.3.1}/faf_sdk/__init__.py +1 -1
- {faf_python_sdk-1.3.0 → faf_python_sdk-1.3.1}/faf_sdk/interop.py +6 -6
- {faf_python_sdk-1.3.0 → faf_python_sdk-1.3.1}/pyproject.toml +1 -1
- {faf_python_sdk-1.3.0 → faf_python_sdk-1.3.1}/.github/workflows/pypi.yml +0 -0
- {faf_python_sdk-1.3.0 → faf_python_sdk-1.3.1}/.github/workflows/testpypi.yml +0 -0
- {faf_python_sdk-1.3.0 → faf_python_sdk-1.3.1}/.gitignore +0 -0
- {faf_python_sdk-1.3.0 → faf_python_sdk-1.3.1}/CODE_OF_CONDUCT.md +0 -0
- {faf_python_sdk-1.3.0 → faf_python_sdk-1.3.1}/CONTRIBUTING.md +0 -0
- {faf_python_sdk-1.3.0 → faf_python_sdk-1.3.1}/LICENSE +0 -0
- {faf_python_sdk-1.3.0 → faf_python_sdk-1.3.1}/SECURITY.md +0 -0
- {faf_python_sdk-1.3.0 → faf_python_sdk-1.3.1}/docs/GROK-INTEGRATION.md +0 -0
- {faf_python_sdk-1.3.0 → faf_python_sdk-1.3.1}/docs/TECHNICAL-SPEC.md +0 -0
- {faf_python_sdk-1.3.0 → faf_python_sdk-1.3.1}/examples/basic_usage.py +0 -0
- {faf_python_sdk-1.3.0 → faf_python_sdk-1.3.1}/examples/grok_integration.py +0 -0
- {faf_python_sdk-1.3.0 → faf_python_sdk-1.3.1}/faf_sdk/dart_detection.json +0 -0
- {faf_python_sdk-1.3.0 → faf_python_sdk-1.3.1}/faf_sdk/detect.py +0 -0
- {faf_python_sdk-1.3.0 → faf_python_sdk-1.3.1}/faf_sdk/discovery.py +0 -0
- {faf_python_sdk-1.3.0 → faf_python_sdk-1.3.1}/faf_sdk/mk4.py +0 -0
- {faf_python_sdk-1.3.0 → faf_python_sdk-1.3.1}/faf_sdk/parser.py +0 -0
- {faf_python_sdk-1.3.0 → faf_python_sdk-1.3.1}/faf_sdk/py.typed +0 -0
- {faf_python_sdk-1.3.0 → faf_python_sdk-1.3.1}/faf_sdk/types.py +0 -0
- {faf_python_sdk-1.3.0 → faf_python_sdk-1.3.1}/faf_sdk/validator.py +0 -0
- {faf_python_sdk-1.3.0 → faf_python_sdk-1.3.1}/project.faf +0 -0
- {faf_python_sdk-1.3.0 → faf_python_sdk-1.3.1}/scripts/sync-dart-spec.sh +0 -0
- {faf_python_sdk-1.3.0 → faf_python_sdk-1.3.1}/tests/__init__.py +0 -0
- {faf_python_sdk-1.3.0 → faf_python_sdk-1.3.1}/tests/dart_parity_fixtures.json +0 -0
- {faf_python_sdk-1.3.0 → faf_python_sdk-1.3.1}/tests/stress_test.py +0 -0
- {faf_python_sdk-1.3.0 → faf_python_sdk-1.3.1}/tests/test_dart_parity.py +0 -0
- {faf_python_sdk-1.3.0 → faf_python_sdk-1.3.1}/tests/test_discovery.py +0 -0
- {faf_python_sdk-1.3.0 → faf_python_sdk-1.3.1}/tests/test_interop.py +0 -0
- {faf_python_sdk-1.3.0 → faf_python_sdk-1.3.1}/tests/test_mk4.py +0 -0
- {faf_python_sdk-1.3.0 → faf_python_sdk-1.3.1}/tests/test_parser.py +0 -0
- {faf_python_sdk-1.3.0 → faf_python_sdk-1.3.1}/tests/test_validator.py +0 -0
- {faf_python_sdk-1.3.0 → faf_python_sdk-1.3.1}/tests/test_wjttc.py +0 -0
|
@@ -3,6 +3,17 @@
|
|
|
3
3
|
All notable changes to faf-python-sdk are documented here.
|
|
4
4
|
Format: [Keep a Changelog](https://keepachangelog.com/en/1.1.0/)
|
|
5
5
|
|
|
6
|
+
## [1.3.1] - 2026-09-07 — The Interop Edition
|
|
7
|
+
|
|
8
|
+
Docs / copy patch — no API change.
|
|
9
|
+
|
|
10
|
+
### Fixed
|
|
11
|
+
- "generate" removed from external copy: the `interop.py` module docstring, the
|
|
12
|
+
`## Setup & build` blockquote written into every AGENTS.md ("regenerated each
|
|
13
|
+
time" → "do not edit the managed block"), README, and CHANGELOG. FAF authors
|
|
14
|
+
and delivers facts. The `generate_agents_md` / `generate_gemini_md` function
|
|
15
|
+
names are unchanged (internal identifiers, TS↔Python parity).
|
|
16
|
+
|
|
6
17
|
## [1.3.0] - 2026-09-06 — The Interop Edition
|
|
7
18
|
|
|
8
19
|
The SDK can now author AI-context files, not just parse and score them.
|
|
@@ -18,7 +29,7 @@ The SDK can now author AI-context files, not just parse and score them.
|
|
|
18
29
|
intentionally omitted from AGENTS.md — it belongs in the README / .faf DNA.
|
|
19
30
|
- `faf_meta_tag(faf)`, `title_label(key)`, `slot_label(path)` — the shared
|
|
20
31
|
label + metastamp helpers, also from `src/interop`.
|
|
21
|
-
- Both
|
|
32
|
+
- Both take the **raw parsed dict** (`FafFile.data.raw`) — the .faf
|
|
22
33
|
format carries top-level `commands` / `key_files` / `security` that the typed
|
|
23
34
|
model doesn't surface.
|
|
24
35
|
- 17 tests, including deterministic-output and human-context-omission guards.
|
|
@@ -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
|
|
|
@@ -14,10 +14,12 @@ The foundation other Python FAF tools build on. If you're building MCP servers,
|
|
|
14
14
|
|
|
15
15
|
**Media Type:** `application/vnd.faf+yaml` (IANA registered)
|
|
16
16
|
|
|
17
|
-
## What's New in v1.3.
|
|
17
|
+
## What's New in v1.3.1 — The Interop Edition
|
|
18
18
|
|
|
19
19
|
The SDK can now author AI-context files, not just parse and score them.
|
|
20
20
|
|
|
21
|
+
> **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.
|
|
22
|
+
|
|
21
23
|
`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.
|
|
22
24
|
|
|
23
25
|
```python
|
|
@@ -27,7 +29,7 @@ faf = parse_file("project.faf")
|
|
|
27
29
|
print(generate_agents_md(faf.data.raw)) # takes the raw dict — carries top-level commands / key_files / security
|
|
28
30
|
```
|
|
29
31
|
|
|
30
|
-
Any Python FAF tool that authors an AI-context file wraps this now — never hand-roll
|
|
32
|
+
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.
|
|
31
33
|
|
|
32
34
|
## What's New in v1.2.0 — The Dart Edition
|
|
33
35
|
|
|
@@ -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
|
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "faf-python-sdk"
|
|
7
|
-
version = "1.3.
|
|
7
|
+
version = "1.3.1"
|
|
8
8
|
description = "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."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = {text = "MIT"}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|