{"_id":"@enc-protocol/group-cli","name":"@enc-protocol/group-cli","description":"Per-app SDK for the `group` app on ENC Protocol. Enclaves: Group, Personal.","dist-tags":{"latest":"0.4.2","local":"0.3.2-local"},"versions":{"0.1.0":{"name":"@enc-protocol/group-cli","version":"0.1.0","type":"module","description":"ENC Protocol per-app SDK + skill for the \"group\" app. Enclaves: Group,Personal.","main":"sdk.mjs","files":["sdk.mjs","cli.json","skill/SKILL.md"],"exports":{".":"./sdk.mjs","./sdk":"./sdk.mjs","./cli.json":"./cli.json","./skill":"./skill/SKILL.md"},"dependencies":{"@enc-protocol/cli-sdk-base":"^0.1.0"},"keywords":["enc-protocol","group","sdk","skill"],"license":"MIT","publishConfig":{"registry":"https://npm-registry.ocrybit.workers.dev/"},"readme":"ERROR: No README data found!","_id":"@enc-protocol/group-cli@0.1.0","_nodeVersion":"26.1.0","_npmVersion":"11.13.0","dist":{"tarball":"https://npm-registry.ocrybit.workers.dev/@enc-protocol/group-cli/-/@enc-protocol/group-cli-0.1.0.tgz","shasum":"9b2f31fb6ddeb00452baa3618fadd936bf05b053","integrity":"sha512-87AdlK1Oo1u//Go8qYS8ao5s+QsuS4cgHA6WEkB0HHbcVq850zgvxSw2iUA1DRHAcDcviw7vVil35OzX9sHqsA=="}},"0.1.1":{"name":"@enc-protocol/group-cli","version":"0.1.1","type":"module","description":"ENC Protocol per-app SDK + skill for the \"group\" app. Enclaves: Group,Personal.","main":"sdk.mjs","files":["sdk.mjs","cli.json","skill/SKILL.md","README.md"],"exports":{".":"./sdk.mjs","./sdk":"./sdk.mjs","./cli.json":"./cli.json","./skill":"./skill/SKILL.md"},"dependencies":{"@enc-protocol/cli-sdk-base":"^0.1.1"},"keywords":["enc-protocol","group","sdk","skill"],"license":"MIT","publishConfig":{"registry":"https://npm-registry.ocrybit.workers.dev/"},"readme":"# @enc-protocol/group-cli\n\nPer-app SDK for the `group` app on ENC Protocol. Enclaves: Group, Personal.\n\n> Auto-generated by `lib/codegen/readme-codegen.mjs` from `apps/group/{app,schema}.json`. Do not hand-edit — regenerate via `enc gen readme group`.\n\n## Install\n\n```bash\necho \"@enc-protocol:registry=https://npm-registry.ocrybit.workers.dev/\" >> .npmrc\nnpm install @enc-protocol/group-cli\n```\n\n## Quick example\n\n```js\nimport { GroupSdk } from '@enc-protocol/group-cli'\n\nconst sdk = new GroupSdk({ mode: 'cf', nodeUrl: process.env.NODE_URL })\nawait sdk.init()\nawait sdk.submitMessages({\"message_draft\":\"example\"})\nconst events = await sdk.queryMessages()\n```\n\n## API reference\n\n### `new GroupSdk(opts)`\n\nConstructor. Accepts:\n\n| Option | Type | Description |\n|--------|------|-------------|\n| `mode` | `'mem' \\| 'cf'` | Backend: in-process mem or HTTP cf |\n| `identity` | `Identity` | Required for cf mode (signing keypair) |\n| `nodeUrl` | `string` | cf-mode node URL (or set `NODE_URL` env) |\n| `repoRoot` | `string` | Path to repo root for finding `apps/<id>/` and `enclaves/<Name>.json` (defaults to package location) |\n| `encHome` | `string` | Optional state directory (defaults to `~/.enc`) |\n\n### `async init()`\n\nInitialize the SDK: load app definition, register all 2 enclaves (Group, Personal), wire dataview, mint cf enclaves if needed.\n\n### Write methods\n\n| Method | Data type | Resolves to | Encrypted | Ops | Operators |\n|--------|-----------|-------------|-----------|-----|-----------|\n| `submitMessages(args)` | `messages` | `Group.message` | ✓ | CDU | MEMBER \\| Sender \\| admin \\| dataview |\n\n### Read methods\n\n| Method | Read | Source | Fields |\n|--------|------|--------|--------|\n| `queryMessages()` | `messages` | `Group.message` | `body`, `outgoing` |\n| `queryProfiles()` | `profiles` | *dataview (cross_enclave)* | *all* |\n\n### Encryption\n\nData types `messages` are flagged `encrypt` in the app schema. The SDK calls `this._encrypt(dataType, args)` before submit. The default `_encrypt` is a pass-through.\n\nTo add real encryption (e.g. MLS for DM), subclass and override:\n\n```js\nclass EncryptedGroupSdk extends GroupSdk {\n  async _encrypt(dataType, args) {\n    // produce ciphertext for `args`\n    return { ciphertext: /* ... */ }\n  }\n}\n```\n\n## Composition\n\n- **Enclaves**: `Group`, `Personal`\n- **tableMap**: `messages` → `message`\n- **encrypt**: `messages`\n- **derived views**: `members`, `pending`, `my_instances`, `active_instance`\n\n## See also\n\n- [`cli.json`](./cli.json) — full app metadata + fuzz contract\n- [`skill/SKILL.md`](./skill/SKILL.md) — Claude Code skill bundle (install via `enc skill install group`)\n- `@enc-protocol/cli-sdk-base` — base class (`AppSdk`, `AppClient`, `DataView`)\n","readmeFilename":"README.md","_id":"@enc-protocol/group-cli@0.1.1","_nodeVersion":"26.1.0","_npmVersion":"11.13.0","dist":{"tarball":"https://npm-registry.ocrybit.workers.dev/@enc-protocol/group-cli/-/@enc-protocol/group-cli-0.1.1.tgz","shasum":"a2d9b2c3accedadc6d5eae0bdf186f49b19e06ae","integrity":"sha512-5nlPFNVtsAeNCYCdkywMVAer4xRb3mhgT39g5bAfzDaUxSquPXPiXUqAzY1V9g+HHuehT1KUh060SCOQCKPm5A=="}},"0.1.2":{"name":"@enc-protocol/group-cli","version":"0.1.2","type":"module","description":"ENC Protocol per-app SDK for the \"group\" app (typed methods, encryption hook). Enclaves: Group,Personal. For the Claude Code skill, use @enc-protocol/skill-group (or `enc skill add group`).","main":"sdk.mjs","files":["sdk.mjs","cli.json","skill/SKILL.md","README.md"],"exports":{".":"./sdk.mjs","./sdk":"./sdk.mjs","./cli.json":"./cli.json","./skill":"./skill/SKILL.md"},"dependencies":{"@enc-protocol/cli-sdk-base":"^0.1.1"},"keywords":["enc-protocol","group","sdk","cli"],"license":"MIT","publishConfig":{"registry":"https://npm-registry.ocrybit.workers.dev/"},"readme":"# @enc-protocol/group-cli\n\nPer-app SDK for the `group` app on ENC Protocol. Enclaves: Group, Personal.\n\n> Auto-generated by `lib/codegen/readme-codegen.mjs` from `apps/group/{app,schema}.json`. Do not hand-edit — regenerate via `enc gen readme group`.\n\n## Install\n\n### Recommended — via the `enc` CLI\n\n```bash\n# Install the global enc CLI once (any project)\nnpm install -g @enc-protocol/cli --registry https://npm-registry.ocrybit.workers.dev/\n\n# Install the skill into the current project (.claude/commands/group.md)\nenc skill add group\n```\n\nThe skill is the recommended consumption surface for Claude Code — adds an `/enc group` slash command. The skill package is published as `@enc-protocol/skill-group`.\n\n### Programmatic — for direct SDK use\n\n```bash\necho \"@enc-protocol:registry=https://npm-registry.ocrybit.workers.dev/\" >> .npmrc\nnpm install @enc-protocol/group-cli\n```\n\n## Quick example\n\n```js\nimport { GroupSdk } from '@enc-protocol/group-cli'\n\nconst sdk = new GroupSdk({ mode: 'cf', nodeUrl: process.env.NODE_URL })\nawait sdk.init()\nawait sdk.submitMessages({\"message_draft\":\"example\"})\nconst events = await sdk.queryMessages()\n```\n\n## API reference\n\n### `new GroupSdk(opts)`\n\nConstructor. Accepts:\n\n| Option | Type | Description |\n|--------|------|-------------|\n| `mode` | `'mem' \\| 'cf'` | Backend: in-process mem or HTTP cf |\n| `identity` | `Identity` | Required for cf mode (signing keypair) |\n| `nodeUrl` | `string` | cf-mode node URL (or set `NODE_URL` env) |\n| `repoRoot` | `string` | Path to repo root for finding `apps/<id>/` and `enclaves/<Name>.json` (defaults to package location) |\n| `encHome` | `string` | Optional state directory (defaults to `~/.enc`) |\n\n### `async init()`\n\nInitialize the SDK: load app definition, register all 2 enclaves (Group, Personal), wire dataview, mint cf enclaves if needed.\n\n### Write methods\n\n| Method | Data type | Resolves to | Encrypted | Ops | Operators |\n|--------|-----------|-------------|-----------|-----|-----------|\n| `submitMessages(args)` | `messages` | `Group.message` | ✓ | CDU | MEMBER \\| Sender \\| admin \\| dataview |\n\n### Read methods\n\n| Method | Read | Source | Fields |\n|--------|------|--------|--------|\n| `queryMessages()` | `messages` | `Group.message` | `body`, `outgoing` |\n| `queryProfiles()` | `profiles` | *dataview (cross_enclave)* | *all* |\n\n### Encryption\n\nData types `messages` are flagged `encrypt` in the app schema. The SDK calls `this._encrypt(dataType, args)` before submit. The default `_encrypt` is a pass-through.\n\nTo add real encryption (e.g. MLS for DM), subclass and override:\n\n```js\nclass EncryptedGroupSdk extends GroupSdk {\n  async _encrypt(dataType, args) {\n    // produce ciphertext for `args`\n    return { ciphertext: /* ... */ }\n  }\n}\n```\n\n## Composition\n\n- **Enclaves**: `Group`, `Personal`\n- **tableMap**: `messages` → `message`\n- **encrypt**: `messages`\n- **derived views**: `members`, `pending`, `my_instances`, `active_instance`\n\n## See also\n\n- [`cli.json`](./cli.json) — full app metadata + fuzz contract\n- [`skill/SKILL.md`](./skill/SKILL.md) — Claude Code skill bundle (install via `enc skill install group`)\n- `@enc-protocol/cli-sdk-base` — base class (`AppSdk`, `AppClient`, `DataView`)\n","readmeFilename":"README.md","_id":"@enc-protocol/group-cli@0.1.2","_nodeVersion":"26.1.0","_npmVersion":"11.13.0","dist":{"tarball":"https://npm-registry.ocrybit.workers.dev/@enc-protocol/group-cli/-/@enc-protocol/group-cli-0.1.2.tgz","shasum":"f0bd4111d317dbb2db7d9ca98278b164e3749d61","integrity":"sha512-KD0dY/iwCh1SecVnL+SuGa9GY2K7pa/LHJUlGdepvjoaNUFrluETqTxNxH0G53S+LCWIWkcvHO7vKlmFN8UnZg=="}},"0.2.0":{"name":"@enc-protocol/group-cli","version":"0.2.0","type":"module","description":"ENC Protocol per-app SDK for the \"group\" app — group chat. Enclaves: Group, Personal. Encrypted: messages.","main":"sdk.mjs","files":["sdk.mjs","cli.json","skill/SKILL.md","README.md"],"exports":{".":"./sdk.mjs","./sdk":"./sdk.mjs","./cli.json":"./cli.json","./skill":"./skill/SKILL.md"},"dependencies":{"@enc-protocol/cli-sdk-base":"^0.2.0"},"keywords":["enc-protocol","group","sdk","cli"],"license":"MIT","publishConfig":{"registry":"https://npm-registry.ocrybit.workers.dev/"},"readme":"# @enc-protocol/group-cli\n\nPer-app SDK for the `group` app on ENC Protocol. Enclaves: Group, Personal.\n\n> Auto-generated by `lib/codegen/readme-codegen.mjs` from `apps/group/{app,schema}.json`. Do not hand-edit — regenerate via `enc gen readme group`.\n\n## Install\n\n### Recommended — via the `enc` CLI\n\n```bash\n# Install the global enc CLI once (any project)\nnpm install -g @enc-protocol/cli --registry https://npm-registry.ocrybit.workers.dev/\n\n# Install the skill into the current project (.claude/commands/group.md)\nenc skill add group\n```\n\nThe skill is the recommended consumption surface for Claude Code — adds an `/enc group` slash command. The skill package is published as `@enc-protocol/skill-group`.\n\n### Programmatic — for direct SDK use\n\n```bash\necho \"@enc-protocol:registry=https://npm-registry.ocrybit.workers.dev/\" >> .npmrc\nnpm install @enc-protocol/group-cli\n```\n\n## Quick example\n\n```js\nimport { GroupSdk } from '@enc-protocol/group-cli'\n\nconst sdk = new GroupSdk({ mode: 'cf', nodeUrl: process.env.NODE_URL })\nawait sdk.init()\nawait sdk.submitMessages({\"message_draft\":\"example\"})\nconst events = await sdk.queryMessages()\n```\n\n## API reference\n\n### `new GroupSdk(opts)`\n\nConstructor. Accepts:\n\n| Option | Type | Description |\n|--------|------|-------------|\n| `mode` | `'mem' \\| 'cf'` | Backend: in-process mem or HTTP cf |\n| `identity` | `Identity` | Required for cf mode (signing keypair) |\n| `nodeUrl` | `string` | cf-mode node URL (or set `NODE_URL` env) |\n| `repoRoot` | `string` | Path to repo root for finding `apps/<id>/` and `enclaves/<Name>.json` (defaults to package location) |\n| `encHome` | `string` | Optional state directory (defaults to `~/.enc`) |\n\n### `async init()`\n\nInitialize the SDK: load app definition, register all 2 enclaves (Group, Personal), wire dataview, mint cf enclaves if needed.\n\n### Write methods\n\n| Method | Data type | Resolves to | Encrypted | Ops | Operators |\n|--------|-----------|-------------|-----------|-----|-----------|\n| `submitMessages(args)` | `messages` | `Group.message` | ✓ | CDU | MEMBER \\| Sender \\| admin \\| dataview |\n\n### Read methods\n\n| Method | Read | Source | Fields |\n|--------|------|--------|--------|\n| `queryMessages()` | `messages` | `Group.message` | `body`, `outgoing` |\n| `queryProfiles()` | `profiles` | *dataview (cross_enclave)* | *all* |\n\n### Encryption\n\nData types `messages` are flagged `encrypt` in the app schema. The SDK calls `this._encrypt(dataType, args)` before submit. The default `_encrypt` is a pass-through.\n\nTo add real encryption (e.g. MLS for DM), subclass and override:\n\n```js\nclass EncryptedGroupSdk extends GroupSdk {\n  async _encrypt(dataType, args) {\n    // produce ciphertext for `args`\n    return { ciphertext: /* ... */ }\n  }\n}\n```\n\n## Composition\n\n- **Enclaves**: `Group`, `Personal`\n- **tableMap**: `messages` → `message`\n- **encrypt**: `messages`\n- **derived views**: `members`, `pending`, `my_instances`, `active_instance`\n\n## See also\n\n- [`cli.json`](./cli.json) — full app metadata + fuzz contract\n- [`skill/SKILL.md`](./skill/SKILL.md) — Claude Code skill bundle (install via `enc skill install group`)\n- `@enc-protocol/cli-sdk-base` — base class (`AppSdk`, `AppClient`, `DataView`)\n","readmeFilename":"README.md","_id":"@enc-protocol/group-cli@0.2.0","_nodeVersion":"26.1.0","_npmVersion":"11.13.0","dist":{"tarball":"https://npm-registry.ocrybit.workers.dev/@enc-protocol/group-cli/-/@enc-protocol/group-cli-0.2.0.tgz","shasum":"6190956cc2c91531c409eb0af1dcfa31244cfb87","integrity":"sha512-9RLZrNlYd3kxE/Qs9lEwq36JcWHNCeHux7eo9kBzLsbbp6fMaU7rVk34wKKYeN0RKXSI0cGJhvlYnNww5ezgZA=="}},"0.3.0":{"name":"@enc-protocol/group-cli","version":"0.3.0","type":"module","description":"ENC Protocol per-app SDK for the \"group\" app — group chat. Enclaves: Group, Personal. Encrypted: messages.","main":"sdk.mjs","files":["sdk.mjs","cli.json","skill/SKILL.md","README.md"],"exports":{".":"./sdk.mjs","./sdk":"./sdk.mjs","./cli.json":"./cli.json","./skill":"./skill/SKILL.md"},"dependencies":{"@enc-protocol/cli-sdk-base":"^0.3.0"},"keywords":["enc-protocol","group","sdk","cli"],"license":"MIT","publishConfig":{"registry":"https://npm-registry.ocrybit.workers.dev/"},"readme":"# @enc-protocol/group-cli\n\nPer-app SDK for the `group` app on ENC Protocol. Enclaves: Group, Personal.\n\n> Auto-generated by `lib/codegen/readme-codegen.mjs` from `apps/group/{app,schema}.json`. Do not hand-edit — regenerate via `enc gen readme group`.\n\n## Install\n\n### Recommended — via the `enc` CLI\n\n```bash\n# Install the global enc CLI once (any project)\nnpm install -g @enc-protocol/cli --registry https://npm-registry.ocrybit.workers.dev/\n\n# Install the skill into the current project (.claude/commands/group.md)\nenc skill add group\n```\n\nThe skill is the recommended consumption surface for Claude Code — adds an `/enc group` slash command. The skill package is published as `@enc-protocol/skill-group`.\n\n### Programmatic — for direct SDK use\n\n```bash\necho \"@enc-protocol:registry=https://npm-registry.ocrybit.workers.dev/\" >> .npmrc\nnpm install @enc-protocol/group-cli\n```\n\n## Quick example\n\n```js\nimport { GroupSdk } from '@enc-protocol/group-cli'\n\nconst sdk = new GroupSdk({ mode: 'cf', nodeUrl: process.env.NODE_URL })\nawait sdk.init()\nawait sdk.submitMessages({\"message_draft\":\"example\"})\nconst events = await sdk.queryMessages()\n```\n\n## API reference\n\n### `new GroupSdk(opts)`\n\nConstructor. Accepts:\n\n| Option | Type | Description |\n|--------|------|-------------|\n| `mode` | `'mem' \\| 'cf'` | Backend: in-process mem or HTTP cf |\n| `identity` | `Identity` | Required for cf mode (signing keypair) |\n| `nodeUrl` | `string` | cf-mode node URL (or set `NODE_URL` env) |\n| `repoRoot` | `string` | Path to repo root for finding `apps/<id>/` and `enclaves/<Name>.json` (defaults to package location) |\n| `encHome` | `string` | Optional state directory (defaults to `~/.enc`) |\n\n### `async init()`\n\nInitialize the SDK: load app definition, register all 2 enclaves (Group, Personal), wire dataview, mint cf enclaves if needed.\n\n### Write methods\n\n| Method | Data type | Resolves to | Encrypted | Ops | Operators |\n|--------|-----------|-------------|-----------|-----|-----------|\n| `submitMessages(args)` | `messages` | `Group.message` | ✓ | CDU | MEMBER \\| Sender \\| admin \\| dataview |\n\n### Read methods\n\n| Method | Read | Source | Fields |\n|--------|------|--------|--------|\n| `queryMessages()` | `messages` | `Group.message` | `body`, `outgoing` |\n| `queryProfiles()` | `profiles` | *dataview (cross_enclave)* | *all* |\n\n### Encryption\n\nData types `messages` are flagged `encrypt` in the app schema. The SDK calls `this._encrypt(dataType, args)` before submit. The default `_encrypt` is a pass-through.\n\nTo add real encryption (e.g. MLS for DM), subclass and override:\n\n```js\nclass EncryptedGroupSdk extends GroupSdk {\n  async _encrypt(dataType, args) {\n    // produce ciphertext for `args`\n    return { ciphertext: /* ... */ }\n  }\n}\n```\n\n## Composition\n\n- **Enclaves**: `Group`, `Personal`\n- **tableMap**: `messages` → `message`\n- **encrypt**: `messages`\n- **derived views**: `members`, `pending`, `my_instances`, `active_instance`\n\n## See also\n\n- [`cli.json`](./cli.json) — full app metadata + fuzz contract\n- [`skill/SKILL.md`](./skill/SKILL.md) — Claude Code skill bundle (install via `enc skill install group`)\n- `@enc-protocol/cli-sdk-base` — base class (`AppSdk`, `AppClient`, `DataView`)\n","readmeFilename":"README.md","_id":"@enc-protocol/group-cli@0.3.0","_nodeVersion":"26.1.0","_npmVersion":"11.13.0","dist":{"tarball":"https://npm-registry.ocrybit.workers.dev/@enc-protocol/group-cli/-/@enc-protocol/group-cli-0.3.0.tgz","shasum":"b8f852d5899d074c09be5474e4b34431656bd7da","integrity":"sha512-7G9jbER9U5a+npnApxoNbpoyJ9DoLassXyKw9bxEX71VQKW5xI6xByRG9P1/LmhiDvwjtsFqcfeCbj4tEvUs+A=="}},"0.3.1":{"name":"@enc-protocol/group-cli","version":"0.3.1","type":"module","description":"ENC Protocol per-app SDK for the \"group\" app — group chat. Enclaves: Group, Personal. Encrypted: messages.","main":"sdk.mjs","files":["sdk.mjs","cli.json","skill/SKILL.md","README.md"],"exports":{".":"./sdk.mjs","./sdk":"./sdk.mjs","./cli.json":"./cli.json","./skill":"./skill/SKILL.md"},"dependencies":{"@enc-protocol/cli-sdk-base":"^0.3.0"},"keywords":["enc-protocol","group","sdk","cli"],"license":"MIT","publishConfig":{"registry":"https://npm-registry.ocrybit.workers.dev/"},"readme":"# @enc-protocol/group-cli\n\nPer-app SDK for the `group` app on ENC Protocol. Enclaves: Group, Personal.\n\n> Auto-generated by `lib/codegen/readme-codegen.mjs` from `apps/group/{app,schema}.json`. Do not hand-edit — regenerate via `enc gen readme group`.\n\n## Install\n\n### Recommended — via the `enc` CLI\n\n```bash\n# Install the global enc CLI once (any project)\nnpm install -g @enc-protocol/cli --registry https://npm-registry.ocrybit.workers.dev/\n\n# Install the skill into the current project (.claude/commands/group.md)\nenc skill add group\n```\n\nThe skill is the recommended consumption surface for Claude Code — adds an `/enc group` slash command. The skill package is published as `@enc-protocol/skill-group`.\n\n### Programmatic — for direct SDK use\n\n```bash\necho \"@enc-protocol:registry=https://npm-registry.ocrybit.workers.dev/\" >> .npmrc\nnpm install @enc-protocol/group-cli\n```\n\n## Quick example\n\n```js\nimport { GroupSdk } from '@enc-protocol/group-cli'\n\nconst sdk = new GroupSdk({ mode: 'cf', nodeUrl: process.env.NODE_URL })\nawait sdk.init()\nawait sdk.submitMessages({\"message_draft\":\"example\"})\nconst events = await sdk.queryMessages()\n```\n\n## API reference\n\n### `new GroupSdk(opts)`\n\nConstructor. Accepts:\n\n| Option | Type | Description |\n|--------|------|-------------|\n| `mode` | `'mem' \\| 'cf'` | Backend: in-process mem or HTTP cf |\n| `identity` | `Identity` | Required for cf mode (signing keypair) |\n| `nodeUrl` | `string` | cf-mode node URL (or set `NODE_URL` env) |\n| `repoRoot` | `string` | Path to repo root for finding `apps/<id>/` and `enclaves/<Name>.json` (defaults to package location) |\n| `encHome` | `string` | Optional state directory (defaults to `~/.enc`) |\n\n### `async init()`\n\nInitialize the SDK: load app definition, register all 2 enclaves (Group, Personal), wire dataview, mint cf enclaves if needed.\n\n### Write methods\n\n| Method | Data type | Resolves to | Encrypted | Ops | Operators |\n|--------|-----------|-------------|-----------|-----|-----------|\n| `submitMessages(args)` | `messages` | `Group.message` | ✓ | CDU | MEMBER \\| Sender \\| admin \\| dataview |\n\n### Read methods\n\n| Method | Read | Source | Fields |\n|--------|------|--------|--------|\n| `queryMessages()` | `messages` | `Group.message` | `body`, `outgoing` |\n| `queryProfiles()` | `profiles` | *dataview (cross_enclave)* | *all* |\n\n### Encryption\n\nData types `messages` are flagged `encrypt` in the app schema. The SDK calls `this._encrypt(dataType, args)` before submit. The default `_encrypt` is a pass-through.\n\nTo add real encryption (e.g. MLS for DM), subclass and override:\n\n```js\nclass EncryptedGroupSdk extends GroupSdk {\n  async _encrypt(dataType, args) {\n    // produce ciphertext for `args`\n    return { ciphertext: /* ... */ }\n  }\n}\n```\n\n## Composition\n\n- **Enclaves**: `Group`, `Personal`\n- **tableMap**: `messages` → `message`\n- **encrypt**: `messages`\n- **derived views**: `members`, `pending`, `my_instances`, `active_instance`\n\n## See also\n\n- [`cli.json`](./cli.json) — full app metadata + fuzz contract\n- [`skill/SKILL.md`](./skill/SKILL.md) — Claude Code skill bundle (install via `enc skill install group`)\n- `@enc-protocol/cli-sdk-base` — base class (`AppSdk`, `AppClient`, `DataView`)\n","readmeFilename":"README.md","_id":"@enc-protocol/group-cli@0.3.1","_nodeVersion":"26.1.0","_npmVersion":"11.13.0","dist":{"tarball":"https://npm-registry.ocrybit.workers.dev/@enc-protocol/group-cli/-/@enc-protocol/group-cli-0.3.1.tgz","shasum":"6d24dc933c5916c8c4b286d8915a68a3f975a771","integrity":"sha512-WDQLkqGf6yNbNKtAPetvf/t0Tbfa/YqaBFh8arZ/1MVQuufdyhz1F5r/IJJ0I5ojC5M48+7hEoMhykS+UNC5TQ=="}},"0.4.1":{"name":"@enc-protocol/group-cli","version":"0.4.1","type":"module","description":"ENC Protocol per-app SDK for the \"group\" app — group chat. Enclaves: Group, Personal. Encrypted: messages.","main":"sdk.mjs","files":["sdk.mjs","cli.json","skill/SKILL.md","README.md"],"exports":{".":"./sdk.mjs","./sdk":"./sdk.mjs","./cli.json":"./cli.json","./skill":"./skill/SKILL.md"},"dependencies":{"@enc-protocol/cli-sdk-base":"^0.4.0"},"keywords":["enc-protocol","group","sdk","cli"],"license":"MIT","publishConfig":{"registry":"https://npm-registry.ocrybit.workers.dev/"},"readme":"# @enc-protocol/group-cli\n\nPer-app SDK for the `group` app on ENC Protocol. Enclaves: Group, Personal.\n\n> Auto-generated by `lib/codegen/readme-codegen.mjs` from `apps/group/{app,schema}.json`. Do not hand-edit — regenerate via `enc gen readme group`.\n\n## Install\n\n### Recommended — via the `enc` CLI\n\n```bash\n# Install the global enc CLI once (any project)\nnpm install -g @enc-protocol/cli --registry https://npm-registry.ocrybit.workers.dev/\n\n# Install the skill into the current project (.claude/commands/group.md)\nenc skill add group\n```\n\nThe skill is the recommended consumption surface for Claude Code — adds an `/enc group` slash command. The skill package is published as `@enc-protocol/skill-group`.\n\n### Programmatic — for direct SDK use\n\n```bash\necho \"@enc-protocol:registry=https://npm-registry.ocrybit.workers.dev/\" >> .npmrc\nnpm install @enc-protocol/group-cli\n```\n\n## Quick example\n\n```js\nimport { GroupSdk } from '@enc-protocol/group-cli'\n\nconst sdk = new GroupSdk({ mode: 'cf', nodeUrl: process.env.NODE_URL })\nawait sdk.init()\nawait sdk.submitMessages({\"message_draft\":\"example\"})\nconst events = await sdk.queryMessages()\n```\n\n## API reference\n\n### `new GroupSdk(opts)`\n\nConstructor. Accepts:\n\n| Option | Type | Description |\n|--------|------|-------------|\n| `mode` | `'mem' \\| 'cf'` | Backend: in-process mem or HTTP cf |\n| `identity` | `Identity` | Required for cf mode (signing keypair) |\n| `nodeUrl` | `string` | cf-mode node URL (or set `NODE_URL` env) |\n| `repoRoot` | `string` | Path to repo root for finding `apps/<id>/` and `enclaves/<Name>.json` (defaults to package location) |\n| `encHome` | `string` | Optional state directory (defaults to `~/.enc`) |\n\n### `async init()`\n\nInitialize the SDK: load app definition, register all 2 enclaves (Group, Personal), wire dataview, mint cf enclaves if needed.\n\n### Write methods\n\n| Method | Data type | Resolves to | Encrypted | Ops | Operators |\n|--------|-----------|-------------|-----------|-----|-----------|\n| `submitMessages(args)` | `messages` | `Group.message` | ✓ | CDU | MEMBER \\| Sender \\| admin \\| dataview |\n\n### Read methods\n\n| Method | Read | Source | Fields |\n|--------|------|--------|--------|\n| `queryMessages()` | `messages` | `Group.message` | `body`, `outgoing` |\n| `queryProfiles()` | `profiles` | *dataview (cross_enclave)* | *all* |\n\n### Encryption\n\nData types `messages` are flagged `encrypt` in the app schema. The SDK calls `this._encrypt(dataType, args)` before submit. The default `_encrypt` is a pass-through.\n\nTo add real encryption (e.g. MLS for DM), subclass and override:\n\n```js\nclass EncryptedGroupSdk extends GroupSdk {\n  async _encrypt(dataType, args) {\n    // produce ciphertext for `args`\n    return { ciphertext: /* ... */ }\n  }\n}\n```\n\n## Composition\n\n- **Enclaves**: `Group`, `Personal`\n- **tableMap**: `messages` → `message`\n- **encrypt**: `messages`\n- **derived views**: `members`, `pending`, `my_instances`, `active_instance`\n\n## See also\n\n- [`cli.json`](./cli.json) — full app metadata + fuzz contract\n- [`skill/SKILL.md`](./skill/SKILL.md) — Claude Code skill bundle (install via `enc skill install group`)\n- `@enc-protocol/cli-sdk-base` — base class (`AppSdk`, `AppClient`, `DataView`)\n","readmeFilename":"README.md","_id":"@enc-protocol/group-cli@0.4.1","_nodeVersion":"26.1.0","_npmVersion":"11.13.0","dist":{"tarball":"https://npm-registry.ocrybit.workers.dev/@enc-protocol/group-cli/-/@enc-protocol/group-cli-0.4.1.tgz","shasum":"363e2460b561d5e64c542b39e66fe079e7d9a4ec","integrity":"sha512-htSxeB+B0KPnQBlc2AQQPv7iDNjUE2jTs2q2saedx6ZWmc+NyYPUYgA9LSGJLSut2Duj91LRPV35yjddcjbWGw=="}},"0.4.2":{"name":"@enc-protocol/group-cli","version":"0.4.2","type":"module","description":"ENC Protocol per-app SDK for the \"group\" app — group chat. Enclaves: Group, Personal. Encrypted: messages.","main":"sdk.mjs","files":["sdk.mjs","cli.json","skill/SKILL.md","README.md"],"exports":{".":"./sdk.mjs","./sdk":"./sdk.mjs","./cli.json":"./cli.json","./skill":"./skill/SKILL.md"},"dependencies":{"@enc-protocol/cli-sdk-base":"^0.4.0"},"keywords":["enc-protocol","group","sdk","cli"],"license":"MIT","publishConfig":{"registry":"https://npm-registry.ocrybit.workers.dev/"},"readme":"# @enc-protocol/group-cli\n\nPer-app SDK for the `group` app on ENC Protocol. Enclaves: Group, Personal.\n\n> Auto-generated by `lib/codegen/readme-codegen.mjs` from `apps/group/{app,schema}.json`. Do not hand-edit — regenerate via `enc gen readme group`.\n\n## Install\n\n### Recommended — via the `enc` CLI\n\n```bash\n# Install the global enc CLI once (any project)\nnpm install -g @enc-protocol/cli --registry https://npm-registry.ocrybit.workers.dev/\n\n# Install the skill into the current project (.claude/commands/group.md)\nenc skill add group\n```\n\nThe skill is the recommended consumption surface for Claude Code — adds an `/enc group` slash command. The skill package is published as `@enc-protocol/skill-group`.\n\n### Programmatic — for direct SDK use\n\n```bash\necho \"@enc-protocol:registry=https://npm-registry.ocrybit.workers.dev/\" >> .npmrc\nnpm install @enc-protocol/group-cli\n```\n\n## Quick example\n\n```js\nimport { GroupSdk } from '@enc-protocol/group-cli'\n\nconst sdk = new GroupSdk({ mode: 'cf', nodeUrl: process.env.NODE_URL })\nawait sdk.init()\nawait sdk.submitMessages({\"message_draft\":\"example\"})\nconst events = await sdk.queryMessages()\n```\n\n## API reference\n\n### `new GroupSdk(opts)`\n\nConstructor. Accepts:\n\n| Option | Type | Description |\n|--------|------|-------------|\n| `mode` | `'mem' \\| 'cf'` | Backend: in-process mem or HTTP cf |\n| `identity` | `Identity` | Required for cf mode (signing keypair) |\n| `nodeUrl` | `string` | cf-mode node URL (or set `NODE_URL` env) |\n| `repoRoot` | `string` | Path to repo root for finding `apps/<id>/` and `enclaves/<Name>.json` (defaults to package location) |\n| `encHome` | `string` | Optional state directory (defaults to `~/.enc`) |\n\n### `async init()`\n\nInitialize the SDK: load app definition, register all 2 enclaves (Group, Personal), wire dataview, mint cf enclaves if needed.\n\n### Write methods\n\n| Method | Data type | Resolves to | Encrypted | Ops | Operators |\n|--------|-----------|-------------|-----------|-----|-----------|\n| `submitMessages(args)` | `messages` | `Group.message` | ✓ | CDU | MEMBER \\| Sender \\| admin \\| dataview |\n\n### Read methods\n\n| Method | Read | Source | Fields |\n|--------|------|--------|--------|\n| `queryMessages()` | `messages` | `Group.message` | `body`, `outgoing` |\n| `queryProfiles()` | `profiles` | *dataview (cross_enclave)* | *all* |\n\n### Encryption\n\nData types `messages` are flagged `encrypt` in the app schema. The SDK calls `this._encrypt(dataType, args)` before submit. The default `_encrypt` is a pass-through.\n\nTo add real encryption (e.g. MLS for DM), subclass and override:\n\n```js\nclass EncryptedGroupSdk extends GroupSdk {\n  async _encrypt(dataType, args) {\n    // produce ciphertext for `args`\n    return { ciphertext: /* ... */ }\n  }\n}\n```\n\n## Composition\n\n- **Enclaves**: `Group`, `Personal`\n- **tableMap**: `messages` → `message`\n- **encrypt**: `messages`\n- **derived views**: `members`, `pending`, `my_instances`, `active_instance`\n\n## See also\n\n- [`cli.json`](./cli.json) — full app metadata + fuzz contract\n- [`skill/SKILL.md`](./skill/SKILL.md) — Claude Code skill bundle (install via `enc skill install group`)\n- `@enc-protocol/cli-sdk-base` — base class (`AppSdk`, `AppClient`, `DataView`)\n","readmeFilename":"README.md","_id":"@enc-protocol/group-cli@0.4.2","_nodeVersion":"26.1.0","_npmVersion":"11.13.0","dist":{"tarball":"https://npm-registry.ocrybit.workers.dev/@enc-protocol/group-cli/-/@enc-protocol/group-cli-0.4.2.tgz","shasum":"eb0a05ccb75391795b057983d1ad88c54b0d4cab","integrity":"sha512-nZZJbVAurwbZstMm2VXuUTw2YuE1x0z/g2IUtm5qa6DqhwlvCngLhc2y2cmMbyavQUxE2Zh9Er35SRRmJEOq1A=="}},"0.3.2-local":{"name":"@enc-protocol/group-cli","version":"0.3.2-local","type":"module","main":"sdk.mjs","exports":{".":"./sdk.mjs","./sdk.mjs":"./sdk.mjs"},"dependencies":{"@enc-protocol/cli-sdk-base":"^0.3.1"},"readme":"# @enc-protocol/group-cli\n\nPer-app SDK for the `group` app on ENC Protocol. Enclaves: Group, Personal.\n\n> Auto-generated by `lib/codegen/readme-codegen.mjs` from `apps/group/{app,schema}.json`. Do not hand-edit — regenerate via `enc gen readme group`.\n\n## Install\n\n### Recommended — via the `enc` CLI\n\n```bash\n# Install the global enc CLI once (any project)\nnpm install -g @enc-protocol/cli --registry https://npm-registry.ocrybit.workers.dev/\n\n# Install the skill into the current project (.claude/commands/group.md)\nenc skill add group\n```\n\nThe skill is the recommended consumption surface for Claude Code — adds an `/enc group` slash command. The skill package is published as `@enc-protocol/skill-group`.\n\n### Programmatic — for direct SDK use\n\n```bash\necho \"@enc-protocol:registry=https://npm-registry.ocrybit.workers.dev/\" >> .npmrc\nnpm install @enc-protocol/group-cli\n```\n\n## Quick example\n\n```js\nimport { GroupSdk } from '@enc-protocol/group-cli'\n\nconst sdk = new GroupSdk({ mode: 'cf', nodeUrl: process.env.NODE_URL })\nawait sdk.init()\nawait sdk.submitMessages({\"message_draft\":\"example\"})\nconst events = await sdk.queryMessages()\n```\n\n## API reference\n\n### `new GroupSdk(opts)`\n\nConstructor. Accepts:\n\n| Option | Type | Description |\n|--------|------|-------------|\n| `mode` | `'mem' \\| 'cf'` | Backend: in-process mem or HTTP cf |\n| `identity` | `Identity` | Required for cf mode (signing keypair) |\n| `nodeUrl` | `string` | cf-mode node URL (or set `NODE_URL` env) |\n| `repoRoot` | `string` | Path to repo root for finding `apps/<id>/` and `enclaves/<Name>.json` (defaults to package location) |\n| `encHome` | `string` | Optional state directory (defaults to `~/.enc`) |\n\n### `async init()`\n\nInitialize the SDK: load app definition, register all 2 enclaves (Group, Personal), wire dataview, mint cf enclaves if needed.\n\n### Write methods\n\n| Method | Data type | Resolves to | Encrypted | Ops | Operators |\n|--------|-----------|-------------|-----------|-----|-----------|\n| `submitMessages(args)` | `messages` | `Group.message` | ✓ | CDU | MEMBER \\| Sender \\| admin \\| dataview |\n\n### Read methods\n\n| Method | Read | Source | Fields |\n|--------|------|--------|--------|\n| `queryMessages()` | `messages` | `Group.message` | `body`, `outgoing` |\n| `queryProfiles()` | `profiles` | *dataview (cross_enclave)* | *all* |\n\n### Encryption\n\nData types `messages` are flagged `encrypt` in the app schema. The SDK calls `this._encrypt(dataType, args)` before submit. The default `_encrypt` is a pass-through.\n\nTo add real encryption (e.g. MLS for DM), subclass and override:\n\n```js\nclass EncryptedGroupSdk extends GroupSdk {\n  async _encrypt(dataType, args) {\n    // produce ciphertext for `args`\n    return { ciphertext: /* ... */ }\n  }\n}\n```\n\n## Composition\n\n- **Enclaves**: `Group`, `Personal`\n- **tableMap**: `messages` → `message`\n- **encrypt**: `messages`\n- **derived views**: `members`, `pending`, `my_instances`, `active_instance`\n\n## See also\n\n- [`cli.json`](./cli.json) — full app metadata + fuzz contract\n- [`skill/SKILL.md`](./skill/SKILL.md) — Claude Code skill bundle (install via `enc skill install group`)\n- `@enc-protocol/cli-sdk-base` — base class (`AppSdk`, `AppClient`, `DataView`)\n","readmeFilename":"README.md","gitHead":"9d8f216d0d69913d9f915ddcdc914e183a2ea52a","_id":"@enc-protocol/group-cli@0.3.2-local","description":"Per-app SDK for the `group` app on ENC Protocol. Enclaves: Group, Personal.","_nodeVersion":"26.1.0","_npmVersion":"11.13.0","dist":{"tarball":"https://npm-registry.ocrybit.workers.dev/@enc-protocol/group-cli/-/@enc-protocol/group-cli-0.3.2-local.tgz","shasum":"08efb100da35e01c7389f7abd6bdb5d02f5cbc11","integrity":"sha512-JE7UiDcLkdH4HcLxLa/Wv1K+9AnJcQgCuqAlUdTr+0eI6ds6ysKpDSimfPgfKkBu+mWvawaALqwNTuz9m2qVTA=="}}},"time":{"created":"2026-05-14T14:59:27.488Z","modified":"2026-06-12T21:35:39.148Z","0.1.0":"2026-05-14T14:59:27.488Z","0.1.1":"2026-05-14T15:08:20.450Z","0.1.2":"2026-05-14T15:18:31.376Z","0.2.0":"2026-05-14T16:18:54.101Z","0.3.0":"2026-05-15T19:19:15.428Z","0.3.1":"2026-05-15T19:53:50.322Z","0.4.1":"2026-05-19T02:59:32.666Z","0.4.2":"2026-05-19T17:59:44.820Z","0.3.2-local":"2026-06-12T21:35:39.148Z"},"readme":"# @enc-protocol/group-cli\n\nPer-app SDK for the `group` app on ENC Protocol. Enclaves: Group, Personal.\n\n> Auto-generated by `lib/codegen/readme-codegen.mjs` from `apps/group/{app,schema}.json`. Do not hand-edit — regenerate via `enc gen readme group`.\n\n## Install\n\n### Recommended — via the `enc` CLI\n\n```bash\n# Install the global enc CLI once (any project)\nnpm install -g @enc-protocol/cli --registry https://npm-registry.ocrybit.workers.dev/\n\n# Install the skill into the current project (.claude/commands/group.md)\nenc skill add group\n```\n\nThe skill is the recommended consumption surface for Claude Code — adds an `/enc group` slash command. The skill package is published as `@enc-protocol/skill-group`.\n\n### Programmatic — for direct SDK use\n\n```bash\necho \"@enc-protocol:registry=https://npm-registry.ocrybit.workers.dev/\" >> .npmrc\nnpm install @enc-protocol/group-cli\n```\n\n## Quick example\n\n```js\nimport { GroupSdk } from '@enc-protocol/group-cli'\n\nconst sdk = new GroupSdk({ mode: 'cf', nodeUrl: process.env.NODE_URL })\nawait sdk.init()\nawait sdk.submitMessages({\"message_draft\":\"example\"})\nconst events = await sdk.queryMessages()\n```\n\n## API reference\n\n### `new GroupSdk(opts)`\n\nConstructor. Accepts:\n\n| Option | Type | Description |\n|--------|------|-------------|\n| `mode` | `'mem' \\| 'cf'` | Backend: in-process mem or HTTP cf |\n| `identity` | `Identity` | Required for cf mode (signing keypair) |\n| `nodeUrl` | `string` | cf-mode node URL (or set `NODE_URL` env) |\n| `repoRoot` | `string` | Path to repo root for finding `apps/<id>/` and `enclaves/<Name>.json` (defaults to package location) |\n| `encHome` | `string` | Optional state directory (defaults to `~/.enc`) |\n\n### `async init()`\n\nInitialize the SDK: load app definition, register all 2 enclaves (Group, Personal), wire dataview, mint cf enclaves if needed.\n\n### Write methods\n\n| Method | Data type | Resolves to | Encrypted | Ops | Operators |\n|--------|-----------|-------------|-----------|-----|-----------|\n| `submitMessages(args)` | `messages` | `Group.message` | ✓ | CDU | MEMBER \\| Sender \\| admin \\| dataview |\n\n### Read methods\n\n| Method | Read | Source | Fields |\n|--------|------|--------|--------|\n| `queryMessages()` | `messages` | `Group.message` | `body`, `outgoing` |\n| `queryProfiles()` | `profiles` | *dataview (cross_enclave)* | *all* |\n\n### Encryption\n\nData types `messages` are flagged `encrypt` in the app schema. The SDK calls `this._encrypt(dataType, args)` before submit. The default `_encrypt` is a pass-through.\n\nTo add real encryption (e.g. MLS for DM), subclass and override:\n\n```js\nclass EncryptedGroupSdk extends GroupSdk {\n  async _encrypt(dataType, args) {\n    // produce ciphertext for `args`\n    return { ciphertext: /* ... */ }\n  }\n}\n```\n\n## Composition\n\n- **Enclaves**: `Group`, `Personal`\n- **tableMap**: `messages` → `message`\n- **encrypt**: `messages`\n- **derived views**: `members`, `pending`, `my_instances`, `active_instance`\n\n## See also\n\n- [`cli.json`](./cli.json) — full app metadata + fuzz contract\n- [`skill/SKILL.md`](./skill/SKILL.md) — Claude Code skill bundle (install via `enc skill install group`)\n- `@enc-protocol/cli-sdk-base` — base class (`AppSdk`, `AppClient`, `DataView`)\n"}