@jinion/cli 0.3.491 → 0.5.648

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 (45) hide show
  1. package/CHANGELOG.md +290 -0
  2. package/bin/jinion.js +12 -1
  3. package/dist/app/activity.js +4 -38
  4. package/dist/app/activity.js.map +1 -1
  5. package/dist/app/app.js +13 -5
  6. package/dist/app/app.js.map +1 -1
  7. package/dist/app/claude-notes.js +19 -0
  8. package/dist/app/claude-notes.js.map +1 -0
  9. package/dist/app/release-notes.js +20 -0
  10. package/dist/app/release-notes.js.map +1 -0
  11. package/dist/app/settings-file.js +7 -0
  12. package/dist/app/settings-file.js.map +1 -0
  13. package/dist/app/status-line.js +8 -2
  14. package/dist/app/status-line.js.map +1 -1
  15. package/dist/app/updates.js +17 -0
  16. package/dist/app/updates.js.map +1 -0
  17. package/dist/app/views.js +6 -0
  18. package/dist/app/views.js.map +1 -1
  19. package/dist/main.js +4 -2
  20. package/dist/main.js.map +1 -1
  21. package/dist/panels/map.js +80 -0
  22. package/dist/panels/map.js.map +1 -0
  23. package/dist/panels/mcp.js +93 -12
  24. package/dist/panels/mcp.js.map +1 -1
  25. package/dist/panels/onboarding/claude-setup-panel.js +68 -0
  26. package/dist/panels/onboarding/claude-setup-panel.js.map +1 -0
  27. package/dist/panels/release-notes.js +60 -0
  28. package/dist/panels/release-notes.js.map +1 -0
  29. package/dist/state/session.js +2 -0
  30. package/dist/state/session.js.map +1 -1
  31. package/dist/terminal/apple-terminal.js +1 -4
  32. package/dist/terminal/apple-terminal.js.map +1 -1
  33. package/dist/ui/banner.js +13 -1
  34. package/dist/ui/banner.js.map +1 -1
  35. package/dist/ui/entries/entry-view.js +1 -0
  36. package/dist/ui/entries/entry-view.js.map +1 -1
  37. package/dist/ui/entries/tools/tool-view.js +2 -1
  38. package/dist/ui/entries/tools/tool-view.js.map +1 -1
  39. package/dist/ui/use-map-overview.js +27 -0
  40. package/dist/ui/use-map-overview.js.map +1 -0
  41. package/dist/update/updater.js +68 -0
  42. package/dist/update/updater.js.map +1 -0
  43. package/dist/update/versions.js +31 -0
  44. package/dist/update/versions.js.map +1 -0
  45. package/package.json +5 -4
