ambitgraph 0.4.0__tar.gz → 0.6.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 (93) hide show
  1. {ambitgraph-0.4.0/ambitgraph.egg-info → ambitgraph-0.6.0}/PKG-INFO +1 -1
  2. {ambitgraph-0.4.0 → ambitgraph-0.6.0}/ambit_map/export.py +62 -1
  3. {ambitgraph-0.4.0 → ambitgraph-0.6.0}/ambit_map/graph.py +494 -84
  4. ambitgraph-0.6.0/ambit_map/island_layout.py +453 -0
  5. {ambitgraph-0.4.0 → ambitgraph-0.6.0}/ambit_map/islands.py +115 -7
  6. {ambitgraph-0.4.0 → ambitgraph-0.6.0}/ambit_map/langmirror.py +147 -14
  7. {ambitgraph-0.4.0 → ambitgraph-0.6.0}/ambit_map/library.py +5 -4
  8. {ambitgraph-0.4.0 → ambitgraph-0.6.0}/ambit_map/objects.py +78 -27
  9. {ambitgraph-0.4.0 → ambitgraph-0.6.0}/ambit_map/page.py +62 -1
  10. {ambitgraph-0.4.0 → ambitgraph-0.6.0}/ambit_map/registry.py +174 -4
  11. {ambitgraph-0.4.0 → ambitgraph-0.6.0}/ambit_map/serve.py +50 -7
  12. {ambitgraph-0.4.0 → ambitgraph-0.6.0}/ambit_map/theme.py +55 -6
  13. {ambitgraph-0.4.0 → ambitgraph-0.6.0}/ambit_map/unitpage.py +21 -5
  14. ambitgraph-0.6.0/ambitgraph/__init__.py +39 -0
  15. {ambitgraph-0.4.0 → ambitgraph-0.6.0}/ambitgraph/cli.py +15 -12
  16. {ambitgraph-0.4.0 → ambitgraph-0.6.0}/ambitgraph/codelib.py +76 -2
  17. {ambitgraph-0.4.0 → ambitgraph-0.6.0}/ambitgraph/edges.py +820 -7
  18. {ambitgraph-0.4.0 → ambitgraph-0.6.0}/ambitgraph/langs.py +115 -19
  19. {ambitgraph-0.4.0 → ambitgraph-0.6.0}/ambitgraph/portal.py +42 -2
  20. ambitgraph-0.6.0/ambitgraph/prompts.py +88 -0
  21. {ambitgraph-0.4.0 → ambitgraph-0.6.0}/ambitgraph/shell.py +240 -44
  22. {ambitgraph-0.4.0 → ambitgraph-0.6.0}/ambitgraph/symbols.py +2035 -25
  23. {ambitgraph-0.4.0 → ambitgraph-0.6.0}/ambitgraph/tables.py +6 -3
  24. ambitgraph-0.6.0/ambitgraph/urcode.py +111 -0
  25. {ambitgraph-0.4.0 → ambitgraph-0.6.0/ambitgraph.egg-info}/PKG-INFO +1 -1
  26. {ambitgraph-0.4.0 → ambitgraph-0.6.0}/ambitgraph.egg-info/SOURCES.txt +1 -0
  27. {ambitgraph-0.4.0 → ambitgraph-0.6.0}/pyproject.toml +1 -1
  28. ambitgraph-0.4.0/ambit_map/island_layout.py +0 -289
  29. ambitgraph-0.4.0/ambitgraph/__init__.py +0 -6
  30. ambitgraph-0.4.0/ambitgraph/urcode.py +0 -78
  31. {ambitgraph-0.4.0 → ambitgraph-0.6.0}/LICENSE +0 -0
  32. {ambitgraph-0.4.0 → ambitgraph-0.6.0}/MANIFEST.in +0 -0
  33. {ambitgraph-0.4.0 → ambitgraph-0.6.0}/README.md +0 -0
  34. {ambitgraph-0.4.0 → ambitgraph-0.6.0}/ambit_map/__init__.py +0 -0
  35. {ambitgraph-0.4.0 → ambitgraph-0.6.0}/ambit_map/__main__.py +0 -0
  36. {ambitgraph-0.4.0 → ambitgraph-0.6.0}/ambit_map/ambit-map-enrich.md +0 -0
  37. {ambitgraph-0.4.0 → ambitgraph-0.6.0}/ambit_map/ambit-mapllm-contract.md +0 -0
  38. {ambitgraph-0.4.0 → ambitgraph-0.6.0}/ambit_map/cli.py +0 -0
  39. {ambitgraph-0.4.0 → ambitgraph-0.6.0}/ambit_map/daemon.py +0 -0
  40. {ambitgraph-0.4.0 → ambitgraph-0.6.0}/ambit_map/dialects/__init__.py +0 -0
  41. {ambitgraph-0.4.0 → ambitgraph-0.6.0}/ambit_map/dialects/contract.py +0 -0
  42. {ambitgraph-0.4.0 → ambitgraph-0.6.0}/ambit_map/dialects/express_pack.py +0 -0
  43. {ambitgraph-0.4.0 → ambitgraph-0.6.0}/ambit_map/dialects/fastapi_pack.py +0 -0
  44. {ambitgraph-0.4.0 → ambitgraph-0.6.0}/ambit_map/dialects/flask_pack.py +0 -0
  45. {ambitgraph-0.4.0 → ambitgraph-0.6.0}/ambit_map/dialects/nextjs_pack.py +0 -0
  46. {ambitgraph-0.4.0 → ambitgraph-0.6.0}/ambit_map/dialects/supabase_pack.py +0 -0
  47. {ambitgraph-0.4.0 → ambitgraph-0.6.0}/ambit_map/families.py +0 -0
  48. {ambitgraph-0.4.0 → ambitgraph-0.6.0}/ambit_map/judged.py +0 -0
  49. {ambitgraph-0.4.0 → ambitgraph-0.6.0}/ambit_map/kitdemo.py +0 -0
  50. {ambitgraph-0.4.0 → ambitgraph-0.6.0}/ambit_map/load.py +0 -0
  51. {ambitgraph-0.4.0 → ambitgraph-0.6.0}/ambit_map/mapllm.py +0 -0
  52. {ambitgraph-0.4.0 → ambitgraph-0.6.0}/ambit_map/matched.py +0 -0
  53. {ambitgraph-0.4.0 → ambitgraph-0.6.0}/ambit_map/model.py +0 -0
  54. {ambitgraph-0.4.0 → ambitgraph-0.6.0}/ambit_map/orchestrate.py +0 -0
  55. {ambitgraph-0.4.0 → ambitgraph-0.6.0}/ambit_map/paths.py +0 -0
  56. {ambitgraph-0.4.0 → ambitgraph-0.6.0}/ambitgraph/WALKTHROUGH.md +0 -0
  57. {ambitgraph-0.4.0 → ambitgraph-0.6.0}/ambitgraph/__main__.py +0 -0
  58. {ambitgraph-0.4.0 → ambitgraph-0.6.0}/ambitgraph/cockpit.py +0 -0
  59. {ambitgraph-0.4.0 → ambitgraph-0.6.0}/ambitgraph/config.py +0 -0
  60. {ambitgraph-0.4.0 → ambitgraph-0.6.0}/ambitgraph/console.py +0 -0
  61. {ambitgraph-0.4.0 → ambitgraph-0.6.0}/ambitgraph/demo.py +0 -0
  62. {ambitgraph-0.4.0 → ambitgraph-0.6.0}/ambitgraph/docs_discovery.py +0 -0
  63. {ambitgraph-0.4.0 → ambitgraph-0.6.0}/ambitgraph/doctor.py +0 -0
  64. {ambitgraph-0.4.0 → ambitgraph-0.6.0}/ambitgraph/duplication.py +0 -0
  65. {ambitgraph-0.4.0 → ambitgraph-0.6.0}/ambitgraph/emit.py +0 -0
  66. {ambitgraph-0.4.0 → ambitgraph-0.6.0}/ambitgraph/engine_identity.py +0 -0
  67. {ambitgraph-0.4.0 → ambitgraph-0.6.0}/ambitgraph/estimate.py +0 -0
  68. {ambitgraph-0.4.0 → ambitgraph-0.6.0}/ambitgraph/eval.py +0 -0
  69. {ambitgraph-0.4.0 → ambitgraph-0.6.0}/ambitgraph/feeds.py +0 -0
  70. {ambitgraph-0.4.0 → ambitgraph-0.6.0}/ambitgraph/gate.py +0 -0
  71. {ambitgraph-0.4.0 → ambitgraph-0.6.0}/ambitgraph/gate_check.py +0 -0
  72. {ambitgraph-0.4.0 → ambitgraph-0.6.0}/ambitgraph/gate_server.py +0 -0
  73. {ambitgraph-0.4.0 → ambitgraph-0.6.0}/ambitgraph/harvest.py +0 -0
  74. {ambitgraph-0.4.0 → ambitgraph-0.6.0}/ambitgraph/inventory.py +0 -0
  75. {ambitgraph-0.4.0 → ambitgraph-0.6.0}/ambitgraph/jscalls.py +0 -0
  76. {ambitgraph-0.4.0 → ambitgraph-0.6.0}/ambitgraph/mds.py +0 -0
  77. {ambitgraph-0.4.0 → ambitgraph-0.6.0}/ambitgraph/merge.py +0 -0
  78. {ambitgraph-0.4.0 → ambitgraph-0.6.0}/ambitgraph/merge_jsp.py +0 -0
  79. {ambitgraph-0.4.0 → ambitgraph-0.6.0}/ambitgraph/parameterize.py +0 -0
  80. {ambitgraph-0.4.0 → ambitgraph-0.6.0}/ambitgraph/pipeline.py +0 -0
  81. {ambitgraph-0.4.0 → ambitgraph-0.6.0}/ambitgraph/pycalls.py +0 -0
  82. {ambitgraph-0.4.0 → ambitgraph-0.6.0}/ambitgraph/ratify.py +0 -0
  83. {ambitgraph-0.4.0 → ambitgraph-0.6.0}/ambitgraph/report.py +0 -0
  84. {ambitgraph-0.4.0 → ambitgraph-0.6.0}/ambitgraph/reports.py +0 -0
  85. {ambitgraph-0.4.0 → ambitgraph-0.6.0}/ambitgraph/sample.py +0 -0
  86. {ambitgraph-0.4.0 → ambitgraph-0.6.0}/ambitgraph/secretary.py +0 -0
  87. {ambitgraph-0.4.0 → ambitgraph-0.6.0}/ambitgraph/stages.py +0 -0
  88. {ambitgraph-0.4.0 → ambitgraph-0.6.0}/ambitgraph/tasks.py +0 -0
  89. {ambitgraph-0.4.0 → ambitgraph-0.6.0}/ambitgraph.egg-info/dependency_links.txt +0 -0
  90. {ambitgraph-0.4.0 → ambitgraph-0.6.0}/ambitgraph.egg-info/entry_points.txt +0 -0
  91. {ambitgraph-0.4.0 → ambitgraph-0.6.0}/ambitgraph.egg-info/requires.txt +0 -0
  92. {ambitgraph-0.4.0 → ambitgraph-0.6.0}/ambitgraph.egg-info/top_level.txt +0 -0
  93. {ambitgraph-0.4.0 → ambitgraph-0.6.0}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ambitgraph
