mirror of
https://github.com/rowboatlabs/rowboat.git
synced 2026-04-25 00:16:29 +02:00
Fix: GitHub Copilot Device Flow token_type validation - Accept any token type case (Bearer, bearer, etc)
This commit is contained in:
parent
b7866e3067
commit
97853c4b4c
6 changed files with 834 additions and 61 deletions
|
|
@ -67,12 +67,19 @@ initializeExecutionEnvironment();
|
|||
const preloadPath = app.isPackaged
|
||||
? path.join(__dirname, "../preload/dist/preload.js")
|
||||
: path.join(__dirname, "../../../preload/dist/preload.js");
|
||||
console.log("preloadPath", preloadPath);
|
||||
|
||||
const rendererPath = app.isPackaged
|
||||
? path.join(__dirname, "../renderer/dist") // Production
|
||||
: path.join(__dirname, "../../../renderer/dist"); // Development
|
||||
console.log("rendererPath", rendererPath);
|
||||
|
||||
// Debug logging (wrapped in safe error handler)
|
||||
try {
|
||||
if (process.stderr && process.stderr.write) {
|
||||
process.stderr.write(`preloadPath: ${preloadPath}\nrendererPath: ${rendererPath}\n`);
|
||||
}
|
||||
} catch {
|
||||
// Silently ignore logging errors
|
||||
}
|
||||
|
||||
// Register custom protocol for serving built renderer files in production.
|
||||
// This keeps SPA routes working when users deep link into the packaged app.
|
||||
|
|
|
|||
|
|
@ -213,6 +213,7 @@ function ModelSettings({ dialogOpen }: { dialogOpen: boolean }) {
|
|||
const [testState, setTestState] = useState<{ status: "idle" | "testing" | "success" | "error"; error?: string }>({ status: "idle" })
|
||||
const [configLoading, setConfigLoading] = useState(true)
|
||||
const [showMoreProviders, setShowMoreProviders] = useState(false)
|
||||
const [githubCopilotCode, setGithubCopilotCode] = useState<{ userCode: string; verificationUri: string } | null>(null)
|
||||
|
||||
const activeConfig = providerConfigs[provider]
|
||||
const showApiKey = provider === "openai" || provider === "anthropic" || provider === "google" || provider === "openrouter" || provider === "aigateway" || provider === "openai-compatible"
|
||||
|
|
@ -689,67 +690,155 @@ function ModelSettings({ dialogOpen }: { dialogOpen: boolean }) {
|
|||
|
||||
{/* GitHub Copilot Authentication */}
|
||||
{isGitHubCopilot && (
|
||||
<div className="space-y-2">
|
||||
<div className="space-y-3 border rounded-lg p-3 bg-muted/30">
|
||||
<span className="text-xs font-medium text-muted-foreground uppercase tracking-wider">Authentication</span>
|
||||
<p className="text-xs text-muted-foreground">GitHub Copilot uses Device Flow OAuth for authentication. Click the button to authenticate with your GitHub account.</p>
|
||||
<Button
|
||||
onClick={async () => {
|
||||
try {
|
||||
setTestState({ status: "testing" });
|
||||
const result = await window.ipc.invoke("github-copilot:authenticate", null);
|
||||
|
||||
if (!result.success) {
|
||||
setTestState({ status: "error", error: result.error });
|
||||
toast.error(`Authentication failed: ${result.error}`);
|
||||
return;
|
||||
}
|
||||
|
||||
// Show device code to user
|
||||
const deviceCode = result.userCode;
|
||||
const verificationUri = result.verificationUri;
|
||||
|
||||
toast.info(
|
||||
`1. Open: ${verificationUri}\n2. Enter code: ${deviceCode}`,
|
||||
{ duration: 60000 }
|
||||
);
|
||||
|
||||
// Open verification URI in browser
|
||||
window.open(verificationUri, '_blank');
|
||||
|
||||
// Wait a moment then check if authenticated
|
||||
setTimeout(async () => {
|
||||
const authCheck = await window.ipc.invoke("github-copilot:isAuthenticated", null);
|
||||
if (authCheck.authenticated) {
|
||||
setTestState({ status: "success" });
|
||||
toast.success("GitHub Copilot authenticated!");
|
||||
// Reload models after successful auth
|
||||
const modelsResult = await window.ipc.invoke("models:list", null);
|
||||
const catalog: Record<string, any[]> = {};
|
||||
for (const p of modelsResult.providers || []) {
|
||||
catalog[p.id] = p.models || [];
|
||||
|
||||
{!githubCopilotCode ? (
|
||||
<>
|
||||
<p className="text-xs text-muted-foreground">
|
||||
GitHub Copilot uses Device Flow OAuth. Click below to get a device code.
|
||||
</p>
|
||||
<Button
|
||||
onClick={async () => {
|
||||
try {
|
||||
setTestState({ status: "testing" });
|
||||
const result = await window.ipc.invoke("github-copilot:authenticate", null);
|
||||
|
||||
if (!result.success) {
|
||||
setTestState({ status: "error", error: result.error });
|
||||
toast.error(`Error: ${result.error}`);
|
||||
return;
|
||||
}
|
||||
setModelsCatalog(catalog);
|
||||
|
||||
// Store code permanently on screen
|
||||
setGithubCopilotCode({
|
||||
userCode: result.userCode,
|
||||
verificationUri: result.verificationUri,
|
||||
});
|
||||
|
||||
setTestState({ status: "idle" });
|
||||
toast.success("Device code ready! Follow the instructions below.");
|
||||
|
||||
// Open GitHub automatically
|
||||
window.open(result.verificationUri, '_blank');
|
||||
} catch (error) {
|
||||
const errorMsg = error instanceof Error ? error.message : "Authentication error";
|
||||
setTestState({ status: "error", error: errorMsg });
|
||||
toast.error(`Error: ${errorMsg}`);
|
||||
}
|
||||
}, 3000);
|
||||
} catch (error) {
|
||||
const errorMsg = error instanceof Error ? error.message : "Authentication error";
|
||||
setTestState({ status: "error", error: errorMsg });
|
||||
toast.error(`Error: ${errorMsg}`);
|
||||
}
|
||||
}}
|
||||
variant="outline"
|
||||
className="w-full"
|
||||
disabled={testState.status === "testing"}
|
||||
>
|
||||
{testState.status === "testing" ? (
|
||||
<>
|
||||
<Loader2 className="size-4 animate-spin mr-2" />
|
||||
Authenticating...
|
||||
</>
|
||||
) : (
|
||||
"Authenticate with GitHub"
|
||||
)}
|
||||
</Button>
|
||||
}}
|
||||
variant="outline"
|
||||
className="w-full"
|
||||
disabled={testState.status === "testing"}
|
||||
>
|
||||
{testState.status === "testing" ? (
|
||||
<>
|
||||
<Loader2 className="size-4 animate-spin mr-2" />
|
||||
Getting device code...
|
||||
</>
|
||||
) : (
|
||||
"Get Device Code"
|
||||
)}
|
||||
</Button>
|
||||
</>
|
||||
) : (
|
||||
<>
|
||||
<div className="space-y-3">
|
||||
<div>
|
||||
<p className="text-xs text-muted-foreground mb-1">1. Enter this code on GitHub:</p>
|
||||
<div className="flex gap-2">
|
||||
<code className="flex-1 bg-background border rounded px-3 py-2 text-sm font-mono text-foreground">
|
||||
{githubCopilotCode.userCode}
|
||||
</code>
|
||||
<Button
|
||||
size="sm"
|
||||
variant="outline"
|
||||
onClick={() => {
|
||||
navigator.clipboard.writeText(githubCopilotCode.userCode);
|
||||
toast.success("Code copied!");
|
||||
}}
|
||||
>
|
||||
Copy
|
||||
</Button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<p className="text-xs text-muted-foreground mb-1">2. Open this URL (already opened in browser):</p>
|
||||
<Button
|
||||
variant="link"
|
||||
size="sm"
|
||||
className="h-auto p-0 text-xs"
|
||||
onClick={() => window.open(githubCopilotCode.verificationUri, '_blank')}
|
||||
>
|
||||
{githubCopilotCode.verificationUri}
|
||||
</Button>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<p className="text-xs text-muted-foreground mb-2">3. After authorizing on GitHub, click the button below:</p>
|
||||
<Button
|
||||
onClick={async () => {
|
||||
try {
|
||||
setTestState({ status: "testing" });
|
||||
const authCheck = await window.ipc.invoke("github-copilot:isAuthenticated", null);
|
||||
|
||||
if (authCheck.authenticated) {
|
||||
setTestState({ status: "success" });
|
||||
setGithubCopilotCode(null);
|
||||
toast.success("GitHub Copilot authenticated!");
|
||||
|
||||
// Reload models
|
||||
const modelsResult = await window.ipc.invoke("models:list", null);
|
||||
const catalog: Record<string, any[]> = {};
|
||||
for (const p of modelsResult.providers || []) {
|
||||
catalog[p.id] = p.models || [];
|
||||
}
|
||||
setModelsCatalog(catalog);
|
||||
} else {
|
||||
setTestState({ status: "error", error: "Not authenticated yet. Please complete authorization on GitHub." });
|
||||
toast.error("Not authenticated yet");
|
||||
}
|
||||
} catch (error) {
|
||||
const errorMsg = error instanceof Error ? error.message : "Error checking auth";
|
||||
setTestState({ status: "error", error: errorMsg });
|
||||
toast.error(`Error: ${errorMsg}`);
|
||||
}
|
||||
}}
|
||||
className="w-full"
|
||||
disabled={testState.status === "testing"}
|
||||
>
|
||||
{testState.status === "testing" ? (
|
||||
<>
|
||||
<Loader2 className="size-4 animate-spin mr-2" />
|
||||
Checking...
|
||||
</>
|
||||
) : (
|
||||
"I've Authorized on GitHub"
|
||||
)}
|
||||
</Button>
|
||||
</div>
|
||||
|
||||
<Button
|
||||
variant="ghost"
|
||||
size="sm"
|
||||
className="w-full text-xs"
|
||||
onClick={() => {
|
||||
setGithubCopilotCode(null);
|
||||
setTestState({ status: "idle" });
|
||||
}}
|
||||
>
|
||||
Cancel
|
||||
</Button>
|
||||
</div>
|
||||
</>
|
||||
)}
|
||||
|
||||
{testState.status === "error" && (
|
||||
<div className="text-xs text-destructive">
|
||||
{testState.error}
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
)}
|
||||
|
||||
|
|
|
|||
475
apps/x/dev-server.log
Normal file
475
apps/x/dev-server.log
Normal file
|
|
@ -0,0 +1,475 @@
|
|||
|
||||
> x@0.1.0 dev
|
||||
> npm run deps && concurrently -k "npm:renderer" "npm:main"
|
||||
|
||||
|
||||
> x@0.1.0 deps
|
||||
> npm run shared && npm run core && npm run preload
|
||||
|
||||
|
||||
> x@0.1.0 shared
|
||||
> cd packages/shared && npm run build
|
||||
|
||||
|
||||
> build
|
||||
> rm -rf dist && tsc
|
||||
|
||||
|
||||
> x@0.1.0 core
|
||||
> cd packages/core && npm run build
|
||||
|
||||
|
||||
> build
|
||||
> rm -rf dist && tsc
|
||||
|
||||
|
||||
> x@0.1.0 preload
|
||||
> cd apps/preload && npm run build
|
||||
|
||||
|
||||
> build
|
||||
> rm -rf dist && tsc && esbuild dist/preload.js --bundle --platform=node --format=cjs --external:electron --outfile=dist/preload.bundle.js && mv dist/preload.bundle.js dist/preload.js
|
||||
|
||||
|
||||
dist/preload.bundle.js 526.8kb
|
||||
|
||||
⚡ Done in 16ms
|
||||
[main]
|
||||
[main] > x@0.1.0 main
|
||||
[main] > wait-on http://localhost:5173 && cd apps/main && npm run build && npm run start
|
||||
[main]
|
||||
[renderer]
|
||||
[renderer] > x@0.1.0 renderer
|
||||
[renderer] > cd apps/renderer && npm run dev
|
||||
[renderer]
|
||||
[renderer]
|
||||
[renderer] > dev
|
||||
[renderer] > vite
|
||||
[renderer]
|
||||
[renderer]
|
||||
[renderer] VITE v7.3.0 ready in 179 ms
|
||||
[renderer]
|
||||
[renderer] ➜ Local: http://localhost:5173/
|
||||
[renderer] ➜ Network: use --host to expose
|
||||
[main]
|
||||
[main] > rowboat@0.1.0 build
|
||||
[main] > rm -rf dist && tsc && node bundle.mjs
|
||||
[main]
|
||||
[main] ✅ Main process bundled to .package/dist-bundle/main.js
|
||||
[main]
|
||||
[main] > rowboat@0.1.0 start
|
||||
[main] > electron .
|
||||
[main]
|
||||
[main] preloadPath: /home/wilber/rowboat/apps/x/apps/preload/dist/preload.js
|
||||
[main] rendererPath: /home/wilber/rowboat/apps/x/apps/renderer/dist
|
||||
[main] Starting Gmail Sync (TS)...
|
||||
[main] Will sync every 300 seconds.
|
||||
[main] Starting Google Calendar & Notes Sync (TS)...
|
||||
[main] Will sync every 300 seconds.
|
||||
[main] [Fireflies] Starting Fireflies Sync...
|
||||
[main] [Fireflies] Will sync every 1800 seconds.
|
||||
[main] [Fireflies] Syncing transcripts from the last 7 days.
|
||||
[main] [Granola] Starting Granola Sync...
|
||||
[main] [Granola] Will sync every 5 minutes.
|
||||
[main] [Granola] Notes will be saved to: /home/wilber/.rowboat/knowledge/Meetings/granola
|
||||
[main] [Granola] Starting sync...
|
||||
[main] [GraphBuilder] Starting Knowledge Graph Builder Service...
|
||||
[main] [GraphBuilder] Monitoring folders: gmail_sync, knowledge/Meetings/fireflies, knowledge/Meetings/granola, knowledge/Voice Memos
|
||||
[main] [GraphBuilder] Will check for new content every 15 seconds
|
||||
[main] [GraphBuilder] Checking for new content in all sources...
|
||||
[main] [GraphBuilder] Starting voice memo processing...
|
||||
[main] [GraphBuilder] Checking directory: /home/wilber/.rowboat/knowledge/Voice Memos
|
||||
[main] [GraphBuilder] Directory does not exist
|
||||
[main] [GraphBuilder] No unprocessed voice memos found
|
||||
[main] [EmailLabeling] Starting Email Labeling Service...
|
||||
[main] [EmailLabeling] Will check for unlabeled emails every 15 seconds
|
||||
[main] [EmailLabeling] Checking for unlabeled emails...
|
||||
[main] [EmailLabeling] No unlabeled emails found
|
||||
[main] [NoteTagging] Starting Note Tagging Service...
|
||||
[main] [NoteTagging] Will check for untagged notes every 15 seconds
|
||||
[main] [NoteTagging] Checking for untagged notes...
|
||||
[main] [NoteTagging] No untagged notes found
|
||||
[main] [InlineTasks] Starting Inline Task Service...
|
||||
[main] [InlineTasks] Will check for task blocks every 15 seconds
|
||||
[main] [InlineTasks] Checking live notes...
|
||||
[main] [InlineTasks] Found 1 pending task(s) in knowledge/Today.md
|
||||
[main] [InlineTasks] Running task: "Create a daily brief for me..."
|
||||
[main] [AgentRunner] Starting background agent runner service
|
||||
[main] [AgentNotes] Starting Agent Notes Service...
|
||||
[main] [AgentNotes] Will process every 10 seconds
|
||||
[main] [ChromeSync] Server disabled, watching config for changes...
|
||||
[main] [GraphBuilder] No new content to process
|
||||
[main] [Fireflies] Starting sync...
|
||||
[main] [Granola] Sync disabled in config
|
||||
[main] [Granola] Sleeping for 5 minutes...
|
||||
[main] Google OAuth credentials not available or missing required Gmail scope. Sleeping...
|
||||
[main] Sleeping for 300 seconds...
|
||||
[main] [Fireflies] Clearing auth cache
|
||||
[main] [Fireflies] No valid client available
|
||||
[main] [Fireflies] Sleeping for 1800 seconds...
|
||||
[main] Google OAuth credentials not available or missing required Calendar/Drive scopes. Sleeping...
|
||||
[main] Sleeping for 300 seconds...
|
||||
[main] [OAuth] Clearing Google auth cache
|
||||
[main] 2026-04-17T15:25:10.180Z [run-2026-04-17T15-25-09Z-0047239-000-inline_task_agent] using model: gpt-5.4
|
||||
[main] 2026-04-17T15:25:10.180Z [run-2026-04-17T15-25-09Z-0047239-000-inline_task_agent] [iter-1] starting loop iteration
|
||||
[main] 2026-04-17T15:25:10.180Z [run-2026-04-17T15-25-09Z-0047239-000-inline_task_agent] [iter-1] dequeued user message 2026-04-17T15-25-09Z-0047239-001
|
||||
[main] 2026-04-17T15:25:10.181Z [run-2026-04-17T15-25-09Z-0047239-000-inline_task_agent] [iter-1] running llm turn
|
||||
[main] ! SENDING payload to model: [{"role":"user","content":"Execute the following instruction from the note \"knowledge/Today.md\":\n\n**Instruction:** Create a daily brief for me\n\n**Full note content for context:**\n```markdown\n---\nlive_note: true\n---\n# Today\n\n```task\n{\"instruction\":\"Create a daily brief for me\",\"schedule\":{\"type\":\"cron\",\"expression\":\"*/15 * * * *\",\"startDate\":\"2026-04-17T14:33:30.959Z\",\"endDate\":\"2027-04-17T14:33:30.959Z\"},\"schedule-label\":\"runs every 15 minutes\",\"targetId\":\"dailybrief\"}\n```\n\n<!--task-target:dailybrief-->\n<!--/task-target:dailybrief-->\n\n```"}]
|
||||
[main] -> stream event {"type":"start"}
|
||||
[main] unknown stream event: {"type":"start"}
|
||||
[main] LoadAPIKeyError [AI_LoadAPIKeyError]: OpenAI API key is missing. Pass it using the 'apiKey' parameter or the OPENAI_API_KEY environment variable.
|
||||
[main] at loadApiKey (/home/wilber/rowboat/apps/x/apps/main/.package/dist/main.cjs:939836:11)
|
||||
[main] at Object.getHeaders2 [as headers] (/home/wilber/rowboat/apps/x/apps/main/.package/dist/main.cjs:953594:32)
|
||||
[main] at OpenAIResponsesLanguageModel.doStream (/home/wilber/rowboat/apps/x/apps/main/.package/dist/main.cjs:952713:43)
|
||||
[main] at async fn (/home/wilber/rowboat/apps/x/apps/main/.package/dist/main.cjs:948085:27)
|
||||
[main] at async /home/wilber/rowboat/apps/x/apps/main/.package/dist/main.cjs:944794:22
|
||||
[main] at async _retryWithExponentialBackoff (/home/wilber/rowboat/apps/x/apps/main/.package/dist/main.cjs:944933:12)
|
||||
[main] at async streamStep (/home/wilber/rowboat/apps/x/apps/main/.package/dist/main.cjs:948041:15)
|
||||
[main] at async fn (/home/wilber/rowboat/apps/x/apps/main/.package/dist/main.cjs:948382:9)
|
||||
[main] at async /home/wilber/rowboat/apps/x/apps/main/.package/dist/main.cjs:944794:22 {
|
||||
[main] cause: undefined,
|
||||
[main] [Symbol(vercel.ai.error)]: true,
|
||||
[main] [Symbol(vercel.ai.error.AI_LoadAPIKeyError)]: true
|
||||
[main] }
|
||||
[main] -> stream event {"type":"error","error":{"name":"AI_LoadAPIKeyError"}}
|
||||
[main] 2026-04-17T15:25:10.218Z [run-2026-04-17T15-25-09Z-0047239-000-inline_task_agent] using model: gpt-5.4
|
||||
[main] 2026-04-17T15:25:10.218Z [run-2026-04-17T15-25-09Z-0047239-000-inline_task_agent] [iter-1] starting loop iteration
|
||||
[main] 2026-04-17T15:25:10.218Z [run-2026-04-17T15-25-09Z-0047239-000-inline_task_agent] [iter-1] exiting loop, reason: last message is from assistant and text
|
||||
[main] [InlineTasks] No response from agent for task
|
||||
[main] [InlineTasks] Updated knowledge/Today.md
|
||||
[main] [InlineTasks] No pending tasks found
|
||||
[main] Error occurred in handler for 'workspace:readFile': [Error: ENOENT: no such file or directory, lstat '/home/wilber/.rowboat/config/exa-search.json'] {
|
||||
[main] errno: -2,
|
||||
[main] code: 'ENOENT',
|
||||
[main] syscall: 'lstat',
|
||||
[main] path: '/home/wilber/.rowboat/config/exa-search.json'
|
||||
[main] }
|
||||
[main] Error occurred in handler for 'workspace:readFile': [Error: ENOENT: no such file or directory, lstat '/home/wilber/.rowboat/config/exa-search.json'] {
|
||||
[main] errno: -2,
|
||||
[main] code: 'ENOENT',
|
||||
[main] syscall: 'lstat',
|
||||
[main] path: '/home/wilber/.rowboat/config/exa-search.json'
|
||||
[main] }
|
||||
[main] [OAuth] Clearing Google auth cache
|
||||
[main] [GitHub Copilot] Starting Device Flow authentication...
|
||||
[main] [GitHub Copilot] Requesting device code...
|
||||
[main] [GitHub Copilot] Device code received. User code: C39B-A859
|
||||
[main] [GitHub Copilot] Verification URI: https://github.com/login/device
|
||||
[main] [GitHub Copilot] Polling for token...
|
||||
[main] Abriendo en una sesión existente del navegador
|
||||
[main] [GitHub Copilot] Authorization pending, polling again...
|
||||
[main] [EmailLabeling] Checking for unlabeled emails...
|
||||
[main] [EmailLabeling] No unlabeled emails found
|
||||
[main] [NoteTagging] Checking for untagged notes...
|
||||
[main] [NoteTagging] No untagged notes found
|
||||
[main] [GraphBuilder] Checking for new content in all sources...
|
||||
[main] [GraphBuilder] Starting voice memo processing...
|
||||
[main] [GraphBuilder] Checking directory: /home/wilber/.rowboat/knowledge/Voice Memos
|
||||
[main] [GraphBuilder] Directory does not exist
|
||||
[main] [GraphBuilder] No unprocessed voice memos found
|
||||
[main] [GraphBuilder] No new content to process
|
||||
[main] [InlineTasks] Checking live notes...
|
||||
[main] [InlineTasks] Found 1 pending task(s) in knowledge/Today.md
|
||||
[main] [InlineTasks] Running task: "Create a daily brief for me..."
|
||||
[main] 2026-04-17T15:25:25.228Z [run-2026-04-17T15-25-25Z-0047239-000-inline_task_agent] using model: gpt-5.4
|
||||
[main] 2026-04-17T15:25:25.228Z [run-2026-04-17T15-25-25Z-0047239-000-inline_task_agent] [iter-1] starting loop iteration
|
||||
[main] 2026-04-17T15:25:25.228Z [run-2026-04-17T15-25-25Z-0047239-000-inline_task_agent] [iter-1] dequeued user message 2026-04-17T15-25-25Z-0047239-001
|
||||
[main] 2026-04-17T15:25:25.229Z [run-2026-04-17T15-25-25Z-0047239-000-inline_task_agent] [iter-1] running llm turn
|
||||
[main] ! SENDING payload to model: [{"role":"user","content":"Execute the following instruction from the note \"knowledge/Today.md\":\n\n**Instruction:** Create a daily brief for me\n\n**Full note content for context:**\n```markdown\n---\nlive_note: true\n---\n# Today\n\n```task\n{\"instruction\":\"Create a daily brief for me\",\"schedule\":{\"type\":\"cron\",\"expression\":\"*/15 * * * *\",\"startDate\":\"2026-04-17T14:33:30.959Z\",\"endDate\":\"2027-04-17T14:33:30.959Z\"},\"schedule-label\":\"runs every 15 minutes\",\"targetId\":\"dailybrief\"}\n```\n\n<!--task-target:dailybrief-->\n<!--/task-target:dailybrief-->\n\n```"}]
|
||||
[main] -> stream event {"type":"start"}
|
||||
[main] unknown stream event: {"type":"start"}
|
||||
[main] LoadAPIKeyError [AI_LoadAPIKeyError]: OpenAI API key is missing. Pass it using the 'apiKey' parameter or the OPENAI_API_KEY environment variable.
|
||||
[main] at loadApiKey (/home/wilber/rowboat/apps/x/apps/main/.package/dist/main.cjs:939836:11)
|
||||
[main] at Object.getHeaders2 [as headers] (/home/wilber/rowboat/apps/x/apps/main/.package/dist/main.cjs:953594:32)
|
||||
[main] at OpenAIResponsesLanguageModel.doStream (/home/wilber/rowboat/apps/x/apps/main/.package/dist/main.cjs:952713:43)
|
||||
[main] at async fn (/home/wilber/rowboat/apps/x/apps/main/.package/dist/main.cjs:948085:27)
|
||||
[main] at async /home/wilber/rowboat/apps/x/apps/main/.package/dist/main.cjs:944794:22
|
||||
[main] at async _retryWithExponentialBackoff (/home/wilber/rowboat/apps/x/apps/main/.package/dist/main.cjs:944933:12)
|
||||
[main] at async streamStep (/home/wilber/rowboat/apps/x/apps/main/.package/dist/main.cjs:948041:15)
|
||||
[main] at async fn (/home/wilber/rowboat/apps/x/apps/main/.package/dist/main.cjs:948382:9)
|
||||
[main] at async /home/wilber/rowboat/apps/x/apps/main/.package/dist/main.cjs:944794:22 {
|
||||
[main] cause: undefined,
|
||||
[main] [Symbol(vercel.ai.error)]: true,
|
||||
[main] [Symbol(vercel.ai.error.AI_LoadAPIKeyError)]: true
|
||||
[main] }
|
||||
[main] -> stream event {"type":"error","error":{"name":"AI_LoadAPIKeyError"}}
|
||||
[main] 2026-04-17T15:25:25.240Z [run-2026-04-17T15-25-25Z-0047239-000-inline_task_agent] using model: gpt-5.4
|
||||
[main] 2026-04-17T15:25:25.240Z [run-2026-04-17T15-25-25Z-0047239-000-inline_task_agent] [iter-1] starting loop iteration
|
||||
[main] 2026-04-17T15:25:25.240Z [run-2026-04-17T15-25-25Z-0047239-000-inline_task_agent] [iter-1] exiting loop, reason: last message is from assistant and text
|
||||
[main] [InlineTasks] No response from agent for task
|
||||
[main] [InlineTasks] Updated knowledge/Today.md
|
||||
[main] [InlineTasks] No pending tasks found
|
||||
[main] [GitHub Copilot] Authorization pending, polling again...
|
||||
[main] [OAuth] Clearing Google auth cache
|
||||
[main] [GitHub Copilot] Authorization pending, polling again...
|
||||
[main] [GitHub Copilot] Authorization pending, polling again...
|
||||
[main] [EmailLabeling] Checking for unlabeled emails...
|
||||
[main] [EmailLabeling] No unlabeled emails found
|
||||
[main] [NoteTagging] Checking for untagged notes...
|
||||
[main] [NoteTagging] No untagged notes found
|
||||
[main] [GraphBuilder] Checking for new content in all sources...
|
||||
[main] [GraphBuilder] Starting voice memo processing...
|
||||
[main] [GraphBuilder] Checking directory: /home/wilber/.rowboat/knowledge/Voice Memos
|
||||
[main] [GraphBuilder] Directory does not exist
|
||||
[main] [GraphBuilder] No unprocessed voice memos found
|
||||
[main] [GraphBuilder] No new content to process
|
||||
[main] [OAuth] Clearing Google auth cache
|
||||
[main] [InlineTasks] Checking live notes...
|
||||
[main] [InlineTasks] Found 1 pending task(s) in knowledge/Today.md
|
||||
[main] [InlineTasks] Running task: "Create a daily brief for me..."
|
||||
[main] 2026-04-17T15:25:40.250Z [run-2026-04-17T15-25-40Z-0047239-000-inline_task_agent] using model: gpt-5.4
|
||||
[main] 2026-04-17T15:25:40.250Z [run-2026-04-17T15-25-40Z-0047239-000-inline_task_agent] [iter-1] starting loop iteration
|
||||
[main] 2026-04-17T15:25:40.250Z [run-2026-04-17T15-25-40Z-0047239-000-inline_task_agent] [iter-1] dequeued user message 2026-04-17T15-25-40Z-0047239-001
|
||||
[main] 2026-04-17T15:25:40.251Z [run-2026-04-17T15-25-40Z-0047239-000-inline_task_agent] [iter-1] running llm turn
|
||||
[main] ! SENDING payload to model: [{"role":"user","content":"Execute the following instruction from the note \"knowledge/Today.md\":\n\n**Instruction:** Create a daily brief for me\n\n**Full note content for context:**\n```markdown\n---\nlive_note: true\n---\n# Today\n\n```task\n{\"instruction\":\"Create a daily brief for me\",\"schedule\":{\"type\":\"cron\",\"expression\":\"*/15 * * * *\",\"startDate\":\"2026-04-17T14:33:30.959Z\",\"endDate\":\"2027-04-17T14:33:30.959Z\"},\"schedule-label\":\"runs every 15 minutes\",\"targetId\":\"dailybrief\"}\n```\n\n<!--task-target:dailybrief-->\n<!--/task-target:dailybrief-->\n\n```"}]
|
||||
[main] -> stream event {"type":"start"}
|
||||
[main] unknown stream event: {"type":"start"}
|
||||
[main] LoadAPIKeyError [AI_LoadAPIKeyError]: OpenAI API key is missing. Pass it using the 'apiKey' parameter or the OPENAI_API_KEY environment variable.
|
||||
[main] at loadApiKey (/home/wilber/rowboat/apps/x/apps/main/.package/dist/main.cjs:939836:11)
|
||||
[main] at Object.getHeaders2 [as headers] (/home/wilber/rowboat/apps/x/apps/main/.package/dist/main.cjs:953594:32)
|
||||
[main] at OpenAIResponsesLanguageModel.doStream (/home/wilber/rowboat/apps/x/apps/main/.package/dist/main.cjs:952713:43)
|
||||
[main] at async fn (/home/wilber/rowboat/apps/x/apps/main/.package/dist/main.cjs:948085:27)
|
||||
[main] at async /home/wilber/rowboat/apps/x/apps/main/.package/dist/main.cjs:944794:22
|
||||
[main] at async _retryWithExponentialBackoff (/home/wilber/rowboat/apps/x/apps/main/.package/dist/main.cjs:944933:12)
|
||||
[main] at async streamStep (/home/wilber/rowboat/apps/x/apps/main/.package/dist/main.cjs:948041:15)
|
||||
[main] at async fn (/home/wilber/rowboat/apps/x/apps/main/.package/dist/main.cjs:948382:9)
|
||||
[main] at async /home/wilber/rowboat/apps/x/apps/main/.package/dist/main.cjs:944794:22 {
|
||||
[main] cause: undefined,
|
||||
[main] [Symbol(vercel.ai.error)]: true,
|
||||
[main] [Symbol(vercel.ai.error.AI_LoadAPIKeyError)]: true
|
||||
[main] }
|
||||
[main] -> stream event {"type":"error","error":{"name":"AI_LoadAPIKeyError"}}
|
||||
[main] 2026-04-17T15:25:40.263Z [run-2026-04-17T15-25-40Z-0047239-000-inline_task_agent] using model: gpt-5.4
|
||||
[main] 2026-04-17T15:25:40.263Z [run-2026-04-17T15-25-40Z-0047239-000-inline_task_agent] [iter-1] starting loop iteration
|
||||
[main] 2026-04-17T15:25:40.263Z [run-2026-04-17T15-25-40Z-0047239-000-inline_task_agent] [iter-1] exiting loop, reason: last message is from assistant and text
|
||||
[main] [InlineTasks] No response from agent for task
|
||||
[main] [InlineTasks] Updated knowledge/Today.md
|
||||
[main] [InlineTasks] No pending tasks found
|
||||
[main] [GitHub Copilot] Authorization pending, polling again...
|
||||
[main] [OAuth] Clearing Google auth cache
|
||||
[main] [GitHub Copilot] Authorization pending, polling again...
|
||||
[main] [EmailLabeling] Checking for unlabeled emails...
|
||||
[main] [EmailLabeling] No unlabeled emails found
|
||||
[main] [NoteTagging] Checking for untagged notes...
|
||||
[main] [NoteTagging] No untagged notes found
|
||||
[main] [GraphBuilder] Checking for new content in all sources...
|
||||
[main] [GraphBuilder] Starting voice memo processing...
|
||||
[main] [GraphBuilder] Checking directory: /home/wilber/.rowboat/knowledge/Voice Memos
|
||||
[main] [GraphBuilder] Directory does not exist
|
||||
[main] [GraphBuilder] No unprocessed voice memos found
|
||||
[main] [GraphBuilder] No new content to process
|
||||
[main] [InlineTasks] Checking live notes...
|
||||
[main] [InlineTasks] Found 1 pending task(s) in knowledge/Today.md
|
||||
[main] [InlineTasks] Running task: "Create a daily brief for me..."
|
||||
[main] 2026-04-17T15:25:55.274Z [run-2026-04-17T15-25-55Z-0047239-000-inline_task_agent] using model: gpt-5.4
|
||||
[main] 2026-04-17T15:25:55.274Z [run-2026-04-17T15-25-55Z-0047239-000-inline_task_agent] [iter-1] starting loop iteration
|
||||
[main] 2026-04-17T15:25:55.274Z [run-2026-04-17T15-25-55Z-0047239-000-inline_task_agent] [iter-1] dequeued user message 2026-04-17T15-25-55Z-0047239-001
|
||||
[main] 2026-04-17T15:25:55.274Z [run-2026-04-17T15-25-55Z-0047239-000-inline_task_agent] [iter-1] running llm turn
|
||||
[main] ! SENDING payload to model: [{"role":"user","content":"Execute the following instruction from the note \"knowledge/Today.md\":\n\n**Instruction:** Create a daily brief for me\n\n**Full note content for context:**\n```markdown\n---\nlive_note: true\n---\n# Today\n\n```task\n{\"instruction\":\"Create a daily brief for me\",\"schedule\":{\"type\":\"cron\",\"expression\":\"*/15 * * * *\",\"startDate\":\"2026-04-17T14:33:30.959Z\",\"endDate\":\"2027-04-17T14:33:30.959Z\"},\"schedule-label\":\"runs every 15 minutes\",\"targetId\":\"dailybrief\"}\n```\n\n<!--task-target:dailybrief-->\n<!--/task-target:dailybrief-->\n\n```"}]
|
||||
[main] -> stream event {"type":"start"}
|
||||
[main] unknown stream event: {"type":"start"}
|
||||
[main] LoadAPIKeyError [AI_LoadAPIKeyError]: OpenAI API key is missing. Pass it using the 'apiKey' parameter or the OPENAI_API_KEY environment variable.
|
||||
[main] at loadApiKey (/home/wilber/rowboat/apps/x/apps/main/.package/dist/main.cjs:939836:11)
|
||||
[main] at Object.getHeaders2 [as headers] (/home/wilber/rowboat/apps/x/apps/main/.package/dist/main.cjs:953594:32)
|
||||
[main] at OpenAIResponsesLanguageModel.doStream (/home/wilber/rowboat/apps/x/apps/main/.package/dist/main.cjs:952713:43)
|
||||
[main] at async fn (/home/wilber/rowboat/apps/x/apps/main/.package/dist/main.cjs:948085:27)
|
||||
[main] at async /home/wilber/rowboat/apps/x/apps/main/.package/dist/main.cjs:944794:22
|
||||
[main] at async _retryWithExponentialBackoff (/home/wilber/rowboat/apps/x/apps/main/.package/dist/main.cjs:944933:12)
|
||||
[main] at async streamStep (/home/wilber/rowboat/apps/x/apps/main/.package/dist/main.cjs:948041:15)
|
||||
[main] at async fn (/home/wilber/rowboat/apps/x/apps/main/.package/dist/main.cjs:948382:9)
|
||||
[main] at async /home/wilber/rowboat/apps/x/apps/main/.package/dist/main.cjs:944794:22 {
|
||||
[main] cause: undefined,
|
||||
[main] [Symbol(vercel.ai.error)]: true,
|
||||
[main] [Symbol(vercel.ai.error.AI_LoadAPIKeyError)]: true
|
||||
[main] }
|
||||
[main] -> stream event {"type":"error","error":{"name":"AI_LoadAPIKeyError"}}
|
||||
[main] 2026-04-17T15:25:55.290Z [run-2026-04-17T15-25-55Z-0047239-000-inline_task_agent] using model: gpt-5.4
|
||||
[main] 2026-04-17T15:25:55.290Z [run-2026-04-17T15-25-55Z-0047239-000-inline_task_agent] [iter-1] starting loop iteration
|
||||
[main] 2026-04-17T15:25:55.290Z [run-2026-04-17T15-25-55Z-0047239-000-inline_task_agent] [iter-1] exiting loop, reason: last message is from assistant and text
|
||||
[main] [InlineTasks] No response from agent for task
|
||||
[main] [InlineTasks] Updated knowledge/Today.md
|
||||
[main] [InlineTasks] No pending tasks found
|
||||
[main] [GitHub Copilot] Authorization pending, polling again...
|
||||
[main] [OAuth] Clearing Google auth cache
|
||||
[main] [GitHub Copilot] Authorization pending, polling again...
|
||||
[main] Abriendo en una sesión existente del navegador
|
||||
[main] [GitHub Copilot] Authorization pending, polling again...
|
||||
[main] [EmailLabeling] Checking for unlabeled emails...
|
||||
[main] [EmailLabeling] No unlabeled emails found
|
||||
[main] [NoteTagging] Checking for untagged notes...
|
||||
[main] [NoteTagging] No untagged notes found
|
||||
[main] [GraphBuilder] Checking for new content in all sources...
|
||||
[main] [GraphBuilder] Starting voice memo processing...
|
||||
[main] [GraphBuilder] Checking directory: /home/wilber/.rowboat/knowledge/Voice Memos
|
||||
[main] [GraphBuilder] Directory does not exist
|
||||
[main] [GraphBuilder] No unprocessed voice memos found
|
||||
[main] [GraphBuilder] No new content to process
|
||||
[main] [OAuth] Clearing Google auth cache
|
||||
[main] [InlineTasks] Checking live notes...
|
||||
[main] [InlineTasks] Found 1 pending task(s) in knowledge/Today.md
|
||||
[main] [InlineTasks] Running task: "Create a daily brief for me..."
|
||||
[main] 2026-04-17T15:26:10.299Z [run-2026-04-17T15-26-10Z-0047239-000-inline_task_agent] using model: gpt-5.4
|
||||
[main] 2026-04-17T15:26:10.299Z [run-2026-04-17T15-26-10Z-0047239-000-inline_task_agent] [iter-1] starting loop iteration
|
||||
[main] 2026-04-17T15:26:10.299Z [run-2026-04-17T15-26-10Z-0047239-000-inline_task_agent] [iter-1] dequeued user message 2026-04-17T15-26-10Z-0047239-001
|
||||
[main] 2026-04-17T15:26:10.299Z [run-2026-04-17T15-26-10Z-0047239-000-inline_task_agent] [iter-1] running llm turn
|
||||
[main] ! SENDING payload to model: [{"role":"user","content":"Execute the following instruction from the note \"knowledge/Today.md\":\n\n**Instruction:** Create a daily brief for me\n\n**Full note content for context:**\n```markdown\n---\nlive_note: true\n---\n# Today\n\n```task\n{\"instruction\":\"Create a daily brief for me\",\"schedule\":{\"type\":\"cron\",\"expression\":\"*/15 * * * *\",\"startDate\":\"2026-04-17T14:33:30.959Z\",\"endDate\":\"2027-04-17T14:33:30.959Z\"},\"schedule-label\":\"runs every 15 minutes\",\"targetId\":\"dailybrief\"}\n```\n\n<!--task-target:dailybrief-->\n<!--/task-target:dailybrief-->\n\n```"}]
|
||||
[main] -> stream event {"type":"start"}
|
||||
[main] unknown stream event: {"type":"start"}
|
||||
[main] LoadAPIKeyError [AI_LoadAPIKeyError]: OpenAI API key is missing. Pass it using the 'apiKey' parameter or the OPENAI_API_KEY environment variable.
|
||||
[main] at loadApiKey (/home/wilber/rowboat/apps/x/apps/main/.package/dist/main.cjs:939836:11)
|
||||
[main] at Object.getHeaders2 [as headers] (/home/wilber/rowboat/apps/x/apps/main/.package/dist/main.cjs:953594:32)
|
||||
[main] at OpenAIResponsesLanguageModel.doStream (/home/wilber/rowboat/apps/x/apps/main/.package/dist/main.cjs:952713:43)
|
||||
[main] at async fn (/home/wilber/rowboat/apps/x/apps/main/.package/dist/main.cjs:948085:27)
|
||||
[main] at async /home/wilber/rowboat/apps/x/apps/main/.package/dist/main.cjs:944794:22
|
||||
[main] at async _retryWithExponentialBackoff (/home/wilber/rowboat/apps/x/apps/main/.package/dist/main.cjs:944933:12)
|
||||
[main] at async streamStep (/home/wilber/rowboat/apps/x/apps/main/.package/dist/main.cjs:948041:15)
|
||||
[main] at async fn (/home/wilber/rowboat/apps/x/apps/main/.package/dist/main.cjs:948382:9)
|
||||
[main] at async /home/wilber/rowboat/apps/x/apps/main/.package/dist/main.cjs:944794:22 {
|
||||
[main] cause: undefined,
|
||||
[main] [Symbol(vercel.ai.error)]: true,
|
||||
[main] [Symbol(vercel.ai.error.AI_LoadAPIKeyError)]: true
|
||||
[main] }
|
||||
[main] -> stream event {"type":"error","error":{"name":"AI_LoadAPIKeyError"}}
|
||||
[main] 2026-04-17T15:26:10.308Z [run-2026-04-17T15-26-10Z-0047239-000-inline_task_agent] using model: gpt-5.4
|
||||
[main] 2026-04-17T15:26:10.308Z [run-2026-04-17T15-26-10Z-0047239-000-inline_task_agent] [iter-1] starting loop iteration
|
||||
[main] 2026-04-17T15:26:10.308Z [run-2026-04-17T15-26-10Z-0047239-000-inline_task_agent] [iter-1] exiting loop, reason: last message is from assistant and text
|
||||
[main] [InlineTasks] No response from agent for task
|
||||
[main] [InlineTasks] Updated knowledge/Today.md
|
||||
[main] [InlineTasks] No pending tasks found
|
||||
[main] [GitHub Copilot] Authorization pending, polling again...
|
||||
[main] [GitHub Copilot] Authorization pending, polling again...
|
||||
[main] [OAuth] Clearing Google auth cache
|
||||
[main] [GitHub Copilot] Authorization pending, polling again...
|
||||
[main] [EmailLabeling] Checking for unlabeled emails...
|
||||
[main] [EmailLabeling] No unlabeled emails found
|
||||
[main] [NoteTagging] Checking for untagged notes...
|
||||
[main] [NoteTagging] No untagged notes found
|
||||
[main] [GraphBuilder] Checking for new content in all sources...
|
||||
[main] [GraphBuilder] Starting voice memo processing...
|
||||
[main] [GraphBuilder] Checking directory: /home/wilber/.rowboat/knowledge/Voice Memos
|
||||
[main] [GraphBuilder] Directory does not exist
|
||||
[main] [GraphBuilder] No unprocessed voice memos found
|
||||
[main] [GraphBuilder] No new content to process
|
||||
[main] [InlineTasks] Checking live notes...
|
||||
[main] [InlineTasks] Found 1 pending task(s) in knowledge/Today.md
|
||||
[main] [InlineTasks] Running task: "Create a daily brief for me..."
|
||||
[main] 2026-04-17T15:26:25.316Z [run-2026-04-17T15-26-25Z-0047239-000-inline_task_agent] using model: gpt-5.4
|
||||
[main] 2026-04-17T15:26:25.316Z [run-2026-04-17T15-26-25Z-0047239-000-inline_task_agent] [iter-1] starting loop iteration
|
||||
[main] 2026-04-17T15:26:25.316Z [run-2026-04-17T15-26-25Z-0047239-000-inline_task_agent] [iter-1] dequeued user message 2026-04-17T15-26-25Z-0047239-001
|
||||
[main] 2026-04-17T15:26:25.316Z [run-2026-04-17T15-26-25Z-0047239-000-inline_task_agent] [iter-1] running llm turn
|
||||
[main] ! SENDING payload to model: [{"role":"user","content":"Execute the following instruction from the note \"knowledge/Today.md\":\n\n**Instruction:** Create a daily brief for me\n\n**Full note content for context:**\n```markdown\n---\nlive_note: true\n---\n# Today\n\n```task\n{\"instruction\":\"Create a daily brief for me\",\"schedule\":{\"type\":\"cron\",\"expression\":\"*/15 * * * *\",\"startDate\":\"2026-04-17T14:33:30.959Z\",\"endDate\":\"2027-04-17T14:33:30.959Z\"},\"schedule-label\":\"runs every 15 minutes\",\"targetId\":\"dailybrief\"}\n```\n\n<!--task-target:dailybrief-->\n<!--/task-target:dailybrief-->\n\n```"}]
|
||||
[main] -> stream event {"type":"start"}
|
||||
[main] unknown stream event: {"type":"start"}
|
||||
[main] LoadAPIKeyError [AI_LoadAPIKeyError]: OpenAI API key is missing. Pass it using the 'apiKey' parameter or the OPENAI_API_KEY environment variable.
|
||||
[main] at loadApiKey (/home/wilber/rowboat/apps/x/apps/main/.package/dist/main.cjs:939836:11)
|
||||
[main] at Object.getHeaders2 [as headers] (/home/wilber/rowboat/apps/x/apps/main/.package/dist/main.cjs:953594:32)
|
||||
[main] at OpenAIResponsesLanguageModel.doStream (/home/wilber/rowboat/apps/x/apps/main/.package/dist/main.cjs:952713:43)
|
||||
[main] at async fn (/home/wilber/rowboat/apps/x/apps/main/.package/dist/main.cjs:948085:27)
|
||||
[main] at async /home/wilber/rowboat/apps/x/apps/main/.package/dist/main.cjs:944794:22
|
||||
[main] at async _retryWithExponentialBackoff (/home/wilber/rowboat/apps/x/apps/main/.package/dist/main.cjs:944933:12)
|
||||
[main] at async streamStep (/home/wilber/rowboat/apps/x/apps/main/.package/dist/main.cjs:948041:15)
|
||||
[main] at async fn (/home/wilber/rowboat/apps/x/apps/main/.package/dist/main.cjs:948382:9)
|
||||
[main] at async /home/wilber/rowboat/apps/x/apps/main/.package/dist/main.cjs:944794:22 {
|
||||
[main] cause: undefined,
|
||||
[main] [Symbol(vercel.ai.error)]: true,
|
||||
[main] [Symbol(vercel.ai.error.AI_LoadAPIKeyError)]: true
|
||||
[main] }
|
||||
[main] -> stream event {"type":"error","error":{"name":"AI_LoadAPIKeyError"}}
|
||||
[main] 2026-04-17T15:26:25.324Z [run-2026-04-17T15-26-25Z-0047239-000-inline_task_agent] using model: gpt-5.4
|
||||
[main] 2026-04-17T15:26:25.324Z [run-2026-04-17T15-26-25Z-0047239-000-inline_task_agent] [iter-1] starting loop iteration
|
||||
[main] 2026-04-17T15:26:25.324Z [run-2026-04-17T15-26-25Z-0047239-000-inline_task_agent] [iter-1] exiting loop, reason: last message is from assistant and text
|
||||
[main] [InlineTasks] No response from agent for task
|
||||
[main] [InlineTasks] Updated knowledge/Today.md
|
||||
[main] [InlineTasks] No pending tasks found
|
||||
[main] [GitHub Copilot] Authorization pending, polling again...
|
||||
[main] [OAuth] Clearing Google auth cache
|
||||
[main] [GitHub Copilot] Authorization pending, polling again...
|
||||
[main] [GitHub Copilot] Polling error: ZodError: [
|
||||
[main] {
|
||||
[main] "code": "invalid_value",
|
||||
[main] "values": [
|
||||
[main] "Bearer"
|
||||
[main] ],
|
||||
[main] "path": [
|
||||
[main] "token_type"
|
||||
[main] ],
|
||||
[main] "message": "Invalid input: expected \"Bearer\""
|
||||
[main] }
|
||||
[main] ]
|
||||
[main] at pollForToken (/home/wilber/rowboat/apps/x/apps/main/.package/dist/main.cjs:965133:34)
|
||||
[main] at process.processTicksAndRejections (node:internal/process/task_queues:105:5)
|
||||
[main] [EmailLabeling] Checking for unlabeled emails...
|
||||
[main] [EmailLabeling] No unlabeled emails found
|
||||
[main] [NoteTagging] Checking for untagged notes...
|
||||
[main] [NoteTagging] No untagged notes found
|
||||
[main] [GraphBuilder] Checking for new content in all sources...
|
||||
[main] [GraphBuilder] Starting voice memo processing...
|
||||
[main] [GraphBuilder] Checking directory: /home/wilber/.rowboat/knowledge/Voice Memos
|
||||
[main] [GraphBuilder] Directory does not exist
|
||||
[main] [GraphBuilder] No unprocessed voice memos found
|
||||
[main] [GraphBuilder] No new content to process
|
||||
[main] [OAuth] Clearing Google auth cache
|
||||
[main] [InlineTasks] Checking live notes...
|
||||
[main] [InlineTasks] Found 1 pending task(s) in knowledge/Today.md
|
||||
[main] [InlineTasks] Running task: "Create a daily brief for me..."
|
||||
[main] 2026-04-17T15:26:40.332Z [run-2026-04-17T15-26-40Z-0047239-000-inline_task_agent] using model: gpt-5.4
|
||||
[main] 2026-04-17T15:26:40.332Z [run-2026-04-17T15-26-40Z-0047239-000-inline_task_agent] [iter-1] starting loop iteration
|
||||
[main] 2026-04-17T15:26:40.332Z [run-2026-04-17T15-26-40Z-0047239-000-inline_task_agent] [iter-1] dequeued user message 2026-04-17T15-26-40Z-0047239-001
|
||||
[main] 2026-04-17T15:26:40.333Z [run-2026-04-17T15-26-40Z-0047239-000-inline_task_agent] [iter-1] running llm turn
|
||||
[main] ! SENDING payload to model: [{"role":"user","content":"Execute the following instruction from the note \"knowledge/Today.md\":\n\n**Instruction:** Create a daily brief for me\n\n**Full note content for context:**\n```markdown\n---\nlive_note: true\n---\n# Today\n\n```task\n{\"instruction\":\"Create a daily brief for me\",\"schedule\":{\"type\":\"cron\",\"expression\":\"*/15 * * * *\",\"startDate\":\"2026-04-17T14:33:30.959Z\",\"endDate\":\"2027-04-17T14:33:30.959Z\"},\"schedule-label\":\"runs every 15 minutes\",\"targetId\":\"dailybrief\"}\n```\n\n<!--task-target:dailybrief-->\n<!--/task-target:dailybrief-->\n\n```"}]
|
||||
[main] -> stream event {"type":"start"}
|
||||
[main] unknown stream event: {"type":"start"}
|
||||
[main] LoadAPIKeyError [AI_LoadAPIKeyError]: OpenAI API key is missing. Pass it using the 'apiKey' parameter or the OPENAI_API_KEY environment variable.
|
||||
[main] at loadApiKey (/home/wilber/rowboat/apps/x/apps/main/.package/dist/main.cjs:939836:11)
|
||||
[main] at Object.getHeaders2 [as headers] (/home/wilber/rowboat/apps/x/apps/main/.package/dist/main.cjs:953594:32)
|
||||
[main] at OpenAIResponsesLanguageModel.doStream (/home/wilber/rowboat/apps/x/apps/main/.package/dist/main.cjs:952713:43)
|
||||
[main] at async fn (/home/wilber/rowboat/apps/x/apps/main/.package/dist/main.cjs:948085:27)
|
||||
[main] at async /home/wilber/rowboat/apps/x/apps/main/.package/dist/main.cjs:944794:22
|
||||
[main] at async _retryWithExponentialBackoff (/home/wilber/rowboat/apps/x/apps/main/.package/dist/main.cjs:944933:12)
|
||||
[main] at async streamStep (/home/wilber/rowboat/apps/x/apps/main/.package/dist/main.cjs:948041:15)
|
||||
[main] at async fn (/home/wilber/rowboat/apps/x/apps/main/.package/dist/main.cjs:948382:9)
|
||||
[main] at async /home/wilber/rowboat/apps/x/apps/main/.package/dist/main.cjs:944794:22 {
|
||||
[main] cause: undefined,
|
||||
[main] [Symbol(vercel.ai.error)]: true,
|
||||
[main] [Symbol(vercel.ai.error.AI_LoadAPIKeyError)]: true
|
||||
[main] }
|
||||
[main] -> stream event {"type":"error","error":{"name":"AI_LoadAPIKeyError"}}
|
||||
[main] 2026-04-17T15:26:40.343Z [run-2026-04-17T15-26-40Z-0047239-000-inline_task_agent] using model: gpt-5.4
|
||||
[main] 2026-04-17T15:26:40.343Z [run-2026-04-17T15-26-40Z-0047239-000-inline_task_agent] [iter-1] starting loop iteration
|
||||
[main] 2026-04-17T15:26:40.343Z [run-2026-04-17T15-26-40Z-0047239-000-inline_task_agent] [iter-1] exiting loop, reason: last message is from assistant and text
|
||||
[main] [InlineTasks] No response from agent for task
|
||||
[main] [InlineTasks] Updated knowledge/Today.md
|
||||
[main] [InlineTasks] No pending tasks found
|
||||
[main] [GitHub Copilot] Polling error: ZodError: [
|
||||
[main] {
|
||||
[main] "code": "invalid_value",
|
||||
[main] "values": [
|
||||
[main] "Bearer"
|
||||
[main] ],
|
||||
[main] "path": [
|
||||
[main] "token_type"
|
||||
[main] ],
|
||||
[main] "message": "Invalid input: expected \"Bearer\""
|
||||
[main] }
|
||||
[main] ]
|
||||
[main] at pollForToken (/home/wilber/rowboat/apps/x/apps/main/.package/dist/main.cjs:965133:34)
|
||||
[main] at process.processTicksAndRejections (node:internal/process/task_queues:105:5)
|
||||
[main] [GitHub Copilot] Polling error: ZodError: [
|
||||
[main] {
|
||||
[main] "code": "invalid_value",
|
||||
[main] "values": [
|
||||
[main] "Bearer"
|
||||
[main] ],
|
||||
[main] "path": [
|
||||
[main] "token_type"
|
||||
[main] ],
|
||||
[main] "message": "Invalid input: expected \"Bearer\""
|
||||
[main] }
|
||||
[main] ]
|
||||
[main] at pollForToken (/home/wilber/rowboat/apps/x/apps/main/.package/dist/main.cjs:965133:34)
|
||||
[main] at process.processTicksAndRejections (node:internal/process/task_queues:105:5)
|
||||
[main] [OAuth] Clearing Google auth cache
|
||||
[renderer] npm run renderer exited with code SIGTERM
|
||||
--> Sending SIGTERM to other processes..
|
||||
[main] /home/wilber/rowboat/apps/x/node_modules/.pnpm/electron@39.2.7/node_modules/electron/dist/electron exited with signal SIGTERM
|
||||
[main] npm run main exited with code SIGTERM
|
||||
194
apps/x/dev.log
Normal file
194
apps/x/dev.log
Normal file
|
|
@ -0,0 +1,194 @@
|
|||
|
||||
> x@0.1.0 dev
|
||||
> npm run deps && concurrently -k "npm:renderer" "npm:main"
|
||||
|
||||
|
||||
> x@0.1.0 deps
|
||||
> npm run shared && npm run core && npm run preload
|
||||
|
||||
|
||||
> x@0.1.0 shared
|
||||
> cd packages/shared && npm run build
|
||||
|
||||
|
||||
> build
|
||||
> rm -rf dist && tsc
|
||||
|
||||
|
||||
> x@0.1.0 core
|
||||
> cd packages/core && npm run build
|
||||
|
||||
|
||||
> build
|
||||
> rm -rf dist && tsc
|
||||
|
||||
|
||||
> x@0.1.0 preload
|
||||
> cd apps/preload && npm run build
|
||||
|
||||
|
||||
> build
|
||||
> rm -rf dist && tsc && esbuild dist/preload.js --bundle --platform=node --format=cjs --external:electron --outfile=dist/preload.bundle.js && mv dist/preload.bundle.js dist/preload.js
|
||||
|
||||
|
||||
dist/preload.bundle.js 525.9kb
|
||||
|
||||
⚡ Done in 15ms
|
||||
[renderer]
|
||||
[renderer] > x@0.1.0 renderer
|
||||
[renderer] > cd apps/renderer && npm run dev
|
||||
[renderer]
|
||||
[main]
|
||||
[main] > x@0.1.0 main
|
||||
[main] > wait-on http://localhost:5173 && cd apps/main && npm run build && npm run start
|
||||
[main]
|
||||
[renderer]
|
||||
[renderer] > dev
|
||||
[renderer] > vite
|
||||
[renderer]
|
||||
[renderer]
|
||||
[renderer] VITE v7.3.0 ready in 221 ms
|
||||
[renderer]
|
||||
[renderer] ➜ Local: http://localhost:5173/
|
||||
[renderer] ➜ Network: use --host to expose
|
||||
[main]
|
||||
[main] > rowboat@0.1.0 build
|
||||
[main] > rm -rf dist && tsc && node bundle.mjs
|
||||
[main]
|
||||
[main] ✅ Main process bundled to .package/dist-bundle/main.js
|
||||
[main]
|
||||
[main] > rowboat@0.1.0 start
|
||||
[main] > electron .
|
||||
[main]
|
||||
[main] preloadPath /home/wilber/rowboat/apps/x/apps/preload/dist/preload.js
|
||||
[main] rendererPath /home/wilber/rowboat/apps/x/apps/renderer/dist
|
||||
[main] Starting Gmail Sync (TS)...
|
||||
[main] Will sync every 300 seconds.
|
||||
[main] Starting Google Calendar & Notes Sync (TS)...
|
||||
[main] Will sync every 300 seconds.
|
||||
[main] [Fireflies] Starting Fireflies Sync...
|
||||
[main] [Fireflies] Will sync every 1800 seconds.
|
||||
[main] [Fireflies] Syncing transcripts from the last 7 days.
|
||||
[main] [Granola] Starting Granola Sync...
|
||||
[main] [Granola] Will sync every 5 minutes.
|
||||
[main] [Granola] Notes will be saved to: /home/wilber/.rowboat/knowledge/Meetings/granola
|
||||
[main] [Granola] Starting sync...
|
||||
[main] [GraphBuilder] Starting Knowledge Graph Builder Service...
|
||||
[main] [GraphBuilder] Monitoring folders: gmail_sync, knowledge/Meetings/fireflies, knowledge/Meetings/granola, knowledge/Voice Memos
|
||||
[main] [GraphBuilder] Will check for new content every 15 seconds
|
||||
[main] [GraphBuilder] Checking for new content in all sources...
|
||||
[main] [GraphBuilder] Starting voice memo processing...
|
||||
[main] [GraphBuilder] Checking directory: /home/wilber/.rowboat/knowledge/Voice Memos
|
||||
[main] [GraphBuilder] Directory does not exist
|
||||
[main] [GraphBuilder] No unprocessed voice memos found
|
||||
[main] [EmailLabeling] Starting Email Labeling Service...
|
||||
[main] [EmailLabeling] Will check for unlabeled emails every 15 seconds
|
||||
[main] [EmailLabeling] Checking for unlabeled emails...
|
||||
[main] [EmailLabeling] No unlabeled emails found
|
||||
[main] [NoteTagging] Starting Note Tagging Service...
|
||||
[main] [NoteTagging] Will check for untagged notes every 15 seconds
|
||||
[main] [NoteTagging] Checking for untagged notes...
|
||||
[main] [NoteTagging] No untagged notes found
|
||||
[main] [InlineTasks] Starting Inline Task Service...
|
||||
[main] [InlineTasks] Will check for task blocks every 15 seconds
|
||||
[main] [InlineTasks] Checking live notes...
|
||||
[main] [InlineTasks] Found 1 pending task(s) in knowledge/Today.md
|
||||
[main] [InlineTasks] Running task: "Create a daily brief for me..."
|
||||
[main] [AgentRunner] Starting background agent runner service
|
||||
[main] [AgentNotes] Starting Agent Notes Service...
|
||||
[main] [AgentNotes] Will process every 10 seconds
|
||||
[main] [ChromeSync] Server disabled, watching config for changes...
|
||||
[main] [GraphBuilder] No new content to process
|
||||
[main] [Fireflies] Starting sync...
|
||||
[main] [Granola] Sync disabled in config
|
||||
[main] [Granola] Sleeping for 5 minutes...
|
||||
[main] Google OAuth credentials not available or missing required Gmail scope. Sleeping...
|
||||
[main] Sleeping for 300 seconds...
|
||||
[main] Google OAuth credentials not available or missing required Calendar/Drive scopes. Sleeping...
|
||||
[main] Sleeping for 300 seconds...
|
||||
[main] [Fireflies] Clearing auth cache
|
||||
[main] [Fireflies] No valid client available
|
||||
[main] [Fireflies] Sleeping for 1800 seconds...
|
||||
[main] [OAuth] Clearing Google auth cache
|
||||
[main] 2026-04-17T14:51:34.860Z [run-2026-04-17T14-51-34Z-0033765-000-inline_task_agent] using model: gpt-5.4
|
||||
[main] 2026-04-17T14:51:34.860Z [run-2026-04-17T14-51-34Z-0033765-000-inline_task_agent] [iter-1] starting loop iteration
|
||||
[main] 2026-04-17T14:51:34.860Z [run-2026-04-17T14-51-34Z-0033765-000-inline_task_agent] [iter-1] dequeued user message 2026-04-17T14-51-34Z-0033765-001
|
||||
[main] 2026-04-17T14:51:34.862Z [run-2026-04-17T14-51-34Z-0033765-000-inline_task_agent] [iter-1] running llm turn
|
||||
[main] ! SENDING payload to model: [{"role":"user","content":"Execute the following instruction from the note \"knowledge/Today.md\":\n\n**Instruction:** Create a daily brief for me\n\n**Full note content for context:**\n```markdown\n---\nlive_note: true\n---\n# Today\n\n```task\n{\"instruction\":\"Create a daily brief for me\",\"schedule\":{\"type\":\"cron\",\"expression\":\"*/15 * * * *\",\"startDate\":\"2026-04-17T14:33:30.959Z\",\"endDate\":\"2027-04-17T14:33:30.959Z\"},\"schedule-label\":\"runs every 15 minutes\",\"targetId\":\"dailybrief\"}\n```\n\n<!--task-target:dailybrief-->\n<!--/task-target:dailybrief-->\n\n```"}]
|
||||
[main] -> stream event {"type":"start"}
|
||||
[main] unknown stream event: {"type":"start"}
|
||||
[main] LoadAPIKeyError [AI_LoadAPIKeyError]: OpenAI API key is missing. Pass it using the 'apiKey' parameter or the OPENAI_API_KEY environment variable.
|
||||
[main] at loadApiKey (/home/wilber/rowboat/apps/x/apps/main/.package/dist/main.cjs:939803:11)
|
||||
[main] at Object.getHeaders2 [as headers] (/home/wilber/rowboat/apps/x/apps/main/.package/dist/main.cjs:953561:32)
|
||||
[main] at OpenAIResponsesLanguageModel.doStream (/home/wilber/rowboat/apps/x/apps/main/.package/dist/main.cjs:952680:43)
|
||||
[main] at async fn (/home/wilber/rowboat/apps/x/apps/main/.package/dist/main.cjs:948052:27)
|
||||
[main] at async /home/wilber/rowboat/apps/x/apps/main/.package/dist/main.cjs:944761:22
|
||||
[main] at async _retryWithExponentialBackoff (/home/wilber/rowboat/apps/x/apps/main/.package/dist/main.cjs:944900:12)
|
||||
[main] at async streamStep (/home/wilber/rowboat/apps/x/apps/main/.package/dist/main.cjs:948008:15)
|
||||
[main] at async fn (/home/wilber/rowboat/apps/x/apps/main/.package/dist/main.cjs:948349:9)
|
||||
[main] at async /home/wilber/rowboat/apps/x/apps/main/.package/dist/main.cjs:944761:22 {
|
||||
[main] cause: undefined,
|
||||
[main] [Symbol(vercel.ai.error)]: true,
|
||||
[main] [Symbol(vercel.ai.error.AI_LoadAPIKeyError)]: true
|
||||
[main] }
|
||||
[main] -> stream event {"type":"error","error":{"name":"AI_LoadAPIKeyError"}}
|
||||
[main] 2026-04-17T14:51:34.901Z [run-2026-04-17T14-51-34Z-0033765-000-inline_task_agent] using model: gpt-5.4
|
||||
[main] 2026-04-17T14:51:34.902Z [run-2026-04-17T14-51-34Z-0033765-000-inline_task_agent] [iter-1] starting loop iteration
|
||||
[main] 2026-04-17T14:51:34.902Z [run-2026-04-17T14-51-34Z-0033765-000-inline_task_agent] [iter-1] exiting loop, reason: last message is from assistant and text
|
||||
[main] [InlineTasks] No response from agent for task
|
||||
[main] [InlineTasks] Updated knowledge/Today.md
|
||||
[main] [InlineTasks] No pending tasks found
|
||||
[main] Error occurred in handler for 'workspace:readFile': [Error: ENOENT: no such file or directory, lstat '/home/wilber/.rowboat/config/exa-search.json'] {
|
||||
[main] errno: -2,
|
||||
[main] code: 'ENOENT',
|
||||
[main] syscall: 'lstat',
|
||||
[main] path: '/home/wilber/.rowboat/config/exa-search.json'
|
||||
[main] }
|
||||
[main] Error occurred in handler for 'workspace:readFile': [Error: ENOENT: no such file or directory, lstat '/home/wilber/.rowboat/config/exa-search.json'] {
|
||||
[main] errno: -2,
|
||||
[main] code: 'ENOENT',
|
||||
[main] syscall: 'lstat',
|
||||
[main] path: '/home/wilber/.rowboat/config/exa-search.json'
|
||||
[main] }
|
||||
[main] [OAuth] Clearing Google auth cache
|
||||
[main] [EmailLabeling] Checking for unlabeled emails...
|
||||
[main] [EmailLabeling] No unlabeled emails found
|
||||
[main] [NoteTagging] Checking for untagged notes...
|
||||
[main] [NoteTagging] No untagged notes found
|
||||
[main] [GraphBuilder] Checking for new content in all sources...
|
||||
[main] [GraphBuilder] Starting voice memo processing...
|
||||
[main] [GraphBuilder] Checking directory: /home/wilber/.rowboat/knowledge/Voice Memos
|
||||
[main] [GraphBuilder] Directory does not exist
|
||||
[main] [GraphBuilder] No unprocessed voice memos found
|
||||
[main] [GraphBuilder] No new content to process
|
||||
[main] [InlineTasks] Checking live notes...
|
||||
[main] [InlineTasks] Found 1 pending task(s) in knowledge/Today.md
|
||||
[main] [InlineTasks] Running task: "Create a daily brief for me..."
|
||||
[main] 2026-04-17T14:51:49.911Z [run-2026-04-17T14-51-49Z-0033765-000-inline_task_agent] using model: gpt-5.4
|
||||
[main] 2026-04-17T14:51:49.911Z [run-2026-04-17T14-51-49Z-0033765-000-inline_task_agent] [iter-1] starting loop iteration
|
||||
[main] 2026-04-17T14:51:49.911Z [run-2026-04-17T14-51-49Z-0033765-000-inline_task_agent] [iter-1] dequeued user message 2026-04-17T14-51-49Z-0033765-001
|
||||
[main] 2026-04-17T14:51:49.912Z [run-2026-04-17T14-51-49Z-0033765-000-inline_task_agent] [iter-1] running llm turn
|
||||
[main] ! SENDING payload to model: [{"role":"user","content":"Execute the following instruction from the note \"knowledge/Today.md\":\n\n**Instruction:** Create a daily brief for me\n\n**Full note content for context:**\n```markdown\n---\nlive_note: true\n---\n# Today\n\n```task\n{\"instruction\":\"Create a daily brief for me\",\"schedule\":{\"type\":\"cron\",\"expression\":\"*/15 * * * *\",\"startDate\":\"2026-04-17T14:33:30.959Z\",\"endDate\":\"2027-04-17T14:33:30.959Z\"},\"schedule-label\":\"runs every 15 minutes\",\"targetId\":\"dailybrief\"}\n```\n\n<!--task-target:dailybrief-->\n<!--/task-target:dailybrief-->\n\n```"}]
|
||||
[main] -> stream event {"type":"start"}
|
||||
[main] unknown stream event: {"type":"start"}
|
||||
[main] LoadAPIKeyError [AI_LoadAPIKeyError]: OpenAI API key is missing. Pass it using the 'apiKey' parameter or the OPENAI_API_KEY environment variable.
|
||||
[main] at loadApiKey (/home/wilber/rowboat/apps/x/apps/main/.package/dist/main.cjs:939803:11)
|
||||
[main] at Object.getHeaders2 [as headers] (/home/wilber/rowboat/apps/x/apps/main/.package/dist/main.cjs:953561:32)
|
||||
[main] at OpenAIResponsesLanguageModel.doStream (/home/wilber/rowboat/apps/x/apps/main/.package/dist/main.cjs:952680:43)
|
||||
[main] at async fn (/home/wilber/rowboat/apps/x/apps/main/.package/dist/main.cjs:948052:27)
|
||||
[main] at async /home/wilber/rowboat/apps/x/apps/main/.package/dist/main.cjs:944761:22
|
||||
[main] at async _retryWithExponentialBackoff (/home/wilber/rowboat/apps/x/apps/main/.package/dist/main.cjs:944900:12)
|
||||
[main] at async streamStep (/home/wilber/rowboat/apps/x/apps/main/.package/dist/main.cjs:948008:15)
|
||||
[main] at async fn (/home/wilber/rowboat/apps/x/apps/main/.package/dist/main.cjs:948349:9)
|
||||
[main] at async /home/wilber/rowboat/apps/x/apps/main/.package/dist/main.cjs:944761:22 {
|
||||
[main] cause: undefined,
|
||||
[main] [Symbol(vercel.ai.error)]: true,
|
||||
[main] [Symbol(vercel.ai.error.AI_LoadAPIKeyError)]: true
|
||||
[main] }
|
||||
[main] -> stream event {"type":"error","error":{"name":"AI_LoadAPIKeyError"}}
|
||||
[main] 2026-04-17T14:51:49.925Z [run-2026-04-17T14-51-49Z-0033765-000-inline_task_agent] using model: gpt-5.4
|
||||
[main] 2026-04-17T14:51:49.925Z [run-2026-04-17T14-51-49Z-0033765-000-inline_task_agent] [iter-1] starting loop iteration
|
||||
[main] 2026-04-17T14:51:49.925Z [run-2026-04-17T14-51-49Z-0033765-000-inline_task_agent] [iter-1] exiting loop, reason: last message is from assistant and text
|
||||
[main] [InlineTasks] No response from agent for task
|
||||
[main] [InlineTasks] Updated knowledge/Today.md
|
||||
[main] [InlineTasks] No pending tasks found
|
||||
|
|
@ -7,7 +7,7 @@ export const OAuthTokens = z.object({
|
|||
access_token: z.string(),
|
||||
refresh_token: z.string().nullable(),
|
||||
expires_at: z.number(), // Unix timestamp
|
||||
token_type: z.literal('Bearer').optional(),
|
||||
token_type: z.string().optional(), // Accept any token type (Bearer, bearer, etc.)
|
||||
scopes: z.array(z.string()).optional(), // Granted scopes from OAuth response
|
||||
});
|
||||
|
||||
|
|
|
|||
8
compile-output.log
Normal file
8
compile-output.log
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
npm error code ENOENT
|
||||
npm error syscall open
|
||||
npm error path /home/wilber/rowboat/package.json
|
||||
npm error errno -2
|
||||
npm error enoent Could not read package.json: Error: ENOENT: no such file or directory, open '/home/wilber/rowboat/package.json'
|
||||
npm error enoent This is related to npm not being able to find a file.
|
||||
npm error enoent
|
||||
npm error A complete log of this run can be found in: /home/wilber/.npm/_logs/2026-04-17T15_19_27_924Z-debug-0.log
|
||||
Loading…
Add table
Add a link
Reference in a new issue