graphene-map 0.2.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 (102) hide show
  1. graphene_map-0.2.0/.github/workflows/ci.yml +41 -0
  2. graphene_map-0.2.0/.github/workflows/release.yml +39 -0
  3. graphene_map-0.2.0/.gitignore +20 -0
  4. graphene_map-0.2.0/.python-version +1 -0
  5. graphene_map-0.2.0/CHANGELOG.md +10 -0
  6. graphene_map-0.2.0/GRAPH_DIRECTIVE.md +612 -0
  7. graphene_map-0.2.0/LICENSE +201 -0
  8. graphene_map-0.2.0/PKG-INFO +185 -0
  9. graphene_map-0.2.0/README.md +157 -0
  10. graphene_map-0.2.0/docs/HOW_IT_WORKS.md +267 -0
  11. graphene_map-0.2.0/docs/PRODUCT_THESIS.md +682 -0
  12. graphene_map-0.2.0/docs/RELEASING.md +39 -0
  13. graphene_map-0.2.0/docs/ROADMAP.md +38 -0
  14. graphene_map-0.2.0/docs/assets/card.svg +131 -0
  15. graphene_map-0.2.0/docs/assets/render_assets.py +110 -0
  16. graphene_map-0.2.0/docs/assets/replay_fixture.py +45 -0
  17. graphene_map-0.2.0/docs/assets/why-line.svg +82 -0
  18. graphene_map-0.2.0/docs/assets/why-path.svg +82 -0
  19. graphene_map-0.2.0/docs/reports/2026-09-17-rebuild.md +363 -0
  20. graphene_map-0.2.0/docs/reports/2026-09-18-release.md +622 -0
  21. graphene_map-0.2.0/docs/reports/2026-09-19-record-and-map.md +149 -0
  22. graphene_map-0.2.0/morning.md +203 -0
  23. graphene_map-0.2.0/pyproject.toml +63 -0
  24. graphene_map-0.2.0/src/graphene_debrief/__init__.py +3 -0
  25. graphene_map-0.2.0/src/graphene_debrief/attribute.py +847 -0
  26. graphene_map-0.2.0/src/graphene_debrief/cli.py +459 -0
  27. graphene_map-0.2.0/src/graphene_debrief/commits.py +186 -0
  28. graphene_map-0.2.0/src/graphene_debrief/debrief.py +842 -0
  29. graphene_map-0.2.0/src/graphene_debrief/graph.py +648 -0
  30. graphene_map-0.2.0/src/graphene_debrief/model.py +113 -0
  31. graphene_map-0.2.0/src/graphene_debrief/record.py +218 -0
  32. graphene_map-0.2.0/src/graphene_debrief/server.py +115 -0
  33. graphene_map-0.2.0/src/graphene_debrief/sources/__init__.py +0 -0
  34. graphene_map-0.2.0/src/graphene_debrief/sources/claude_code.py +967 -0
  35. graphene_map-0.2.0/src/graphene_debrief/store.py +583 -0
  36. graphene_map-0.2.0/src/graphene_debrief/ui/static/assets/app.css +2 -0
  37. graphene_map-0.2.0/src/graphene_debrief/ui/static/assets/app.js +9 -0
  38. graphene_map-0.2.0/src/graphene_debrief/ui/static/index.html +15 -0
  39. graphene_map-0.2.0/src/graphene_debrief/why.py +298 -0
  40. graphene_map-0.2.0/strategy-summary.md +28 -0
  41. graphene_map-0.2.0/tests/conftest.py +15 -0
  42. graphene_map-0.2.0/tests/fixtures/debrief_golden.md +20 -0
  43. graphene_map-0.2.0/tests/fixtures/make_run_fixture.py +1494 -0
  44. graphene_map-0.2.0/tests/fixtures/make_transcript_fixture.py +347 -0
  45. graphene_map-0.2.0/tests/fixtures/run/-home-dev-project/22222222-3333-4444-8555-666666666666/subagents/agent-6a7b8c9daebfc0d7.jsonl +11 -0
  46. graphene_map-0.2.0/tests/fixtures/run/-home-dev-project/22222222-3333-4444-8555-666666666666/subagents/agent-6a7b8c9daebfc0d7.meta.json +8 -0
  47. graphene_map-0.2.0/tests/fixtures/run/-home-dev-project/22222222-3333-4444-8555-666666666666/subagents/agent-7a8b9cadbecfd0e8.jsonl +11 -0
  48. graphene_map-0.2.0/tests/fixtures/run/-home-dev-project/22222222-3333-4444-8555-666666666666/subagents/agent-7a8b9cadbecfd0e8.meta.json +11 -0
  49. graphene_map-0.2.0/tests/fixtures/run/-home-dev-project/22222222-3333-4444-8555-666666666666/subagents/workflows/wf_ab12cd34-ef5/agent-0a1b2c3d4e5f6071.jsonl +13 -0
  50. graphene_map-0.2.0/tests/fixtures/run/-home-dev-project/22222222-3333-4444-8555-666666666666/subagents/workflows/wf_ab12cd34-ef5/agent-0a1b2c3d4e5f6071.meta.json +8 -0
  51. graphene_map-0.2.0/tests/fixtures/run/-home-dev-project/22222222-3333-4444-8555-666666666666/subagents/workflows/wf_ab12cd34-ef5/agent-1a2b3c4d5e6f7082.jsonl +9 -0
  52. graphene_map-0.2.0/tests/fixtures/run/-home-dev-project/22222222-3333-4444-8555-666666666666/subagents/workflows/wf_ab12cd34-ef5/agent-1a2b3c4d5e6f7082.meta.json +8 -0
  53. graphene_map-0.2.0/tests/fixtures/run/-home-dev-project/22222222-3333-4444-8555-666666666666/subagents/workflows/wf_ab12cd34-ef5/agent-2a3b4c5d6e7f8093.jsonl +7 -0
  54. graphene_map-0.2.0/tests/fixtures/run/-home-dev-project/22222222-3333-4444-8555-666666666666/subagents/workflows/wf_ab12cd34-ef5/agent-2a3b4c5d6e7f8093.meta.json +10 -0
  55. graphene_map-0.2.0/tests/fixtures/run/-home-dev-project/22222222-3333-4444-8555-666666666666/subagents/workflows/wf_ab12cd34-ef5/agent-3a4b5c6d7e8f90a4.jsonl +7 -0
  56. graphene_map-0.2.0/tests/fixtures/run/-home-dev-project/22222222-3333-4444-8555-666666666666/subagents/workflows/wf_ab12cd34-ef5/agent-3a4b5c6d7e8f90a4.meta.json +8 -0
  57. graphene_map-0.2.0/tests/fixtures/run/-home-dev-project/22222222-3333-4444-8555-666666666666/subagents/workflows/wf_ab12cd34-ef5/agent-4a5b6c7d8e9fa0b5.jsonl +7 -0
  58. graphene_map-0.2.0/tests/fixtures/run/-home-dev-project/22222222-3333-4444-8555-666666666666/subagents/workflows/wf_ab12cd34-ef5/agent-4a5b6c7d8e9fa0b5.meta.json +8 -0
  59. graphene_map-0.2.0/tests/fixtures/run/-home-dev-project/22222222-3333-4444-8555-666666666666/subagents/workflows/wf_ab12cd34-ef5/agent-5a6b7c8d9eafb0c6.jsonl +9 -0
  60. graphene_map-0.2.0/tests/fixtures/run/-home-dev-project/22222222-3333-4444-8555-666666666666/subagents/workflows/wf_ab12cd34-ef5/agent-5a6b7c8d9eafb0c6.meta.json +8 -0
  61. graphene_map-0.2.0/tests/fixtures/run/-home-dev-project/22222222-3333-4444-8555-666666666666/subagents/workflows/wf_ab12cd34-ef5/journal.jsonl +12 -0
  62. graphene_map-0.2.0/tests/fixtures/run/-home-dev-project/22222222-3333-4444-8555-666666666666.jsonl +28 -0
  63. graphene_map-0.2.0/tests/fixtures/run/-home-dev-wt-api/33333333-4444-4555-8666-777777777777/subagents/agent-8a9bacbdcedfe0f9.jsonl +5 -0
  64. graphene_map-0.2.0/tests/fixtures/run/-home-dev-wt-api/33333333-4444-4555-8666-777777777777/subagents/agent-8a9bacbdcedfe0f9.meta.json +8 -0
  65. graphene_map-0.2.0/tests/fixtures/run/-home-dev-wt-api/33333333-4444-4555-8666-777777777777.jsonl +6 -0
  66. graphene_map-0.2.0/tests/fixtures/run_graph.json +2354 -0
  67. graphene_map-0.2.0/tests/fixtures/transcripts/11111111-2222-4333-8444-555555555555/subagents/agent-a1b2c3d4e5f60718.jsonl +4 -0
  68. graphene_map-0.2.0/tests/fixtures/transcripts/11111111-2222-4333-8444-555555555555.jsonl +36 -0
  69. graphene_map-0.2.0/tests/test_attribute.py +568 -0
  70. graphene_map-0.2.0/tests/test_backfill.py +453 -0
  71. graphene_map-0.2.0/tests/test_cli.py +367 -0
  72. graphene_map-0.2.0/tests/test_commits.py +336 -0
  73. graphene_map-0.2.0/tests/test_debrief.py +497 -0
  74. graphene_map-0.2.0/tests/test_graph.py +300 -0
  75. graphene_map-0.2.0/tests/test_hook_budget.py +78 -0
  76. graphene_map-0.2.0/tests/test_hooks.py +359 -0
  77. graphene_map-0.2.0/tests/test_ingest_run.py +403 -0
  78. graphene_map-0.2.0/tests/test_round_trip.py +148 -0
  79. graphene_map-0.2.0/tests/test_run_fixture.py +236 -0
  80. graphene_map-0.2.0/tests/test_scale.py +88 -0
  81. graphene_map-0.2.0/tests/test_server.py +97 -0
  82. graphene_map-0.2.0/tests/test_store.py +360 -0
  83. graphene_map-0.2.0/tests/test_why.py +193 -0
  84. graphene_map-0.2.0/tests/test_words.py +41 -0
  85. graphene_map-0.2.0/ui/index.html +14 -0
  86. graphene_map-0.2.0/ui/package-lock.json +1743 -0
  87. graphene_map-0.2.0/ui/package.json +29 -0
  88. graphene_map-0.2.0/ui/src/App.tsx +84 -0
  89. graphene_map-0.2.0/ui/src/Chrome.tsx +177 -0
  90. graphene_map-0.2.0/ui/src/Inspector.tsx +253 -0
  91. graphene_map-0.2.0/ui/src/Map.tsx +363 -0
  92. graphene_map-0.2.0/ui/src/app.css +266 -0
  93. graphene_map-0.2.0/ui/src/data.test.ts +5 -0
  94. graphene_map-0.2.0/ui/src/data.ts +12 -0
  95. graphene_map-0.2.0/ui/src/main.tsx +11 -0
  96. graphene_map-0.2.0/ui/src/model.test.ts +134 -0
  97. graphene_map-0.2.0/ui/src/model.ts +257 -0
  98. graphene_map-0.2.0/ui/src/types.ts +160 -0
  99. graphene_map-0.2.0/ui/src/vite-env.d.ts +1 -0
  100. graphene_map-0.2.0/ui/tsconfig.json +19 -0
  101. graphene_map-0.2.0/ui/vite.config.ts +25 -0
  102. graphene_map-0.2.0/uv.lock +183 -0
