@sharpee/channel-service 1.0.8 → 1.1.0
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.
- package/README.md +69 -0
- package/package.json +5 -5
package/README.md
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# @sharpee/channel-service
|
|
2
|
+
|
|
3
|
+
Universal channel-I/O wire producer for Sharpee surfaces (ADR-163).
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install @sharpee/channel-service
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Overview
|
|
12
|
+
|
|
13
|
+
- **Channels are the universal UI surface** (ADR-163) - channels carry all story-to-UI signals (text, status, media, layout) over a single packet stream; transport sits under channels.
|
|
14
|
+
- **`ChannelService`** - the in-process producer. It walks an `IChannelRegistry`, invokes each channel's `produce`, and emits wire packets. It runs wherever the engine runs (Node CLI, multi-user server, browser).
|
|
15
|
+
- **Capability-filtered manifest** - `buildManifest()` returns a `CmgtPacket` tailored to the client's `ClientCapabilities`; `build(...)` returns a per-turn `TurnPacket`.
|
|
16
|
+
- **Wire decoder** - `createDecoder` / `Decoder` enforce bootstrap ordering on the consuming side.
|
|
17
|
+
- **Consumer-side renderer** (ADR-165) - `Renderer` / `createRenderer` route decoded packets to per-channel renderers.
|
|
18
|
+
- **Domain-agnostic** - standard channel definitions (`main`, `prompt`, `score`, etc.) live in `@sharpee/stdlib`; channel and wire types are re-exported from `@sharpee/if-domain`, their canonical home.
|
|
19
|
+
|
|
20
|
+
## Usage
|
|
21
|
+
|
|
22
|
+
```typescript
|
|
23
|
+
import {
|
|
24
|
+
ChannelService,
|
|
25
|
+
createDecoder,
|
|
26
|
+
createRenderer,
|
|
27
|
+
renderToString,
|
|
28
|
+
flattenContent,
|
|
29
|
+
type IChannelRegistry,
|
|
30
|
+
type ClientCapabilities,
|
|
31
|
+
type TurnPacket,
|
|
32
|
+
} from '@sharpee/channel-service';
|
|
33
|
+
|
|
34
|
+
// Producer side (runs with the engine)
|
|
35
|
+
const service = new ChannelService(registry, capabilities);
|
|
36
|
+
const manifest = service.buildManifest(); // CmgtPacket
|
|
37
|
+
const packet: TurnPacket = service.build({ world, events, blocks, turn });
|
|
38
|
+
|
|
39
|
+
// Consumer side — decode, then render to channel surfaces
|
|
40
|
+
const decoder = createDecoder();
|
|
41
|
+
const decoded = decoder.decode(packet);
|
|
42
|
+
const renderer = createRenderer({ /* channel renderers */ });
|
|
43
|
+
renderer.apply(decoded);
|
|
44
|
+
|
|
45
|
+
// CLI / tooling — project an ITextBlock[] to a single string
|
|
46
|
+
const text = renderToString(blocks);
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## Key Exports
|
|
50
|
+
|
|
51
|
+
| Export | Side | Description |
|
|
52
|
+
|--------|------|-------------|
|
|
53
|
+
| `ChannelService`, `PROTOCOL_VERSION` | producer | Builds the manifest and per-turn packets |
|
|
54
|
+
| `createDecoder`, `Decoder`, `DecoderState` | consumer | Decodes the wire stream with bootstrap-order enforcement |
|
|
55
|
+
| `Renderer`, `createRenderer`, `createJsonTreeFallbackFactory` | consumer | Routes packets to per-channel renderers (ADR-165) |
|
|
56
|
+
| `renderToString`, `renderStatusLine` | tooling | Single-string projection of an `ITextBlock[]` |
|
|
57
|
+
| `flattenContent` | shared | Projects `TextContent` arrays to plain strings |
|
|
58
|
+
| `IOChannel`, `IChannelRegistry`, `ClientCapabilities`, `TurnPacket`, `CmgtPacket`, `HelloPacket`, `CommandPacket`, `WirePacket` | types | Channel and wire contracts (re-exported from `@sharpee/if-domain`) |
|
|
59
|
+
|
|
60
|
+
## Related Packages
|
|
61
|
+
|
|
62
|
+
- [@sharpee/if-domain](https://www.npmjs.com/package/@sharpee/if-domain) - Canonical channel and wire types
|
|
63
|
+
- [@sharpee/stdlib](https://www.npmjs.com/package/@sharpee/stdlib) - Standard channel definitions
|
|
64
|
+
- [@sharpee/text-blocks](https://www.npmjs.com/package/@sharpee/text-blocks) - `ITextBlock` / `IDecoration` interfaces
|
|
65
|
+
- [@sharpee/sharpee](https://www.npmjs.com/package/@sharpee/sharpee) - Full platform bundle
|
|
66
|
+
|
|
67
|
+
## License
|
|
68
|
+
|
|
69
|
+
MIT
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sharpee/channel-service",
|
|
3
|
-
"version": "1.0
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"description": "Channel-service platform — universal channel-I/O wire producer (ADR-163)",
|
|
5
5
|
"main": "./index.js",
|
|
6
6
|
"types": "./index.d.ts",
|
|
@@ -12,10 +12,10 @@
|
|
|
12
12
|
}
|
|
13
13
|
},
|
|
14
14
|
"dependencies": {
|
|
15
|
-
"@sharpee/core": "^1.0
|
|
16
|
-
"@sharpee/if-domain": "^1.0
|
|
17
|
-
"@sharpee/text-blocks": "^1.0
|
|
18
|
-
"@sharpee/world-model": "^1.0
|
|
15
|
+
"@sharpee/core": "^1.1.0",
|
|
16
|
+
"@sharpee/if-domain": "^1.1.0",
|
|
17
|
+
"@sharpee/text-blocks": "^1.1.0",
|
|
18
|
+
"@sharpee/world-model": "^1.1.0"
|
|
19
19
|
},
|
|
20
20
|
"keywords": [
|
|
21
21
|
"interactive-fiction",
|