3
- Version: 0.4.0
3
+ Version: 0.6.0
4
4
  Summary: Read-only codebase scan: reusable units, families, roles, ownership candidates, duplication.
5
5
  Author: AmbitGraph
6
6
  License: Proprietary
@@ -23,6 +23,10 @@ GRAPH_EXPORT_CAP = 200 # the brief's cap
23
23
  EXPORT_INDEX = "index.html"
24
24
  EXPORT_MAP = reg.EXPORT_MAP_REL
25
25
  EXPORT_LIBRARY = "library.html"
26
+ # The Whole map tab. NOT map.html -- that is the default GRAPH seed page
27
+ # and every existing link plus the manifest resolve to it; renaming it to
28
+ # free the nicer name would break links to fix an aesthetic.
29
+ EXPORT_OVERVIEW = reg.EXPORT_OVERVIEW_REL
26
30
  MANIFEST_NAME = "ambitgraph-map.export.json" # U4 review fix (blocker): the
27
31
  # scoped-prune manifest -- lists every relative path THIS export wrote, so
28
32
  # the NEXT export deletes only what it itself owns, never a hand-placed file.
@@ -38,6 +42,18 @@ ENRICH_DOC_NAME = "ambit-map-enrich.md"
38
42
  # generalisation of ambit-map-enrich.md's own producer-portability clause.
