osborn 0.8.30 → 0.8.31
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.
|
@@ -4,38 +4,42 @@ Auto-extracted from voice sessions via PreCompact.
|
|
|
4
4
|
Last updated: 2026-05-01 | Session: unknown...
|
|
5
5
|
|
|
6
6
|
USER CORRECTIONS:
|
|
7
|
-
-
|
|
8
|
-
-
|
|
9
|
-
-
|
|
7
|
+
- Never delete existing code when adding new functionality — always add as a fallback/layer on top; user denied permission twice when replacements were sent instead of additions
|
|
8
|
+
- Don't dismiss log warnings as "contamination" without verifying — the 0.8.30 reference in logs was real and was incorrectly dismissed
|
|
9
|
+
- Share URLs directly in the message, not just in session files — "send it to me in the actual message"
|
|
10
|
+
- Don't say "I can't read images from URLs in this context" — fetch the public URL and use the Read tool on the saved file
|
|
11
|
+
- When user says "you updated it" trust the session history and confirm rather than expressing surprise
|
|
10
12
|
|
|
11
13
|
USER PREFERENCES:
|
|
12
|
-
-
|
|
13
|
-
-
|
|
14
|
-
-
|
|
15
|
-
-
|
|
16
|
-
- Wants
|
|
14
|
+
- Prefers additive changes over replacements — keep existing SDK mechanisms as primary, add custom fallbacks only when SDK fails
|
|
15
|
+
- Wants direct URL in voice message (readable), not just written to session files
|
|
16
|
+
- Expects natural chain of: bump version → build → commit → push → publish in one flow
|
|
17
|
+
- Prefers push-based deploy (Railway auto-deploys from GitHub push) over manual steps
|
|
18
|
+
- Wants feedback on async operations — "is it done?" is the recurring question
|
|
19
|
+
- Voice transcription artifacts: "MPM"=npm, "Osborne"=Osborn, "Brazil"=unclear, "basket man"=bash command
|
|
17
20
|
|
|
18
21
|
DOMAIN KNOWLEDGE:
|
|
19
|
-
- `osborn --version` has no version flag — it starts a new LiveKit
|
|
20
|
-
- npm automation token
|
|
21
|
-
- `
|
|
22
|
-
-
|
|
23
|
-
- `EVENT_PLAYBACK_STARTED` ('playbackStarted') is public
|
|
24
|
-
- OpenAI TTS-1
|
|
25
|
-
- `
|
|
26
|
-
- execInSprite works any time the Sprite container is running, independent of osborn agent health
|
|
27
|
-
- `
|
|
28
|
-
-
|
|
29
|
-
- Railway auto-deploys from GitHub main branch push
|
|
22
|
+
- `osborn --version` has no version flag — calling it starts a new LiveKit agent instance and connects to a room
|
|
23
|
+
- npm automation token required for headless publish; web login token still requires interactive 2FA
|
|
24
|
+
- `(currentSession as any)?.output?.audio` is the correct path to AudioOutput; `_activity.agentSession.output.audio` is WRONG
|
|
25
|
+
- OpenAI TTS-1 does not provide `synchronizedTranscript` or meaningful `playbackPosition` — both are 0/null
|
|
26
|
+
- `EVENT_PLAYBACK_STARTED` ('playbackStarted') is a public LiveKit AudioOutput event that fires on first audio frame
|
|
27
|
+
- 14 chars/sec is the correct estimate for OpenAI TTS-1 (175-178 WPM × 5 chars/word / 60s)
|
|
28
|
+
- Dashboard `handleRestart`/`handleUpdate` server already does `waitForHealth` before responding; client was ignoring the response body entirely
|
|
29
|
+
- `execInSprite` works any time the Sprite container is running, independent of osborn agent health
|
|
30
|
+
- `npm list -g osborn --json` is the correct way to get installed version (not `osborn --version`)
|
|
31
|
+
- Writer sub-agents will autonomously fix bugs and publish if they have npm auth and the task implies it — need to scope tasks tightly
|
|
30
32
|
|
|
31
33
|
EFFECTIVE PATTERNS:
|
|
32
|
-
-
|
|
33
|
-
-
|
|
34
|
-
-
|
|
34
|
+
- Four-tier fallback chain (sdk-transcript → sdk-position → wall-clock → full-block) preserves future compatibility while adding current fix
|
|
35
|
+
- Checkpoint before significant code changes; user approved checkpoints as a safety measure
|
|
36
|
+
- Delegating "research then build" to researcher first, then writer prevents over-building on incorrect assumptions
|
|
37
|
+
- Reading the actual image file via WebFetch + Read instead of asking user to describe it
|
|
35
38
|
|
|
36
39
|
ANTI-PATTERNS:
|
|
37
|
-
- Running `osborn --version`
|
|
38
|
-
-
|
|
39
|
-
-
|
|
40
|
-
-
|
|
40
|
+
- Running `osborn --version` — starts a live agent instance, creates stray processes in LiveKit room
|
|
41
|
+
- Telling user to look for a permission dialog in their browser when the dialog may have already timed out — retry the agent instead
|
|
42
|
+
- Dismissing "contamination" in logs without checking if it's real data — cost a full investigative loop
|
|
43
|
+
- Scoping writer agent tasks too broadly — the dashboard writer autonomously bumped version and published because npm was authenticated and the task was ambiguous about scope
|
|
44
|
+
- Ending a turn with only "opaque work is running" and no conversational engagement
|
|
41
45
|
</summary>
|
package/dist/index.js
CHANGED
|
@@ -2994,9 +2994,10 @@ async function main() {
|
|
|
2994
2994
|
}
|
|
2995
2995
|
else {
|
|
2996
2996
|
try {
|
|
2997
|
-
const webhookBase =
|
|
2998
|
-
|
|
2999
|
-
|
|
2997
|
+
const webhookBase = data.webhookBase ||
|
|
2998
|
+
(process.env.FLY_APP_NAME
|
|
2999
|
+
? `https://${process.env.FLY_APP_NAME}.fly.dev`
|
|
3000
|
+
: `http://localhost:${apiPort}`);
|
|
3000
3001
|
await sendToFrontend({ type: 'meeting_joining', message: 'Osborn is joining your meeting...' });
|
|
3001
3002
|
const botId = await recallJoin.joinMeeting(meetingUrl, webhookBase);
|
|
3002
3003
|
const sessionId = currentLLM?.sessionId || currentResumeSessionId || 'default';
|