package/CHANGELOG.md ADDED
@@ -0,0 +1,290 @@
1
+ # @jinion/cli
2
+
3
+ ## 0.5.648
4
+
5
+ ### Minor Changes
6
+
7
+ - 09bb95a: Better looks where your project has none yet: before drawing a new look, Jinion looks at how strong products do it and tells you what it took from them, then draws each direction as a real page with care for type, spacing, color and every state, never as a description alone.
8
+ - 6cc5436: Directions you can see and pick: when Jinion offers you directions for a look, it shows each as a real page in a viewer of its own, at an address on your machine, with the rounds of the project beside it. Pick one there and Jinion gets it as your answer. Nothing is written in your project until you pick.
9
+
10
+ ### Patch Changes
11
+
12
+ - b3e20eb: Add an MCP server from /mcp with `a`, by the command that starts it or its address, and remove one you added with `d`; one added elsewhere says where to remove it.
13
+ - f1ff1d2: Sign out of an MCP server Jinion signed in to, or sign in to it again with another account: `o` and `l` in the terminal's /mcp, Sign out and Sign in again on the desktop's MCP page.
14
+ - 9bd428b: The agent checks what a turn wrote against the project map before its report, and writes one short report instead of two; the row reads "Checked against the project · 2 things, 1 fixed" and opens to each point in plain words.
15
+ - a6ef81a: /skill has the agent write a skill from what you describe: it drafts the name, when to use it and its steps, asks whether it is for this project or all of yours, and writes it with a tool of Jinion's own.
16
+ - Updated dependencies [aa9c76b]
17
+ - Updated dependencies [09bb95a]
18
+ - Updated dependencies [9a2c76f]
19
+ - Updated dependencies [3627168]
20
+ - Updated dependencies [09bb95a]
21
+ - Updated dependencies [40fb683]
22
+ - Updated dependencies [e19196f]
23
+ - Updated dependencies [6cc5436]
24
+ - Updated dependencies [17c56f0]
25
+ - Updated dependencies [a5fed4f]
26
+ - Updated dependencies [e352fe7]
27
+ - Updated dependencies [d18c198]
28
+ - Updated dependencies [8736a21]
29
+ - Updated dependencies [40a6192]
30
+ - Updated dependencies [c52ee0c]
31
+ - Updated dependencies [e1856e8]
32
+ - Updated dependencies [f1ff1d2]
33
+ - Updated dependencies [9bd428b]
34
+ - Updated dependencies [a4df04b]
35
+ - Updated dependencies [64c7e7d]
36
+ - Updated dependencies [70d5df3]
37
+ - Updated dependencies [a6ef81a]
38
+ - Updated dependencies [0ecc160]
39
+ - Updated dependencies [b5f03d9]
40
+ - Updated dependencies [f13abb0]
41
+ - @jinion/core@0.4.0
42
+ - @jinion/tui@0.0.7
43
+
44
+ ## 0.4.524
45
+
46
+ ### Minor Changes
47
+
48
+ - d7d4256: Bring your setup from Claude Code: onboarding's last step shows what already works in Jinion (Claude Code's login, skills, plugins, MCP servers), brings your notes in with one key or button, and says what stays behind. If you went through onboarding before, it shows once at your next start. A project with Claude Code notes offers them the first time it opens after that: in the terminal's banner, and on a new thread in the desktop app. The API gains `setup/claude`, `memory/import` and `setup/claude-done`.
49
+ - e313497: The CLI updates itself. While it is open it looks for a newer version a little after it starts and every four hours, installs it in the background into `~/.jinion/versions` without `sudo` and without touching the version running, and says `ready · restart to update` on the right of the status line; the next `jinion` runs it. Turn it off with `"autoUpdates": false` in `~/.jinion/settings.json` or `JINION_DISABLE_AUTOUPDATER=1`.
50
+ - 32eb0d4: See what Jinion read from your project, which the agent works from: what it is built with, how its code is written, how it looks and what its files offer each other. `/map` in the terminal, with a line of it in the banner; in the desktop app, a Project map page and a card on a new thread. Where the project's linter has no rule for a habit, Add the rules asks the agent to add them.
51
+ - e2d30c1: See what's new after an update. The desktop app opens What's new on the first start on a new version, with every version since the one you had, and keeps it in the account menu. The terminal says once in the banner that Jinion was updated, and `/release-notes` shows every version.
52
+
53
+ ### Patch Changes
54
+
55
+ - Updated dependencies [d7d4256]
56
+ - Updated dependencies [9e3b5d9]
57
+ - Updated dependencies [faddeff]
58
+ - Updated dependencies [32eb0d4]
59
+ - Updated dependencies [e2d30c1]
60
+ - @jinion/core@0.3.0
61
+
62
+ ## 0.3.491
63
+
64
+ ### Minor Changes
65
+
66
+ - 1ce40b6: Rate an answer and tell us what went wrong: the thumbs under an answer in the desktop app, `/feedback` in the CLI, with the conversation sent along only when you choose to.
67
+
68
+ ### Patch Changes
69
+
70
+ - fcc666b: Set how long the agent's answers run: Brief, Balanced or Detailed, from the next message and in every project. In the
71
+ terminal with `/answers`, in the desktop app under Settings, Personalization.
72
+ - 8b5af07: The agent explains at the level you show: short and technical when you are, plainer when you describe what you see,
73
+ and step by step, with what each step does and what you'll see, when you say you don't follow.
74
+ - 5b7fa6e: Debug mode, the agent that finds why something fails. It traces the problem through the code, adds diagnostics that
75
+ write to an evidence log Jinion keeps for the conversation, makes the problem happen or asks you to, and reports the
76
+ path, the evidence, the cause and what is still open before it fixes anything. `/debug <problem>` starts it, and
77
+ `shift+tab` and `/mode` reach it too, on Claude and on Codex.
78
+ - 4930b2a: Edit a message before it goes: `up` in an empty prompt takes back the steered messages the agent hasn't read yet, and
79
+ the queued ones, so the agent no longer gets them. `enter` steers with them again, or puts them back in the queue when
80
+ they were all queued, or sends them if the turn has ended meanwhile. A steered message comes back with Claude, not Codex.
81
+ - beffea8: Jinion now asks you to sign in before you start, with GitHub or with a 6-digit code sent to your email. You stay signed
82
+ in on your machine, also without a connection. See your account or sign out with `/profile` in the terminal, or under
83
+ Settings, Profile in the desktop app.
84
+ - 47b43a9: On a Mac, the prompt deletes a word with `option+backspace` and the line with `cmd+backspace`, and in Terminal.app Jinion
85
+ offers once to turn on Use Option as Meta key, which those keys need there; `/terminal-setup` does it any time. `/mcp`
86
+ signs in to Linear and Notion through their own servers, and no longer lists claude.ai connectors it can't sign in to.
87
+ - 64172ef: Jinion is invite-only during the beta: after signing in, a new account enters its invite code and answers a few
88
+ questions before Jinion opens, in the terminal and in the desktop app. Fast typing no longer drops keys in the prompt.
89
+ - e998c69: The spinner beside a running command or task no longer jumps in terminals whose font joins `[|]` into one glyph, such
90
+ as JetBrains Mono with ligatures on: its upright frame is now `│`.
91
+ - 0d25cdc: During the beta, Jinion sends how each turn went (how long it took, which model, whether it failed) and the errors it
92
+ hits, never your prompts, replies or code. Turn it off with `/telemetry off`, or under Settings, Profile, Telemetry in
93
+ the desktop app.
94
+ - 761d61a: What the Jinion team has to say shows on a new thread in the desktop app, until you dismiss it, and once under the banner in the terminal.
95
+ - 1e0cb5c: Each beta user has three invite codes to hand on, each letting one person in: under Settings, Profile in the desktop app, and in `/profile` in the terminal, with who joined with the ones used.
96
+ - Updated dependencies [fcc666b]
97
+ - Updated dependencies [8b5af07]
98
+ - Updated dependencies [5b7fa6e]
99
+ - Updated dependencies [4930b2a]
100
+ - Updated dependencies [1ce40b6]
101
+ - Updated dependencies [beffea8]
102
+ - Updated dependencies [47b43a9]
103
+ - Updated dependencies [64172ef]
104
+ - Updated dependencies [e998c69]
105
+ - Updated dependencies [0d25cdc]
106
+ - Updated dependencies [761d61a]
107
+ - Updated dependencies [7a00cb8]
108
+ - Updated dependencies [1e0cb5c]
109
+
110
+ ## 0.2.2
111
+
112
+ Sign in to MCP servers such as Linear and Notion without leaving Jinion.
113
+
114
+ - In `/mcp`, a server that shows `not signed in` gets `l`: press it and finish in the browser. If the browser doesn't
115
+ open, the link is shown to open by hand, and `Esc` gives up.
116
+ - With Claude, Jinion keeps the sign-in in `~/.jinion/mcp-logins.json`, readable only by you, and renews it before it
117
+ runs out, so a turn never stops halfway on an expired one. With Codex, Codex keeps it.
118
+ - The server connects from the next turn.
119
+
120
+ ## 0.2.1
121
+
122
+ Any file goes with a message, not only pictures, and the agent understands the recordings and videos among them.
123
+
124
+ - Drag a file into the terminal and it is attached: it shows in the prompt as `[File #1 report.pdf]`. A file of the
125
+ project stays its path, as before, unless it is a recording, a video, a PDF or a spreadsheet, which is read for the
126
+ agent first.
127
+ - A file is kept in a folder of the conversation under `~/.jinion/attachments`, out of your project. The agent is told
128
+ where each one is and reads it with its own tools. An Excel workbook also gets its sheets as CSV and a PDF its text,
129
+ so Codex reads them too.
130
+ - A recording is transcribed on your machine with Whisper, in about a hundred languages, each piece with its time;
131
+ nothing of it leaves the machine. The speech model, 574 MB, is downloaded the first time you attach a recording.
132
+ - A video becomes what is said in it and its frames, one each time the picture changes, such as a page opening or text
133
+ being typed, so the agent can follow a screen recording step by step.
134
+ - While a file is read, `reading: …` above the prompt says what is being done, and a message sent before it ends comes
135
+ back to send again. A file that can't be read is attached as it is, and the conversation says why.
136
+ - Recordings and videos are read with the `ffmpeg`, `ffprobe` and `whisper-cli` on your `PATH`.
137
+ - For clients of the API: `attachments/add` and `attachments/remove`, the session's `attachments` field, the ids a
138
+ message names in `attachments`, and `files/read` and `files/read-bytes` for a session's attachments.
139
+
140
+ ## 0.2.0
141
+
142
+ Jinion works on an interface as a design engineer, from a map of your project that it reads from the code and keeps up
143
+ to date by itself.
144
+
145
+ - The map holds what the project's files offer each other (components, hooks, functions, classes, types, constants,
146
+ design tokens and styles), how the project is written (how files are named, `interface` or `type`, named or default
147
+ exports), what it is built with, and how it looks: its tokens, the classes and style values its interface keeps to,
148
+ the colors written outside both. It reads JavaScript and TypeScript, Vue, Svelte and Astro components, React Native
149
+ style objects, Swift and SwiftUI, PHP and Blade, stylesheets and templates, and a file is read again only when it
150
+ changed. A conversation in a worktree reads the map of its own folder.
151
+ - The agent looks for a piece that already does the job before it writes a new one, and writes what it adds the way
152
+ the project is written.
153
+ - On an interface it builds from the project's own components, tokens and classes, says what it understood before a
154
+ new screen, and offers named directions to pick from where the project hasn't decided, such as the first screen of a
155
+ new project. A pick is saved to its notes and applied from then on.
156
+ - It looks at what it made: it takes a picture of a page with Chrome, Chromium, Edge or Brave on your machine, run
157
+ without a window, or of the iOS simulator's or the Android emulator's screen, at the width and in the color scheme
158
+ it wants to check.
159
+ - What a turn added is compared with the map before the turn is over: a piece the project already had, a file named
160
+ against the project's habit, a class or a color new to it. The agent puts it right, or tells you what is new and
161
+ why; what you asked for by name stays as you asked.
162
+ - Where your linter, Biome or ESLint, has no rule for one of the project's habits, the agent can offer to add the
163
+ rule, by its exact name.
164
+ - With `"describeMap": true` in `~/.jinion/settings.json`, the small model writes a sentence on what each piece does,
165
+ so one is found by what it does and not only by its name, and a new piece that does the job of one under another
166
+ name is caught as the turn ends. It is off by default, since it spends your plan's usage.
167
+
168
+ ## 0.1.2
169
+
170
+ ### Patch Changes
171
+
172
+ - Updated dependencies [e4b80d1]
173
+ - @jinion/core@0.0.13
174
+
175
+ ## 0.1.1
176
+
177
+ ### Patch Changes
178
+
179
+ - 468baeb: A folder with thousands of changed files no longer freezes the changes: the lines changed are counted in the
180
+ background, and again only once a file changes.
181
+ - Updated dependencies [468baeb]
182
+ - @jinion/core@0.0.12
183
+ - @jinion/tui@0.0.4
184
+
185
+ ## 0.1.0
186
+
187
+ ### Minor Changes
188
+
189
+ - ebe5ef4: Open conversations move from the row of tabs above the conversation to a column on the left, one per row, with a
190
+ spinner while one works and `?` while it waits on you. A click anywhere on a row goes to it. In a terminal narrower than
191
+ 100 columns the column keeps only each number and mark, and `ctrl+s` hides it and shows it again.
192
+ - ebe5ef4: A message sent while the agent works waits above the prompt until the agent reads it, as soon as its current step is
193
+ done, and then joins the conversation at that point. Before, it showed in the conversation at once, so it was hard to
194
+ tell when the agent picked it up. Works with Claude and Codex.
195
+
196
+ ### Patch Changes
197
+
198
+ - Updated dependencies [ebe5ef4]
199
+ - Updated dependencies [ebe5ef4]
200
+ - @jinion/tui@0.0.3
201
+ - @jinion/core@0.0.11
202
+
203
+ ## 0.0.11
204
+
205
+ ### Patch Changes
206
+
207
+ - Updated dependencies [4b9872f]
208
+ - @jinion/core@0.0.10
209
+
210
+ ## 0.0.10
211
+
212
+ ### Patch Changes
213
+
214
+ - Updated dependencies [b12cc63]
215
+ - @jinion/core@0.0.9
216
+
217
+ ## 0.0.9
218
+
219
+ ### Patch Changes
220
+
221
+ - Updated dependencies [86213a0]
222
+ - @jinion/core@0.0.8
223
+
224
+ ## 0.0.8
225
+
226
+ ### Patch Changes
227
+
228
+ - Updated dependencies [417f83d]
229
+ - @jinion/core@0.0.7
230
+
231
+ ## 0.0.7
232
+
233
+ ### Patch Changes
234
+
235
+ - Updated dependencies [ce193fb]
236
+ - @jinion/core@0.0.6
237
+
238
+ ## 0.0.6
239
+
240
+ ### Patch Changes
241
+
242
+ - 1a9e26e: Code in color, by its language: the diffs of edits and writes, the `/diff` panel and the code blocks in replies. The
243
+ diff keeps its added and removed backgrounds and the mark on what changed in a line.
244
+ - Updated dependencies [1a9e26e]
245
+ - @jinion/tui@0.0.2
246
+
247
+ ## 0.0.5
248
+
249
+ ### Patch Changes
250
+
251
+ - Updated dependencies [54b3f00]
252
+ - @jinion/core@0.0.5
253
+
254
+ ## 0.0.4
255
+
256
+ ### Patch Changes
257
+
258
+ - Updated dependencies [8f3d5aa]
259
+ - @jinion/core@0.0.4
260
+
261
+ ## 0.0.3
262
+
263
+ ### Patch Changes
264
+
265
+ - Updated dependencies [5bb5b0b]
266
+ - @jinion/core@0.0.3
267
+
268
+ ## 0.0.2
269
+
270
+ ### Patch Changes
271
+
272
+ - 8b6ce2e: The core starts from `@jinion/core/host`, takes clients over a message channel (`portTransport`), and reads a file in a
273
+ session's folder with `files/read`, all for the desktop app. The CLI works as before.
274
+ - Updated dependencies [8b6ce2e]
275
+ - @jinion/core@0.0.2
276
+
277
+ ## 0.0.1
278
+
279
+ The first version of Jinion, a coding agent for the terminal.
280
+
281
+ - Works with Claude, signed in with a claude.ai subscription, and with Codex, signed in with ChatGPT. `/model` lists
282
+ both; picking a model of the other hands the conversation over.
283
+ - Four permission modes: Manual, Accept edits, Plan and Auto, where a safety check stops actions beyond the request.
284
+ - Conversations in tabs, resumed with `/resume`, rewound to any message with the files put back, and each in a git
285
+ worktree of its own when worktrees are on.
286
+ - `/diff` and a card of what each turn changed, background tasks, subagents shown under the call that started them.
287
+ - Memory that carries over between conversations, project instructions, skills and MCP servers.
288
+ - `/usage`, `/stats`, `/context` and `/compact`, a status line built from segments, notifications when a turn ends.
289
+ - `jinion serve` runs the core without a screen, on a WebSocket or over stdio, and `jinion --attach` shows its
290
+ conversations.
package/bin/jinion.js CHANGED
@@ -1,4 +1,15 @@
1
1
  #!/usr/bin/env node