39
43
  CONTRACT_DOC_NAME = "ambit-mapllm-contract.md"
40
44
 
45
+ # 2026-09-05 (embed-fragment ruling): a
46
+ # SECOND artifact for the Graph screen, alongside map.html -- canvas and
47
+ # its own interaction only, for a host (Omniscient's UrCode tab) that
48
+ # integrates it as native DOM instead of serving map.html's full page
49
+ # inside an iframe. `embed/<kind>.html` is IDP's own proposed naming,
50
+ # accepted in the ruling. One default-seed fragment for v1 (IDP's own
51
+ # call, 2026-09-05: the dashboard shows THE map, a sha-gated regenerate
52
+ # keeps one fragment cheap and current, and per-seed fragments would
53
+ # multiply for clicks that may never come) -- not every graph_keys() seed
54
+ # page.py:page_rows() also pre-renders.
55
+ EMBED_GRAPH_REL = "embed/graph.html"
56
+
41
57
  Row = collections.namedtuple("Row", "rel route_path raw_query depth")
42
58
 
43
59
  _SLUG_HTML_RE = re.compile(r".+-[0-9a-f]{6}\.html$")
@@ -139,6 +155,8 @@ def page_rows(model, dialects):
139
155
  # existing link and the manifest resolve to it. A real row now, not a copy.
