fm2web 0.0.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.
@@ -0,0 +1,274 @@
1
+ Metadata-Version: 2.4
2
+ Name: fm2web
3
+ Version: 0.0.1
4
+ Summary: CLI-first FileMaker DDR extraction, analysis, and LLM context engine
5
+ Author: Marcus Swift
6
+ License: Proprietary
7
+ Requires-Python: >=3.11
8
+ Requires-Dist: pydantic-settings>=2.2
9
+ Requires-Dist: pydantic>=2.6
10
+ Requires-Dist: rich>=13.7
11
+ Requires-Dist: typer>=0.12
12
+ Provides-Extra: dev
13
+ Requires-Dist: mypy>=1.8; extra == 'dev'
14
+ Requires-Dist: pytest>=8.0; extra == 'dev'
15
+ Requires-Dist: ruff>=0.6; extra == 'dev'
16
+ Provides-Extra: qdrant
17
+ Requires-Dist: qdrant-client>=1.9.0; extra == 'qdrant'
18
+ Provides-Extra: vector
19
+ Requires-Dist: sqlite-vec>=0.1.0; extra == 'vector'
20
+ Description-Content-Type: text/markdown
21
+
22
+ # FM2Web
23
+
24
+ FM2Web is a CLI-first FileMaker DDR extraction, analysis, and LLM-context engine.
25
+
26
+ It turns FileMaker DDR XML exports into a local SQLite knowledge store containing normalized entities, relationships, evidence, retrieval chunks, and deterministic analysis findings. FM2Web does **not** call an internal LLM. Instead, it gives external agents and LLM tools grounded commands for retrieval, inspection, tracing, evidence lookup, and context-pack creation.
27
+
28
+ ## Install with uv
29
+
30
+ Install from PyPI:
31
+
32
+ ```bash
33
+ uv tool install fm2web
34
+ ```
35
+
36
+ Confirm the command is on your `PATH`:
37
+
38
+ ```bash
39
+ fm2web --version
40
+ fm2web --help
41
+ ```
42
+
43
+ Upgrade later with:
44
+
45
+ ```bash
46
+ uv tool upgrade fm2web
47
+ ```
48
+
49
+ If `uv` is not installed yet:
50
+
51
+ ```bash
52
+ curl -LsSf https://astral.sh/uv/install.sh | sh
53
+ ```
54
+
55
+ ## Quick start
56
+
57
+ Extract a single DDR XML file:
58
+
59
+ ```bash
60
+ fm2web extract \
61
+ --ddr /path/to/FileMaker_DDR.xml \
62
+ --project clean-sweep
63
+ ```
64
+
65
+ Extract a multi-file DDR directory containing `Summary.xml`:
66
+
67
+ ```bash
68
+ fm2web extract \
69
+ --ddr /path/to/DDR-directory \
70
+ --project clean-sweep
71
+ ```
72
+
73
+ Run deterministic analysis:
74
+
75
+ ```bash
76
+ fm2web analyse --project clean-sweep --refresh
77
+ ```
78
+
79
+ `analyse` is canonical Canadian spelling. `analyze` is also available as an alias.
80
+
81
+ Ask for an LLM-ready context pack without calling an internal LLM:
82
+
83
+ ```bash
84
+ fm2web ask \
85
+ --project clean-sweep \
86
+ "How does invoice creation work? Cite evidence." \
87
+ --json
88
+ ```
89
+
90
+ ## Core commands
91
+
92
+ ### `extract`
93
+
94
+ Parses FileMaker DDR XML and writes normalized facts into SQLite.
95
+
96
+ Supported inputs:
97
+
98
+ - single DDR XML report
99
+ - `Summary.xml`
100
+ - directory containing `Summary.xml`
101
+
102
+ Extracted domains include:
103
+
104
+ - schema tables and fields
105
+ - relationship graph/table occurrences
106
+ - scripts and script steps
107
+ - script-call relationships
108
+ - layouts, layout objects, buttons, field references
109
+ - button-to-script activations
110
+ - custom functions
111
+ - value lists
112
+ - accounts and privilege sets
113
+ - evidence records
114
+ - retrieval chunks and FTS index
115
+
116
+ ### `analyse` / `analyze`
117
+
118
+ Writes deterministic findings over the extracted facts.
119
+
120
+ Current finding layers include:
121
+
122
+ - `schema_quality`
123
+ - `script_call_graph`
124
+ - `script_data_access`
125
+ - `script_semantics`
126
+ - `layout_implementation`
127
+ - `feature_flow`
128
+ - `workflow_candidate`
129
+ - `business_feature`
130
+ - `security_mapping`
131
+ - `migration_risk`
132
+
133
+ Semantic analysis uses extracted script-step entities to classify action, intent, mutation, control-flow, integration, and UI/reporting behavior. These semantics roll up into layout feature flows and business feature findings.
134
+
135
+ ### `retrieve`
136
+
137
+ Returns citation-bearing context chunks for a query:
138
+
139
+ ```bash
140
+ fm2web retrieve --project clean-sweep "square foot quoting" --json
141
+ ```
142
+
143
+ ### `ask`
144
+
145
+ Builds an LLM-ready context packet and answer contract. FM2Web does not answer internally:
146
+
147
+ ```bash
148
+ fm2web ask --project clean-sweep "How does square foot quoting work?" --json
149
+ ```
150
+
151
+ ### `findings`
152
+
153
+ Lists persisted analysis findings with explicit pagination:
154
+
155
+ ```bash
156
+ fm2web findings \
157
+ --project clean-sweep \
158
+ --type business_feature \
159
+ --limit 50 \
160
+ --offset 0 \
161
+ --json
162
+ ```
163
+
164
+ Analysis writes complete persisted findings. Output volume controls belong to read commands like `findings --limit/--offset`, not to the analyser.
165
+
166
+ ### `inspect`
167
+
168
+ Inspects exact stored facts:
169
+
170
+ ```bash
171
+ fm2web inspect schema --project clean-sweep --table Contacts --json
172
+ fm2web inspect script --project clean-sweep --name "Save Invoice" --json
173
+ fm2web inspect layout --project clean-sweep --name "Invoice Detail" --json
174
+ fm2web inspect security --project clean-sweep --json
175
+ fm2web inspect entity --project clean-sweep --name Contacts --json
176
+ ```
177
+
178
+ ### `trace`
179
+
180
+ Traverses dependencies and impacts in the stored relationship graph:
181
+
182
+ ```bash
183
+ fm2web trace \
184
+ --project clean-sweep \
185
+ --entity script:clean-sweep:save-invoice \
186
+ --direction both \
187
+ --depth 3 \
188
+ --json
189
+ ```
190
+
191
+ Directions:
192
+
193
+ - `upstream`
194
+ - `downstream`
195
+ - `both`
196
+
197
+ ### `evidence`
198
+
199
+ Dereferences raw evidence by ID:
200
+
201
+ ```bash
202
+ fm2web evidence --project clean-sweep --id evidence:abc123 --json
203
+ ```
204
+
205
+ ### `export context`
206
+
207
+ Writes a reusable Markdown context pack:
208
+
209
+ ```bash
210
+ fm2web export context \
211
+ --project clean-sweep \
212
+ --question "How does invoicing work?" \
213
+ --out invoicing-context.md
214
+ ```
215
+
216
+ ### `doctor`
217
+
218
+ Checks local readiness:
219
+
220
+ ```bash
221
+ fm2web doctor --json
222
+ ```
223
+
224
+ ## Store location
225
+
226
+ By default FM2Web uses project-local state under:
227
+
228
+ ```text
229
+ .fm2web/fm2web.sqlite
230
+ ```
231
+
232
+ Override with:
233
+
234
+ ```bash
235
+ fm2web extract --store /path/to/fm2web.sqlite --ddr /path/to/ddr.xml --project clean-sweep
236
+ ```
237
+
238
+ Use the same `--store` path for follow-up commands.
239
+
240
+ ## Optional extras
241
+
242
+ Install optional vector dependencies:
243
+
244
+ ```bash
245
+ uv tool install 'fm2web[vector]'
246
+ ```
247
+
248
+ Install optional Qdrant dependencies:
249
+
250
+ ```bash
251
+ uv tool install 'fm2web[qdrant]'
252
+ ```
253
+
254
+ SQLite/FTS works without these extras.
255
+
256
+ ## Development
257
+
258
+ From a source checkout:
259
+
260
+ ```bash
261
+ uv sync --extra dev
262
+ uv run pytest
263
+ uv run fm2web --help
264
+ ```
265
+
266
+ Build locally:
267
+
268
+ ```bash
269
+ uv build
270
+ ```
271
+
272
+ ## License
273
+
274
+ Proprietary.
@@ -0,0 +1,22 @@
1
+ fm2web_cli/__init__.py,sha256=y6lUwjOlwIehWV3WRpcRXJfg-Q5xf0n25paX8-PRAH0,48
2
+ fm2web_cli/analyse/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
+ fm2web_cli/analyse/service.py,sha256=zNZfs_aqrgOFsaPai9xWG83gQxXR1gVkUKegfqJ3nXs,51186
4
+ fm2web_cli/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
+ fm2web_cli/cli/app.py,sha256=-JXbxK_cMfmzpqc61zPK00dfP7S21ToYDN4GPu4J2Pc,14107
6
+ fm2web_cli/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
7
+ fm2web_cli/core/models.py,sha256=wNaJsr5tAcEb9IiVUkew5KpQ5787TzVyJXP7qaHx3WU,2417
8
+ fm2web_cli/core/paths.py,sha256=bi8EcAsdUeltyYF_EYc09UECAtO25lh-Rdsv-N8dCaw,857
9
+ fm2web_cli/extract/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10
+ fm2web_cli/extract/ddr_parser.py,sha256=B2eFTROd2yguB2JcqnFigqWbX8O1cPFtPKf1DOjhgAM,19252
11
+ fm2web_cli/extract/service.py,sha256=P2dcC9RI84V_kcDJW2FtyeA4TQxsiZLPa05ci4t6qDE,11675
12
+ fm2web_cli/llm/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
13
+ fm2web_cli/llm/service.py,sha256=WcnvQ9z8ESAJFAGfohq4ZRPzHXO6hvc7b2nFdGH4kKw,1349
14
+ fm2web_cli/retrieval/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
15
+ fm2web_cli/retrieval/service.py,sha256=xrSW81MHiFvnCvEfaNV9WIs-KmzFFa-hh4hz_7It-n0,14821
16
+ fm2web_cli/store/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
17
+ fm2web_cli/store/db.py,sha256=xMewzE7DofVmKOwT-WTvaJjGStqESSV-x835u2m8VGY,1598
18
+ fm2web_cli/store/schema.py,sha256=W-MVV2GnvJyjS24ONkTdnblnNGEI_2mJiVfuJ-sSPCo,4306
19
+ fm2web-0.0.1.dist-info/METADATA,sha256=ZfhRJHOcw2IRmjjiEQYyDQgyRN_eZLqxTBSwlmEJqSg,5617
20
+ fm2web-0.0.1.dist-info/WHEEL,sha256=mffPy8wBnZQn2VnJUU5jE99KsxaSfiyMHV9Yt0aLVxs,87
21
+ fm2web-0.0.1.dist-info/entry_points.txt,sha256=cWXykZX0RJIk4-jPUcYXzKtkBOXFmJnt219k1wYEOwI,50
22
+ fm2web-0.0.1.dist-info/RECORD,,
@@ -0,0 +1,4 @@
1
+ Wheel-Version: 1.0
2
+ Generator: hatchling 1.30.1
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ fm2web = fm2web_cli.cli.app:app
fm2web_cli/__init__.py ADDED
@@ -0,0 +1,3 @@
1
+ """FM2Web CLI engine."""
2
+
3
+ __version__ = "0.0.1"
File without changes