diff --git a/.gitignore b/.gitignore index 5928005..5c52867 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ /target test* +/lib # Byte-compiled / optimized / DLL files __pycache__/ diff --git a/lib/codemp-0.0.5.dist-info/METADATA b/lib/codemp-0.0.5.dist-info/METADATA deleted file mode 100644 index ea056b2..0000000 --- a/lib/codemp-0.0.5.dist-info/METADATA +++ /dev/null @@ -1,105 +0,0 @@ -Metadata-Version: 2.3 -Name: codemp -Version: 0.0.5 -Classifier: Programming Language :: Python -Summary: code multiplexer -Keywords: codemp,cooperative,rust,python -Home-Page: https://code.mp -Author: alemi , zaaarf , frelodev , cschen -Author-email: cschen , alemi , zaaarf , frelodev -Maintainer-email: cschen -License: GPL-3.0-only -Requires-Python: >=3.8 -Description-Content-Type: text/markdown; charset=UTF-8; variant=GFM -Project-URL: repository, https://github.com/hexedtech/codemp.git - -[![codemp](https://code.mp/static/banner.png)](https://code.mp) - -[![Actions Status](https://github.com/hexedtech/codemp/actions/workflows/ci.yml/badge.svg)](https://github.com/hexedtech/codemp/actions) -[![docs.rs](https://img.shields.io/docsrs/codemp)](https://docs.rs/codemp/0.7.0-beta.2/codemp/) -[![Crates.io Version](https://img.shields.io/crates/v/codemp)](https://crates.io/crates/codemp) -[![NPM Version](https://img.shields.io/npm/v/codemp)](https://npmjs.org/package/codemp) -[![PyPI - Version](https://img.shields.io/pypi/v/codemp)](https://pypi.org/project/codemp) -[![Crates.io License](https://img.shields.io/crates/l/codemp)](https://github.com/hexedtech/codemp/blob/dev/LICENSE) -[![Gitter](https://img.shields.io/gitter/room/hexedtech/codemp)](https://gitter.im/hexedtech/codemp) - -> `codemp` is a **collaborative** text editing solution to work remotely. - -It seamlessly integrates in your editor providing remote cursors and instant text synchronization, -as well as a remote virtual workspace for you and your team. - -> `codemp` is build with state-of-the-art CRDT technology, guaranteeing eventual consistency. - -This means everyone in a workspace will always be working on the exact same file _eventually_: -even under unreliable networks or constrained resources, the underlying CRDT will always reach a -convergent state across all users. Even with this baseline, `codemp`'s protocol is optimized for speed -and low network footprint, meaning even slow connections can provide stable real-time editing. - -The full documentation is available on [docs.rs](https://docs.rs/codemp/0.7.0-beta.2/codemp/). - -# Usage -`codemp` is primarily used as a plugin in your editor of choice. - -## Installation -> [!IMPORTANT] -> The editor plugins are in active development. Expect frequent changes. - -`codemp` is available as a plugin for a growing number of text editors. Currently we support: - - [NeoVim](https://github.com/hexedtech/codemp-nvim) - - [VSCode](https://github.com/hexedtech/codemp-vscode) - - [Sublime Text](https://github.com/hexedtech/codemp-sublime) - - -## Registration -The `codemp` protocol is [openly available](https://github.com/hexedtech/codemp-proto/) and servers may be freely developed with it. - -A reference instance is provided by hexed.technology at [code.mp](https://code.mp). You may create an account for it [here](https://code.mp/register). -During the initial closed beta, registrations will require an invite code. Get in contact if interested. - -An open beta is going to follow with free access to a single workspace per user. -After such period, [code.mp](https://code.mp) will switch to a subscription-based model. - -# Development -This is the main client library for `codemp`. It provides a batteries-included fully-featured `Client`, managed by the library itself, and exposes a number of functions to interact with it. The host program can obtain a `Client` handle by connecting, and from that reference can retrieve every other necessary component. - -`codemp` is primarily a rlib and can be used as such, but is also available in other languages via FFI. - -Adding a dependency on `codemp` is **easy**: - -### From Rust -Just `cargo add codemp` and check the docs for some examples. - -### From supported languages -We provide first-class bindings for: - - [JavaScript](./dist/js/README.md): available from `npm` as [`codemp`](https://npmjs.org/package/codemp) - - [Python](./dist/lua/README.md): available from `PyPI` as [`codemp`](https://pypi.org/project/codemp) - - [Lua](./dist/lua/README.md): run `cargo build --features=lua` - - [Java](./dist/java/README.md): run `gradle build` in `dist/java/` (requires Gradle) - -As a design philosophy, our binding APIs attempt to perfectly mimic their Rust counterparts, so the main documentation can still be referenced as source of truth. -Refer to specific language documentation for specifics, differences and quirks. - -### From other languages -> [!IMPORTANT] -> The common C bindings are not available yet! - -Any other language with C FFI capabilities will be able to use `codemp` via its bare C bindings. -This may be more complex and may require wrapping the native calls underneath. - -# Get in Touch -We love to hear back from users! Be it to give feedback, propose new features or highlight bugs, don't hesitate to reach out! - -## Contacts -We have a public [Gitter](https://gitter.im) room available on [gitter.im/hexedtech/codemp](https://gitter.im/hexedtech/codemp). -It's possible to freely browse the room history, but to send new messages it will be necessary to sign in with your GitHub account. - -If you have a [Matrix](https://matrix.org) account, you can join the gitter room directly at [#hexedtech_codemp:gitter.im](https://matrix.to/#/#hexedtech_codemp:gitter.im) - -## Contributing -If you find bugs or would like to see new features implemented, be sure to open an issue on this repository. - -> [!WARNING] -> The CLA necessary for code contributions is not yet available! - -In case you wish to contribute code, that's great! We love external contributions, but we require you to sign our CLA first (available soon). - diff --git a/lib/codemp-0.0.5.dist-info/RECORD b/lib/codemp-0.0.5.dist-info/RECORD deleted file mode 100644 index 11b75bd..0000000 --- a/lib/codemp-0.0.5.dist-info/RECORD +++ /dev/null @@ -1,7 +0,0 @@ -codemp-0.0.5.dist-info/METADATA,sha256=9Gy6K7EREfjx1ozQv3OQPBhPEqsDphl2uOUzYXO5HXY,5819 -codemp-0.0.5.dist-info/WHEEL,sha256=Z7z_TcN-SqAJ4k-DAgSbQsbDhIg--F0f-wRIhoPNirs,102 -codemp/__init__.py,sha256=mu2xQJfcdjBHPYAGe4y3B-O1zKM0O6jqyutzs-XfgsE,107 -codemp/__init__.pyi,sha256=u_Yx1O12UzHwKtz97pfkT0mYbECDzzPEi8ewSb6yb9g,4155 -codemp/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -codemp/codemp.abi3.so,sha256=OrEWjqxkDYxY0wN9O7T3Osg8JMvRu3Fj6-vVQFqPgv4,4193664 -codemp-0.0.5.dist-info/RECORD,, diff --git a/lib/codemp-0.0.5.dist-info/WHEEL b/lib/codemp-0.0.5.dist-info/WHEEL deleted file mode 100644 index 90bf034..0000000 --- a/lib/codemp-0.0.5.dist-info/WHEEL +++ /dev/null @@ -1,4 +0,0 @@ -Wheel-Version: 1.0 -Generator: maturin (1.7.0) -Root-Is-Purelib: false -Tag: cp38-abi3-macosx_11_0_arm64 diff --git a/lib/codemp/__init__.py b/lib/codemp/__init__.py index 6b96f01..2ac1e90 100644 --- a/lib/codemp/__init__.py +++ b/lib/codemp/__init__.py @@ -2,4 +2,4 @@ from .codemp import * __doc__ = codemp.__doc__ if hasattr(codemp, "__all__"): - __all__ = codemp.__all__ \ No newline at end of file + __all__ = codemp.__all__ diff --git a/lib/codemp/__init__.pyi b/lib/codemp/__init__.pyi deleted file mode 100644 index dc9a974..0000000 --- a/lib/codemp/__init__.pyi +++ /dev/null @@ -1,124 +0,0 @@ -from typing import Tuple, Optional, Callable - -class Driver: - """ - this is akin to a big red button with a white "STOP" on top of it. - it is used to stop the runtime. - """ - def stop(self) -> None: ... - - -def init() -> Driver: ... -def set_logger(logger_cb: Callable[[str], None], debug: bool) -> bool: ... -def connect(host: str, username: str, password: str) -> Promise[Client]: ... - -class Promise[T]: - """ - This is a class akin to a future, which wraps a join handle from a spawned - task on the rust side. you may call .pyawait() on this promise to block - until we have a result, or return immediately if we already have one. - This only goes one way rust -> python. - - It can either be used directly or you can wrap it inside a future python side. - """ - def wait(self) -> T: ... - def is_done(self) -> bool: ... - -class Client: - """ - Handle to the actual client that manages the session. It manages the connection - to a server and joining/creating new workspaces - """ - def join_workspace(self, workspace: str) -> Promise[Workspace]: ... - def create_workspace(self, workspace: str) -> Promise[None]: ... - def delete_workspace(self, workspace: str) -> Promise[None]: ... - def invite_to_workspace(self, workspace: str, username: str) -> Promise[None]: ... - def list_workspaces(self, owned: bool, invited: bool) -> Promise[list[str]]: ... - def leave_workspace(self, workspace: str) -> bool: ... - def get_workspace(self, id: str) -> Workspace: ... - def active_workspaces(self) -> list[str]: ... - def user_id(self) -> str: ... - def user_name(self) -> str: ... - def refresh(self) -> Promise[None]: ... - -class Workspace: - """ - Handle to a workspace inside codemp. It manages buffers. - A cursor is tied to the single workspace. - """ - def create(self, path: str) -> Promise[None]: ... - def attach(self, path: str) -> Promise[BufferController]: ... - def detach(self, path: str) -> bool: ... - def fetch_buffers(self) -> Promise[None]: ... - def fetch_users(self) -> Promise[None]: ... - def list_buffer_users(self, path: str) -> Promise[list[str]]: ... - def delete(self, path: str) -> Promise[None]: ... - def id(self) -> str: ... - def cursor(self) -> CursorController: ... - def buffer_by_name(self, path: str) -> Optional[BufferController]: ... - def buffer_list(self) -> list[str]: ... - def filetree(self, filter: Optional[str]) -> list[str]: ... - -class TextChange: - """ - Editor agnostic representation of a text change, it translate between internal - codemp text operations and editor operations - """ - start: int - end: int - content: str - - def is_delete(self) -> bool: ... - def is_insert(self) -> bool: ... - def is_empty(self) -> bool: ... - def apply(self, txt: str) -> str: ... - - -class BufferController: - """ - Handle to the controller for a specific buffer, which manages the back and forth - of operations to and from other peers. - """ - def path(self) -> str: ... - def content(self) -> Promise[str]: ... - def send(self, - start: int, - end: int, - txt: str) -> Promise[None]: ... - def try_recv(self) -> Promise[Optional[TextChange]]: ... - def recv(self) -> Promise[TextChange]: ... - def poll(self) -> Promise[None]: ... - def callback(self, - cb: Callable[[BufferController], None]) -> None: ... - def clear_callback(self) -> None: ... - def stop(self) -> bool: ... - - - -class Cursor: - """ - An Editor agnostic cursor position representation - """ - start: Tuple[int, int] - end: Tuple[int, int] - buffer: str - user: Optional[str] # can be an empty string - - -class CursorController: - """ - Handle to the controller for a workspace, which manages the back and forth of - cursor movements to and from other peers - """ - def send(self, - path: str, - start: Tuple[int, int], - end: Tuple[int, int]) -> Promise[None]: ... - def try_recv(self) -> Promise[Optional[Cursor]]: ... - def recv(self) -> Promise[Cursor]: ... - def poll(self) -> Promise[None]: ... - def callback(self, - cb: Callable[[CursorController], None]) -> None: ... - def clear_callback(self) -> None: ... - def stop(self) -> bool: ... - diff --git a/lib/codemp/codemp.abi3.so.REMOVED.git-id b/lib/codemp/codemp.abi3.so.REMOVED.git-id index 97be16c..3b00dbe 100644 --- a/lib/codemp/codemp.abi3.so.REMOVED.git-id +++ b/lib/codemp/codemp.abi3.so.REMOVED.git-id @@ -1 +1 @@ -7145849af30523094153d307d57c79bb7a90680f \ No newline at end of file +07324deddcc8b8e2c9b1993a8b8286fece4a42a1 \ No newline at end of file diff --git a/lib/codemp/py.typed b/lib/codemp/py.typed deleted file mode 100644 index e69de29..0000000