2
+ import { createRequire } from 'node:module';
3
+ import { pathToFileURL } from 'node:url';
4
+
2
5
  // React's development build is slower and prints warnings over the full-screen UI.
3
6
  process.env.NODE_ENV ??= 'production';
4
- await import('../dist/main.js');
7
+
8
+ const { version } = createRequire(import.meta.url)('../package.json');
9
+ const { fromNpm, newerInstalled } = await import('../dist/update/versions.js');
10
+
11
+ // A newer version the updater installed in ~/.jinion/versions runs instead of this one, so updating never needs sudo
12
+ // nor touches the files of a jinion still running.
13
+ const newer = fromNpm() ? newerInstalled(version) : undefined;
14
+
15
+ await import(newer ? pathToFileURL(newer).href : '../dist/main.js');
@@ -1,6 +1,5 @@
1
- import { clip } from '@jinion/core/lib/text';
1
+ import { activity as sharedActivity } from '@jinion/core/conversation/activity';
2
2
  const CONTEXT_WARNING = 0.2;
3
- const COMMAND_LENGTH = 60;
4
3
  export const hasWorkLeft = (todos) => todos.some((group) => group.items.some((item) => item.status !== 'done'));
5
4
  /** As in Claude Code, the share of context left until auto-compaction, once it draws near. */
