elate 0.1.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 (45) hide show
  1. elate-0.1.0/.gitignore +14 -0
  2. elate-0.1.0/CHANGELOG.md +89 -0
  3. elate-0.1.0/LICENSE +674 -0
  4. elate-0.1.0/PKG-INFO +803 -0
  5. elate-0.1.0/PLAN-integrations.md +179 -0
  6. elate-0.1.0/PLAN.md +246 -0
  7. elate-0.1.0/PROGRESS.md +783 -0
  8. elate-0.1.0/README.md +778 -0
  9. elate-0.1.0/REVIEW-phase1.md +278 -0
  10. elate-0.1.0/REVIEW-phase2.md +297 -0
  11. elate-0.1.0/REVIEW-phase3.md +265 -0
  12. elate-0.1.0/REVIEW-phase4.md +213 -0
  13. elate-0.1.0/REVIEW-phase5.md +334 -0
  14. elate-0.1.0/REVIEW-phase6.md +218 -0
  15. elate-0.1.0/examples/clean-install.json +16 -0
  16. elate-0.1.0/examples/drive-dired.json +21 -0
  17. elate-0.1.0/examples/elpkg.el +22 -0
  18. elate-0.1.0/examples/font-lock.json +15 -0
  19. elate-0.1.0/examples/transient-menu.json +19 -0
  20. elate-0.1.0/pyproject.toml +46 -0
  21. elate-0.1.0/src/elate/__init__.py +3 -0
  22. elate-0.1.0/src/elate/cli.py +1297 -0
  23. elate-0.1.0/src/elate/elisp/elate-agent.el +1911 -0
  24. elate-0.1.0/src/elate/errors.py +45 -0
  25. elate-0.1.0/src/elate/gui.py +259 -0
  26. elate-0.1.0/src/elate/kbd.py +108 -0
  27. elate-0.1.0/src/elate/mcp_server.py +1086 -0
  28. elate-0.1.0/src/elate/paths.py +25 -0
  29. elate-0.1.0/src/elate/raw.py +174 -0
  30. elate-0.1.0/src/elate/record.py +333 -0
  31. elate-0.1.0/src/elate/sandbox.py +241 -0
  32. elate-0.1.0/src/elate/screenshot.py +214 -0
  33. elate-0.1.0/src/elate/script.py +1027 -0
  34. elate-0.1.0/src/elate/semantic.py +136 -0
  35. elate-0.1.0/src/elate/session.py +1045 -0
  36. elate-0.1.0/src/elate/snap.py +254 -0
  37. elate-0.1.0/src/elate/transcript.py +36 -0
  38. elate-0.1.0/tests/test_gui.py +930 -0
  39. elate-0.1.0/tests/test_integration.py +742 -0
  40. elate-0.1.0/tests/test_kbd.py +67 -0
  41. elate-0.1.0/tests/test_mcp.py +854 -0
  42. elate-0.1.0/tests/test_polish.py +780 -0
  43. elate-0.1.0/tests/test_quality.py +849 -0
  44. elate-0.1.0/tests/test_recording.py +995 -0
  45. elate-0.1.0/uv.lock +1077 -0
