friend-assistant 0.1.49 → 0.1.51
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 +25 -3
- package/dist/BUILD.json +2 -2
- package/dist/friend.mjs +2403 -1093
- package/dist/web/assets/index-CCtU8Whi.css +1 -0
- package/dist/web/assets/index-DImFRaGB.js +4459 -0
- package/dist/web/index.html +2 -2
- package/package.json +1 -1
- package/dist/web/assets/index-D-xt1hHe.css +0 -1
- package/dist/web/assets/index-fRz9fHr1.js +0 -4456
package/README.md
CHANGED
|
@@ -192,7 +192,8 @@ Type `/` in the message bar for a list that narrows as you type; they run on the
|
|
|
192
192
|
| `/plugins` | Opens the plugins. |
|
|
193
193
|
| `/voice` | Opens voice enrolment. |
|
|
194
194
|
| `/camera on`, `/camera off` | Switches the camera. It only takes a picture when you approve. |
|
|
195
|
-
| `/mute`, `/unmute` | Hides or shows everything on the stage. |
|
|
195
|
+
| `/mute`, `/unmute` | Hides or shows everything on the stage. Remembered on this device. |
|
|
196
|
+
| `/quiet`, `/speak` | Stops Friend speaking aloud (it still writes its answers, so you read the captions and the chat), or lets it speak again. Instant, no restart, remembered on this device. |
|
|
196
197
|
| `/clear` | Takes everything off the screen. |
|
|
197
198
|
| `/status` | Says what Friend is doing right now. |
|
|
198
199
|
| `/logout` | Signs out on this screen. |
|
|
@@ -210,7 +211,7 @@ pnpm friend start # gateway + local device node, http://127.0.0.1:8787
|
|
|
210
211
|
|
|
211
212
|
Sign-in is guarded against guessing: after **three wrong passwords** (or PINs) from one address, that address is locked for a minute, and every wrong try after that doubles the wait (up to an hour). The sign-in screen shows the tries left and a countdown, and even the right password waits out a lock. Many addresses together are limited too. A refresh never shows any part of the home screen before sign-in: the page asks the server first and draws only the sign-in screen until you are in.
|
|
212
213
|
|
|
213
|
-
Open the address in a browser, sign in, and press any key to talk. Press `Esc` (or long-press the top-left corner) for the owner menu: mute stage, log out, emergency lock.
|
|
214
|
+
Open the address in a browser, sign in, and press any key to talk. Press `Esc` (or long-press the top-left corner) for the owner menu: voice on/off, mute stage, log out, emergency lock.
|
|
214
215
|
|
|
215
216
|
Preview the whole look with no API key and no network: `pnpm build && pnpm demo`, then open the printed address. Each message you send shows the next scene (gauges and charts, a timeline, a graph, the orb and ring voice styles, a warm mood).
|
|
216
217
|
|
|
@@ -263,7 +264,7 @@ When it notices something you repeat, the AI may suggest a **skill** (instructio
|
|
|
263
264
|
- **Status line (bottom-left):** always shows what Friend is doing in plain words: Ready, Listening, Understanding what you said, Thinking, Getting the weather for Pune, Creating a view, Running a command, Answering, Waiting for your approval, Reconnecting. It never shows command text or arguments.
|
|
264
265
|
- **Clock (bottom-right):** a small date and time, so the screen is never empty.
|
|
265
266
|
- **Settings (Esc, then Settings):** change the model provider (Claude subscription through Claude Code, Claude API key, or local Ollama), the model names, the fallback, the Ollama address, and the voice options without the terminal. A change is used straight away (no restart) except the speaking voice and listening model. Saving needs your PIN. The API key is write-only: it is never sent back to the screen. Network address, folders and safety rules are deliberately not in this screen; use `friend config set` for those.
|
|
266
|
-
- **Slash commands:** type `/` in the message bar for a list that narrows as you type (arrows or Tab to pick, Enter to run): /settings, /plugins, /voice, /camera on|off, /mute, /unmute, /clear, /status, /logout, /lock, /help. They run on the screen and never go to the AI, so they work instantly and even when the model is down. Start a line with // to send a message that begins with a slash.
|
|
267
|
+
- **Slash commands:** type `/` in the message bar for a list that narrows as you type (arrows or Tab to pick, Enter to run): /settings, /plugins, /voice, /camera on|off, /mute, /unmute, /quiet, /speak, /clear, /status, /logout, /lock, /help. They run on the screen and never go to the AI, so they work instantly and even when the model is down. Start a line with // to send a message that begins with a slash.
|
|
267
268
|
- **PIN with the keyboard:** wherever a PIN is asked for, type the digits, Backspace to correct, Enter to confirm (Enter never deletes your voice; that needs a click). The on-screen keys still work for touch.
|
|
268
269
|
- **The AI knows the screen:** its instructions include a layout guide (what is always on screen, the five regions, how to compose one answer, how long things should stay), and every request tells it what is on screen, where, for how long, and which regions are free. If it puts something on top of another object or over the captions, status line or clock, Friend moves it to a free spot (or the tidy auto grid) and tells it why, so it learns within the conversation. Nothing is refused.
|
|
269
270
|
- **Voice presence look (Settings, tab "Voice presence", or `/look`):** the settings dialog is wide and has tabs: *Model*, *Voice* and *Voice presence*. On the last one you choose a **theme** (Aurora, Ocean, Ember, Violet storm, Matrix, Rose, Ghost) with one click, or set everything yourself: the **shape** (sphere, orb, ring), the **colour** (swatches or any colour), **brightness**, **size**, how strongly it **reacts to the voice**, the soft **glow** behind everything, whether the live **captions** show and how big they are, and the **view**. A live preview shows the result before you save. Saving a change of look needs **no PIN**, and every open screen changes at once. *Let the AI change the shape, colour and brightness to suit a topic* can be switched off to keep exactly the look you chose (you can still ask it "make it purple" yourself). Pressing the colour box also works; the colour must be a plain #rrggbb.
|
|
@@ -375,6 +376,27 @@ Friend's screen has a media player and four widgets drawn in a HUD style (angled
|
|
|
375
376
|
- **Date and time, profile.** 12 or 24 hour, with or without seconds, in any date language; the profile tag shows the assistant's name, a label you choose, and who Friend is talking to.
|
|
376
377
|
- **Animations.** Tabs slide and light up on hover, ripple and flicker "ENGAGED" when pressed; while music plays the dial's needle sweeps, the bars follow the sound and the cover turns. Settings → Animations can reduce them or turn them off, and the device's own "reduce motion" is always respected. Esc → Music and Quick launch hide or show them; `/music` and `/launcher` do the same.
|
|
377
378
|
|
|
379
|
+
## The orbital screen (a heads-up display)
|
|
380
|
+
|
|
381
|
+
Settings -> Widgets -> **Screen layout** switches between **Classic** (the orb with floating cards, the default) and **Orbital**: a clear centre with the orb and a ring of 60 segments that fills with today's usage compared with your busiest day of the last 30, an **orbit** of hexagon nodes (your quick-launch buttons) with data flowing along the links, and live instruments around the edge, each with its own shape and motion.
|
|
382
|
+
|
|
383
|
+
- **Instruments.** System (processor and memory on an arc gauge), Voice (sound bars), Network (speed on a pulse line, or "n/a" on a PC that reports none), Activity (the conversation and what Friend is doing, like a terminal), Devices (a radar of this screen, the PC's agent and the voice; an offline one is dim), Tickets and Budget (empty until hired workers exist) and Approvals (an orange octagon with the PIN pad when one is needed; the old approval card is not drawn as well). The usage ring is the centre; the top bar carries the name, status and time.
|
|
384
|
+
- **Click or tap** any instrument to open it large in the middle; Esc, a click outside or the x closes it. Tab and Enter work too. A click on an orbit node runs that quick-launch button.
|
|
385
|
+
- **Density.** *Calm* (orb, orbit, usage ring and message bar), *Standard*, or *Full*; each instrument also has its own switch. An approval that is waiting is always shown.
|
|
386
|
+
- **Sample data.** Until hired workers exist most of the right side is dim and empty. Settings -> Widgets -> *Show sample data* fills it with the approved design's example workers, tickets, budget, feed and approval so you can see the whole look; it is labelled SAMPLE DATA, never mixed with real data, and a real approval always takes over.
|
|
387
|
+
- **Motion.** Settings -> Animations (Full, Reduced, Off) and the device's own "reduce motion" stop every loop; the loops also pause while the tab is hidden. On a phone the orbit becomes a row of chips and the instruments scroll in a strip.
|
|
388
|
+
- The assistant cannot change these settings, even with your PIN (they are on the owner's settings screen only).
|
|
389
|
+
## The Office (hired workers)
|
|
390
|
+
|
|
391
|
+
The Office lets Friend hire **workers**: separate Claude Code sessions that work in your project folders, one ticket at a time, while you keep talking to Friend. It is off until you switch it on, and nothing in it is preset: the roles, projects, limits and rules are all **settings** (Settings -> **Office**, saved with your PIN; the assistant itself cannot change them).
|
|
392
|
+
|
|
393
|
+
- **Set up.** Turn the Office on, add a **project** (a folder, and one line about its goal) and a **role** (an id, a title, optional model and the instructions that worker always starts with; a few starter roles are only editable data, delete or change them). Then ask Friend: "hire a builder on my site project and have them fix the login bug".
|
|
394
|
+
- **Tools Friend uses.** `office.status` (workers, tickets, the subscription window), `office.hire`, `office.assign` (give a ticket and start it; asks you), `office.say` (a message to a worker; asks you), `office.review` (accept a finished ticket or send it back) and `office.stop` (one worker or all). Text a worker writes is shown to Friend as untrusted data, never as instructions.
|
|
395
|
+
- **Approvals.** A worker that wants to do something risky asks through Friend's own approval card (the orange octagon on the orbital screen, the card in the classic one), showing the whole command. A path outside the project's folders, and any command that matches one of your **Always refuse** patterns, is refused without asking. Tools on your **Let through without asking** list go ahead inside the folders; everything else asks, and a command that looks dangerous needs your PIN. An unanswered card counts as a no. There is no "always allow" for a worker's question.
|
|
396
|
+
- **Limits.** *Most workers at once* (the others queue), a token limit per worker and in total, a start timeout, and **Pause at N% of the five-hour window**: when your Claude subscription window is that full, workers wait until it resets (0 = never pause). Workers share your Claude subscription with Friend itself, using the program and model chosen under Model.
|
|
397
|
+
- **On the orbital screen** the workers are the orbit nodes (a "+" hires one), Tickets and Budget show the real tickets and token limits, the Activity feed shows what the workers do, and the usage ring shows the real five-hour window with the time it resets. Click a worker to see its live feed, **Stop** it or say something to it. Stop, switching the Office off and closing Friend all end every worker process.
|
|
398
|
+
- **Sessions.** A worker keeps its memory between tickets (its Claude Code session is resumed); the process itself ends after each ticket.
|
|
399
|
+
|
|
378
400
|
## Pictures first: weather, stats and graphics
|
|
379
401
|
|
|
380
402
|
Friend is meant to show answers, not only say them. It controls the whole screen and picks the object that fits (gauge, chart, table, timeline, graph, or its own animated page).
|
package/dist/BUILD.json
CHANGED