ambitgraph 0.6.0__tar.gz → 0.7.0__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.
Files changed (90) hide show
  1. {ambitgraph-0.6.0/ambitgraph.egg-info → ambitgraph-0.7.0}/PKG-INFO +11 -1
  2. {ambitgraph-0.6.0 → ambitgraph-0.7.0}/README.md +10 -0
  3. {ambitgraph-0.6.0 → ambitgraph-0.7.0}/ambit_map/export.py +61 -4
  4. {ambitgraph-0.6.0 → ambitgraph-0.7.0}/ambit_map/graph.py +809 -59
  5. {ambitgraph-0.6.0 → ambitgraph-0.7.0}/ambit_map/island_layout.py +10 -1
  6. {ambitgraph-0.6.0 → ambitgraph-0.7.0}/ambit_map/islands.py +65 -32
  7. {ambitgraph-0.6.0 → ambitgraph-0.7.0}/ambit_map/langmirror.py +24 -1
  8. {ambitgraph-0.6.0 → ambitgraph-0.7.0}/ambit_map/library.py +469 -115
  9. {ambitgraph-0.6.0 → ambitgraph-0.7.0}/ambit_map/page.py +48 -4
  10. {ambitgraph-0.6.0 → ambitgraph-0.7.0}/ambit_map/registry.py +236 -0
  11. {ambitgraph-0.6.0 → ambitgraph-0.7.0}/ambit_map/serve.py +15 -47
  12. {ambitgraph-0.6.0 → ambitgraph-0.7.0}/ambit_map/theme.py +4 -0
  13. {ambitgraph-0.6.0 → ambitgraph-0.7.0}/ambitgraph/cli.py +10 -0
  14. {ambitgraph-0.6.0 → ambitgraph-0.7.0}/ambitgraph/langs.py +112 -0
  15. {ambitgraph-0.6.0 → ambitgraph-0.7.0}/ambitgraph/shell.py +19 -20
  16. {ambitgraph-0.6.0 → ambitgraph-0.7.0}/ambitgraph/symbols.py +1142 -14
  17. {ambitgraph-0.6.0 → ambitgraph-0.7.0/ambitgraph.egg-info}/PKG-INFO +11 -1
  18. {ambitgraph-0.6.0 → ambitgraph-0.7.0}/pyproject.toml +1 -1
  19. {ambitgraph-0.6.0 → ambitgraph-0.7.0}/LICENSE +0 -0
  20. {ambitgraph-0.6.0 → ambitgraph-0.7.0}/MANIFEST.in +0 -0
  21. {ambitgraph-0.6.0 → ambitgraph-0.7.0}/ambit_map/__init__.py +0 -0
  22. {ambitgraph-0.6.0 → ambitgraph-0.7.0}/ambit_map/__main__.py +0 -0
  23. {ambitgraph-0.6.0 → ambitgraph-0.7.0}/ambit_map/ambit-map-enrich.md +0 -0
  24. {ambitgraph-0.6.0 → ambitgraph-0.7.0}/ambit_map/ambit-mapllm-contract.md +0 -0
  25. {ambitgraph-0.6.0 → ambitgraph-0.7.0}/ambit_map/cli.py +0 -0
  26. {ambitgraph-0.6.0 → ambitgraph-0.7.0}/ambit_map/daemon.py +0 -0
  27. {ambitgraph-0.6.0 → ambitgraph-0.7.0}/ambit_map/dialects/__init__.py +0 -0
  28. {ambitgraph-0.6.0 → ambitgraph-0.7.0}/ambit_map/dialects/contract.py +0 -0
  29. {ambitgraph-0.6.0 → ambitgraph-0.7.0}/ambit_map/dialects/express_pack.py +0 -0
  30. {ambitgraph-0.6.0 → ambitgraph-0.7.0}/ambit_map/dialects/fastapi_pack.py +0 -0
  31. {ambitgraph-0.6.0 → ambitgraph-0.7.0}/ambit_map/dialects/flask_pack.py +0 -0
  32. {ambitgraph-0.6.0 → ambitgraph-0.7.0}/ambit_map/dialects/nextjs_pack.py +0 -0
  33. {ambitgraph-0.6.0 → ambitgraph-0.7.0}/ambit_map/dialects/supabase_pack.py +0 -0
  34. {ambitgraph-0.6.0 → ambitgraph-0.7.0}/ambit_map/families.py +0 -0
  35. {ambitgraph-0.6.0 → ambitgraph-0.7.0}/ambit_map/judged.py +0 -0
  36. {ambitgraph-0.6.0 → ambitgraph-0.7.0}/ambit_map/kitdemo.py +0 -0
  37. {ambitgraph-0.6.0 → ambitgraph-0.7.0}/ambit_map/load.py +0 -0
  38. {ambitgraph-0.6.0 → ambitgraph-0.7.0}/ambit_map/mapllm.py +0 -0
  39. {ambitgraph-0.6.0 → ambitgraph-0.7.0}/ambit_map/matched.py +0 -0
  40. {ambitgraph-0.6.0 → ambitgraph-0.7.0}/ambit_map/model.py +0 -0
  41. {ambitgraph-0.6.0 → ambitgraph-0.7.0}/ambit_map/objects.py +0 -0
  42. {ambitgraph-0.6.0 → ambitgraph-0.7.0}/ambit_map/orchestrate.py +0 -0
  43. {ambitgraph-0.6.0 → ambitgraph-0.7.0}/ambit_map/paths.py +0 -0
  44. {ambitgraph-0.6.0 → ambitgraph-0.7.0}/ambit_map/unitpage.py +0 -0
  45. {ambitgraph-0.6.0 → ambitgraph-0.7.0}/ambitgraph/WALKTHROUGH.md +0 -0
  46. {ambitgraph-0.6.0 → ambitgraph-0.7.0}/ambitgraph/__init__.py +0 -0
  47. {ambitgraph-0.6.0 → ambitgraph-0.7.0}/ambitgraph/__main__.py +0 -0
  48. {ambitgraph-0.6.0 → ambitgraph-0.7.0}/ambitgraph/cockpit.py +0 -0
  49. {ambitgraph-0.6.0 → ambitgraph-0.7.0}/ambitgraph/codelib.py +0 -0
  50. {ambitgraph-0.6.0 → ambitgraph-0.7.0}/ambitgraph/config.py +0 -0
  51. {ambitgraph-0.6.0 → ambitgraph-0.7.0}/ambitgraph/console.py +0 -0
  52. {ambitgraph-0.6.0 → ambitgraph-0.7.0}/ambitgraph/demo.py +0 -0
  53. {ambitgraph-0.6.0 → ambitgraph-0.7.0}/ambitgraph/docs_discovery.py +0 -0
  54. {ambitgraph-0.6.0 → ambitgraph-0.7.0}/ambitgraph/doctor.py +0 -0
  55. {ambitgraph-0.6.0 → ambitgraph-0.7.0}/ambitgraph/duplication.py +0 -0
  56. {ambitgraph-0.6.0 → ambitgraph-0.7.0}/ambitgraph/edges.py +0 -0
  57. {ambitgraph-0.6.0 → ambitgraph-0.7.0}/ambitgraph/emit.py +0 -0
  58. {ambitgraph-0.6.0 → ambitgraph-0.7.0}/ambitgraph/engine_identity.py +0 -0
  59. {ambitgraph-0.6.0 → ambitgraph-0.7.0}/ambitgraph/estimate.py +0 -0
  60. {ambitgraph-0.6.0 → ambitgraph-0.7.0}/ambitgraph/eval.py +0 -0
  61. {ambitgraph-0.6.0 → ambitgraph-0.7.0}/ambitgraph/feeds.py +0 -0
  62. {ambitgraph-0.6.0 → ambitgraph-0.7.0}/ambitgraph/gate.py +0 -0
  63. {ambitgraph-0.6.0 → ambitgraph-0.7.0}/ambitgraph/gate_check.py +0 -0
  64. {ambitgraph-0.6.0 → ambitgraph-0.7.0}/ambitgraph/gate_server.py +0 -0
  65. {ambitgraph-0.6.0 → ambitgraph-0.7.0}/ambitgraph/harvest.py +0 -0
  66. {ambitgraph-0.6.0 → ambitgraph-0.7.0}/ambitgraph/inventory.py +0 -0
  67. {ambitgraph-0.6.0 → ambitgraph-0.7.0}/ambitgraph/jscalls.py +0 -0
  68. {ambitgraph-0.6.0 → ambitgraph-0.7.0}/ambitgraph/mds.py +0 -0
  69. {ambitgraph-0.6.0 → ambitgraph-0.7.0}/ambitgraph/merge.py +0 -0
  70. {ambitgraph-0.6.0 → ambitgraph-0.7.0}/ambitgraph/merge_jsp.py +0 -0
  71. {ambitgraph-0.6.0 → ambitgraph-0.7.0}/ambitgraph/parameterize.py +0 -0
  72. {ambitgraph-0.6.0 → ambitgraph-0.7.0}/ambitgraph/pipeline.py +0 -0
  73. {ambitgraph-0.6.0 → ambitgraph-0.7.0}/ambitgraph/portal.py +0 -0
  74. {ambitgraph-0.6.0 → ambitgraph-0.7.0}/ambitgraph/prompts.py +0 -0
  75. {ambitgraph-0.6.0 → ambitgraph-0.7.0}/ambitgraph/pycalls.py +0 -0
  76. {ambitgraph-0.6.0 → ambitgraph-0.7.0}/ambitgraph/ratify.py +0 -0
  77. {ambitgraph-0.6.0 → ambitgraph-0.7.0}/ambitgraph/report.py +0 -0
  78. {ambitgraph-0.6.0 → ambitgraph-0.7.0}/ambitgraph/reports.py +0 -0
  79. {ambitgraph-0.6.0 → ambitgraph-0.7.0}/ambitgraph/sample.py +0 -0
  80. {ambitgraph-0.6.0 → ambitgraph-0.7.0}/ambitgraph/secretary.py +0 -0
  81. {ambitgraph-0.6.0 → ambitgraph-0.7.0}/ambitgraph/stages.py +0 -0
  82. {ambitgraph-0.6.0 → ambitgraph-0.7.0}/ambitgraph/tables.py +0 -0
  83. {ambitgraph-0.6.0 → ambitgraph-0.7.0}/ambitgraph/tasks.py +0 -0
  84. {ambitgraph-0.6.0 → ambitgraph-0.7.0}/ambitgraph/urcode.py +0 -0
  85. {ambitgraph-0.6.0 → ambitgraph-0.7.0}/ambitgraph.egg-info/SOURCES.txt +0 -0
  86. {ambitgraph-0.6.0 → ambitgraph-0.7.0}/ambitgraph.egg-info/dependency_links.txt +0 -0
  87. {ambitgraph-0.6.0 → ambitgraph-0.7.0}/ambitgraph.egg-info/entry_points.txt +0 -0
  88. {ambitgraph-0.6.0 → ambitgraph-0.7.0}/ambitgraph.egg-info/requires.txt +0 -0
  89. {ambitgraph-0.6.0 → ambitgraph-0.7.0}/ambitgraph.egg-info/top_level.txt +0 -0
  90. {ambitgraph-0.6.0 → ambitgraph-0.7.0}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ambitgraph