elate-0.1.0/.gitignore ADDED
@@ -0,0 +1,14 @@
1
+ # Python
2
+ __pycache__/
3
+ *.py[co]
4
+ .venv/
5
+ dist/
6
+ build/
7
+ *.egg-info/
8
+
9
+ # Tooling state
10
+ .pytest_cache/
11
+ .claude/scheduled_tasks.lock
12
+
13
+ # Byte-compiled elisp (the agent ships as source)
14
+ *.elc
@@ -0,0 +1,89 @@
1
+ # Changelog
2
+
3
+ ## 0.1.0
4
+
5
+ Everything below shipped in phases on the way to 0.1; one section per phase.
6
+
7
+ ### Phase 1 — TTY MVP
8
+
9
+ - Sandboxed sessions: fresh fake `$HOME` + XDG dirs, generated init
10
+ (`--init-directory`), per-session server.el socket, dedicated tmux
11
+ server with its socket inside the sandbox.
12
+ - Config modes `minimal` (deterministic test defaults), `bare` (`-Q`),
13
+ `init-file`; `--load` / `--eval` startup hooks with errors captured
14
+ to `init_error` instead of wedging the session.
15
+ - Two channels: semantic (`emacsclient --eval` against the in-Emacs
16
+ agent; base64-JSON replies) and raw (tmux keys/capture-pane — works
17
+ even when Emacs is wedged; crashed panes stay for post-mortem
18
+ screenshots).
19
+ - CLI with `--json` everywhere: `start/stop/list/info`, `keys` (kbd
20
+ notation; macro, queued-events, or raw delivery), `type`, `eval`
21
+ (printed value, *Messages* delta, error + full backtrace, hard
22
+ timeouts), `buffer`, `messages` (cursor-based delta), `echo`,
23
+ `screenshot` (text/ANSI), `describe`, `wait idle|text|prompt`
24
+ (timeouts embed a state snapshot; exit 3).
25
+
26
+ ### Phase 2 — MCP server
27
+
28
+ - `elate mcp`: stdio server, tools 1:1 with the CLI, every response
29
+ structured JSON with an `ok` flag; errors embed a compact state
30
+ snapshot so the model sees why.
31
+ - `elate_state`: the one-call scene snapshot (window layout tree with
32
+ visible text, buffer/modes/point/region, minibuffer prompt + input +
33
+ completion candidates, echo area, pending input, *Messages* tail).
34
+ - Non-Unicode payloads sanitized centrally (`elate--encode`); tool
35
+ bodies run off the event loop (`_threaded`); timeouts schema-bounded.
36
+
37
+ ### Phase 3 — GUI sessions
38
+
39
+ - `--ui gui`: windowed Emacs (macOS native; Linux X11 with `--headless`
40
+ Xvfb), PNG screenshots (`screencapture` / `import`/`xwd`), live
41
+ `resize`, frame geometry pinning.
42
+ - Semantic mouse for both UIs (`mouse` / `elate_mouse`): synthesized
43
+ posn-based click/double/drag/wheel through the command loop — real
44
+ bindings fire, no OS permissions needed.
45
+ - Robustness: server.el request handling shielded from the debugger
46
+ (dead-client replies can no longer wedge the channel), E2BIG argv
47
+ errors converted to actionable messages, identity-checked pid
48
+ handling against reuse, GUI `type` chunked + capped.
49
+
50
+ ### Phase 4 — Testing & quality tooling
51
+
52
+ - `test` / `elate_test`: interactive ERT runs (selector support) with
53
+ structural per-test results (status, duration, captured messages,
54
+ condition, trimmed backtrace); in-Emacs run timeout with partial
55
+ results; quits are recorded, never prompt.
56
+ - `lint` / `elate_lint`: byte-compile + checkdoc as structured items;
57
+ in-session by design (and loudly documented as executing
58
+ compile-time code — lint untrusted code in a throwaway session).
59
+ - `buffer --props`: run-length-encoded face/text-property runs +
60
+ overlay dumps; `faces-at` point queries; `popups` capture
61
+ (which-key, transient, hydra/lv, corfu, company,
62
+ completion-preview, child frames).
63
+
64
+ ### Phase 5 — Recording & CI
65
+
66
+ - JSON scenario scripts: strict up-front validation, steps mirroring
67
+ the CLI verbs plus assertions; `elate run` executes them in a fresh
68
+ throwaway session (exit 0/1, first failure stops the run, failed
69
+ steps embed state); `elate_run_script` over MCP.
70
+ - `export-script`: transcript → editable scenario; `record`: asciicast
71
+ v2 via tmux pipe-pane; `snap`: detached periodic frame series;
72
+ `matrix`: one script across several Emacs binaries.
73
+
74
+ ### Phase 6 — Polish
75
+
76
+ - `profile` / `elate_profile`: Emacs's native profiler with structured
77
+ reports — top functions (self/total + percentages) and a
78
+ depth-limited unified calltree; one-shot `profile run FORM`.
79
+ - `bench` / `elate_bench`: `benchmark-run-compiled` wrapper with
80
+ interpreted fallback; elapsed/mean, GC stats, `memory-use-counts`
81
+ allocation deltas.
82
+ - `--config clean-install`: install the package under test for real
83
+ (`package-install-file` into a sandbox-local elpa/) — verifies
84
+ autoload cookies, `Package-Requires` (missing deps fail with a clear
85
+ offline error), and byte-compilation of the installed copy; install
86
+ results exposed via `info`/`state`.
87
+ - Recipes in the README backed by tested scripts in `examples/`
88
+ (transient menu, font-lock verification, driving dired,
89
+ clean-install).