6
5
  export function contextWarning({ contextTokens, compactAt }) {
@@ -9,42 +8,9 @@ export function contextWarning({ contextTokens, compactAt }) {
9
8
  const left = 1 - contextTokens / compactAt;
10
9
  return left <= CONTEXT_WARNING ? left : undefined;
11
10
  }
11
+ // Only the terminal app can send a running command to the background.
12
12
  export function activity(session, dialog, tasks) {
13
- if (dialog === 'permission' || dialog === 'plan')
14
- return 'Waiting for your approval';
15
- if (session.compacting)
16
- return 'Compacting the conversation';
17
- const last = session.entries.at(-1);
18
- if (last?.kind === 'thinking')
19
- return 'Thinking';
20
- if (last?.kind === 'text')
21
- return 'Writing';
22
- if (last?.kind === 'task')
23
- return 'Looking at the background task that ended';
24
- if (last?.kind === 'tool' && last.status === 'running') {
25
- if (last.run.name === 'ask')
26
- return 'Waiting for your answer';
27
- const hint = tasks.some((task) => task.foreground && task.status === 'running') ? ' · ctrl+b to run it in the background' : '';
28
- if (last.run.name === 'agent')
29
- return `A subagent is on it: ${last.run.input.description}${hint}`;
30
- return `Running ${runningName(last.run)}${hint}`;
31
- }
32
- return 'Working';
33
- }
34
- function runningName(run) {
35
- switch (run.name) {
36
- case 'bash':
37
- return clip(run.input.command, COMMAND_LENGTH);
38
- case 'other':
39
- return run.input.title;
40
- case 'mcp':
41
- return `${run.input.server}:${run.input.tool}`;
42
- case 'fetch':
43
- return `fetch: ${run.input.url}`;
44
- case 'search':
45
- return `web search: ${run.input.query}`;
46
- default:
47
- return run.name;
48
- }
13
+ const background = tasks.some((task) => task.foreground && task.status === 'running');
14
+ return sharedActivity(session, dialog, background ? ' · ctrl+b to run it in the background' : '');
49
15
  }
50
16
  //# sourceMappingURL=activity.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"activity.js","sourceRoot":"","sources":["../../src/app/activity.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAE7C,MAAM,eAAe,GAAG,GAAG,CAAC;AAC5B,MAAM,cAAc,GAAG,EAAE,CAAC;AAE1B,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,KAAkB,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC;AAE7H,8FAA8F;AAC9F,MAAM,UAAU,cAAc,CAAC,EAAE,aAAa,EAAE,SAAS,EAAS;IAChE,IAAI,CAAC,SAAS;QAAE,OAAO,SAAS,CAAC;IAEjC,MAAM,IAAI,GAAG,CAAC,GAAG,aAAa,GAAG,SAAS,CAAC;IAE3C,OAAO,IAAI,IAAI,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,OAAqB,EAAE,MAAgC,EAAE,KAAuB;IACvG,IAAI,MAAM,KAAK,YAAY,IAAI,MAAM,KAAK,MAAM;QAAE,OAAO,2BAA2B,CAAC;IACrF,IAAI,OAAO,CAAC,UAAU;QAAE,OAAO,6BAA6B,CAAC;IAE7D,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACpC,IAAI,IAAI,EAAE,IAAI,KAAK,UAAU;QAAE,OAAO,UAAU,CAAC;IACjD,IAAI,IAAI,EAAE,IAAI,KAAK,MAAM;QAAE,OAAO,SAAS,CAAC;IAC5C,IAAI,IAAI,EAAE,IAAI,KAAK,MAAM;QAAE,OAAO,2CAA2C,CAAC;IAE9E,IAAI,IAAI,EAAE,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QACvD,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,KAAK;YAAE,OAAO,yBAAyB,CAAC;QAE9D,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,uCAAuC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/H,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,OAAO;YAAE,OAAO,wBAAwB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,GAAG,IAAI,EAAE,CAAC;QAElG,OAAO,WAAW,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC;IACnD,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,WAAW,CAAC,GAAY;IAC/B,QAAQ,GAAG,CAAC,IAAI,EAAE,CAAC;QACjB,KAAK,MAAM;YACT,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;QACjD,KAAK,OAAO;YACV,OAAO,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC;QACzB,KAAK,KAAK;YACR,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QACjD,KAAK,OAAO;YACV,OAAO,UAAU,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QACnC,KAAK,QAAQ;YACX,OAAO,eAAe,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QAC1C;YACE,OAAO,GAAG,CAAC,IAAI,CAAC;IACpB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"activity.js","sourceRoot":"","sources":["../../src/app/activity.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,QAAQ,IAAI,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAEhF,MAAM,eAAe,GAAG,GAAG,CAAC;AAE5B,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,KAAkB,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC;AAE7H,8FAA8F;AAC9F,MAAM,UAAU,cAAc,CAAC,EAAE,aAAa,EAAE,SAAS,EAAS;IAChE,IAAI,CAAC,SAAS;QAAE,OAAO,SAAS,CAAC;IAEjC,MAAM,IAAI,GAAG,CAAC,GAAG,aAAa,GAAG,SAAS,CAAC;IAE3C,OAAO,IAAI,IAAI,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;AACpD,CAAC;AAED,sEAAsE;AACtE,MAAM,UAAU,QAAQ,CAAC,OAAqB,EAAE,MAAgC,EAAE,KAAuB;IACvG,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC;IAEtF,OAAO,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,uCAAuC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AACpG,CAAC"}
package/dist/app/app.js CHANGED
@@ -6,22 +6,26 @@ import { Provider, useAtomValue } from 'jotai';
6
6
  import { JinionClient } from '@jinion/core/api/client';
7
7
  import { inRunningTurn } from '@jinion/core/conversation/session';
8
8
  import { Attachments, AttachmentsContext } from '../prompt/attachments.js';
9
+ import { ClaudeSetupPanel } from '../panels/onboarding/claude-setup-panel.js';
9
10
  import { OnboardingPanel } from '../panels/onboarding/onboarding-panel.js';
10
11
  import { SignInPanel } from '../panels/sign-in/sign-in-panel.js';
11
- import { clientAtom, jinionUserAtom, sessionAtom, worktreeAtom } from '../state/session.js';
12
+ import { claudeSetupOfferedAtom, clientAtom, jinionUserAtom, sessionAtom, worktreeAtom } from '../state/session.js';
12
13
  import { Banner } from '../ui/banner.js';
13
14
  import { EntryView } from '../ui/entries/entry-view.js';
14
15
  import { ApiContext, createApi } from './api.js';
15
16
  import { Aside } from './aside.js';
16
17
  import { useAnnouncements } from './announcements.js';
18
+ import { useClaudeNotes } from './claude-notes.js';
17
19
  import { useDialogs } from './dialogs.js';
18
20
  import { useKeys } from './keys.js';
19
21
  import { PromptArea } from './prompt-area.js';
22
+ import { updatedAtom } from './release-notes.js';
20
23
  import { useSidebar } from './sidebar.js';
21
24
  import { StatusLine } from './status-line.js';
22
25
  import { useOpenView, useScreen } from './use-screen.js';
26
+ import { useUpdates } from './updates.js';
23
27
  /** The terminal app: a client of the core, drawing the session it shows once `initialize` answered. */
24
- export function App({ connect, version, attached, onLost, offerTerminalSetup }) {
28
+ export function App({ connect, version, attached, onLost, offerTerminalSetup, updated = false }) {
25
29
  const terminal = useTerminal();
26
30
  const tui = useApp();
27
31
  // The screen is made before the client it serves, and only reaches its store once the client is there.
@@ -35,6 +39,7 @@ export function App({ connect, version, attached, onLost, offerTerminalSetup })
35
39
  followAll: true,
36
40
  });
37
41
  created.store.set(clientAtom, created);
42
+ created.store.set(updatedAtom, updated);
38
43
  return created;
39
44
  });