3
- Version: 0.6.0
3
+ Version: 0.7.0
4
4
  Summary: Read-only codebase scan: reusable units, families, roles, ownership candidates, duplication.
5
5
  Author: AmbitGraph
6
6
  License: Proprietary
@@ -53,6 +53,16 @@ Your codebase is displayed in your browser as local webpages.
53
53
 
54
54
  It does not make any changes to your codebase.
55
55
 
56
+ ## Update
57
+
58
+ ```
59
+ pip install --upgrade ambitgraph
60
+ ```
61
+
62
+ `python -m ambitgraph --version` (or `ambit --version`) prints the version you have.
63
+
64
+ Updating the tool is not the same as refreshing a map: after your code changes, just run `python -m ambitgraph map <folder>` again.
65
+
56
66
  ## A GRAPH
57
67
 
58
68
  Modules, Classes, Imports, Calls, DB Tables, anything in your code mapped on its connections.
@@ -25,6 +25,16 @@ Your codebase is displayed in your browser as local webpages.
25
25
 
26
26
  It does not make any changes to your codebase.
27
27
 
28
+ ## Update
29
+
30
+ ```
31
+ pip install --upgrade ambitgraph
32
+ ```
33
+
34
+ `python -m ambitgraph --version` (or `ambit --version`) prints the version you have.
35
+
36
+ Updating the tool is not the same as refreshing a map: after your code changes, just run `python -m ambitgraph map <folder>` again.
37
+
28
38
  ## A GRAPH
