@claudecollab/cli 0.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.
Files changed (34) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +109 -0
  3. package/package.json +36 -0
  4. package/packages/cli/bin/claude-share.js +1319 -0
  5. package/packages/cli/package.json +15 -0
  6. package/packages/cli/src/brain/card.js +157 -0
  7. package/packages/cli/src/brain/commands.js +122 -0
  8. package/packages/cli/src/brain/drafts.js +557 -0
  9. package/packages/cli/src/brain/gate.js +134 -0
  10. package/packages/cli/src/brain/knocks.js +27 -0
  11. package/packages/cli/src/brain/log.js +123 -0
  12. package/packages/cli/src/brain/queue.js +81 -0
  13. package/packages/cli/src/brain/state.js +245 -0
  14. package/packages/cli/src/hooks.js +243 -0
  15. package/packages/cli/src/invite.js +43 -0
  16. package/packages/cli/src/known-relays.js +66 -0
  17. package/packages/cli/src/pty.js +175 -0
  18. package/packages/cli/src/relay-client.js +271 -0
  19. package/packages/cli/src/renderer.js +230 -0
  20. package/packages/cli/src/screen-snapshot.js +139 -0
  21. package/packages/cli/src/term-chatter.js +89 -0
  22. package/packages/relay/auth.js +18 -0
  23. package/packages/relay/bin/serve.js +73 -0
  24. package/packages/relay/names.js +27 -0
  25. package/packages/relay/package.json +13 -0
  26. package/packages/relay/public/client.js +1553 -0
  27. package/packages/relay/public/index.html +110 -0
  28. package/packages/relay/public/style.css +952 -0
  29. package/packages/relay/rooms.js +149 -0
  30. package/packages/relay/server.js +652 -0
  31. package/packages/relay/web.js +334 -0
  32. package/packages/relay/wordlists.js +38 -0
  33. package/packages/shared/package.json +8 -0
  34. package/packages/shared/protocol.js +189 -0
@@ -0,0 +1,110 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover" />
6
+ <title>claudecollab</title>
7
+ <link rel="icon" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'><text y='14' font-size='14'>✦</text></svg>" />
8
+ <link rel="stylesheet" href="/assets/css/xterm.css" />
9
+ <link rel="stylesheet" href="/style.css" />
10
+ </head>
11
+ <body>
12
+ <!-- ── join / knock / waiting ─────────────────────────────────────────── -->
13
+ <section id="join" class="screen">
14
+ <div class="join-card">
15
+ <div class="brand"><span class="brand-text">✦ claudecollab</span></div>
16
+ <p class="tagline">Jump into a live Claude Code session — together.</p>
17
+
18
+ <form id="join-form" autocomplete="off">
19
+ <label class="field">
20
+ <span class="field-label">Room</span>
21
+ <div id="join-room" class="room-code" hidden></div>
22
+ <input id="code-input" class="text-input" type="text" placeholder="brave-otter" hidden />
23
+ </label>
24
+ <label class="field">
25
+ <span class="field-label">Your name</span>
26
+ <input id="name-input" class="text-input" type="text" maxlength="24" placeholder="e.g. sid" />
27
+ </label>
28
+ <!-- revealed only after the relay answers 'password' — open rooms never see it -->
29
+ <label id="pass-field" class="field" hidden>
30
+ <span class="field-label">Room password</span>
31
+ <input id="pass-input" class="text-input" type="password" maxlength="64" autocomplete="off" />
32
+ </label>
33
+ <button id="knock-btn" class="btn primary block" type="submit">Request to join</button>
34
+ <p id="join-status" class="join-status"></p>
35
+ </form>
36
+
37
+ <div id="waiting" class="waiting" hidden>
38
+ <div class="spinner" aria-hidden="true"></div>
39
+ <p id="waiting-text">Waiting for the host to let you in…</p>
40
+ </div>
41
+ </div>
42
+ </section>
43
+
44
+ <!-- ── removed: the host kicked you — the mirror is gone, full stop ────── -->
45
+ <section id="removed" class="screen" hidden>
46
+ <div class="removed-card">
47
+ <div class="removed-icon" aria-hidden="true">⊘</div>
48
+ <h1>You were removed from the room</h1>
49
+ <p>The host ended your access to this session.</p>
50
+ </div>
51
+ </section>
52
+
53
+ <!-- ── live session ───────────────────────────────────────────────────── -->
54
+ <section id="live" class="screen live" hidden>
55
+ <!-- one slim strip; everything administrative lives here (no sidebar) -->
56
+ <header id="topbar" class="topbar">
57
+ <span class="brand-text">✦ claudecollab</span>
58
+ <span class="sep"></span>
59
+ <span class="room">room <b id="sb-room">—</b></span>
60
+ <span id="avatars" class="avatars"></span>
61
+ <span id="sb-role" class="my-role"></span>
62
+ <span id="claude-chip" class="chip claude idle">idle</span>
63
+ <span class="top-spacer"></span>
64
+ <!-- addressed notices ("you can't …") live HERE, never over the terminal -->
65
+ <button id="toast" class="notice-chip" type="button" title="dismiss" hidden></button>
66
+ <span id="knocks" class="knocks"></span>
67
+ <button id="queue-chip" class="ctrl qchip" type="button" title="Prompts waiting for Claude" hidden></button>
68
+ <button id="new-draft" class="ctrl" type="button" title="Start a draft (or double-click the terminal)">+ draft</button>
69
+ <span id="host-controls" class="host-controls" hidden>
70
+ <button id="copy-invite" class="ctrl" type="button" title="Copy invite link"><span class="ico">⧉</span> Invite</button>
71
+ <button id="pause-btn" class="ctrl" type="button" title="Pause sharing"><span class="ico">⏸</span></button>
72
+ <button id="end-btn" class="ctrl end" type="button" title="End session"><span class="ico">■</span></button>
73
+ <span id="end-confirm" class="end-confirm" hidden></span>
74
+ </span>
75
+ </header>
76
+ <!-- queue popover: the attributed waiting line, opened from the header chip -->
77
+ <div id="queue-pop" class="popover queue-pop" hidden></div>
78
+
79
+ <!-- avatar click → role/kick popover (host) or identity card (guest) -->
80
+ <div id="popover" class="popover" hidden></div>
81
+
82
+ <div id="dc-banner" class="dc-banner" hidden>
83
+ <span>Disconnected from the room.</span>
84
+ <button id="dc-retry" class="btn tiny primary">Reconnect</button>
85
+ </div>
86
+
87
+ <main class="workspace">
88
+ <div id="stage">
89
+ <div id="term"></div>
90
+ <div id="cursors" aria-hidden="true"></div>
91
+ <!-- floating draft boxes live INSIDE the terminal surface -->
92
+ <div id="drafts" class="overlays"></div>
93
+ <div id="paused" class="paused-card" hidden>
94
+ <div class="paused-inner">
95
+ <div class="paused-icon">⏸</div>
96
+ <div>Sharing is paused</div>
97
+ <small>The host stepped away from the mirror for a moment.</small>
98
+ </div>
99
+ </div>
100
+ </div>
101
+ <!-- invisible key catcher: keystrokes land here and are mailed to the
102
+ brain; the floating draft boxes are the only visible composer -->
103
+ <textarea id="composer" class="composer" rows="1" spellcheck="false" autocomplete="off" aria-label="compose"></textarea>
104
+ </main>
105
+ </section>
106
+
107
+ <script src="/assets/lib/xterm.js"></script>
108
+ <script type="module" src="/client.js"></script>
109
+ </body>
110
+ </html>