Something went wrong. Try again.
small gleam coding and persistent agent daemon with a detachable cli and a canvas ui forked from okami.mom/albedo
Something went wrong. Try again.
colab #
the colab extension (requires python and remote) manages Google Colab
runtimes from the kernel and reaches one through remote.
- sign-in:
/login colabstores a Google account underaccounts["google-colab"]in creds.json (access,refresh,expires,email). the OAuth mechanics (code exchange, userinfo email, locked refresh) arealbedo_google_oauth.erl's, shared with antigravity;albedo_colab_auth.erlis the colab client and account choice: the selected account, else the first. - tokens stay in the daemon: the kernel never reads creds.json. the
colab.accounthost route (extension.gleam) answers{access, email}with the token refreshed and saved under the credential lock, or a refusal thatcolab.pyraises asColabError. every API call asks again, so a long session outlives the hour a token lives. - runtimes:
colab.instances(),status(),launch()andstop()call the/tun/m/*endpoints with the XSRF handshake. an instance is aColabInstancerecord withconnect()andstop()methods. - connect:
colab.connect(vm)takes a fresh listing (the runtime proxy token expires), registers an ssh aliascolab-<id>and returnsremote.connect()on it. the alias'sProxyCommandispython -m albedo_plugins.ws, which bridges stdio towss://<proxy>/colab/ssh; the proxy url and the public key header reach it asALBEDO_WS_URLandALBEDO_WS_HEADERSin its environment. nothing is written to~/.ssh/config. a missing ssh public key (~/.ssh/id_ed25519.pub,id_ecdsa.pub, orssh_key=) is an error before anything connects.stop()drops the alias; it does not close a connection already open on it. - occupied ssh slot: only after
remote.connect()fails, a bounded websocket handshake probe checks for HTTP 429 withalready-active-session. this raisesColabSshSessionError(aColabError,status=429). unrelated refusals and probe failures preserve the originalRemoteError; successful connects cost no extra request. a previously held server-side session may survive a bridge restart. retrying does not release it.stop()/unassign is the only forceful reset and destroys the VM; never do that to recover files from a live job. - HTTP recovery:
await colab.runtime_status(vm)reads Jupyter/api/status;await colab.contents(vm, "content")lists a directory;await colab.contents(vm, path, content=False)reads metadata (including size);await colab.read(vm, path)returns a text file in memory;await colab.pull(vm, path, local, resume=True)streams/files/<path>to disk in 1 MiB chunks and returns its localPath. these read-only routes refresh the runtime proxy token and work independently of ssh. paths are relative to Jupyter's root, not/content. partial downloads remain for retry; resume assumes unchanged remote content, so useresume=Falsefor mutable files. an ignored Range restarts rather than appending; invalid ranges and HTTP 416 fail instead of claiming completeness. runtime HTTP errors omit credential URLs. - tests:
test/harness/colab_plugin_test.py(the plugin against a faked HTTP layer),ws_test.py(frames, and the bridge in a real subprocess) andgoogle_oauth_test.gleam(the refresh against a local token endpoint).