29
39
 
30
40
  Modules, Classes, Imports, Calls, DB Tables, anything in your code mapped on its connections.
@@ -2,10 +2,13 @@
2
2
 
3
3
  Pure over the model + a writer: `page_rows` is PURE (no I/O, no clock) and
4
4
  `write_export` writes what its `render` callable returns. Imports:
5
- registry, objects, families, graph, library (same package only) plus
6
- `hashlib`, `collections`, `pathlib`, `urllib.parse.quote`. It never imports
7
- `serve` -- `serve` imports IT (U4-F/U4-G), so there is no cycle and
8
- `write_export` is unit-testable against a fake router/renderer (T-36).
5
+ registry, objects, families, graph, library, page (same package only) plus
6
+ `hashlib`, `collections`, `pathlib`, `urllib.parse.quote`. `page` added
7
+ 2026-09-06 for `resolve_overview_state`/`resolve_library_extras` -- `page`
8
+ does not import `export`, so this stays a one-way edge, not a cycle. It
9
+ never imports `serve` -- `serve` imports IT (U4-F/U4-G), so there is no
10
+ cycle and `write_export` is unit-testable against a fake router/renderer
11
+ (T-36).
9
12
  """
10
13
  import collections
11
14
  import json
@@ -18,6 +21,7 @@ from . import objects as ob
18
21
  from . import families as fam
19
22
  from . import graph as gph
20
23
  from . import library as lib
24
+ from . import page as pg
21
25
 
22
26
  GRAPH_EXPORT_CAP = 200 # the brief's cap
23
27
  EXPORT_INDEX = "index.html"
@@ -53,6 +57,13 @@ CONTRACT_DOC_NAME = "ambit-mapllm-contract.md"
53
57
  # multiply for clicks that may never come) -- not every graph_keys() seed
54
58
  # page.py:page_rows() also pre-renders.
55
59
  EMBED_GRAPH_REL = "embed/graph.html"
60
+ # 2026-09-06 (IDP's ur5 inline-switch wave, "the tile should switch what
61
+ # is displayed below the tiles"): the Whole-map (islands) tab's own
62
+ # fragment, beside embed/graph.html under the SAME ur4 contract.
63
+ EMBED_OVERVIEW_REL = "embed/overview.html"
64
+ # 2026-09-06 (founder live-page review, item 1): the Library home's own
65
+ # fragment, beside embed/graph.html and embed/overview.html.
66
+ EMBED_LIBRARY_REL = "embed/library.html"
56
67
 
57
68
  Row = collections.namedtuple("Row", "rel route_path raw_query depth")
58
69
 
@@ -347,6 +358,48 @@ def write_export(state, out_dir, route, render, now_iso):
347
358
  embed_p.write_text(embed_frag, encoding="utf-8", newline="\n")
348
359
  embed_rel = EMBED_GRAPH_REL
349
360
 
361
+ # 2026-09-06 (IDP's ur5 inline-switch wave): the SAME embed-fragment
362
+ # shape for the Whole-map (islands) tab, beside embed/graph.html. The
363
+ # flash draws no hrefs at all (opening-view ruling section 4.6, no
364
+ # hit-testing) so static_rewrite/inflect_counts have nothing to touch
365
+ # today -- called anyway, for the same reason the graph fragment
366
+ # calls them unconditionally: this fragment skips objects.document()
367
+ # by design, so nothing else ever will if render_islands_canvas later
368
+ # grows either shape.
369
+ ov_state, ov_layout = pg.resolve_overview_state(model, dialects, state.run_dir)
370
+ overview_frag = gph.render_overview_embed_fragment(ov_layout) if ov_layout else ""
371
+ overview_rel = None
372
+ if overview_frag:
373
+ overview_ctx = reg.StaticCtx(EMBED_OVERVIEW_REL.count("/"), graph_slugs, "")
374
+ overview_frag = reg.static_rewrite(overview_frag, overview_ctx)
375
+ overview_frag = reg.inflect_counts(overview_frag)
376
+ overview_p = out_dir / EMBED_OVERVIEW_REL
377
+ overview_p.parent.mkdir(parents=True, exist_ok=True)
378
+ overview_p.write_text(overview_frag, encoding="utf-8", newline="\n")
379
+ overview_rel = EMBED_OVERVIEW_REL
380
+
381
+ # 2026-09-06 (founder live-page review, item 1): the SAME embed-
382
+ # fragment shape for the Library home, beside embed/graph.html and
383
+ # embed/overview.html. `gap`/`grammarless_table` are the wall-legal
384
+ # seams lib.render_library's own docstring names -- computed here via
385
+ # page.resolve_library_extras, the SAME helper serve.py's own library
386
+ # dispatch now calls, so this can never silently diverge on either
387
+ # fact from the served route's own library.html.
388
+ lib_gap, lib_grammarless = pg.resolve_library_extras(model, dialects)
389
+ library_frag = lib.render_library_embed_fragment(
390
+ model, dialects=dialects, judged=state.judged, envelope=state.envelope,
391
+ gap=lib_gap, grammarless_table=lib_grammarless,
392
+ mapllm_stranger_groups=state.mapllm_stranger_groups)
393
+ library_rel = None
394
+ if library_frag:
395
+ library_ctx = reg.StaticCtx(EMBED_LIBRARY_REL.count("/"), graph_slugs, "")
396
+ library_frag = reg.static_rewrite(library_frag, library_ctx)
397
+ library_frag = reg.inflect_counts(library_frag)
398
+ library_p = out_dir / EMBED_LIBRARY_REL
399
+ library_p.parent.mkdir(parents=True, exist_ok=True)
400
+ library_p.write_text(library_frag, encoding="utf-8", newline="\n")
401
+ library_rel = EMBED_LIBRARY_REL
402
+
350
403
  # W6 D-8/D-10 (THE PACKAGING ITEM): drop ambit-map-enrich.md beside the
351
404
  # export so it is ALWAYS present -- even for a wheel-only install where
352
405
  # a repo checkout's own top-level copy is absent -- the SAME copy-beside
@@ -378,5 +431,9 @@ def write_export(state, out_dir, route, render, now_iso):
378
431
  extra = [ENRICH_DOC_NAME, CONTRACT_DOC_NAME]
379
432
  if embed_rel is not None:
380
433
  extra.append(embed_rel)
434
+ if overview_rel is not None:
435
+ extra.append(overview_rel)
436
+ if library_rel is not None:
437
+ extra.append(library_rel)
381
438
  _write_manifest(out_dir, [row.rel for row in rows] + extra)
382
439
  return index_text