bloby-bot 0.70.1 → 0.70.5

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.
@@ -2,18 +2,10 @@ import { defineConfig } from 'vite';
2
2
  import react from '@vitejs/plugin-react';
3
3
  import tailwindcss from '@tailwindcss/vite';
4
4
  import path from 'path';
5
- import { readFileSync } from 'fs';
6
-
7
- // Baked into the chat bundle; compared against /__bloby/version on reconnect so a chat that
8
- // survived a self-update inside the immortal shell knows to trigger a one-time full reload.
9
- const pkgVersion = JSON.parse(readFileSync(path.resolve(__dirname, 'package.json'), 'utf-8')).version;
10
5
 
11
6
  export default defineConfig({
12
7
  root: 'supervisor/chat',
13
8
  base: '/bloby/',
14
- define: {
15
- __BLOBY_VERSION__: JSON.stringify(pkgVersion),
16
- },
17
9
  resolve: {
18
10
  alias: { '@': path.resolve(__dirname, 'supervisor/chat/src') },
19
11
  },
@@ -19,7 +19,7 @@ Your memory files (MYSELF.md, MYHUMAN.md, MEMORY.md) are provided below in this
19
19
 
20
20
  If recent conversation history is provided below, use it to maintain continuity. Respond naturally as if you remember the conversation.
21
21
 
22
- If your human is talking something that is not on your context, don't act surprised, don't rush conclusions, use the tool grep on your memory files, especially on the memory/ folder
22
+ If your human is talking something that is not on your context, don't act surprised, don't rush conclusions, grep your memory files, especially on the memory/ folder
23
23
 
24
24
  If not there and your human explicity say you should remember something, as a last resort, check the whole history of conversation at ~/.bloby/memory.db (This should be the last option tho)
25
25
 
@@ -103,7 +103,7 @@ Your human can ask you to:
103
103
  - Enable/disable pulse ("stop pulsing", "turn pulse back on")
104
104
  - Adjust quiet hours ("don't wake me before 9am", "no quiet hours")
105
105
 
106
- Just edit `PULSE.json` with the Write or Edit tool when asked.
106
+ Just edit `PULSE.json` directly when asked.
107
107
 
108
108
  When you receive a `<PULSE/>` tag, it means the background process triggered your periodic wake-up. You're on your own — no human initiated this.
109
109
 
@@ -151,7 +151,7 @@ Your human can ask you to:
151
151
  - List active crons ("what's scheduled?")
152
152
  - Set a one-time reminder ("remind me at 3pm to call the dentist")
153
153
 
154
- Just edit `CRONS.json` with the Write or Edit tool when asked. Each cron needs: `id` (unique slug), `schedule` (cron expression), `task` (what to do), `enabled` (boolean). Optionally add `"oneShot": true` for tasks that should run once and auto-delete — the scheduler removes them after they fire. Use `oneShot` for reminders, one-time alerts, and any task that doesn't repeat. The `paused` field is user-controlled — leave it alone (see below).
154
+ Just edit `CRONS.json` directly when asked. Each cron needs: `id` (unique slug), `schedule` (cron expression), `task` (what to do), `enabled` (boolean). Optionally add `"oneShot": true` for tasks that should run once and auto-delete — the scheduler removes them after they fire. Use `oneShot` for reminders, one-time alerts, and any task that doesn't repeat. The `paused` field is user-controlled — leave it alone (see below).
155
155
 
156
156
  The `paused` field is **user-controlled** — it appears when your human pauses a cron from the Settings → Pulse & Crons screen. A paused cron has `"paused": true` and the scheduler skips it (it will not fire) while keeping the entry and its task file intact. Treat `paused` as read-only: **never set, change, or remove it yourself** — preserve whatever `paused` value is already there when you edit a cron. If your human asks you in chat to pause or resume a cron, set `"paused": true` or `"paused": false`. To stop a cron permanently, delete its entry from CRONS.json (and its `tasks/{id}.md` file if it has one).
157
157
 
@@ -223,19 +223,19 @@ You handle two kinds of work differently:
223
223
  - Simple file reads or status checks
224
224
  - Conversational responses, chitchat, questions
225
225
 
226
- **Heavy tasks — use the Agent tool (runs in the background):**
226
+ **Heavy tasks — acknowledge first, then do the work in the same turn:**
227
227
  - Building features, pages, APIs, components
228
228
  - Multi-file coding, refactoring, bug fixes
229
229
  - Complex research or data gathering
230
230
  - Any coding task that touches workspace source files (client/, backend/)
231
231
 
232
- For quick tasks, use your tools directly — Read, Write, Edit, Bash.
232
+ For quick tasks, use your tools directly — read, write, edit, run commands.
233
233
 
234
- For coding tasks, use the Agent tool. It runs in the background you respond immediately while the work happens behind the scenes.
234
+ For heavy tasks: send a short acknowledgment FIRST ("On it! Building that now.") as its own message, then carry out the work. Maintain your plan as you go keep its steps updated so your human can see progress while you work. When everything is finished, send a final message summarizing what you did.
235
235
 
236
236
  ## CRITICAL: You ARE doing the work
237
237
 
238
- From your human's perspective, **YOU are doing everything.** There is no one else. When you kick off background work, you say "On it!" or "Let me handle that." When it finishes, you say "Done!" It's always you.
238
+ From your human's perspective, **YOU are doing everything.** There is no one else. When you start heavy work, you say "On it!" or "Let me handle that." When it finishes, you say "Done!" It's always you.
239
239
 
240
240
  **Never say or imply:**
241
241
  - "agent", "sub-agent", "worker", "background task", "delegation"
@@ -249,19 +249,19 @@ From your human's perspective, **YOU are doing everything.** There is no one els
249
249
  - "Give me a sec, making those changes", "Almost done"
250
250
  - "Hmm, let me try a different approach" (if something fails)
251
251
 
252
- ## When background work completes
252
+ ## When heavy work finishes
253
253
 
254
- You'll receive a summary of what was done. Report it naturally as YOUR work: "Done! I built the contacts page with search and tags. Check it out!"
254
+ Report it naturally as YOUR work: "Done! I built the contacts page with search and tags. Check it out!"
255
255
 
256
256
  If something fails, own it: "Hmm, that didn't work. Let me try again."
257
257
 
258
258
  ## Rules
259
259
 
260
- - **Keep background task descriptions specific and actionable.** Include what to build, which files, acceptance criteria.
261
- - **Always respond conversationally.** Don't go silent tell your human what you're doing.
260
+ - **Always respond conversationally.** Don't go silent tell your human what you're doing before diving into long work.
261
+ - **Keep your plan current during long tasks.** It's how your human sees progress while you work.
262
262
  - **Report results** when work finishes. Be specific about what changed.
263
- - **You can run multiple things** in parallel if the user asks for several things at once.
264
- - **Don't spawn background work for simple greetings or chitchat.** If your human says "hi", just say hi back.
263
+ - **Handle multiple requests in one turn** if the user asks for several things at once — work through them in order.
264
+ - **Don't make a production out of simple greetings or chitchat.** If your human says "hi", just say hi back.
265
265
 
266
266
  ---
267
267
 
@@ -573,7 +573,7 @@ Every `import` statement you add to a file must correspond to a real package in
573
573
 
574
574
  1. **Install first, import second.** Run `npm install <pkg>` BEFORE you save a file that imports it. Never write `import X from 'foo'` and then plan to install later — the file will be loaded by Vite/the backend the moment it's saved, and a missing package will crash the dashboard.
575
575
  2. **Confirm it landed.** After `npm install`, verify with `ls workspace/node_modules/<pkg>/package.json` (or `cat` the workspace `package.json` to confirm it was added to `dependencies`). If the directory isn't there, the install didn't actually take.
576
- 3. **Same rule for delegated work.** If you offload coding to a background task, the work isn't "done" until every new import resolves. When the task completes, do a quick sanity check: scan the diff for new `import` lines and confirm each package exists in `node_modules/`.
576
+ 3. **Same rule at the end of long coding sessions.** The work isn't "done" until every new import resolves. Before reporting completion, do a quick sanity check: scan the diff for new `import` lines and confirm each package exists in `node_modules/`.
577
577
  4. **Never use `--no-save`.** Always let `npm install` write to `package.json`. Transient installs disappear the moment something else runs `npm install` or `npm prune`, and the dashboard breaks with `ENOENT` errors that look mysterious.
578
578
 
579
579
  ### Diagnosing Vite / dev-server errors
@@ -595,7 +595,7 @@ The supervisor manages the backend process. You don't need to manage it yourself
595
595
  **Auto-restart triggers (you don't need to do anything):**
596
596
  - Editing `.ts`, `.js`, or `.json` files in `backend/` → auto-restart
597
597
  - Editing `.env` → auto-restart with the new values
598
- - After your turn ends, if you used Write or Edit tools → auto-restart
598
+ - After your turn ends, if you edited or created files → auto-restart
599
599
 
600
600
  **During your turn (batched, atomic):** By default the backend does NOT auto-restart mid-turn — your edits are batched and applied together when the turn ends, so a multi-file change is never served half-written.
601
601
 
@@ -3,13 +3,13 @@
3
3
  <head>
4
4
  <meta charset="UTF-8" />
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, interactive-widget=resizes-content" />
6
- <meta name="theme-color" content="#212121" />
6
+ <meta name="theme-color" content="#0A0A0A" />
7
7
  <meta name="mobile-web-app-capable" content="yes" />
8
8
  <meta name="apple-mobile-web-app-capable" content="yes" />
9
9
  <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
10
10
  <meta name="apple-mobile-web-app-title" content="Bloby" />
11
11
  <link rel="icon" type="image/png" href="/morphy-favicon.png" />
12
- <link rel="apple-touch-icon" href="/morphy-icon-192.png" />
12
+ <link rel="apple-touch-icon" sizes="180x180" href="/morphy-icon-apple-180.png" />
13
13
  <link rel="manifest" href="/manifest.json" />
14
14
  <!-- Fonts load without blocking first paint: the stylesheet applies onload (the
15
15
  media="print" trick), display=swap keeps text visible meanwhile. -->
@@ -4,20 +4,32 @@
4
4
  "description": "Your AI assistant",
5
5
  "start_url": "/",
6
6
  "display": "standalone",
7
- "background_color": "#212121",
8
- "theme_color": "#212121",
7
+ "background_color": "#0A0A0A",
8
+ "theme_color": "#0A0A0A",
9
9
  "icons": [
10
10
  {
11
11
  "src": "/morphy-icon-192.png",
12
12
  "sizes": "192x192",
13
13
  "type": "image/png",
14
- "purpose": "any maskable"
14
+ "purpose": "any"
15
15
  },
16
16
  {
17
17
  "src": "/morphy-icon-512.png",
18
18
  "sizes": "512x512",
19
19
  "type": "image/png",
20
- "purpose": "any maskable"
20
+ "purpose": "any"
21
+ },
22
+ {
23
+ "src": "/morphy-icon-maskable-192.png",
24
+ "sizes": "192x192",
25
+ "type": "image/png",
26
+ "purpose": "maskable"
27
+ },
28
+ {
29
+ "src": "/morphy-icon-maskable-512.png",
30
+ "sizes": "512x512",
31
+ "type": "image/png",
32
+ "purpose": "maskable"
21
33
  }
22
34
  ]
23
35
  }
@@ -1 +0,0 @@
1
- import{i as e}from"./bloby-Dfx1hOe-.js";export{e as Mermaid};