40
45
  const [api, setApi] = useState();
@@ -65,17 +70,20 @@ function Ready({ api, offerTerminalSetup }) {
65
70
  }));
66
71
  return (_jsx(ApiContext.Provider, { value: api, children: _jsx(AttachmentsContext.Provider, { value: attachments, children: _jsx(SignedIn, { offerTerminalSetup: offerTerminalSetup }) }) }));
67
72
  }
68
- /** Jinion is used signed in to an active account: until then, the banner, and the sign-in or onboarding in the prompt's place. */
73
+ /** Jinion is used signed in to an active account: until then, the banner, and the sign-in or onboarding in the prompt's place, Claude Code's setup its last step. */
69
74
  function SignedIn({ offerTerminalSetup }) {
70
75
  const user = useAtomValue(jinionUserAtom);
71
- if (user?.activated)
76
+ const offered = useAtomValue(claudeSetupOfferedAtom);
77
+ if (user?.activated && offered)
72
78
  return _jsx(Layout, { offerTerminalSetup: offerTerminalSetup });
73
- return (_jsxs(Box, { flexDirection: "column", flexGrow: 1, children: [_jsx(Box, { flexDirection: "column", flexGrow: 1, children: _jsx(Banner, {}) }), _jsx(Box, { marginTop: 1, flexDirection: "column", children: user ? _jsx(OnboardingPanel, {}) : _jsx(SignInPanel, {}) })] }));
79
+ return (_jsxs(Box, { flexDirection: "column", flexGrow: 1, children: [_jsx(Box, { flexDirection: "column", flexGrow: 1, children: _jsx(Banner, {}) }), _jsx(Box, { marginTop: 1, flexDirection: "column", children: user?.activated ? _jsx(ClaudeSetupPanel, {}) : user ? _jsx(OnboardingPanel, {}) : _jsx(SignInPanel, {}) })] }));
74
80
  }