140
156
  rows.append(Row(EXPORT_MAP, "/graph", index_query, 0))
141
157
 
158
+ rows.append(Row(EXPORT_OVERVIEW, "/overview", "", 0))
159
+
142
160
  routes_by_uid = lib._routes_by_uid(dialects)
143
161
  units_iter = model.units.values() if hasattr(model, "units") else ()
144
162
  order = fam.families_in_use(units_iter, routes_by_uid)
@@ -292,6 +310,43 @@ def write_export(state, out_dir, route, render, now_iso):
292
310
  if row.rel == EXPORT_INDEX:
293
311
  index_text = html
294
312
 
313
+ # 2026-09-05 (embed-fragment ruling): the default-seed graph fragment,
314
+ # written OUTSIDE the row loop above because it is not a `route()`-
315
+ # addressable page -- no reader ever navigates to embed/graph.html
316
+ # directly, an embedder's own build step reads it. seed_id=None reuses
317
+ # render_graph's own always-seeded resolution (the same fallback
318
+ # map.html's own row already relies on via page_rows' index_query), so
319
+ # this can never silently pick a different seed than map.html draws.
320
+ # "" (no real canvas -- a damaged model, or the map_repo's own
321
+ # zero-unit branch) means no file at all, never an empty one an
322
+ # embedder would have to special-case; its own absence is the signal.
323
+ embed_frag = gph.render_graph_embed_fragment(model, dialects=dialects)
324
+ embed_rel = None
325
+ if embed_frag:
326
+ # render_graph_embed_fragment builds its hrefs the SAME way
327
+ # render_graph does (registry.href_seed_unit/href_table, absolute
328
+ # /unit?u=.../table?t=... paths meant for a SERVED map) -- every
329
+ # other exported page gets those rewritten to real static
330
+ # sibling-file paths by objects.document()'s own static_rewrite
331
+ # call, which this fragment never passes through (it skips
332
+ # document() by design, no hero/nav to assemble). Without this,
333
+ # a node click in an embedder's integrated canvas would 404
334
+ # against a route that only exists in served mode -- exactly the
335
+ # "navigate to the export's per-seed page" IDP's own build
336
+ # depends on. depth=1 matches embed/graph.html's own real
337
+ # location, same as graph/<slug>.html's row above.
338
+ embed_ctx = reg.StaticCtx(EMBED_GRAPH_REL.count("/"), graph_slugs, "")
339
+ embed_frag = reg.static_rewrite(embed_frag, embed_ctx)
340
+ # A4: resolve `N noun(s)` markers here too -- objects.document()
341
+ # does this for every real page (customer voice is not a property
342
+ # of how a page was served), but this fragment never passes
343
+ # through document() at all, so nothing else ever will.
344
+ embed_frag = reg.inflect_counts(embed_frag)
345
+ embed_p = out_dir / EMBED_GRAPH_REL
346
+ embed_p.parent.mkdir(parents=True, exist_ok=True)
347
+ embed_p.write_text(embed_frag, encoding="utf-8", newline="\n")
348
+ embed_rel = EMBED_GRAPH_REL
349
+
295
350
  # W6 D-8/D-10 (THE PACKAGING ITEM): drop ambit-map-enrich.md beside the
296
351
  # export so it is ALWAYS present -- even for a wheel-only install where
297
352
  # a repo checkout's own top-level copy is absent -- the SAME copy-beside
@@ -317,5 +372,11 @@ def write_export(state, out_dir, route, render, now_iso):
317
372
  # again would name it twice in the manifest. C3: the contract doc joins
318
373
  # ENRICH_DOC_NAME here for the identical reason -- an un-manifested copy
319
374
  # would be a stray file the NEXT export cannot recognise as its own.
320
- _write_manifest(out_dir, [row.rel for row in rows] + [ENRICH_DOC_NAME, CONTRACT_DOC_NAME])
375
+ # embed_rel is None (never named) exactly when no file was written --
376
+ # naming an absent path here would make the NEXT export's prune try to
377
+ # unlink a file that was never there.
378
+ extra = [ENRICH_DOC_NAME, CONTRACT_DOC_NAME]
379
+ if embed_rel is not None:
380
+ extra.append(embed_rel)
381
+ _write_manifest(out_dir, [row.rel for row in rows] + extra)
321
382
  return index_text