pelican-cc 0.3.1 → 0.4.1

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 (55) hide show
  1. package/CHANGELOG.md +389 -0
  2. package/README.md +19 -13
  3. package/THIRD_PARTY_NOTICES +3899 -0
  4. package/dist/server/index.js +30129 -4542
  5. package/dist/server/index.js.map +4 -4
  6. package/dist/web/assets/Chat-B4LGOITk.js +101 -0
  7. package/dist/web/assets/Chat-B4LGOITk.js.br +0 -0
  8. package/dist/web/assets/Chat-B4LGOITk.js.gz +0 -0
  9. package/dist/web/assets/ModelSheet-C_-Ol1pH.js +1 -0
  10. package/dist/web/assets/ModelSheet-C_-Ol1pH.js.br +0 -0
  11. package/dist/web/assets/ModelSheet-C_-Ol1pH.js.gz +0 -0
  12. package/dist/web/assets/Settings-3SpX54gH.js +4 -0
  13. package/dist/web/assets/Settings-3SpX54gH.js.br +0 -0
  14. package/dist/web/assets/Settings-3SpX54gH.js.gz +0 -0
  15. package/dist/web/assets/Usage-iU-isUVI.js +1 -0
  16. package/dist/web/assets/Usage-iU-isUVI.js.br +0 -0
  17. package/dist/web/assets/Usage-iU-isUVI.js.gz +0 -0
  18. package/dist/web/assets/WorkspaceChanges-Cy5Xd2wL.js +1 -0
  19. package/dist/web/assets/WorkspaceChanges-Cy5Xd2wL.js.br +0 -0
  20. package/dist/web/assets/WorkspaceChanges-Cy5Xd2wL.js.gz +0 -0
  21. package/dist/web/assets/WorkspaceFiles-CqdNRA7k.js +1 -0
  22. package/dist/web/assets/WorkspaceFiles-CqdNRA7k.js.br +0 -0
  23. package/dist/web/assets/WorkspaceFiles-CqdNRA7k.js.gz +0 -0
  24. package/dist/web/assets/index-7XuVvu-3.css +2 -0
  25. package/dist/web/assets/index-7XuVvu-3.css.br +0 -0
  26. package/dist/web/assets/index-7XuVvu-3.css.gz +0 -0
  27. package/dist/web/assets/index-D6DDBXmr.js +61 -0
  28. package/dist/web/assets/index-D6DDBXmr.js.br +0 -0
  29. package/dist/web/assets/index-D6DDBXmr.js.gz +0 -0
  30. package/dist/web/assets/usage-EcOxb73D.js +1 -0
  31. package/dist/web/assets/usage-EcOxb73D.js.br +0 -0
  32. package/dist/web/assets/usage-EcOxb73D.js.gz +0 -0
  33. package/dist/web/index.html +2 -2
  34. package/dist/web/index.html.br +0 -0
  35. package/dist/web/index.html.gz +0 -0
  36. package/dist/web/sw.js +56 -14
  37. package/dist/web/sw.js.br +0 -0
  38. package/dist/web/sw.js.gz +0 -0
  39. package/package.json +9 -9
  40. package/dist/web/assets/Chat-DC8P9wgJ.js +0 -73
  41. package/dist/web/assets/Chat-DC8P9wgJ.js.br +0 -0
  42. package/dist/web/assets/Chat-DC8P9wgJ.js.gz +0 -0
  43. package/dist/web/assets/ModelSheet-DYv_cBVT.js +0 -1
  44. package/dist/web/assets/ModelSheet-DYv_cBVT.js.br +0 -0
  45. package/dist/web/assets/ModelSheet-DYv_cBVT.js.gz +0 -0
  46. package/dist/web/assets/Settings-Bmvthzji.js +0 -3
  47. package/dist/web/assets/Settings-Bmvthzji.js.br +0 -0
  48. package/dist/web/assets/Settings-Bmvthzji.js.gz +0 -0
  49. package/dist/web/assets/index-BFIIo7_h.css +0 -2
  50. package/dist/web/assets/index-BFIIo7_h.css.br +0 -0
  51. package/dist/web/assets/index-BFIIo7_h.css.gz +0 -0
  52. package/dist/web/assets/index-D0THzVL2.js +0 -30
  53. package/dist/web/assets/index-D0THzVL2.js.br +0 -0
  54. package/dist/web/assets/index-D0THzVL2.js.gz +0 -0
  55. package/npm-shrinkwrap.json +0 -6710