@@ -0,0 +1,41 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ pull_request:
6
+
7
+ jobs:
8
+ test:
9
+ runs-on: ${{ matrix.os }}
10
+ strategy:
11
+ fail-fast: false
12
+ matrix:
13
+ os: [ubuntu-latest, macos-latest]
14
+ python: ["3.12", "3.13"]
15
+ steps:
16
+ - uses: actions/checkout@v4
17
+ - uses: astral-sh/setup-uv@v6
18
+ with:
19
+ python-version: ${{ matrix.python }}
20
+ - run: uv sync
21
+ - run: uv run ruff check
22
+ - run: uv run pytest -q
23
+ - run: uv build
24
+ - name: Smoke the wheel outside the source tree
25
+ run: |
26
+ cd "$RUNNER_TEMP"
27
+ uv venv smoke
28
+ uv pip install --python smoke/bin/python "$GITHUB_WORKSPACE"/dist/*.whl
29
+ ./smoke/bin/graphene --version
30
+
31
+ ui:
32
+ runs-on: ubuntu-latest
33
+ steps:
34
+ - uses: actions/checkout@v4
35
+ - uses: actions/setup-node@v4
36
+ with:
37
+ node-version: lts/*
38
+ - run: npm ci --prefix ui
39
+ - run: npm --prefix ui run check
40
+ - name: The committed page is what the source builds
41
+ run: git diff --exit-code -- src/graphene_debrief/ui/static
@@ -0,0 +1,39 @@
1
+ name: Release
2
+
3
+ on:
4
+ push:
5
+ tags:
6
+ - "v*"
7
+
8
+ jobs:
9
+ build:
10
+ runs-on: ubuntu-latest
11
+ steps:
12
+ - uses: actions/checkout@v4
13
+ - uses: astral-sh/setup-uv@v6
14
+ with:
15
+ python-version: "3.13"
16
+ - run: uv build
17
+ - name: Smoke the wheel outside the source tree
18
+ run: |
19
+ cd "$RUNNER_TEMP"
20
+ uv venv smoke
21
+ uv pip install --python smoke/bin/python "$GITHUB_WORKSPACE"/dist/*.whl
22
+ ./smoke/bin/graphene --version
23
+ - uses: actions/upload-artifact@v4
24
+ with:
25
+ name: dist
26
+ path: dist/
27
+
28
+ publish:
29
+ needs: build
30
+ runs-on: ubuntu-latest
31
+ environment: pypi
32
+ permissions:
33
+ id-token: write
34
+ steps:
35
+ - uses: actions/download-artifact@v4
36
+ with:
37
+ name: dist
38
+ path: dist/
39
+ - uses: pypa/gh-action-pypi-publish@release/v1
@@ -0,0 +1,20 @@
1
+ .venv/
2
+ __pycache__/
3
+ *.py[cod]
4
+ .pytest_cache/
5
+ .ruff_cache/
6
+ dist/
7
+ node_modules/
8
+ .DS_Store
9
+ .env
10
+
11
+ # Graphene's own local store
12
+ .graphene/
13
+
14
+ # Editor and agent state, private working material
15
+ .claude/
16
+ .vscode/
17
+ local/
18
+
19
+ # Playwright MCP session output (the HTML export was checked in a browser)
20
+ .playwright-mcp/
@@ -0,0 +1 @@
1
+ 3.13
@@ -0,0 +1,10 @@
1
+ # Changelog
2
+
3
+ ## 0.1.0 (unreleased)
4
+
5
+ First release: Graphene reads the transcripts Claude Code keeps on your machine and answers which prompt changed a file or a line.
6
+ - `graphene`: a short card of the latest session (files changed, commits, changes outside the scope you named, what was tried and abandoned).
7
+ - `graphene why PATH` and `graphene why PATH:LINE`: the prompts that changed a file, or the one that wrote a line.
8
+ - `graphene debrief --full`, `--json`, `--md FILE` and `--html FILE` (a self-contained page that opens offline).
9
+ - `graphene init` installs hooks so sessions are recorded live; without it Graphene reads the transcripts.
10
+ - Explanations are factual templates by default; `--explain claude` asks Claude Code once per prompt (`--model NAME`, default `haiku`).