htmlgraph 0.21.0__py3-none-any.whl → 0.23.0__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.
- htmlgraph/__init__.py +1 -1
- htmlgraph/agent_detection.py +41 -2
- htmlgraph/analytics/cli.py +86 -20
- htmlgraph/cli.py +519 -87
- htmlgraph/collections/base.py +68 -4
- htmlgraph/docs/__init__.py +77 -0
- htmlgraph/docs/docs_version.py +55 -0
- htmlgraph/docs/metadata.py +93 -0
- htmlgraph/docs/migrations.py +232 -0
- htmlgraph/docs/template_engine.py +143 -0
- htmlgraph/docs/templates/_sections/cli_reference.md.j2 +52 -0
- htmlgraph/docs/templates/_sections/core_concepts.md.j2 +29 -0
- htmlgraph/docs/templates/_sections/sdk_basics.md.j2 +69 -0
- htmlgraph/docs/templates/base_agents.md.j2 +78 -0
- htmlgraph/docs/templates/example_user_override.md.j2 +47 -0
- htmlgraph/docs/version_check.py +161 -0
- htmlgraph/git_events.py +61 -7
- htmlgraph/operations/README.md +62 -0
- htmlgraph/operations/__init__.py +61 -0
- htmlgraph/operations/analytics.py +338 -0
- htmlgraph/operations/events.py +243 -0
- htmlgraph/operations/hooks.py +349 -0
- htmlgraph/operations/server.py +302 -0
- htmlgraph/orchestration/__init__.py +39 -0
- htmlgraph/orchestration/headless_spawner.py +566 -0
- htmlgraph/orchestration/model_selection.py +323 -0
- htmlgraph/orchestrator-system-prompt-optimized.txt +47 -0
- htmlgraph/parser.py +56 -1
- htmlgraph/sdk.py +529 -7
- htmlgraph/server.py +153 -60
- {htmlgraph-0.21.0.dist-info → htmlgraph-0.23.0.dist-info}/METADATA +3 -1
- {htmlgraph-0.21.0.dist-info → htmlgraph-0.23.0.dist-info}/RECORD +40 -19
- /htmlgraph/{orchestration.py → orchestration/task_coordination.py} +0 -0
- {htmlgraph-0.21.0.data → htmlgraph-0.23.0.data}/data/htmlgraph/dashboard.html +0 -0
- {htmlgraph-0.21.0.data → htmlgraph-0.23.0.data}/data/htmlgraph/styles.css +0 -0
- {htmlgraph-0.21.0.data → htmlgraph-0.23.0.data}/data/htmlgraph/templates/AGENTS.md.template +0 -0
- {htmlgraph-0.21.0.data → htmlgraph-0.23.0.data}/data/htmlgraph/templates/CLAUDE.md.template +0 -0
- {htmlgraph-0.21.0.data → htmlgraph-0.23.0.data}/data/htmlgraph/templates/GEMINI.md.template +0 -0
- {htmlgraph-0.21.0.dist-info → htmlgraph-0.23.0.dist-info}/WHEEL +0 -0
- {htmlgraph-0.21.0.dist-info → htmlgraph-0.23.0.dist-info}/entry_points.txt +0 -0
htmlgraph/server.py
CHANGED
|
@@ -1174,6 +1174,8 @@ def serve(
|
|
|
1174
1174
|
host: str = "localhost",
|
|
1175
1175
|
watch: bool = True,
|
|
1176
1176
|
auto_port: bool = False,
|
|
1177
|
+
show_progress: bool = False,
|
|
1178
|
+
quiet: bool = False,
|
|
1177
1179
|
) -> None:
|
|
1178
1180
|
"""
|
|
1179
1181
|
Start the HtmlGraph server.
|
|
@@ -1186,7 +1188,11 @@ def serve(
|
|
|
1186
1188
|
host: Host to bind to
|
|
1187
1189
|
watch: Enable file watching for auto-reload (default: True)
|
|
1188
1190
|
auto_port: Automatically find available port if specified port is in use
|
|
1191
|
+
show_progress: Show Rich progress during startup
|
|
1192
|
+
quiet: Suppress progress output when true
|
|
1189
1193
|
"""
|
|
1194
|
+
from contextlib import nullcontext
|
|
1195
|
+
|
|
1190
1196
|
graph_dir = Path(graph_dir)
|
|
1191
1197
|
static_dir = Path(static_dir)
|
|
1192
1198
|
|
|
@@ -1196,67 +1202,121 @@ def serve(
|
|
|
1196
1202
|
port = find_available_port(port + 1)
|
|
1197
1203
|
print(f"⚠️ Port {original_port} is in use, using {port} instead\n")
|
|
1198
1204
|
|
|
1199
|
-
|
|
1200
|
-
|
|
1201
|
-
|
|
1202
|
-
|
|
1203
|
-
|
|
1204
|
-
|
|
1205
|
-
|
|
1206
|
-
|
|
1207
|
-
|
|
1208
|
-
|
|
1209
|
-
|
|
1210
|
-
|
|
1211
|
-
|
|
1212
|
-
|
|
1213
|
-
|
|
1214
|
-
|
|
1215
|
-
|
|
1216
|
-
|
|
1217
|
-
|
|
1218
|
-
|
|
1219
|
-
|
|
1220
|
-
|
|
1221
|
-
|
|
1222
|
-
|
|
1223
|
-
|
|
1224
|
-
# Configure handler
|
|
1225
|
-
HtmlGraphAPIHandler.graph_dir = graph_dir
|
|
1226
|
-
HtmlGraphAPIHandler.static_dir = static_dir
|
|
1227
|
-
HtmlGraphAPIHandler.graphs = {}
|
|
1228
|
-
HtmlGraphAPIHandler.analytics_db = None
|
|
1229
|
-
|
|
1230
|
-
# Create server with error handling
|
|
1231
|
-
try:
|
|
1232
|
-
server = HTTPServer((host, port), HtmlGraphAPIHandler)
|
|
1233
|
-
except OSError as e:
|
|
1234
|
-
# Handle "Address already in use" error
|
|
1235
|
-
if e.errno == 48 or "Address already in use" in str(e):
|
|
1236
|
-
print(f"\n❌ Port {port} is already in use\n")
|
|
1237
|
-
print("Solutions:")
|
|
1238
|
-
print(" 1. Use a different port:")
|
|
1239
|
-
print(f" htmlgraph serve --port {port + 1}\n")
|
|
1240
|
-
print(" 2. Let htmlgraph automatically find an available port:")
|
|
1241
|
-
print(" htmlgraph serve --auto-port\n")
|
|
1242
|
-
print(f" 3. Find and kill the process using port {port}:")
|
|
1243
|
-
print(f" lsof -ti:{port} | xargs kill -9\n")
|
|
1244
|
-
|
|
1245
|
-
# Try to find and suggest an available port
|
|
1246
|
-
try:
|
|
1247
|
-
alt_port = find_available_port(port + 1)
|
|
1248
|
-
print(f"💡 Found available port: {alt_port}")
|
|
1249
|
-
print(f" Run: htmlgraph serve --port {alt_port}\n")
|
|
1250
|
-
except OSError:
|
|
1251
|
-
pass
|
|
1205
|
+
progress = None
|
|
1206
|
+
progress_console = None
|
|
1207
|
+
if show_progress and not quiet:
|
|
1208
|
+
try:
|
|
1209
|
+
from rich.console import Console
|
|
1210
|
+
from rich.progress import (
|
|
1211
|
+
BarColumn,
|
|
1212
|
+
Progress,
|
|
1213
|
+
SpinnerColumn,
|
|
1214
|
+
TextColumn,
|
|
1215
|
+
TimeElapsedColumn,
|
|
1216
|
+
)
|
|
1217
|
+
except Exception:
|
|
1218
|
+
progress = None
|
|
1219
|
+
else:
|
|
1220
|
+
progress_console = Console()
|
|
1221
|
+
progress = Progress(
|
|
1222
|
+
SpinnerColumn(),
|
|
1223
|
+
TextColumn("{task.description}"),
|
|
1224
|
+
BarColumn(),
|
|
1225
|
+
TimeElapsedColumn(),
|
|
1226
|
+
console=progress_console,
|
|
1227
|
+
transient=True,
|
|
1228
|
+
)
|
|
1252
1229
|
|
|
1253
|
-
|
|
1254
|
-
|
|
1255
|
-
|
|
1230
|
+
def status_context(message: str) -> Any:
|
|
1231
|
+
if progress_console is None:
|
|
1232
|
+
return nullcontext()
|
|
1233
|
+
return progress_console.status(message)
|
|
1256
1234
|
|
|
1257
|
-
|
|
1235
|
+
server = None
|
|
1258
1236
|
watcher = None
|
|
1259
|
-
|
|
1237
|
+
|
|
1238
|
+
events_dir = graph_dir / "events"
|
|
1239
|
+
db_path = graph_dir / "index.sqlite"
|
|
1240
|
+
index_needs_build = (
|
|
1241
|
+
not db_path.exists() and events_dir.exists() and any(events_dir.glob("*.jsonl"))
|
|
1242
|
+
)
|
|
1243
|
+
|
|
1244
|
+
def sync_dashboard() -> None:
|
|
1245
|
+
# Auto-sync dashboard files
|
|
1246
|
+
try:
|
|
1247
|
+
if sync_dashboard_files(static_dir):
|
|
1248
|
+
print("⚠️ Dashboard files out of sync")
|
|
1249
|
+
print("✅ Synced dashboard.html → index.html\n")
|
|
1250
|
+
except PermissionError as e:
|
|
1251
|
+
print(f"⚠️ Warning: Unable to sync dashboard files: {e}")
|
|
1252
|
+
print(
|
|
1253
|
+
f" Run: cp src/python/htmlgraph/dashboard.html {static_dir / 'index.html'}\n"
|
|
1254
|
+
)
|
|
1255
|
+
except Exception as e:
|
|
1256
|
+
print(f"⚠️ Warning: Error during dashboard sync: {e}\n")
|
|
1257
|
+
|
|
1258
|
+
def create_graph_dirs() -> None:
|
|
1259
|
+
graph_dir.mkdir(parents=True, exist_ok=True)
|
|
1260
|
+
for collection in HtmlGraphAPIHandler.COLLECTIONS:
|
|
1261
|
+
(graph_dir / collection).mkdir(exist_ok=True)
|
|
1262
|
+
|
|
1263
|
+
def copy_stylesheet() -> None:
|
|
1264
|
+
styles_dest = graph_dir / "styles.css"
|
|
1265
|
+
if not styles_dest.exists():
|
|
1266
|
+
styles_src = Path(__file__).parent / "styles.css"
|
|
1267
|
+
if styles_src.exists():
|
|
1268
|
+
styles_dest.write_text(styles_src.read_text())
|
|
1269
|
+
|
|
1270
|
+
def build_analytics_index() -> None:
|
|
1271
|
+
if not index_needs_build:
|
|
1272
|
+
return
|
|
1273
|
+
with status_context("Building analytics index..."):
|
|
1274
|
+
try:
|
|
1275
|
+
log = JsonlEventLog(events_dir)
|
|
1276
|
+
index = AnalyticsIndex(db_path)
|
|
1277
|
+
events = (event for _, event in log.iter_events())
|
|
1278
|
+
index.rebuild_from_events(events)
|
|
1279
|
+
except Exception as e:
|
|
1280
|
+
print(f"⚠️ Warning: Failed to build analytics index: {e}")
|
|
1281
|
+
|
|
1282
|
+
def configure_handler() -> None:
|
|
1283
|
+
HtmlGraphAPIHandler.graph_dir = graph_dir
|
|
1284
|
+
HtmlGraphAPIHandler.static_dir = static_dir
|
|
1285
|
+
HtmlGraphAPIHandler.graphs = {}
|
|
1286
|
+
HtmlGraphAPIHandler.analytics_db = None
|
|
1287
|
+
|
|
1288
|
+
def create_server() -> None:
|
|
1289
|
+
nonlocal server
|
|
1290
|
+
try:
|
|
1291
|
+
server = HTTPServer((host, port), HtmlGraphAPIHandler)
|
|
1292
|
+
except OSError as e:
|
|
1293
|
+
# Handle "Address already in use" error
|
|
1294
|
+
if e.errno == 48 or "Address already in use" in str(e):
|
|
1295
|
+
print(f"\n❌ Port {port} is already in use\n")
|
|
1296
|
+
print("Solutions:")
|
|
1297
|
+
print(" 1. Use a different port:")
|
|
1298
|
+
print(f" htmlgraph serve --port {port + 1}\n")
|
|
1299
|
+
print(" 2. Let htmlgraph automatically find an available port:")
|
|
1300
|
+
print(" htmlgraph serve --auto-port\n")
|
|
1301
|
+
print(f" 3. Find and kill the process using port {port}:")
|
|
1302
|
+
print(f" lsof -ti:{port} | xargs kill -9\n")
|
|
1303
|
+
|
|
1304
|
+
# Try to find and suggest an available port
|
|
1305
|
+
try:
|
|
1306
|
+
alt_port = find_available_port(port + 1)
|
|
1307
|
+
print(f"💡 Found available port: {alt_port}")
|
|
1308
|
+
print(f" Run: htmlgraph serve --port {alt_port}\n")
|
|
1309
|
+
except OSError:
|
|
1310
|
+
pass
|
|
1311
|
+
|
|
1312
|
+
sys.exit(1)
|
|
1313
|
+
# Re-raise other OSErrors
|
|
1314
|
+
raise
|
|
1315
|
+
|
|
1316
|
+
def start_watcher() -> None:
|
|
1317
|
+
nonlocal watcher
|
|
1318
|
+
if not watch:
|
|
1319
|
+
return
|
|
1260
1320
|
|
|
1261
1321
|
def get_graph(collection: str) -> HtmlGraph:
|
|
1262
1322
|
"""Callback to get graph instance for a collection."""
|
|
@@ -1275,6 +1335,37 @@ def serve(
|
|
|
1275
1335
|
)
|
|
1276
1336
|
watcher.start()
|
|
1277
1337
|
|
|
1338
|
+
steps: list[tuple[str, Any]] = [
|
|
1339
|
+
("Sync dashboard files", sync_dashboard),
|
|
1340
|
+
("Create graph directories", create_graph_dirs),
|
|
1341
|
+
("Copy default stylesheet", copy_stylesheet),
|
|
1342
|
+
]
|
|
1343
|
+
if index_needs_build:
|
|
1344
|
+
steps.append(("Build analytics index", build_analytics_index))
|
|
1345
|
+
steps.extend(
|
|
1346
|
+
[
|
|
1347
|
+
("Configure server", configure_handler),
|
|
1348
|
+
("Start HTTP server", create_server),
|
|
1349
|
+
("Start file watcher", start_watcher),
|
|
1350
|
+
]
|
|
1351
|
+
)
|
|
1352
|
+
|
|
1353
|
+
def run_steps(step_list: list[tuple[str, Any]]) -> None:
|
|
1354
|
+
if progress is None:
|
|
1355
|
+
for _, fn in step_list:
|
|
1356
|
+
fn()
|
|
1357
|
+
return
|
|
1358
|
+
with progress:
|
|
1359
|
+
task_id = progress.add_task(
|
|
1360
|
+
"Starting HtmlGraph server...", total=len(step_list)
|
|
1361
|
+
)
|
|
1362
|
+
for description, fn in step_list:
|
|
1363
|
+
progress.update(task_id, description=description)
|
|
1364
|
+
fn()
|
|
1365
|
+
progress.advance(task_id)
|
|
1366
|
+
|
|
1367
|
+
run_steps(steps)
|
|
1368
|
+
|
|
1278
1369
|
watch_status = "Enabled" if watch else "Disabled"
|
|
1279
1370
|
print(f"""
|
|
1280
1371
|
╔══════════════════════════════════════════════════════════════╗
|
|
@@ -1308,12 +1399,14 @@ Press Ctrl+C to stop.
|
|
|
1308
1399
|
""")
|
|
1309
1400
|
|
|
1310
1401
|
try:
|
|
1311
|
-
server
|
|
1402
|
+
if server is not None:
|
|
1403
|
+
server.serve_forever()
|
|
1312
1404
|
except KeyboardInterrupt:
|
|
1313
1405
|
print("\nShutting down...")
|
|
1314
1406
|
if watcher:
|
|
1315
1407
|
watcher.stop()
|
|
1316
|
-
server
|
|
1408
|
+
if server is not None:
|
|
1409
|
+
server.shutdown()
|
|
1317
1410
|
|
|
1318
1411
|
|
|
1319
1412
|
if __name__ == "__main__":
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: htmlgraph
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.23.0
|
|
4
4
|
Summary: HTML is All You Need - Graph database on web standards
|
|
5
5
|
Project-URL: Homepage, https://github.com/Shakes-tzd/htmlgraph
|
|
6
6
|
Project-URL: Documentation, https://github.com/Shakes-tzd/htmlgraph#readme
|
|
@@ -19,6 +19,7 @@ Classifier: Programming Language :: Python :: 3.12
|
|
|
19
19
|
Classifier: Topic :: Database
|
|
20
20
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
21
21
|
Requires-Python: >=3.10
|
|
22
|
+
Requires-Dist: jinja2>=3.1.0
|
|
22
23
|
Requires-Dist: justhtml>=0.6.0
|
|
23
24
|
Requires-Dist: pydantic>=2.0.0
|
|
24
25
|
Requires-Dist: rich>=13.0.0
|
|
@@ -199,6 +200,7 @@ HtmlGraph nodes are standard HTML files:
|
|
|
199
200
|
- **Agent Handoff** - Context-preserving task transfers between agents
|
|
200
201
|
- **Capability Routing** - Automatic task assignment based on agent skills
|
|
201
202
|
- **Deployment Automation** - One-command releases with version management
|
|
203
|
+
- **Unified Backend** - Operations layer shared by CLI and SDK for consistency
|
|
202
204
|
|
|
203
205
|
## Comparison
|
|
204
206
|
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
htmlgraph/__init__.py,sha256=
|
|
2
|
-
htmlgraph/agent_detection.py,sha256=
|
|
1
|
+
htmlgraph/__init__.py,sha256=lsnihHBI-FCjus10dqcyw6LgbtkXDvg4PliTsz5qvTY,4979
|
|
2
|
+
htmlgraph/agent_detection.py,sha256=MG1kx9S-ey_Wi84hJTwwgw6VDvYEbUpygmDjGPhHcUA,3805
|
|
3
3
|
htmlgraph/agent_registry.py,sha256=Usa_35by7p5gtpvHO7K3AcGimnorw-FzgPVa3cWTQ58,9448
|
|
4
4
|
htmlgraph/agents.py,sha256=Yvu6x1nOfrW2WhRTAHiCuSpvqoVJXx1Mkzd59kwEczw,33466
|
|
5
5
|
htmlgraph/analytics_index.py,sha256=ba6Y4H_NNOCxI_Z4U7wSgBFFairf4IJT74WcM1PoZuI,30594
|
|
6
6
|
htmlgraph/attribute_index.py,sha256=cBZUV4YfGnhh6lF59aYPCdNrRr1hK__BzSKCueSDUhQ,6593
|
|
7
|
-
htmlgraph/cli.py,sha256
|
|
7
|
+
htmlgraph/cli.py,sha256=-h-_7b5xRuxyLpIYHIeNbJabe3hY3_yTql_jWxfbjTU,197621
|
|
8
8
|
htmlgraph/context_analytics.py,sha256=CaLu0o2uSr6rlBM5YeaFZe7grgsy7_Hx10qdXuNcdao,11344
|
|
9
9
|
htmlgraph/converter.py,sha256=OfcydZcJqvr2jpMxvAD4wcq8o4NXC7w4X4QzdDiYq8k,22277
|
|
10
10
|
htmlgraph/dashboard.html,sha256=rkZYjSnPbUuAm35QMpCNWemenYqQTdkkumCX2hhe8Dc,173537
|
|
@@ -17,24 +17,24 @@ htmlgraph/event_migration.py,sha256=7vocfwy-E6_D8_Aeql630FrlBXppIYp1iLmZ_cw_ras,
|
|
|
17
17
|
htmlgraph/exceptions.py,sha256=o_BPNQXtv9zaejbiItDVBK7kcGvYbh4Icj5NXmDSLeU,1592
|
|
18
18
|
htmlgraph/file_watcher.py,sha256=qwwmDkWnKLPp8a_48VrtJZo6HcoYPRz1KMAD39yCV7U,6296
|
|
19
19
|
htmlgraph/find_api.py,sha256=ggVIxFRNcgKyGu6cda4upASUj2xBfBgmTgSBsfIOVqw,12723
|
|
20
|
-
htmlgraph/git_events.py,sha256=
|
|
20
|
+
htmlgraph/git_events.py,sha256=trPJ2mPedjLeIdqEWa8bl9IbqROKaGXJ6UBYl4XZYVI,22479
|
|
21
21
|
htmlgraph/graph.py,sha256=XhPuUYwhrCFVBEijjOdcHjjMEUlduba39CyzZ9dJ6X0,68187
|
|
22
22
|
htmlgraph/ids.py,sha256=ibEC8xW1ZHbAW6ImOKP2wLARgW7nzkxu8voce_hkljk,8389
|
|
23
23
|
htmlgraph/index.d.ts,sha256=7dvExfA16g1z5Kut8xyHnSUfZ6wiUUwWNy6R7WKiwas,6922
|
|
24
24
|
htmlgraph/learning.py,sha256=6SsRdz-xJGFPjp7YagpUDTZqqjNKp2wWihcnhwkHys0,28566
|
|
25
25
|
htmlgraph/mcp_server.py,sha256=AeJeGJEtX5Dqu5rfhKfT5kwF2Oe8V8xCaP8BgMEh86s,24033
|
|
26
26
|
htmlgraph/models.py,sha256=tgFFFwOuEe7Yal5I1JTZHJnF625oaHMATEGIvJgrFnk,81818
|
|
27
|
-
htmlgraph/
|
|
27
|
+
htmlgraph/orchestrator-system-prompt-optimized.txt,sha256=yCXIM-gH7nSDJfh9UFsvu_VHimKI_Rra3sWvF7fMqEw,1350
|
|
28
28
|
htmlgraph/orchestrator.py,sha256=6mj70vroWjmNmdvQ7jqqRSA9O1rFUNMUYDWPzqkizLk,19697
|
|
29
29
|
htmlgraph/orchestrator_mode.py,sha256=F6LNZARqieQXUri3CRSq_lsqFbnVeGXJQPno1ZP47O4,9187
|
|
30
30
|
htmlgraph/orchestrator_validator.py,sha256=gd_KbHsRsNEIF7EElwcxbMYqOMlyeuYIZwClASp-L-E,4699
|
|
31
31
|
htmlgraph/parallel.py,sha256=BsyqGKWY_DkSRElBdvvAkWlL6stC9BPkyxjdPdggx_w,22418
|
|
32
|
-
htmlgraph/parser.py,sha256=
|
|
32
|
+
htmlgraph/parser.py,sha256=w6KHfg6Bd4E6_Z-XzhWIb-YgsaqIw8wmzn-mirPbZcI,15890
|
|
33
33
|
htmlgraph/planning.py,sha256=iqPF9mCVQwOfJ4vuqcF2Y3-yhx9koJZw0cID7CknIug,35903
|
|
34
34
|
htmlgraph/query_builder.py,sha256=aNtJ05GpGl9yUSSrX0D6pX_AgqlrrH-CulI_oP11PUk,18092
|
|
35
35
|
htmlgraph/routing.py,sha256=QYDY6bzYPmv6kocAXCqguB1cazN0i_xTo9EVCO3fO2Y,8803
|
|
36
|
-
htmlgraph/sdk.py,sha256=
|
|
37
|
-
htmlgraph/server.py,sha256=
|
|
36
|
+
htmlgraph/sdk.py,sha256=jhKHAU7hFsKFawQQOYjwnM4FJ69HC9lOwCDRh2Qt9ho,100400
|
|
37
|
+
htmlgraph/server.py,sha256=F94rNpGSlgCg3Ax6kvzi7WjWFeHr7QerLxgmVknP4gA,52479
|
|
38
38
|
htmlgraph/session_manager.py,sha256=8_H29kN6Btii1RfzNpifjjUVTMU0cEeTElFsDC6icLM,89430
|
|
39
39
|
htmlgraph/session_warning.py,sha256=leAYNp8pOkPFosIvNkY4Y3vjs1j76F3pGktUqQX9tI0,7877
|
|
40
40
|
htmlgraph/setup.py,sha256=LpA6R7gAsevFhXh5AGGBmHyhb2ijIAjxTsm0VuzvH2Y,10866
|
|
@@ -49,7 +49,7 @@ htmlgraph/types.py,sha256=EBxCbke3PhORsmIhHrD-f1XG6YPRX-1D5R1OXCp6xt8,8945
|
|
|
49
49
|
htmlgraph/watch.py,sha256=xsiZwDVaXZ6vXI_oOZMqMF78aeAgxuhKpxiz98Hryqg,3791
|
|
50
50
|
htmlgraph/work_type_utils.py,sha256=exA3FnuSmVMMMSBhPYDW-Bq5jGaTDjX7jkckCvnVZ_s,3408
|
|
51
51
|
htmlgraph/analytics/__init__.py,sha256=G_DvCaiAeYVfMWFri1GOfLNF7PtAhitKa2V9TXHtsds,409
|
|
52
|
-
htmlgraph/analytics/cli.py,sha256=
|
|
52
|
+
htmlgraph/analytics/cli.py,sha256=aSnxkvNdrdukytqSirpFtcuiNRbg3Dt-hSpUsDPF9jo,14771
|
|
53
53
|
htmlgraph/analytics/cross_session.py,sha256=KjDohOPigkHrwI_bnDr3v5MIIgx_bSEIIxXK3UcQoaM,20472
|
|
54
54
|
htmlgraph/analytics/dependency.py,sha256=7Qc5xe0b1QE_P6-l4Z0WtstEmEXc4ZGNbyIEBMoABys,25757
|
|
55
55
|
htmlgraph/analytics/work_type.py,sha256=nMuUmC0rV4gvu2eovCBuR-JEnsCzk6nWnB4_zIfbJ9s,17594
|
|
@@ -71,7 +71,7 @@ htmlgraph/builders/phase.py,sha256=pvdG_ZiswzdRCBM1pz7hOoCS9MD-lwaOgPqVcuLXucs,3
|
|
|
71
71
|
htmlgraph/builders/spike.py,sha256=_LXMDEJCdCjJPbNB8CA0FDlFDN-pZbdzvQDFXdrldo0,4327
|
|
72
72
|
htmlgraph/builders/track.py,sha256=tdolGgYQl3PvoX6jHNCq3Vh6USrb7uN3NX555SoRHGs,23097
|
|
73
73
|
htmlgraph/collections/__init__.py,sha256=qHT1UvHD-jCmNI4t1fWprWLw-5jE7NabN6kngboVRFY,1056
|
|
74
|
-
htmlgraph/collections/base.py,sha256=
|
|
74
|
+
htmlgraph/collections/base.py,sha256=gOEWzOqtOSphhjzvncIl0hrQTus7rGukXZgHwubxDa0,22730
|
|
75
75
|
htmlgraph/collections/bug.py,sha256=bDbZy_sdiIn7AK0b8CXs88mUEr1ZkOGVezG0aKwh0pw,1331
|
|
76
76
|
htmlgraph/collections/chore.py,sha256=PgKPjd1WkHHmZD4p4nRr8rUhC1JxfYfNWOfANxNbXqs,1352
|
|
77
77
|
htmlgraph/collections/epic.py,sha256=1qJPzEHqwlfRk-4VVyKNvlZPRuGlXq68saH3tv0fZqY,1350
|
|
@@ -82,6 +82,17 @@ htmlgraph/collections/pattern.py,sha256=FkEqF0eoMoluJxvpiZZ3OZnZNxMc24kzTL0Zmvyi
|
|
|
82
82
|
htmlgraph/collections/phase.py,sha256=2GcgD-P-j61jgG4c0VhUmsOp1qjtrJLtRDNumHHDNZA,1359
|
|
83
83
|
htmlgraph/collections/spike.py,sha256=Omazli2JM9RoYgseSAxKYeK4KC8mAwMCfUAF1XFml54,2963
|
|
84
84
|
htmlgraph/collections/todo.py,sha256=SWOkolqCIvf7PCxCLuqPuNCpdDSTOc9KsuaXanWSEFY,15548
|
|
85
|
+
htmlgraph/docs/__init__.py,sha256=WlDS4y_DgpkoXQbJMucUjkCwyQs60t_QySI9m1CaMKU,2106
|
|
86
|
+
htmlgraph/docs/docs_version.py,sha256=4rXIhuhKv7VDGRlNtvWyB4zPboNGtcGfJjbf0yf1sI0,1475
|
|
87
|
+
htmlgraph/docs/metadata.py,sha256=sUlbIEqysXRma99a2KLSfJ-NqPYfz5p2pSj-s8wPblQ,2708
|
|
88
|
+
htmlgraph/docs/migrations.py,sha256=-kCWXOmilJKXCxe1LKob8sfVCQhcWambEa9asTCobKg,7248
|
|
89
|
+
htmlgraph/docs/template_engine.py,sha256=aRr7hUcCoXOPzZlxifmxNr3nImOvla-X3qYYWKfXDMw,4825
|
|
90
|
+
htmlgraph/docs/version_check.py,sha256=4zhplgv42k8REik4fU9Q2LANZoSRv7uSzGQGdVKj5VI,4892
|
|
91
|
+
htmlgraph/docs/templates/base_agents.md.j2,sha256=s3qyWyx4XWkeeqmWGtnsK0AsDOhBA108Cc2lbA08VfE,1713
|
|
92
|
+
htmlgraph/docs/templates/example_user_override.md.j2,sha256=BYm_p9qP21hjAF7zwGfx1NU8PTlQ00yphk-leHsMHDY,1361
|
|
93
|
+
htmlgraph/docs/templates/_sections/cli_reference.md.j2,sha256=TItgng09Qxre2EdqXdq-R2RhS9IW5W7mis-vjpWGKA4,806
|
|
94
|
+
htmlgraph/docs/templates/_sections/core_concepts.md.j2,sha256=7kkyaKiKOqMg5NF_IIRxdDk5RGfq0vnRZd6ZBI5_mUE,738
|
|
95
|
+
htmlgraph/docs/templates/_sections/sdk_basics.md.j2,sha256=XEL90BQvTKa4xiWkCO96CT9ddp47IiBOoMDrpZOL2B0,1334
|
|
85
96
|
htmlgraph/extensions/gemini/GEMINI.md,sha256=fRUP-u1UmUTuRVbQ32sK3iYQAFYGYRyjU0W0_igT6GA,20462
|
|
86
97
|
htmlgraph/extensions/gemini/README.md,sha256=PDWQDi6IA8Jq6ZMrEn9jpLygbSjp41Chtl2wGSm5Y1c,7116
|
|
87
98
|
htmlgraph/extensions/gemini/gemini-extension.json,sha256=-CU-34hZkmw8gx-Tdojjuytf12LfArzCBMVFyc8X_Eo,493
|
|
@@ -106,6 +117,16 @@ htmlgraph/hooks/pretooluse.py,sha256=Q6wtU_IBIjCd22j7MvZrdd959TdAHx8OovIOnqkwCm0
|
|
|
106
117
|
htmlgraph/hooks/task_enforcer.py,sha256=H7Gug843BTR5H4YfAgW8-b7rjICuAHLP9cw1iNfcHew,4510
|
|
107
118
|
htmlgraph/hooks/task_validator.py,sha256=GwEoqL2lptPWQqckkfl0N-Auc7TtHiyRlOf6p7HcoIo,5438
|
|
108
119
|
htmlgraph/hooks/validator.py,sha256=cwul8fIGS-_hFKskrYC6Hjh0F9yP4_3ErAsyp_SL43c,17417
|
|
120
|
+
htmlgraph/operations/README.md,sha256=5h0P-aZ3po3h_7mUpuh7jJwOL-NEvtlBlPCbqzvLrIE,1730
|
|
121
|
+
htmlgraph/operations/__init__.py,sha256=uiUUmWG3BAtRlSr-WMS4STB76JKJYs0QPQKR7mRh3Co,1237
|
|
122
|
+
htmlgraph/operations/analytics.py,sha256=XDbGEG5ydrjqM5sXa01wsruT0u9DtOb24VJEPzQS8BM,11583
|
|
123
|
+
htmlgraph/operations/events.py,sha256=vSuLj8IWtdfPMvoK6yDmDM3kh_SDOWU8Ofu5u4DF_Tw,6842
|
|
124
|
+
htmlgraph/operations/hooks.py,sha256=_jRHbjrWNM1fjukEr0TBu6wn90PVfpXtJjicSITqP0A,10037
|
|
125
|
+
htmlgraph/operations/server.py,sha256=cxdSYZU10pNgiNfYk2T84D_40CAFjA9wSVsRfk9Ipm8,8746
|
|
126
|
+
htmlgraph/orchestration/__init__.py,sha256=a9NWy-zWG9T7f7V37ibahniF_enn-31gM4veEJkM8cw,844
|
|
127
|
+
htmlgraph/orchestration/headless_spawner.py,sha256=1eZ_jGwkRAQPkLY02fLZ-FgNpj4xKTVdcr2zpnUYy58,19746
|
|
128
|
+
htmlgraph/orchestration/model_selection.py,sha256=2IArHkde5rKD56aj5Jw9I9Z5iLV0yOgw3QCmNF996DE,11311
|
|
129
|
+
htmlgraph/orchestration/task_coordination.py,sha256=7_oQ4AlHOv14hs6RvLsatJzF-F5gkIbv1EOrmeGPhiw,9699
|
|
109
130
|
htmlgraph/scripts/__init__.py,sha256=a_ef7jnypTH3fzjutKYtUquJospdbA6IOR4o9dgv8Gk,48
|
|
110
131
|
htmlgraph/scripts/deploy.py,sha256=TAdUvnHRuWHgoyUgif8Eln-aY9JWLbXAhkMpzQ1kC9A,4191
|
|
111
132
|
htmlgraph/services/__init__.py,sha256=Cy-4RI7raV4jd2Vfc5Zya0VTgV0x9LNt32h9DhYVGkI,282
|
|
@@ -113,12 +134,12 @@ htmlgraph/services/claiming.py,sha256=HcrltEJKN72mxuD7fGuXWeh1U0vwhjMvhZcFc02Eiy
|
|
|
113
134
|
htmlgraph/templates/AGENTS.md.template,sha256=f96h7V6ygwj-v-fanVI48eYMxR6t_se4bet1H4ZsDpI,7642
|
|
114
135
|
htmlgraph/templates/CLAUDE.md.template,sha256=h1kG2hTX2XYig2KszsHBfzrwa_4Cfcq2Pj4SwqzeDlM,1984
|
|
115
136
|
htmlgraph/templates/GEMINI.md.template,sha256=gAGzE53Avki87BM_otqy5HdcYCoLsHgqaKjVzNzPMX8,1622
|
|
116
|
-
htmlgraph-0.
|
|
117
|
-
htmlgraph-0.
|
|
118
|
-
htmlgraph-0.
|
|
119
|
-
htmlgraph-0.
|
|
120
|
-
htmlgraph-0.
|
|
121
|
-
htmlgraph-0.
|
|
122
|
-
htmlgraph-0.
|
|
123
|
-
htmlgraph-0.
|
|
124
|
-
htmlgraph-0.
|
|
137
|
+
htmlgraph-0.23.0.data/data/htmlgraph/dashboard.html,sha256=rkZYjSnPbUuAm35QMpCNWemenYqQTdkkumCX2hhe8Dc,173537
|
|
138
|
+
htmlgraph-0.23.0.data/data/htmlgraph/styles.css,sha256=oDUSC8jG-V-hKojOBO9J88hxAeY2wJrBYTq0uCwX_Y4,7135
|
|
139
|
+
htmlgraph-0.23.0.data/data/htmlgraph/templates/AGENTS.md.template,sha256=f96h7V6ygwj-v-fanVI48eYMxR6t_se4bet1H4ZsDpI,7642
|
|
140
|
+
htmlgraph-0.23.0.data/data/htmlgraph/templates/CLAUDE.md.template,sha256=h1kG2hTX2XYig2KszsHBfzrwa_4Cfcq2Pj4SwqzeDlM,1984
|
|
141
|
+
htmlgraph-0.23.0.data/data/htmlgraph/templates/GEMINI.md.template,sha256=gAGzE53Avki87BM_otqy5HdcYCoLsHgqaKjVzNzPMX8,1622
|
|
142
|
+
htmlgraph-0.23.0.dist-info/METADATA,sha256=3siZ1Sgj7MSqr_JR4DHf2j7qnrGB6QqGSYlFEu54hJM,7753
|
|
143
|
+
htmlgraph-0.23.0.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
144
|
+
htmlgraph-0.23.0.dist-info/entry_points.txt,sha256=EaUbjA_bbDwEO_XDLEGMeK8aQP-ZnHiUTkLshyKDyB8,98
|
|
145
|
+
htmlgraph-0.23.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|