package/CHANGELOG.md CHANGED
@@ -1,5 +1,394 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.4.1
4
+
5
+ Pinned sessions and the files Claude sends you, as in Claude Desktop; approvals that show what a
6
+ command hides; and what the reviews of 0.4.0 left.
7
+
8
+ ### Highlights
9
+
10
+ - **Pinned sessions, as in Claude Desktop.** On a phone, a short swipe left on a row shows Pin
11
+ (Unpin on a pinned row) beside Archive, Archive at the edge as in Mail; a swipe all the way across
12
+ archives, with Undo, as before. On a computer the pin sits beside Archive when you point at a row,
13
+ and Pin is in the session menu; in the list, Undo shows for five seconds. A row takes no swipe
14
+ right, which is Safari's Back, nor one that starts at the very edge of the screen. Pinned sessions
15
+ lead the list under Pinned, grouped by time or by project, and under their project's filter, each
16
+ with its status (Working, Needs you, tasks) and its earlier runs. Pins are Pelican's own, kept on
17
+ the computer for all your browsers: a session pinned in Claude Desktop is not pinned here, and
18
+ Desktop's pins are left alone. Archiving a session unpins it.
19
+ - **Files Claude sends you, as in Claude Desktop.** In the sessions Pelican runs, Claude can send
20
+ you files (Claude Code's SendUserFile): Pelican now tells Claude Code it shows them, the way
21
+ Claude Code expects of an app that does, which turns that tool on and nothing else. Before, the
22
+ call failed with "SendUserFile is still listed for this conversation but is switched off in this
23
+ session right now". A file shows where Claude sent it, as it is sent and after a reload, read
24
+ from where Claude Code delivered it, under the words Claude sends with it, which read as a reply
25
+ does, Markdown and all: pictures in place, side by side at their own size when they come alone and
26
+ as small squares beside other files, larger on a tap; a video or a sound in a player, a part at a
27
+ time, so it plays in Safari too; a page or an SVG as the still preview, with Run; text to read,
28
+ Markdown as it reads, folded when long; a PDF in your browser's own viewer, in a tab of its own;
29
+ anything else as a card to download, with its type, name and size. A file Claude meant you to
30
+ save stays a card until you open it. While the call runs its step says "Sending file", and
31
+ "Failed to send" if it fails, in Claude Desktop's words, and sent files are never folded away
32
+ among steps. Asked to send one from outside the session's folder, the approval says "Claude wants
33
+ to send you a file" and lists it, instead of the call's raw input.
34
+
35
+ ### Fixes
36
+
37
+ - `npm install -g pelican-cc` installs Claude Code for this computer alone, about 150 MB to
38
+ download: from the package's npm-shrinkwrap.json, npm installed it for all eight platforms, 1.2 GB
39
+ to download and 2.6 GB on disk, and in a project Pelican's own build and test tools too. The
40
+ packages Pelican's server uses are built into it instead, as CI tested them, and the Agent SDK,
41
+ with the Claude Code it brings, stays pinned to one version. The package now ships
42
+ `THIRD_PARTY_NOTICES`: each package built into the server and the web app, with its version and
43
+ license in full, and, for web-push, which is under the MPL 2.0, that its source is its npm
44
+ package. It credits esbuild for the helper code it writes into the server, gives what rolldown's
45
+ runtime takes from others, and quotes the notices of others that files built in carry at their
46
+ top, such as path-browserify's in code of vfile's, which minifying leaves out. The build writes it
47
+ from what it puts in the bundles, and fails if one is missing.
48
+ - A file Claude sent that is no longer there, as many are in older sessions, says "No longer on
49
+ this computer" before you tap anything, the same for every type, with its name and size and
50
+ nothing to tap; one past 200 MB says it is larger than Pelican serves, and a text file that large
51
+ still shows its start. A browser tab that opens one anyway says so in a page, not in JSON.
52
+ - A character in a sent file's name that hides or turns text around shows as ⟨U+202E⟩, with the
53
+ approval's warning, on its card, in the step that sends it and in the name it is saved under: a
54
+ script named to read as a picture no longer does. A screenshot keeps the name macOS gave it.
55
+ - Files Claude sent in Claude Desktop show from Claude Code's record of what it delivered, so one
56
+ Claude named by a relative path shows too; a file Claude Code did not deliver never shows.
57
+ - An SVG file Claude writes shows in its own colors and fonts, as a browser shows it: the visuals'
58
+ styles repainted its text and boxes (a yellow box near-white, a white label near-black). A sent
59
+ picture too small for the download button in its corner has the button beside it.
60
+ - A download, of a file Claude sent or from Changes and files, stops at the size the file had when
61
+ you asked for it: one that grew meanwhile, such as a log still being written, went on past the
62
+ size it had announced, and past the 200 MB limit. One cut short meanwhile breaks the download off.
63
+ - A file whose extension names what every JavaScript object has, such as `.constructor`, opens as a
64
+ file: sent by Claude it failed with a server error, in Changes and files it showed as a broken
65
+ picture, and as an upload it would not open.
66
+ - On a computer, a row's buttons cut none of its words: the words under them fade out, and in a
67
+ compact row the project and time make room for them. From the keyboard, Pin, Unpin and Archive
68
+ leave focus on the session's row where it went, or on the next row when it leaves the list, and
69
+ Undo brings focus back to it; Archive used to drop it to the page.
70
+ - A compact row keeps a date on one line ("Oct 25", not "Oct" over "25"), and grouped by time the
71
+ list's headings say what they hold, Previous 7 days and Previous 30 days: "This month" held
72
+ October's sessions on 6 November.
73
+ - A session archived in 0.4.0 while pinned in 0.4.1 comes back unpinned when you unarchive it.
74
+ - A step Claude is still writing keeps its icon and its verb at their size beside a long command.
75
+ - A conversation shows its day above its first message too, and above the first prompt of each new
76
+ day, as Claude Desktop does: Today, Yesterday, or the weekday and date.
77
+ - A `!` command that is a command in backquotes, such as `` `grep x f` ``, takes exit code 1 as
78
+ an answer, as Claude Code does, not as a failure: where a command would start, Pelican reads a
79
+ backquote as Claude Code's parser does, after `;`, `|`, `if` or an assignment too.
80
+ - Beside the conversation on a computer, a file's Quote and Copy row ends level with Send now and
81
+ the message boxes; it sat 2px lower.
82
+ - An Agent call's steps come a page at a time, the newest first, with Show earlier, as a workflow
83
+ agent's do: a long subagent's transcript, tens of megabytes, no longer reaches the phone whole. A
84
+ page with no step in it, such as a long answer at the end, is read past, so the card counts the
85
+ steps it shows, never "Last 0 steps", and Show earlier always brings at least one more; a page
86
+ that cannot be read says why, and Show earlier asks again. A step too large to show says what was
87
+ left out of it, and the transcript is read only from the session's own folder.
88
+ - Behind a tunnel or a proxy that cannot reach Pelican, a 502, 503 or 504 shows the quiet "Can't
89
+ reach" line, which keeps trying, instead of the error; a conversation that could not load then
90
+ loads once the computer is in reach again, also while the live connection stayed up.
91
+ - Export as Markdown reads as the conversation does, but for a reply's single line breaks, which a
92
+ Markdown file joins, as GitHub does. A prompt is text, as you typed it: none of its Markdown takes
93
+ effect, so a ``` it opens no longer swallows the rest of the file, nor makes a line of `:--` a
94
+ table, and its quotes are quotes, a quote from a file its lines as code. A reply keeps to itself
95
+ in any reader (GitHub, VS Code's preview, the spec's own): a heading in it sits under the
96
+ speakers' (`##` becomes `####`), so none passes for "You" or "Claude"; its HTML is text, as the
97
+ conversation shows it, so none hides the turns after it; a picture is a link that names its site,
98
+ never loaded when the file is read; its links by reference are written with their addresses and
99
+ its footnotes under labels of its own, so two replies' `[^1]` are two footnotes and no reply
100
+ changes where another's links lead or what its footnotes say; and a code block it leaves open ends
101
+ with it. Where readers part ways on a reply (an autolink with a character one of them takes, an
102
+ address with a control character, `ftp://`, a table VS Code's preview finds under a fence or a
103
+ heading), it is written so that they read it alike. The files Claude sent are named under their
104
+ step, with the words Claude sent with them. An address that starts with http://, https://, ftp://
105
+ or www., and an email, in prompts and Claude Code's notes stay text, as code, where a reader would
106
+ link them. A text past 60,000 characters ends with "…", as the conversation shows it. The folder
107
+ is named as the app names it, from your home folder (`~/code/acme-web`), and a file a step reads,
108
+ edits or writes from the session's folder (`src/styles/theme.css`).
109
+
110
+ ### Security
111
+
112
+ - An approval shows the characters that show as nothing or turn text around, as `⟨U+E0078⟩`, and
113
+ warns of them: besides the zero-width and direction-changing ones, tags, a variation selector
114
+ after a letter or a run of them, fillers, soft hyphens, a carriage return, a code point not
115
+ assigned yet and the others Chrome draws as nothing or as a blank, so a command can no longer read
116
+ as `./build.sh` and run another file. The trust sheet, the line saying why Claude Code asks and a
117
+ sent file's name show them the same way.
118
+ - A space other than a plain one in a command shows as `⟨U+00A0⟩`, with the warning, unless Pelican
119
+ finds it in quotes, a heredoc's body or a comment: a shell takes it as part of a word, so `echo
120
+ done⟨U+00A0⟩# ; curl … | sh` read as a comment and ran curl, and `LC_ALL=C⟨U+00A0⟩cat ./setup.sh`
121
+ ran ./setup.sh. Pelican reads the command as bash, zsh, dash and macOS's bash 3.2 do, and the
122
+ scripts it hands a new shell: after `bash -c` or `ssh`, in a heredoc or pipe into `sh`, a script
123
+ it writes with a redirection or `tee` and then runs by its path, or by its name once it makes it a
124
+ program, or that runs on its own as a git hook or as a file a shell reads as it starts (what
125
+ BASH_ENV, ENV or `--rcfile` names, a .zshenv). A command that uses what can run text later in its
126
+ own shell has every such space show, however the text is made (split across quotes, by a variable
127
+ or an escape): `eval`, `source`, `trap`, an alias in any form (after `command` or `builtin`, or
128
+ named by a variable), `read`, `declare`, `let`, `unset`, zsh's `set -A` and its functions array,
129
+ bash's `BASH_ALIASES`, a parameter flag such as zsh's `(e)` and `$~x` or bash's `@P`, `setopt` or
130
+ `set -o` with an option that changes how text reads, `test` or `[` with an operator a variable may
131
+ give (`-v`), `at` and `crontab`, a command whose name Pelican does not know, arithmetic on a
132
+ variable the command sets to anything but a number, and the like, each by its name in any case (a
133
+ Mac runs `READ` as /usr/bin/read); so does a ksh script with a `<<#` heredoc, a script or a
134
+ program run by a path that is not plain text (`bash "$t"`) or from a folder the command writes
135
+ into but for a file it wrote there, and one run by its path where the command unpacks, patches or
136
+ copies a folder. Quoted text with a substitution's start in it counts as in a word. Where it
137
+ cannot tell, every such space shows. The same goes for a Monitor's command and, in the trust
138
+ sheet, for a hook, a helper, a skill's command and a git filter; between the arguments of an MCP
139
+ server, or of a hook run without a shell, every such space shows. A script another program writes
140
+ by itself, as `sed`'s `w`, `sort -o`, `split`, perl, python or awk can, is not followed, nor a
141
+ string another program runs in a shell of its own, such as python's `os.system` or a Makefile's
142
+ recipe. A long command shows at once, read once, and reading one takes at most a fixed time and
143
+ memory: a command longer than 64 KB, or that would take more to read than a fixed budget, has
144
+ every such space show, as a tool's input with many commands and a trust sheet's items share one
145
+ such budget (`x=…; bash -c "$x $x …"` of 24 KB took gigabytes, and crashed the page with the
146
+ approval on it again after each reload).
147
+ - In a PowerShell command such a space shows as it is, as PowerShell takes it for a space, unless
148
+ the command hands a script to bash, sh, wsl or ssh, which read it otherwise: then every one shows,
149
+ with the warning; in the trust sheet too, for a hook PowerShell runs.
150
+ - Ordinary text on an approval shows as it is, with no warning, as in Claude Code and Claude
151
+ Desktop: an emoji whole, in a command too, with its style, keycap, skin tone, flag and the joiners
152
+ between its pictures (a joined emoji such as a technologist warned in 0.4.0); a space other than a
153
+ plain one in a path, in words or in a command's quotes, such as the narrow one macOS puts in a
154
+ screenshot's name or a full-width one between Chinese words in a commit message; Apple's logo.
155
+ Words keep the joiners Persian and the Indic scripts are written with: what Claude says a command
156
+ does, a web search, what an agent is to do, a task, a tool's message and the caption of a file it
157
+ asks to send (a web search in Sinhala or Persian warned).
158
+ - The trust sheet lists a hook's arguments: a hook run without a shell (with `args`) showed only its
159
+ program.
160
+ - The trust sheet reads a folder's files as Claude Code reads them. A `.mcp.json` in a folder that
161
+ holds the repository was not read, though Claude Code reads one from every folder up to the file
162
+ system's top and starts its servers with the session: with `outer/.mcp.json` above the repository
163
+ `outer/repo`, a session there started with nothing asked, and the server ran. The folders above
164
+ the repository's top are now read for their `.mcp.json`, short of your home folder, whose files
165
+ are your own. A skill saved as `SKILL.MD`, which Claude Code opens on a Mac as `SKILL.md`, listed
166
+ nothing, nor did a command or an agent more than ten folders down, which Claude Code finds at any
167
+ depth: such a folder is now named above the list. A `.claude/settings.json` or `.mcp.json` saved
168
+ with a byte-order mark, as Windows' Notepad saves it, or as UTF-16, listed nothing, so the folder
169
+ was not asked about and Claude Code started with its hooks and servers; one Pelican cannot read as
170
+ JSON is listed by its name. A skill's, command's or agent's frontmatter whose lines end with a
171
+ carriage return alone, which Claude Code's YAML breaks at, hid its allowed-tools and hooks, and a
172
+ line separator (U+2028) on a key's line, which it reads as text, the key. A hook's or a server's
173
+ YAML shows with its lines as written, so a second line that runs curl no longer reads as part of a
174
+ `#` comment on the first, and the sheet says where an escape such as `\n` reads otherwise than it
175
+ is written. A folder's files are read in time that grows with their size, not with its square: in
176
+ 0.4.0, a skill whose frontmatter was 480 KB of list items naming a power held the server for half
177
+ a minute, a command of a megabyte whose ```! block of blank lines never ends for four minutes, and
178
+ a skill of 1.1 MB with a line separator after a line of keys for a minute, after which the folder
179
+ counted as bringing nothing. The sheet lists from a file up to 200 items and 256 KB of them as it
180
+ shows them, and from a folder up to 1,000 and 1 MB, reading up to 32 MB of its files, more than
181
+ any project brings. An item it warns of, and Pelican's own word on what it could not read, are
182
+ always kept, so no number of harmless items leaves one out, and what the repository's git config
183
+ runs is read and listed whatever the folder's other files bring. Past that the sheet names, above
184
+ the list and in red, the first three files it shows part of and how many more, and the folder is
185
+ asked about as before, also where it lists nothing. A hook whose type or arguments are nested too
186
+ deep to read shows as one Pelican cannot read, where the request failed and nothing started.
187
+ - A notification keeps a flag made of tags only for England, Scotland and Wales, the three Unicode
188
+ recommends; other tags after a black flag, which can spell anything unseen, are left out. The
189
+ repository's check for hidden characters holds the docs to the same three.
190
+
191
+ ### Site, docs and project
192
+
193
+ - The demo, and the live demo on the website, have a pinned session and a file Claude sent: in "Try
194
+ the dark theme on my phone", a screenshot of the settings page in dark. Export as Markdown
195
+ downloads the session in the live demo too, where it fetched nothing, its folder named
196
+ `~/code/acme-web` as the demo shows it, not by where the site was built.
197
+ - The docs say what the install takes: about 150 MB to download, about 400 MB on disk.
198
+ - The tests pass in any order, at any time of day, and hold on a busy computer: each starts from a
199
+ state of its own, a page's tests wait up to 3 seconds for what they look for, and those that
200
+ start a shell or Pelican give it time to start and leave nothing running when they fail. CI checks
201
+ that an install brings one Claude Code, and the smoke test that Export as Markdown downloads.
202
+
203
+ ## 0.4.0
204
+
205
+ Files, changes and side chats as in Claude Desktop, workflows and `!` commands you can watch, and
206
+ your usage from every app.
207
+
208
+ ### Highlights
209
+
210
+ - **Changes and files.** See what each turn changed (T1, T2…, numbered and counted as Claude
211
+ Code's `/diff` does until a compaction, from its own record, so also outside git), what is
212
+ uncommitted, or everything since your branch split from main, with diffs, and Rewind code where
213
+ Claude Code kept a checkpoint. Search the folder by name or in the text, and read a file with
214
+ line numbers, Markdown and HTML previewed. A file a step names, or a `path:line` in a reply,
215
+ opens at its line, and under a turn that edited files "3 files changed" opens them. On a phone
216
+ it is a view of its own that the back gesture steps through; on a computer it sits beside the
217
+ conversation from 1024px wide.
218
+ - **Side chats.** `/btw`, Cmd/Ctrl+; or Side chat in the session menu asks something on the side,
219
+ as in Claude Desktop. Claude answers from a read-only copy of the session (Read, Grep and Glob,
220
+ no MCP servers, never Bypass), and is told so with each question, as in Desktop. Nothing goes
221
+ back to the session, which keeps working. It sits beside the conversation from 1024px wide,
222
+ taking turns with Changes and files, and is a sheet on a phone. Side chats are Claude Code
223
+ sessions titled "Side chat", kept out of the session list (List options > Side chats shows them),
224
+ and continue in the CLI and Desktop; opened from the list, one keeps its box for questions only.
225
+ - **Quote.** Select text in a reply, a step's output or a file and tap Quote. The quote waits
226
+ above the message box with your draft and goes above your words as a `>` quote; lines of a file
227
+ carry where they are, as `src/app.ts:7-8`.
228
+ - **Live `!` commands.** Output as it comes, with Stop, for up to 30 minutes. When a command ends,
229
+ Claude answers it, as in the CLI, unless `respondToBashCommands` is false. Commands are written
230
+ the way Claude Code writes them, so the terminal and Desktop show Pelican's, and Pelican shows
231
+ theirs.
232
+ - **Usage and activity.** Settings > Usage and activity shows your Claude Code usage on this
233
+ computer, from every app: tokens of each kind over 7 days, 30 days or all time, per day,
234
+ sessions, active days and streaks, and where they went by project, model, app and session, with
235
+ a few highlights. On a plan its limits are at the top; on an API key or a provider, the cost
236
+ Claude Code estimates. Each reply counts once, also when it was copied into a side chat or a
237
+ branch; Claude Code's `/stats` counts each content block, so its totals are higher. The session
238
+ menu shows what that session used.
239
+ - **Workflows.** A workflow (Claude Code's Workflow tool) shows as a card, as Claude Code shows
240
+ one, instead of its script's first line: its name, Running or how it ended with its agents and
241
+ tokens, its phases one a line (Review · 3 of 5 done) opening into their agents and each agent's
242
+ steps, the script and the result. It is live, with Stop, in sessions Pelican runs, and read from
243
+ the run's folder for other apps'; its end, also one that came while Claude worked (those were
244
+ lost), leads back to the card. Asked to run one, the approval shows its phases, the args its
245
+ script runs with and the file it runs.
246
+
247
+ ### Changes in behavior
248
+
249
+ - Line comments go with your next message in the session they were written in, before your words,
250
+ as in Claude Desktop, or on their own with Cmd/Ctrl+Enter, instead of Add to message. They are
251
+ kept across reloads and forgotten on sign-out.
252
+ - Transcript views are Claude Desktop's: Normal, Thinking and Verbose, and Ctrl+O steps through
253
+ them. Thinking shows in a session's menu once Claude has thought there. A session set to Summary
254
+ opens in Normal.
255
+ - A `!` command may run 30 minutes instead of two, and Claude answers it when it ends, which is a
256
+ turn like a prompt. A command you stop gets no answer, and one still running when Pelican stops
257
+ gets up to 15 seconds to tidy up, then ends with it; Ctrl+C again ends it at once. Under launchd
258
+ it gets what the login item leaves: `pelican service install` now asks launchd for 20 seconds,
259
+ where it gave 5.
260
+ - Claude gets a `!` command's output as Claude Code's bash mode gives it, in the record Claude
261
+ Code writes for the same output: stdout and stderr together in the order they were written, as
262
+ much as Claude Code reads back of it, 30,000 bytes or what `bashOutputMaxChars` sets (where that
263
+ is unset, BASH_MAX_OUTPUT_LENGTH, 1 to 150,000), instead of up to 200,000 characters of each. A
264
+ failed one is cut there. One that went well and printed more is saved in the session's
265
+ `tool-results` folder, where Claude Code saves one, up to 64MB, and Claude gets its start and
266
+ where it is; so is one whose text is longer than Claude gets inline (30,000 characters, or what
267
+ `bashOutputMaxChars` sets). Exit code 1 from grep, diff, test or find is an answer, not a
268
+ failure, when that command is the line's last statement as Claude Code's parser reads it (not
269
+ in a subshell or a `{ }` group; a comment is none). The record no longer adds the exit code, or
270
+ that something runs on in the background, as Claude Code's adds neither.
271
+ - What Claude changes in answer to a `!` command is that command's turn in Changes, as in `/diff`;
272
+ a message of files alone starts a turn, a picture sent without words none, and a new file's
273
+ lines count as `/diff` counts them. After a compaction `/diff` numbers from 1 again, and it reads
274
+ only the last 4,096 messages, so in a longer stretch its T1 is a later turn; Pelican, which shows
275
+ every turn, counts on from the first.
276
+ - A renamed file's diff shows the rename and what changed in it, instead of the whole file as new;
277
+ one renamed whole says "Renamed from …, unchanged".
278
+ - Push and Create PR, on the branch line, show only where the repository has a remote with an
279
+ address, not one that only a system or managed git config names (a fetch line for every
280
+ repository).
281
+ - Changes and files docks from 1024px wide instead of 1440px; below 1280px the session list folds
282
+ away while it is open, and Cmd/Ctrl+K brings it back.
283
+ - Cmd/Ctrl+\ closes Changes and files when pressed in it, as it closes the side chat and as Close
284
+ pane does in Claude Desktop; closed, the pane gives the keys to the button that opens it.
285
+ - The keyboard shortcuts (Cmd/Ctrl+/) list Changes and files (Cmd/Ctrl+Shift+D), Close pane
286
+ (Cmd/Ctrl+\) and Send comments (Cmd/Ctrl+Enter), and call Ctrl+O Transcript view.
287
+ - Commit, Push and Create PR, on the branch line, put a request to Claude in the message box, so
288
+ your rules, hooks and attribution apply. Pelican runs no git that changes anything.
289
+
290
+ ### Sessions and the list
291
+
292
+ - Claude Desktop's side chats stay out of the list also once Claude Code has given them the
293
+ session's title again, as it does when their Claude exits; most showed as more sessions with
294
+ that title.
295
+
296
+ ### The conversation
297
+
298
+ - An approval says Claude's few words on a command once, also when Claude Code passes them as its
299
+ own line too.
300
+ - A failed request at the end of the conversation offers Retry, which sends the prompt again with
301
+ its files, or Compact when the conversation is too long.
302
+ - Scheduled check-ins have Cancel, which asks Claude to cancel them.
303
+ - An MCP server that needs you to sign in says where: `claude mcp login <name>` in a terminal on
304
+ the computer, or claude.ai's connectors page.
305
+ - Approval notifications have Allow and Deny where the device shows buttons on notifications
306
+ (Chrome on a computer or Android), for a command a notification shows whole: printable ASCII with
307
+ one space between words, on one line, short enough for two lines of the narrowest notification
308
+ (about 50 characters, fewer when they are wide), and on Android, whose pop-up shows one line
309
+ beside the buttons, for that one line (about 20). A notification shows the command itself, not
310
+ Claude's description of it; edits, other tools, other commands, questions and plans open the
311
+ session.
312
+ - Notifications and check-ins keep emoji whole, also those made of several pictures, and still
313
+ leave out characters that hide text or turn it around, now also from a notification's title, the
314
+ session's. Their text is cut between characters as they show, and sooner where those hold many
315
+ code points (one letter can carry any number of accents), so a notification stays within the
316
+ 4 KB a push service carries.
317
+ - Export as Markdown has the conversation as it shows here: `!` and `/` commands as typed, as
318
+ code, with their output; the files and pictures sent with a prompt; Claude Code's own lines,
319
+ such as a background task's note, Interrupted, a failed request (naming the computer, as the
320
+ conversation does) or a hook's word, and a command that failed marked so; and none of
321
+ the tags, notes and summaries Claude Code and Pelican add for Claude, such as a side chat's note
322
+ with each question.
323
+ - The session menu shows the session's tokens, the share from the cache, its models and
324
+ compactions, and its cost where Claude Code counts one.
325
+ - A finished `!` command shows the end of its output, as it did while it ran; Show all shows the
326
+ start, and for one too long for the conversation what Claude Code saved of it (up to 64MB), from
327
+ that file, a page at a time, also in a branch that copied it. One that printed nothing shows the
328
+ command alone, and one that failed says Failed, or Stopped, where its live card said how it
329
+ ended; a record from before (Claude Code before 2.1.80, Pelican before 0.4) says so only where
330
+ it noted it. A running one's Stop is named for it.
331
+ - Claude's answer to a background task's note shows after the note, not in the reply before it.
332
+ - A message that does not go comes back to the message box, files and all, above anything typed
333
+ since. A `!` or `/` command comes back only into an empty box; with words or files there, it
334
+ waits above the box, Not sent, with Put back, as does a message, files and all, that comes back
335
+ while a command is typed. A `/` command goes with its words alone: files in the box wait for the
336
+ next message, as quotes do. What waits stays across reloads, and in a new session goes on with
337
+ the session once it starts, line comments too. Put back brings words and files back together, or, where they cannot
338
+ share the box, swaps them with what is there, which waits in its place, Set aside. One sent for
339
+ you (Send now, Compact, Retry, Cancel) leaves the box as it is.
340
+ - A path or "files changed" tapped while the side chat is open puts it away and opens Changes and
341
+ files.
342
+ - Side chat in the session menu leaves the keys in the side chat's box, which, beside the
343
+ conversation on a tablet, keeps clear of the home indicator, level with the conversation's.
344
+ Quotes that do not fit above the message box fade at its edge, and removing one with the
345
+ keyboard moves on to the next.
346
+ - A conversation opens without the code of Changes and files, which follows once it is up, and
347
+ Settings without the usage page.
348
+
349
+ ### Changes and files
350
+
351
+ - Search in files shows each hit where it is on its line, after a "…" when it is far along,
352
+ marked in amber.
353
+ - A file's Quote and Copy sit in a row of their own under the file, so nothing scrolls beneath
354
+ them.
355
+ - On a touch screen, search results and a step's file name are a finger tall, and the lowest row
356
+ of Changes and files (Quote and Copy, Send now, or the bar saying Claude needs you) keeps clear
357
+ of the home indicator, on a phone and beside the conversation on a tablet.
358
+ - Esc in a comment on a file gives the keys back to the file, as on a diff, so the next Esc closes
359
+ the view.
360
+
361
+ ### Security
362
+
363
+ - In a folder kept to your settings only, a `!` command runs git as Claude Code does there, with
364
+ none of the repository's own programs (its file-system monitor, filters or hooks folder).
365
+ - Changes and files reads only regular files inside the folder it is asked about (the session's),
366
+ links followed and checked. Downloads come as inert attachments. Search runs the ripgrep inside
367
+ Claude Code with no config, an empty environment, no git and no links followed.
368
+ - Show all on a long `!` command reads the file Claude Code saved its output in by that file's
369
+ name alone, from the session's own `tool-results` folder, or, for a record a branch copied, from
370
+ that of the session its row says it came from, when the record's path names that session: a
371
+ regular file reached through no link and with no other name.
372
+ - A page in Files runs its scripts only after Run, and again only after another Run once it has
373
+ been rewritten; a page opened straight from another file never starts running.
374
+ - A side chat only reads, asks for nothing, and takes no `/` or `!` commands. A side chat branched
375
+ from one of its questions is one too.
376
+ - Notification buttons go through the same checks as the page, and Allow is offered only for a
377
+ command a notification shows in full: printable ASCII with one space between words, on one line,
378
+ that fits two lines of the narrowest notification in its widest letters, and on Android, whose
379
+ pop-up shows one line beside the buttons, that one line.
380
+
381
+ ### Site, docs and project
382
+
383
+ - The demo's files have their text, and the files its conversations name open at the lines they
384
+ name.
385
+ - The docs cover Changes and files, side chats, quotes, live `!` commands, the views and the
386
+ usage page, and the coverage table moves side questions, views, quotes and Create PR to Yes.
387
+ - On a phone, the website leads with the two buttons and the install command, then shows the app
388
+ in the same phone frame as on a computer, whole when you scroll, instead of a cropped card.
389
+ - The browser smoke test checks the docked pane at 1024, 1280 and 1440px and the side chat pane at
390
+ 1024px, where it asks a question, and opens older sessions at one size only, to keep CI quick.
391
+
3
392
  ## 0.3.1
4
393
 
5
394
  - New sessions start at High effort until you pick another in Settings (New sessions start with >
package/README.md CHANGED
@@ -44,9 +44,9 @@ pelican
44
44
  ```
45
45
 
46
46
  On the computer where you use Claude Code, with Node 22.12 or newer and Claude Code signed in, on
47
- macOS or Linux. `pelican` prints the link that signs this browser in. The install is about 150 MB,
48
- most of it the copy of Claude Code that the Agent SDK brings. The command is also called
49
- `pelican-cc`, for computers where Python's Pelican has `pelican`.
47
+ macOS or Linux. `pelican` prints the link that signs this browser in. The install is about 150 MB
48
+ to download and about 400 MB on disk, most of it the copy of Claude Code that the Agent SDK brings.
49
+ The command is also called `pelican-cc`, for computers where Python's Pelican has `pelican`.
50
50
 
51
51
  ## On your phone
52
52
 
@@ -66,18 +66,23 @@ The docs cover [an SSH tunnel or your own proxy](https://ki-seki.github.io/pelic
66
66
  every compaction. When another app is working on one, or waits for you there, Pelican says which
67
67
  app; once it is idle, continue it here.
68
68
  - **All of Claude Code.** Approvals with the diff, plans and questions, steer or queue while Claude
69
- works, `!` commands, `/` commands and skills, `@` files, every model and permission mode, rewind
70
- and branch, subagents and background tasks, MCP servers and usage limits.
71
- - **What Claude makes, in place.** Charts and diagrams Claude draws and pages it writes show in the
72
- conversation, as still pictures until you tap Run.
73
- - **The changes beside the chat.** Every changed file with its diff. Tap a line to comment, and
74
- your comments go into the next message.
69
+ works, side chats, `!` commands with their output live, `/` commands and skills, `@` files, every
70
+ model and permission mode, rewind and branch, subagents and background tasks, MCP servers.
71
+ - **What Claude makes, in place.** Charts and diagrams Claude draws, pages it writes and files it
72
+ sends you show in the conversation, as in Claude Desktop: pages as still pictures until you tap
73
+ Run, pictures side by side, videos and sounds in a player, a PDF in your browser's viewer,
74
+ anything else to download.
75
+ - **Changes and files, as in Claude Desktop.** What each turn changed, what is uncommitted, or
76
+ everything since your branch split, with diffs. Search and read the folder; a path in a reply
77
+ opens the file at its line. Comment on a line or quote it, and Create PR asks Claude.
78
+ - **Your usage, from every app.** Tokens, sessions and streaks by project, model and app, with your
79
+ plan's limits, or the cost Claude Code estimates on an API key.
75
80
  - **Made for a phone, good on a computer.** One hand, dictation, a notification when Claude needs
76
81
  you or finishes, and a Home Screen icon. On a wide screen, the list, the conversation and the
77
82
  changes sit side by side.
78
83
 
79
84
  <p align="center">
80
- <img src="https://raw.githubusercontent.com/Ki-Seki/pelican/main/docs/shots/tour.gif" width="320" alt="A tour of Pelican on a phone: a chart and a page Claude made, rendered in place; an edit waiting for approval with its diff; a session another app is running">
85
+ <img src="https://raw.githubusercontent.com/Ki-Seki/pelican/main/docs/shots/tour.gif" width="320" alt="A tour of Pelican on a phone: the list with a pinned session; a chart Claude drew, in place, and a page it wrote, run; an edit waiting for approval, and what changed; a screenshot Claude sent; a session Claude Desktop is running">
81
86
  </p>
82
87
 
83
88
  ## Compared with
@@ -101,8 +106,7 @@ Remote Control can answer a prompt waiting in your terminal; Pelican cannot. Mor
101
106
  Pelican runs Claude Code itself, so your settings, `CLAUDE.md`, hooks, skills, subagents and MCP
102
107
  servers work as they do in the terminal, and so does any login: a Claude plan, an API key, Bedrock,
103
108
  Google Cloud or Microsoft Foundry. What Pelican does not do: Remote Control, cloud sessions, a
104
- worktree for each new session, side questions (`/btw`), a terminal of its own, or editing files by
105
- hand. [The full table](https://ki-seki.github.io/pelican/docs.html#coverage) goes through Claude
109
+ worktree for each new session, a terminal of its own, or editing files by hand. [The full table](https://ki-seki.github.io/pelican/docs.html#coverage) goes through Claude
106
110
  Code's features one by one.
107
111
 
108
112
  ## Security
@@ -161,4 +165,6 @@ through [SECURITY.md](SECURITY.md).
161
165
 
162
166
  ## License
163
167
 
164
- [MIT](LICENSE). Pelican is an independent project, not made by or affiliated with Anthropic.
168
+ [MIT](LICENSE). Pelican is an independent project, not made by or affiliated with Anthropic. The
169
+ packages built into its server and web app are under their own licenses: `THIRD_PARTY_NOTICES`,
170
+ in the npm package, gives each with its license in full.