75
81
  function Layout({ offerTerminalSetup }) {
76
82
  useKeys();
77
83
  useDialogs();
78
84
  useAnnouncements();
85
+ useClaudeNotes();
86
+ useUpdates();
79
87
  const sidebar = useSidebar();
80
88
  const openView = useOpenView();
81
89
  useEffect(() => {
@@ -1 +1 @@
1
- {"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/app/app.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/app/app.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import { atom, useSetAtom } from 'jotai';
2
+ import { useEffect } from 'react';
3
+ import { useApi } from './api.js';
4
+ /** How many of Claude Code's notes this project has to bring in, which the banner says. */
5
+ export const claudeNotesAtom = atom(0);
6
+ /** The first time a project opens after onboarding, the banner offers its Claude Code notes, once. */
7
+ export function useClaudeNotes() {
8
+ const api = useApi();
9
+ const setNotes = useSetAtom(claudeNotesAtom);
10
+ useEffect(() => {
11
+ void api.request('setup/claude', { login: false }).then(({ projectOffered, notes }) => {
12
+ if (projectOffered)
13
+ return;
14
+ setNotes(notes.project);
15
+ api.act(api.request('setup/claude-done', {}));
16
+ }, () => { });
17
+ }, []);
18
+ }
19
+ //# sourceMappingURL=claude-notes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-notes.js","sourceRoot":"","sources":["../../src/app/claude-notes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,2FAA2F;AAC3F,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AAEvC,sGAAsG;AACtG,MAAM,UAAU,cAAc;IAC5B,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC;IACrB,MAAM,QAAQ,GAAG,UAAU,CAAC,eAAe,CAAC,CAAC;IAE7C,SAAS,CAAC,GAAG,EAAE;QACb,KAAK,GAAG,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,CACrD,CAAC,EAAE,cAAc,EAAE,KAAK,EAAE,EAAE,EAAE;YAC5B,IAAI,cAAc;gBAAE,OAAO;YAE3B,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACxB,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC,CAAC;QAChD,CAAC,EACD,GAAG,EAAE,GAAE,CAAC,CACT,CAAC;IACJ,CAAC,EAAE,EAAE,CAAC,CAAC;AACT,CAAC"}
@@ -0,0 +1,20 @@
1
+ import { readFileSync } from 'node:fs';
2
+ import { compareVersions, releasesOf } from '@jinion/core/lib/changelog';
3
+ import { readJson, updateJson } from '@jinion/core/lib/json-file';
4
+ import { atom } from 'jotai';
5
+ import { settingsFile } from './settings-file.js';
6
+ /** This run is the first on a version newer than the one before, which the banner says once. */
7
+ export const updatedAtom = atom(false);
8
+ /** Remembers the version too; a first start only remembers it, as there is nothing new to someone who just installed. */
9
+ export function updatedSinceLastRun(version) {
10
+ const seen = readJson(settingsFile(), {}).releaseNotesSeen;
11
+ if (seen === version)
12
+ return false;
13
+ updateJson(settingsFile(), {}, (current) => ({ ...current, releaseNotesSeen: version }));
14
+ return seen !== undefined && compareVersions(version, seen) > 0;
15
+ }
16
+ /** The CLI's own, which its package carries beside its code. */
17
+ export function cliReleases() {
18
+ return releasesOf(readFileSync(new URL('../../CHANGELOG.md', import.meta.url), 'utf8'));
19
+ }
20
+ //# sourceMappingURL=release-notes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"release-notes.js","sourceRoot":"","sources":["../../src/app/release-notes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACzE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,gGAAgG;AAChG,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;AAEvC,yHAAyH;AACzH,MAAM,UAAU,mBAAmB,CAAC,OAAe;IACjD,MAAM,IAAI,GAAG,QAAQ,CAAgC,YAAY,EAAE,EAAE,EAAE,CAAC,CAAC,gBAAgB,CAAC;IAC1F,IAAI,IAAI,KAAK,OAAO;QAAE,OAAO,KAAK,CAAC;IAEnC,UAAU,CAAS,YAAY,EAAE,EAAE,EAAE,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;IAEjG,OAAO,IAAI,KAAK,SAAS,IAAI,eAAe,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;AAClE,CAAC;AAED,gEAAgE;AAChE,MAAM,UAAU,WAAW;IACzB,OAAO,UAAU,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,oBAAoB,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;AAC1F,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { join } from 'node:path';
2
+ import { jinionHome } from '@jinion/core/lib/paths';
3
+ /** The user's settings file, where the app keeps a few keys of its own beside what the core keeps there. */
4
+ export function settingsFile() {
5
+ return join(jinionHome(), 'settings.json');
6
+ }
7
+ //# sourceMappingURL=settings-file.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings-file.js","sourceRoot":"","sources":["../../src/app/settings-file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEpD,4GAA4G;AAC5G,MAAM,UAAU,YAAY;IAC1B,OAAO,IAAI,CAAC,UAAU,EAAE,EAAE,eAAe,CAAC,CAAC;AAC7C,CAAC"}
@@ -1,7 +1,8 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { busyAtom } from '../state/session.js';
3
3
  import { useEffect } from 'react';
4
4
  import { StatusBar } from '@jinion/tui/chat';
5
+ import { Text, useTheme } from '@jinion/tui';
5
6
  import { useAtomValue, useSetAtom } from 'jotai';
6
7
  import { shownStatusItemsAtom } from '../status/items.js';
7
8
  import { gitStatusAtom, useNow, useStatusData } from '../status/data.js';
@@ -9,8 +10,11 @@ import { useGitStatus } from '../status/git.js';
9
10
  import { renderStatusLine } from '../status/line.js';
10
11
  import { findSegment } from '../status/segments/index.js';
11
12
  import { useWorkdir } from '../ui/use-workdir.js';
13
+ import { updateReadyAtom } from './updates.js';
12
14
  export function StatusLine() {
15
+ const theme = useTheme();
13
16
  const items = useAtomValue(shownStatusItemsAtom);
17
+ const update = useAtomValue(updateReadyAtom);
14
18
  const busy = useAtomValue(busyAtom);
15
19
  const setGit = useSetAtom(gitStatusAtom);
16
20
  const segments = items.map((item) => findSegment(item.id));
@@ -18,6 +22,8 @@ export function StatusLine() {
18
22
  useEffect(() => setGit(git), [git]);
19
23
  const data = useStatusData(useNow(segments.some((segment) => segment?.ticks)));
20
24
  const line = renderStatusLine(items, data);
21
- return _jsx(StatusBar, { items: line.left, right: line.right });
25
+ // Shown whatever the layout, and first on the right, which is cut from its end when the line runs short.
26
+ const right = update ? [_jsxs(Text, { color: theme.accent, children: ["v", update, " ready \u00B7 restart to update"] }, "update"), ...line.right] : line.right;
27
+ return _jsx(StatusBar, { items: line.left, right: right });
22
28
  }
23
29
  //# sourceMappingURL=status-line.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"status-line.js","sourceRoot":"","sources":["../../src/app/status-line.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACzE,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAElD,MAAM,UAAU,UAAU;IACxB,MAAM,KAAK,GAAG,YAAY,CAAC,oBAAoB,CAAC,CAAC;IACjD,MAAM,IAAI,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;IACpC,MAAM,MAAM,GAAG,UAAU,CAAC,aAAa,CAAC,CAAC;IAEzC,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3D,MAAM,GAAG,GAAG,YAAY,CAAC,UAAU,EAAE,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;IAEvF,SAAS,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAEpC,MAAM,IAAI,GAAG,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IAC/E,MAAM,IAAI,GAAG,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAE3C,OAAO,KAAC,SAAS,IAAC,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,GAAI,CAAC;AAC5D,CAAC"}
1
+ {"version":3,"file":"status-line.js","sourceRoot":"","sources":["../../src/app/status-line.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACzE,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C,MAAM,UAAU,UAAU;IACxB,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IACzB,MAAM,KAAK,GAAG,YAAY,CAAC,oBAAoB,CAAC,CAAC;IACjD,MAAM,MAAM,GAAG,YAAY,CAAC,eAAe,CAAC,CAAC;IAC7C,MAAM,IAAI,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;IACpC,MAAM,MAAM,GAAG,UAAU,CAAC,aAAa,CAAC,CAAC;IAEzC,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3D,MAAM,GAAG,GAAG,YAAY,CAAC,UAAU,EAAE,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;IAEvF,SAAS,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAEpC,MAAM,IAAI,GAAG,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IAC/E,MAAM,IAAI,GAAG,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAE3C,yGAAyG;IACzG,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,MAAC,IAAI,IAAc,KAAK,EAAE,KAAK,CAAC,MAAM,kBAAI,MAAM,wCAAtC,QAAQ,CAAgE,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;IAExI,OAAO,KAAC,SAAS,IAAC,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,GAAI,CAAC;AACvD,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { atom, useSetAtom } from 'jotai';
2
+ import { useEffect } from 'react';
3
+ import { autoUpdatesOn, startUpdater } from '../update/updater.js';
4
+ import { fromNpm } from '../update/versions.js';
5
+ import { useApi } from './api.js';
6
+ /** The newer version installed in the background, which runs from the next `jinion` on. */
7
+ export const updateReadyAtom = atom(undefined);
8
+ export function useUpdates() {
9
+ const { version } = useApi().initialized.info;
10
+ const setReady = useSetAtom(updateReadyAtom);
11
+ useEffect(() => {
12
+ if (!fromNpm() || !autoUpdatesOn())
13
+ return;
14
+ return startUpdater({ version, onReady: setReady });
15
+ }, []);
16
+ }
17
+ //# sourceMappingURL=updates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"updates.js","sourceRoot":"","sources":["../../src/app/updates.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,2FAA2F;AAC3F,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,CAAqB,SAAS,CAAC,CAAC;AAEnE,MAAM,UAAU,UAAU;IACxB,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC;IAC9C,MAAM,QAAQ,GAAG,UAAU,CAAC,eAAe,CAAC,CAAC;IAE7C,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,EAAE;YAAE,OAAO;QAE3C,OAAO,YAAY,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;IACtD,CAAC,EAAE,EAAE,CAAC,CAAC;AACT,CAAC"}
package/dist/app/views.js CHANGED
@@ -8,7 +8,9 @@ import { MemoryPanel } from '../panels/memory.js';
8
8
  import { ModePicker } from '../panels/mode.js';
9
9
  import { ModelPicker } from '../panels/model.js';
10
10
  import { FeedbackPanel } from '../panels/feedback.js';
11
+ import { MapPanel } from '../panels/map.js';
11
12
  import { ProfilePanel } from '../panels/profile.js';
13
+ import { ReleaseNotesPanel } from '../panels/release-notes.js';
12
14
  import { ResumePanel } from '../panels/resume.js';
13
15
  import { RewindPanel } from '../panels/rewind/rewind-panel.js';
14
16
  import { StatusLinePanel } from '../panels/statusline.js';
@@ -57,6 +59,10 @@ function ViewPanel({ view }) {
57
59
  return _jsx(ProfilePanel, {});
58
60
  case 'feedback':
59
61
  return _jsx(FeedbackPanel, { entry: view.entry });
62
+ case 'map':
63
+ return _jsx(MapPanel, {});
64
+ case 'release-notes':
65
+ return _jsx(ReleaseNotesPanel, {});
60
66
  }
61
67
  }
62
68
  //# sourceMappingURL=views.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"views.js","sourceRoot":"","sources":["../../src/app/views.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"views.js","sourceRoot":"","sources":["../../src/app/views.tsx"],"names":[],"mappings":"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"}