- commit
- 159188b43ba045f1ccc17f58c9def66a145d1756
- parent
- d1f060be50db12b8e0b7ece94a44b2d1702a16c3
- parent
- e2ec615e5dfa15f28d5ddc7e606184eaf3e82cac
- author
- Dami <dami.etoile@gmail.com>
| M | ROADMAP.md | 15 | +++++++++++++-- |
| M | e2e/ | 22 | +++++++++++++++++++++- |
@@ -48,9 +48,11 @@ shown by `012 diff`, under the same trust rules as macros. Live mode is
4848 |---|---|---|4949 | Live mode: `012 --listen` and `012 mcp --attach`; the agent's cursor and name in the grid, its changes arriving as a suggestion (marked cells, accepted or rejected whole or by cell) unless direct edits are allowed, its own undo, a scope (sheet, range, read-only), elicitation to ask the person | Coworking with an agent in the grid | M to L |5050 51-## Later: other transports (shelved)51+## Shelved5252 53-Explored, not scheduled: carrying the same shared sessions over iroh53+Explored, not scheduled; the fit is still open.54+55+Other transports: carrying the same shared sessions over iroh5456 tickets (the Go transport in `FelineStateMachine/allons`5557 `local/transport/iroh`, which needs cgo and a prebuilt iroh-ffi archive, so5658 it would sit behind a build tag) and the web (`NimbleMarkets/go-booba`@@ -59,6 +61,15 @@ v2 support unverified). They would reuse the rooms of `012 serve`, whose
5961 server orders every participant's operations, rather than a design of6062 their own.6163 64+SQL cells and connections: SQL as a second cell language beside nu, on65+an in-process SQLite (pure Go) over the workbook's tables, outputs and66+linked files by default, with saved connections to SQLite files,67+Postgres and MySQL whose secrets stay in the keychain. Results would be68+outputs like a nu cell's (grid, `G`, `$name`, stale), `@name`69+parameters bound from cells, and `012 query` and an MCP `query` tool70+for scripts and agents. DuckDB would only be an external kernel, as it71+needs cgo.72+6273 ## Shipped6374 6475 **Engine**@@ -59,7 +59,7 @@ func TestScreens(t *testing.T) {
5959 if got != string(want) {6060 actual := filepath.Join(t.TempDir(), sc.name+".html")6161 os.WriteFile(actual, []byte(got), 0o644)62- t.Errorf("screen %s changed; if intended, run make screens and review the gallery.\nplain text now:\n%s", sc.name, s.screen())62+ t.Errorf("screen %s changed; if intended, run make screens and review the gallery.\n%s\nplain text now:\n%s", sc.name, firstDiff(string(want), got), s.screen())6363 }6464 })6565 }@@ -194,3 +194,23 @@ h2{font:500 13px ui-monospace,monospace;color:#aaa;margin:0 0 8px}
194194 b.WriteString("</div>\n")195195 return os.WriteFile(filepath.Join(dir, "gallery.html"), []byte(b.String()), 0o644)196196 }197+198+// firstDiff shows the first line where a golden screen's HTML and the199+// screen now part, which the plain text can't show when only a color or200+// style changed.201+func firstDiff(want, got string) string {202+ w, g := strings.Split(want, "\n"), strings.Split(got, "\n")203+ for i := 0; i < len(w) || i < len(g); i++ {204+ var a, b string205+ if i < len(w) {206+ a = w[i]207+ }208+ if i < len(g) {209+ b = g[i]210+ }211+ if a != b {212+ return fmt.Sprintf("first difference, line %d:\n want %s\n got %s", i+1, a, b)213+ }214+ }215+ return "no line differs"216+}