neondeck 1.0.0-beta.4
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/CHANGELOG.md +22 -0
- package/DEVELOPMENT.md +310 -0
- package/LICENSE +21 -0
- package/README.md +128 -0
- package/SOUL.md +8 -0
- package/bin/neondeck.mjs +27 -0
- package/config/dashboard.json +208 -0
- package/config/dashboard.schema.json +207 -0
- package/dist/SOUL.md +8 -0
- package/dist/assets/app-BuuvLo98.js +3620 -0
- package/dist/assets/app-BuuvLo98.js.map +1 -0
- package/dist/assets/autopilot-CKgEx8yQ.js +68025 -0
- package/dist/assets/autopilot-CKgEx8yQ.js.map +1 -0
- package/dist/assets/briefing-DYVbJaqk.js +2 -0
- package/dist/assets/briefing-DoO-fJr1.js +22 -0
- package/dist/assets/briefing-DoO-fJr1.js.map +1 -0
- package/dist/assets/command-run-B2TWLpLL.js +20 -0
- package/dist/assets/command-run-B2TWLpLL.js.map +1 -0
- package/dist/assets/command-run-CzQra_Y7.js +2 -0
- package/dist/assets/display-assistant-CbCRBSYM.js +389 -0
- package/dist/assets/display-assistant-CbCRBSYM.js.map +1 -0
- package/dist/assets/fix-pr-ci-BlUl-2ht.js +46 -0
- package/dist/assets/fix-pr-ci-BlUl-2ht.js.map +1 -0
- package/dist/assets/fix-pr-ci-Dl1wpKXp.js +2 -0
- package/dist/assets/migrations/20260710061339_neondeck_pre_1_0_baseline/migration.sql +748 -0
- package/dist/assets/migrations/20260710061339_neondeck_pre_1_0_baseline/snapshot.json +7240 -0
- package/dist/assets/prepare-pr-worktree-CLzccRYh.js +2 -0
- package/dist/assets/prepare-pr-worktree-DxyTygiU.js +17 -0
- package/dist/assets/prepare-pr-worktree-DxyTygiU.js.map +1 -0
- package/dist/assets/push-pr-autofix-BFNSEASU.js +2 -0
- package/dist/assets/push-pr-autofix-DlVjw1IN.js +17 -0
- package/dist/assets/push-pr-autofix-DlVjw1IN.js.map +1 -0
- package/dist/assets/review-pr-for-human-B2j8wz2L.js +2 -0
- package/dist/assets/review-pr-for-human-DcGE-7wb.js +708 -0
- package/dist/assets/review-pr-for-human-DcGE-7wb.js.map +1 -0
- package/dist/assets/safety-CawD9GxD.js +2499 -0
- package/dist/assets/safety-CawD9GxD.js.map +1 -0
- package/dist/assets/scheduled-agent-instruction-CQgogBv3.js +22 -0
- package/dist/assets/scheduled-agent-instruction-CQgogBv3.js.map +1 -0
- package/dist/assets/scheduled-agent-instruction-Dr2ebZRD.js +2 -0
- package/dist/assets/scheduler-tick-Cy26qBld.js +105 -0
- package/dist/assets/scheduler-tick-Cy26qBld.js.map +1 -0
- package/dist/assets/skills/github-gh/SKILL.md +56 -0
- package/dist/assets/skills/neon-ci-fix/SKILL.md +15 -0
- package/dist/assets/skills/neon-docs-fix/SKILL.md +15 -0
- package/dist/assets/skills/neon-issue-triage/SKILL.md +13 -0
- package/dist/assets/skills/neon-pr-review/SKILL.md +19 -0
- package/dist/assets/skills/neondeck/SKILL.md +123 -0
- package/dist/assets/skills/neondeck-handoff/SKILL.md +31 -0
- package/dist/assets/triage-pr-event-BlE3GKNR.js +17 -0
- package/dist/assets/triage-pr-event-BlE3GKNR.js.map +1 -0
- package/dist/assets/triage-pr-event-hxUP587F.js +2 -0
- package/dist/assets/verify-then-push-pr-autofix-CIl5ZwZm.js +2 -0
- package/dist/assets/verify-then-push-pr-autofix-Djy0UFUv.js +75 -0
- package/dist/assets/verify-then-push-pr-autofix-Djy0UFUv.js.map +1 -0
- package/dist/config/dashboard.json +208 -0
- package/dist/config/dashboard.schema.json +207 -0
- package/dist/server.mjs +582 -0
- package/dist/server.mjs.map +1 -0
- package/dist/skills/github-gh/SKILL.md +56 -0
- package/dist/skills/neon-ci-fix/SKILL.md +15 -0
- package/dist/skills/neon-docs-fix/SKILL.md +15 -0
- package/dist/skills/neon-issue-triage/SKILL.md +13 -0
- package/dist/skills/neon-pr-review/SKILL.md +19 -0
- package/dist/skills/neondeck/SKILL.md +123 -0
- package/dist/skills/neondeck-handoff/SKILL.md +31 -0
- package/drizzle.config.ts +7 -0
- package/package.json +155 -0
- package/shared/patch-anchors.ts +78 -0
- package/src/agents/busywork-workflow.ts +24 -0
- package/src/agents/display-assistant.ts +134 -0
- package/src/agents/pr-review-assistant.ts +25 -0
- package/src/agents/scheduler-workflow.ts +20 -0
- package/src/agents/support/tools.ts +346 -0
- package/src/app.ts +1 -0
- package/src/cli/index.ts +560 -0
- package/src/cli/learning.ts +44 -0
- package/src/cli/mcp.ts +496 -0
- package/src/cli/modules.ts +107 -0
- package/src/cli/onboarding.ts +667 -0
- package/src/cli/options.ts +103 -0
- package/src/cli/output.ts +399 -0
- package/src/cli/preapprovals.ts +204 -0
- package/src/cli/prompts.ts +108 -0
- package/src/cli/types.ts +59 -0
- package/src/db.ts +41 -0
- package/src/desktop/open.ts +698 -0
- package/src/desktop/service.ts +863 -0
- package/src/domains/mcp/actions.ts +420 -0
- package/src/domains/mcp/config.ts +501 -0
- package/src/domains/mcp/format.ts +35 -0
- package/src/domains/mcp/gate.ts +188 -0
- package/src/domains/mcp/index.ts +9 -0
- package/src/domains/mcp/instructions.ts +18 -0
- package/src/domains/mcp/oauth.ts +1063 -0
- package/src/domains/mcp/policy.ts +15 -0
- package/src/domains/mcp/registry.ts +461 -0
- package/src/domains/mcp/schemas.ts +171 -0
- package/src/domains/mcp/stdio.ts +451 -0
- package/src/domains/mcp/store.ts +905 -0
- package/src/domains/mcp/tools.ts +119 -0
- package/src/lib/action-result.ts +51 -0
- package/src/lib/exec.ts +118 -0
- package/src/lib/git.ts +20 -0
- package/src/lib/report-html.ts +193 -0
- package/src/lib/sqlite.ts +51 -0
- package/src/lib/valibot.ts +33 -0
- package/src/modules/app-state/index.ts +5 -0
- package/src/modules/app-state/native-notifications.ts +76 -0
- package/src/modules/app-state/notification-events.ts +45 -0
- package/src/modules/app-state/notifications.ts +276 -0
- package/src/modules/app-state/types.ts +42 -0
- package/src/modules/app-state/workflow-summaries.ts +201 -0
- package/src/modules/autonomous-audit/index.ts +225 -0
- package/src/modules/autopilot/actions.ts +165 -0
- package/src/modules/autopilot/admissions.ts +865 -0
- package/src/modules/autopilot/approvals.ts +59 -0
- package/src/modules/autopilot/ci-fix-run.ts +1332 -0
- package/src/modules/autopilot/ci-fix.ts +692 -0
- package/src/modules/autopilot/comments.ts +426 -0
- package/src/modules/autopilot/fixtures.ts +344 -0
- package/src/modules/autopilot/github-facts.ts +303 -0
- package/src/modules/autopilot/index.ts +64 -0
- package/src/modules/autopilot/notifications.ts +271 -0
- package/src/modules/autopilot/push-support.ts +288 -0
- package/src/modules/autopilot/push.ts +661 -0
- package/src/modules/autopilot/recovery.ts +656 -0
- package/src/modules/autopilot/review-feedback.ts +651 -0
- package/src/modules/autopilot/review-support.ts +524 -0
- package/src/modules/autopilot/revision-run.ts +445 -0
- package/src/modules/autopilot/schemas.ts +485 -0
- package/src/modules/autopilot/state-mappers.ts +512 -0
- package/src/modules/autopilot/state-schemas.ts +451 -0
- package/src/modules/autopilot/state-store.ts +183 -0
- package/src/modules/autopilot/state.ts +255 -0
- package/src/modules/autopilot/triage-support.ts +234 -0
- package/src/modules/autopilot/triage.ts +156 -0
- package/src/modules/autopilot/utils.ts +145 -0
- package/src/modules/autopilot/worktree.ts +622 -0
- package/src/modules/autopilot-policy/config.ts +110 -0
- package/src/modules/autopilot-policy/index.ts +4 -0
- package/src/modules/autopilot-policy/risk.ts +359 -0
- package/src/modules/autopilot-policy/schemas.ts +284 -0
- package/src/modules/autopilot-policy/service.ts +304 -0
- package/src/modules/commands/actions.ts +112 -0
- package/src/modules/commands/handlers/index.ts +3 -0
- package/src/modules/commands/handlers/misc.ts +441 -0
- package/src/modules/commands/handlers/queue.ts +694 -0
- package/src/modules/commands/handlers/repo.ts +339 -0
- package/src/modules/commands/index.ts +5 -0
- package/src/modules/commands/registry.ts +157 -0
- package/src/modules/commands/runner.ts +152 -0
- package/src/modules/commands/schemas.ts +107 -0
- package/src/modules/commands/summaries.ts +92 -0
- package/src/modules/commands/utils.ts +113 -0
- package/src/modules/config/actions.ts +253 -0
- package/src/modules/config/events.ts +80 -0
- package/src/modules/config/files.ts +9 -0
- package/src/modules/config/history.ts +74 -0
- package/src/modules/config/index.ts +9 -0
- package/src/modules/config/mutations/dashboard.ts +319 -0
- package/src/modules/config/mutations/execution.ts +89 -0
- package/src/modules/config/mutations/models.ts +467 -0
- package/src/modules/config/mutations/providers.ts +163 -0
- package/src/modules/config/mutations/repos.ts +620 -0
- package/src/modules/config/read.ts +135 -0
- package/src/modules/config/result.ts +66 -0
- package/src/modules/config/schemas.ts +181 -0
- package/src/modules/docs-drift/index.ts +1 -0
- package/src/modules/docs-drift/service.ts +863 -0
- package/src/modules/execution/actions.ts +35 -0
- package/src/modules/execution/approvals.ts +322 -0
- package/src/modules/execution/exedev/checkouts.ts +356 -0
- package/src/modules/execution/exedev/context.ts +286 -0
- package/src/modules/execution/index.ts +7 -0
- package/src/modules/execution/policy.ts +102 -0
- package/src/modules/execution/run.ts +589 -0
- package/src/modules/execution/schemas.ts +116 -0
- package/src/modules/execution/scope.ts +137 -0
- package/src/modules/execution/store.ts +320 -0
- package/src/modules/execution/utils.ts +105 -0
- package/src/modules/execution-policy/index.ts +424 -0
- package/src/modules/flue/execution-context.ts +41 -0
- package/src/modules/github/actions.ts +334 -0
- package/src/modules/github/checks.ts +484 -0
- package/src/modules/github/client.ts +110 -0
- package/src/modules/github/comments.ts +204 -0
- package/src/modules/github/errors.ts +50 -0
- package/src/modules/github/index.ts +92 -0
- package/src/modules/github/issues.ts +116 -0
- package/src/modules/github/pr-file-cache.ts +264 -0
- package/src/modules/github/pull-requests.ts +384 -0
- package/src/modules/github/queue.ts +342 -0
- package/src/modules/github/reviews.ts +1421 -0
- package/src/modules/github/schemas.ts +794 -0
- package/src/modules/github/state-truncation.ts +31 -0
- package/src/modules/handoff/index.ts +2 -0
- package/src/modules/handoff/schemas.ts +61 -0
- package/src/modules/handoff/service.ts +587 -0
- package/src/modules/hygiene/index.ts +1 -0
- package/src/modules/hygiene/service.ts +513 -0
- package/src/modules/kilo/actions.ts +229 -0
- package/src/modules/kilo/ci-fix-run-reconcile.ts +299 -0
- package/src/modules/kilo/docs-drift-boundary.ts +178 -0
- package/src/modules/kilo/index.ts +8 -0
- package/src/modules/kilo/notifications.ts +295 -0
- package/src/modules/kilo/process.ts +637 -0
- package/src/modules/kilo/results/actions.ts +66 -0
- package/src/modules/kilo/results/gates.ts +227 -0
- package/src/modules/kilo/results/index.ts +23 -0
- package/src/modules/kilo/results/schemas.ts +112 -0
- package/src/modules/kilo/results/service.ts +512 -0
- package/src/modules/kilo/results/state.ts +508 -0
- package/src/modules/kilo/results/verify.ts +328 -0
- package/src/modules/kilo/revision-reconcile.ts +187 -0
- package/src/modules/kilo/runtime-facts.ts +128 -0
- package/src/modules/kilo/schemas.ts +265 -0
- package/src/modules/kilo/service.ts +714 -0
- package/src/modules/kilo/sessions-adapters.ts +343 -0
- package/src/modules/kilo/sessions.ts +446 -0
- package/src/modules/kilo/store.ts +689 -0
- package/src/modules/kilo/utils.ts +166 -0
- package/src/modules/learning/automation-health.ts +441 -0
- package/src/modules/learning/automation-memory.ts +179 -0
- package/src/modules/learning/index.ts +6 -0
- package/src/modules/learning/observability.ts +616 -0
- package/src/modules/learning/operator.ts +404 -0
- package/src/modules/learning/reviews/agents.ts +33 -0
- package/src/modules/learning/reviews/complete.ts +321 -0
- package/src/modules/learning/reviews/context.ts +145 -0
- package/src/modules/learning/reviews/events.ts +306 -0
- package/src/modules/learning/reviews/index.ts +6 -0
- package/src/modules/learning/reviews/pr-cadence.ts +157 -0
- package/src/modules/learning/reviews/pr-context.ts +749 -0
- package/src/modules/learning/reviews/prepare.ts +387 -0
- package/src/modules/learning/reviews/schemas.ts +184 -0
- package/src/modules/learning/reviews/store.ts +405 -0
- package/src/modules/learning/skill-patches/actions.ts +86 -0
- package/src/modules/learning/skill-patches/index.ts +3 -0
- package/src/modules/learning/skill-patches/schemas.ts +60 -0
- package/src/modules/learning/skill-patches/service.ts +571 -0
- package/src/modules/learning/skill-patches/support.ts +417 -0
- package/src/modules/memory/actions.ts +183 -0
- package/src/modules/memory/candidates.ts +525 -0
- package/src/modules/memory/events.ts +2 -0
- package/src/modules/memory/index.ts +6 -0
- package/src/modules/memory/prompt.ts +214 -0
- package/src/modules/memory/schemas.ts +170 -0
- package/src/modules/memory/service.ts +578 -0
- package/src/modules/memory/store.ts +489 -0
- package/src/modules/pr-events/actions.ts +191 -0
- package/src/modules/pr-events/index.ts +45 -0
- package/src/modules/pr-events/schemas.ts +186 -0
- package/src/modules/pr-events/service.ts +1414 -0
- package/src/modules/pr-events/target.ts +222 -0
- package/src/modules/pr-events/utils.ts +85 -0
- package/src/modules/pr-events/watermarks.ts +308 -0
- package/src/modules/pr-local-diffs/index.ts +334 -0
- package/src/modules/pr-review-assist/actions.ts +199 -0
- package/src/modules/pr-review-assist/index.ts +3 -0
- package/src/modules/pr-review-assist/schemas.ts +74 -0
- package/src/modules/pr-review-assist/service.ts +656 -0
- package/src/modules/prepared-diffs/actions.ts +132 -0
- package/src/modules/prepared-diffs/index.ts +53 -0
- package/src/modules/prepared-diffs/schemas.ts +255 -0
- package/src/modules/prepared-diffs/service.ts +777 -0
- package/src/modules/prepared-diffs/store.ts +606 -0
- package/src/modules/reports/index.ts +1 -0
- package/src/modules/reports/service.ts +322 -0
- package/src/modules/repos/index.ts +3 -0
- package/src/modules/repos/model-discovery.ts +233 -0
- package/src/modules/repos/providers.ts +194 -0
- package/src/modules/repos/registry.ts +232 -0
- package/src/modules/runtime/agent-config.ts +167 -0
- package/src/modules/runtime/doctor.ts +528 -0
- package/src/modules/runtime/env.ts +123 -0
- package/src/modules/runtime/index.ts +12 -0
- package/src/modules/runtime/local-api-auth.ts +43 -0
- package/src/modules/runtime/metrics.ts +211 -0
- package/src/modules/runtime/skills-actions.ts +141 -0
- package/src/modules/runtime/skills.ts +689 -0
- package/src/modules/runtime/soul.ts +68 -0
- package/src/modules/runtime/status-database.ts +252 -0
- package/src/modules/runtime/status-schema.ts +149 -0
- package/src/modules/runtime/status.ts +482 -0
- package/src/modules/runtime/subagents.ts +37 -0
- package/src/modules/runtime/utility-model.ts +47 -0
- package/src/modules/safety/index.ts +3 -0
- package/src/modules/safety/policy-entries.ts +2432 -0
- package/src/modules/safety/schemas.ts +63 -0
- package/src/modules/safety/service.ts +58 -0
- package/src/modules/safety/tools.ts +15 -0
- package/src/modules/scheduled-tasks/actions.ts +113 -0
- package/src/modules/scheduled-tasks/dispatch.ts +105 -0
- package/src/modules/scheduled-tasks/index.ts +6 -0
- package/src/modules/scheduled-tasks/schemas.ts +91 -0
- package/src/modules/scheduled-tasks/service.ts +296 -0
- package/src/modules/scheduled-tasks/store.ts +814 -0
- package/src/modules/scheduled-tasks/triggers.ts +87 -0
- package/src/modules/scheduler/actions.ts +37 -0
- package/src/modules/scheduler/dispatch.ts +126 -0
- package/src/modules/scheduler/index.ts +4 -0
- package/src/modules/scheduler/lease.ts +247 -0
- package/src/modules/scheduler/pr-watch-event-deltas.ts +367 -0
- package/src/modules/scheduler/pr-watch-events.ts +834 -0
- package/src/modules/scheduler/schemas.ts +79 -0
- package/src/modules/scheduler/service.ts +228 -0
- package/src/modules/scheduler/utils.ts +106 -0
- package/src/modules/scheduler/workflow-invocation.ts +40 -0
- package/src/modules/sessions/actions.ts +213 -0
- package/src/modules/sessions/active-session.ts +46 -0
- package/src/modules/sessions/agent-context.ts +146 -0
- package/src/modules/sessions/approval-nudges.ts +156 -0
- package/src/modules/sessions/events.ts +58 -0
- package/src/modules/sessions/index.ts +10 -0
- package/src/modules/sessions/queries.ts +252 -0
- package/src/modules/sessions/references.ts +113 -0
- package/src/modules/sessions/schemas.ts +263 -0
- package/src/modules/sessions/service.ts +845 -0
- package/src/modules/sessions/store.ts +559 -0
- package/src/modules/sessions/summaries.ts +129 -0
- package/src/modules/sessions/utils.ts +18 -0
- package/src/modules/watches/actions.ts +115 -0
- package/src/modules/watches/index.ts +6 -0
- package/src/modules/watches/polling.ts +245 -0
- package/src/modules/watches/references.ts +293 -0
- package/src/modules/watches/schemas.ts +156 -0
- package/src/modules/watches/service.ts +558 -0
- package/src/modules/watches/store.ts +398 -0
- package/src/modules/watches/utils.ts +51 -0
- package/src/modules/worktree-verification/index.ts +256 -0
- package/src/modules/worktrees/access.ts +129 -0
- package/src/modules/worktrees/actions.ts +108 -0
- package/src/modules/worktrees/cleanup.ts +98 -0
- package/src/modules/worktrees/errors.ts +38 -0
- package/src/modules/worktrees/git.ts +48 -0
- package/src/modules/worktrees/index.ts +5 -0
- package/src/modules/worktrees/locks.ts +192 -0
- package/src/modules/worktrees/paths.ts +209 -0
- package/src/modules/worktrees/queries.ts +31 -0
- package/src/modules/worktrees/schemas.ts +234 -0
- package/src/modules/worktrees/service.ts +657 -0
- package/src/modules/worktrees/store.ts +414 -0
- package/src/repo-edit/actions.ts +129 -0
- package/src/repo-edit/audit.ts +180 -0
- package/src/repo-edit/fuzzy-replace.ts +256 -0
- package/src/repo-edit/git.ts +784 -0
- package/src/repo-edit/index.ts +4 -0
- package/src/repo-edit/locks.ts +27 -0
- package/src/repo-edit/patch-parser.ts +212 -0
- package/src/repo-edit/patch-service.ts +572 -0
- package/src/repo-edit/path-safety.ts +294 -0
- package/src/repo-edit/schemas.ts +220 -0
- package/src/repo-edit/service.ts +488 -0
- package/src/repo-edit/support.ts +459 -0
- package/src/runtime-home/app-db/index.ts +73 -0
- package/src/runtime-home/app-db/migrate.ts +491 -0
- package/src/runtime-home/app-db/migrations/20260710061339_neondeck_pre_1_0_baseline/migration.sql +748 -0
- package/src/runtime-home/app-db/migrations/20260710061339_neondeck_pre_1_0_baseline/snapshot.json +7240 -0
- package/src/runtime-home/app-db/reconcile.ts +155 -0
- package/src/runtime-home/app-db/schema.ts +1118 -0
- package/src/runtime-home/bootstrap.ts +171 -0
- package/src/runtime-home/defaults.ts +42 -0
- package/src/runtime-home/files.ts +193 -0
- package/src/runtime-home/index.ts +68 -0
- package/src/runtime-home/paths.ts +75 -0
- package/src/runtime-home/schemas.ts +485 -0
- package/src/sandboxes/exedev.ts +676 -0
- package/src/server/app.ts +5 -0
- package/src/server/autopilot-push-dispatch.ts +326 -0
- package/src/server/create-app.ts +160 -0
- package/src/server/events/config-stream.ts +67 -0
- package/src/server/events/notification-stream.ts +49 -0
- package/src/server/events/session-stream.ts +49 -0
- package/src/server/http.ts +56 -0
- package/src/server/learning-hooks.ts +430 -0
- package/src/server/middleware.ts +81 -0
- package/src/server/routes/autopilot.ts +318 -0
- package/src/server/routes/commands.ts +12 -0
- package/src/server/routes/config.ts +124 -0
- package/src/server/routes/execution.ts +71 -0
- package/src/server/routes/github.ts +372 -0
- package/src/server/routes/handoff.ts +69 -0
- package/src/server/routes/kilo.ts +179 -0
- package/src/server/routes/learning.ts +384 -0
- package/src/server/routes/mcp.ts +301 -0
- package/src/server/routes/memory.ts +99 -0
- package/src/server/routes/metrics.ts +12 -0
- package/src/server/routes/notifications.ts +48 -0
- package/src/server/routes/repo-edit.ts +115 -0
- package/src/server/routes/reports.ts +127 -0
- package/src/server/routes/repos.ts +50 -0
- package/src/server/routes/runtime.ts +48 -0
- package/src/server/routes/safety.ts +13 -0
- package/src/server/routes/scheduled-tasks.ts +58 -0
- package/src/server/routes/scheduler.ts +13 -0
- package/src/server/routes/sessions.ts +216 -0
- package/src/server/routes/skills.ts +103 -0
- package/src/server/routes/watches.ts +81 -0
- package/src/server/routes/workflows.ts +21 -0
- package/src/server/routes/worktrees.ts +64 -0
- package/src/server/scheduler-workflow.ts +541 -0
- package/src/server/serve.ts +100 -0
- package/src/setup.ts +162 -0
- package/src/skills/github-gh/SKILL.md +56 -0
- package/src/skills/neon-ci-fix/SKILL.md +15 -0
- package/src/skills/neon-docs-fix/SKILL.md +15 -0
- package/src/skills/neon-issue-triage/SKILL.md +13 -0
- package/src/skills/neon-pr-review/SKILL.md +19 -0
- package/src/skills/neondeck/SKILL.md +123 -0
- package/src/skills/neondeck-handoff/SKILL.md +31 -0
- package/src/workflows/briefing.ts +14 -0
- package/src/workflows/command-run.ts +15 -0
- package/src/workflows/comment-pr-autofix-result.ts +10 -0
- package/src/workflows/curate_learning_store.ts +37 -0
- package/src/workflows/dev-doctor.ts +10 -0
- package/src/workflows/fix-pr-ci-failure.ts +10 -0
- package/src/workflows/fix-pr-ci.ts +15 -0
- package/src/workflows/fix-pr-review-feedback.ts +10 -0
- package/src/workflows/handoff_to_kilo.ts +10 -0
- package/src/workflows/prepare-pr-worktree.ts +10 -0
- package/src/workflows/promote_kilo_result.ts +10 -0
- package/src/workflows/push-pr-autofix.ts +10 -0
- package/src/workflows/reconcile_kilo_task.ts +10 -0
- package/src/workflows/review-pr-for-human.ts +15 -0
- package/src/workflows/review_conversation_for_learning.ts +37 -0
- package/src/workflows/review_kilo_result.ts +10 -0
- package/src/workflows/review_pr_batch_for_learning.ts +37 -0
- package/src/workflows/scheduled-agent-instruction.ts +16 -0
- package/src/workflows/scheduler-tick.ts +10 -0
- package/src/workflows/summarize_kilo_session.ts +25 -0
- package/src/workflows/triage-pr-event.ts +10 -0
- package/src/workflows/verify-pr-worktree.ts +10 -0
- package/src/workflows/verify-then-push-pr-autofix.ts +82 -0
- package/src/workflows/verify_kilo_result.ts +10 -0
- package/src/workflows/watch-pr.ts +10 -0
- package/web/dist/assets/GitHubPrReview-QK9oqeDs.js +2 -0
- package/web/dist/assets/MultiFileView-CMm6tA9f.js +2970 -0
- package/web/dist/assets/abap-CLvhMVsD.js +1 -0
- package/web/dist/assets/actionscript-3--17pq3dv.js +1 -0
- package/web/dist/assets/ada-C5qYipkI.js +1 -0
- package/web/dist/assets/andromeeda-vGVdxbeo.js +1 -0
- package/web/dist/assets/angular-html-BVBpGdXr.js +1 -0
- package/web/dist/assets/angular-ts-BfdufMKP.js +1 -0
- package/web/dist/assets/apache-U0d_L8uA.js +1 -0
- package/web/dist/assets/apex-VAyPSnFM.js +1 -0
- package/web/dist/assets/apl-DWBSSoBH.js +1 -0
- package/web/dist/assets/applescript-CCn79oCD.js +1 -0
- package/web/dist/assets/ara-4CJ0cIlV.js +1 -0
- package/web/dist/assets/asciidoc-DE70LPWp.js +1 -0
- package/web/dist/assets/asm-Cmm7eHzH.js +1 -0
- package/web/dist/assets/astro-3LtMP0Sq.js +1 -0
- package/web/dist/assets/aurora-x-CDeNXAV0.js +1 -0
- package/web/dist/assets/awk-BWXHIvNe.js +1 -0
- package/web/dist/assets/ayu-dark-DluEY0Gj.js +1 -0
- package/web/dist/assets/ayu-light-C3h-C4tm.js +1 -0
- package/web/dist/assets/ayu-mirage-Bqwy1Gya.js +1 -0
- package/web/dist/assets/ballerina-B7ZEbQpA.js +1 -0
- package/web/dist/assets/bat-Bo4NYOV-.js +1 -0
- package/web/dist/assets/beancount-D-usSTwE.js +1 -0
- package/web/dist/assets/berry-DKpUyyne.js +1 -0
- package/web/dist/assets/bibtex-Ci_nEsc7.js +1 -0
- package/web/dist/assets/bicep-CUHmPFLl.js +1 -0
- package/web/dist/assets/bird2-C6vDhewU.js +1 -0
- package/web/dist/assets/blade-llJRbbtR.js +1 -0
- package/web/dist/assets/bsl-BkkzgIyY.js +1 -0
- package/web/dist/assets/c-Wt1voDr2.js +1 -0
- package/web/dist/assets/c3-BFHwR3_K.js +1 -0
- package/web/dist/assets/cadence-CQ2zXKGN.js +1 -0
- package/web/dist/assets/cairo-DLTphjLi.js +1 -0
- package/web/dist/assets/catppuccin-frappe-3VR1Za6u.js +1 -0
- package/web/dist/assets/catppuccin-latte-DwIHMF0Q.js +1 -0
- package/web/dist/assets/catppuccin-macchiato-DYnBP6_5.js +1 -0
- package/web/dist/assets/catppuccin-mocha-DYhrFGRu.js +1 -0
- package/web/dist/assets/clarity-SemFz856.js +1 -0
- package/web/dist/assets/clojure-DqKBuwfJ.js +1 -0
- package/web/dist/assets/cmake-Bj61d0ZC.js +1 -0
- package/web/dist/assets/cobol-x_HIyl2P.js +1 -0
- package/web/dist/assets/codeowners-C8r90Shi.js +1 -0
- package/web/dist/assets/codeql-oeQT6MSM.js +1 -0
- package/web/dist/assets/coffee-CThvmt4R.js +1 -0
- package/web/dist/assets/common-lisp-Cv5bFMCO.js +1 -0
- package/web/dist/assets/coq-BrsZFFmf.js +1 -0
- package/web/dist/assets/cpp-NtAeskI3.js +1 -0
- package/web/dist/assets/crystal-DNu_sX0G.js +1 -0
- package/web/dist/assets/csharp-oqKa8noW.js +1 -0
- package/web/dist/assets/css-DJp_X0uY.js +1 -0
- package/web/dist/assets/csv-Dx-8-gkx.js +1 -0
- package/web/dist/assets/cue-CE9AQfxI.js +1 -0
- package/web/dist/assets/cypher-ClKdZ_lG.js +1 -0
- package/web/dist/assets/d-qD-0Kul2.js +1 -0
- package/web/dist/assets/dark-plus-Cs2F2srj.js +1 -0
- package/web/dist/assets/dart-CnvKMtbv.js +1 -0
- package/web/dist/assets/dax-BkyTk9wS.js +1 -0
- package/web/dist/assets/desktop-Dlh5hvp9.js +1 -0
- package/web/dist/assets/diff-woXpYk--.js +1 -0
- package/web/dist/assets/docker-IyjqRm3v.js +1 -0
- package/web/dist/assets/dotenv-_5a1GRtc.js +1 -0
- package/web/dist/assets/dracula-BHWKrbxM.js +1 -0
- package/web/dist/assets/dracula-soft-5eyTD99u.js +1 -0
- package/web/dist/assets/dream-maker-DW3nJb8Q.js +1 -0
- package/web/dist/assets/edge-ozw5tpLl.js +1 -0
- package/web/dist/assets/elixir-VhA6FeZt.js +1 -0
- package/web/dist/assets/elm-dREJmIFz.js +1 -0
- package/web/dist/assets/emacs-lisp-B4R74twV.js +1 -0
- package/web/dist/assets/erb-CIg6G69l.js +1 -0
- package/web/dist/assets/erlang-Cphh6RMH.js +1 -0
- package/web/dist/assets/everforest-dark-sB-x3p7T.js +1 -0
- package/web/dist/assets/everforest-light-Df2xbC6M.js +1 -0
- package/web/dist/assets/fennel-DQxkIbk2.js +1 -0
- package/web/dist/assets/fish-BJitypiv.js +1 -0
- package/web/dist/assets/fluent-C03EYrpw.js +1 -0
- package/web/dist/assets/fortran-fixed-form-DEKoE2YW.js +1 -0
- package/web/dist/assets/fortran-free-form-CYNrtFtB.js +1 -0
- package/web/dist/assets/fsharp-D13ZGOAj.js +1 -0
- package/web/dist/assets/gdresource-C0sCabJj.js +1 -0
- package/web/dist/assets/gdscript-Cp2uCuqX.js +1 -0
- package/web/dist/assets/gdshader-CBce3t8t.js +1 -0
- package/web/dist/assets/genie-CV2tkWYe.js +1 -0
- package/web/dist/assets/gherkin-DExj1W_8.js +1 -0
- package/web/dist/assets/git-commit-BSykSTBG.js +1 -0
- package/web/dist/assets/git-rebase-B44mJPta.js +1 -0
- package/web/dist/assets/github-dark-C-LZuMrd.js +1 -0
- package/web/dist/assets/github-dark-default-DXG-b-1a.js +1 -0
- package/web/dist/assets/github-dark-dimmed-Bx1FflLF.js +1 -0
- package/web/dist/assets/github-dark-high-contrast-B_tTalzw.js +1 -0
- package/web/dist/assets/github-light-EUqPIrTm.js +1 -0
- package/web/dist/assets/github-light-default-BXViO-2h.js +1 -0
- package/web/dist/assets/github-light-high-contrast-B68TUdTA.js +1 -0
- package/web/dist/assets/gleam-CSRkHgEL.js +1 -0
- package/web/dist/assets/glimmer-js-vH_gHG0-.js +1 -0
- package/web/dist/assets/glimmer-ts--abOzSAQ.js +1 -0
- package/web/dist/assets/glsl-Dv5r7kPw.js +1 -0
- package/web/dist/assets/gn-ilITqXS6.js +1 -0
- package/web/dist/assets/gnuplot-7GGW24-e.js +1 -0
- package/web/dist/assets/go-rLFTqkRN.js +1 -0
- package/web/dist/assets/graphql-CB4jsw2E.js +1 -0
- package/web/dist/assets/groovy-CacY0gHj.js +1 -0
- package/web/dist/assets/gruvbox-dark-hard-C820rvS2.js +1 -0
- package/web/dist/assets/gruvbox-dark-medium-BPjhmG05.js +1 -0
- package/web/dist/assets/gruvbox-dark-soft-MrdJrrXF.js +1 -0
- package/web/dist/assets/gruvbox-light-hard-BC_s9l72.js +1 -0
- package/web/dist/assets/gruvbox-light-medium-BAWPOn9u.js +1 -0
- package/web/dist/assets/gruvbox-light-soft-BSMLrYjP.js +1 -0
- package/web/dist/assets/hack-DvEYX148.js +1 -0
- package/web/dist/assets/haml-zE6W3STP.js +1 -0
- package/web/dist/assets/handlebars-CzBR2SDs.js +1 -0
- package/web/dist/assets/haskell-D8IpX4py.js +1 -0
- package/web/dist/assets/haxe-OTjmBuCE.js +1 -0
- package/web/dist/assets/hcl-Dh228itO.js +1 -0
- package/web/dist/assets/hjson-CxZEssPk.js +1 -0
- package/web/dist/assets/hlsl-Cvrh5tZx.js +1 -0
- package/web/dist/assets/horizon-CE9ld1lL.js +1 -0
- package/web/dist/assets/horizon-bright-DSNQnXHK.js +1 -0
- package/web/dist/assets/houston-CsvMBhTu.js +1 -0
- package/web/dist/assets/html-C8UlPnhE.js +1 -0
- package/web/dist/assets/html-derivative-CY6NRz-J.js +1 -0
- package/web/dist/assets/http-Cyd7bS_S.js +1 -0
- package/web/dist/assets/hurl-CWPsiEpf.js +1 -0
- package/web/dist/assets/hxml-B0Qn7Nwc.js +1 -0
- package/web/dist/assets/hy-CZbG8q4J.js +1 -0
- package/web/dist/assets/imba-DsUTQ-LC.js +1 -0
- package/web/dist/assets/index-DqZpo0Jd.js +44 -0
- package/web/dist/assets/index-_jKCE4ks.css +2 -0
- package/web/dist/assets/ini-B5eOa1yu.js +1 -0
- package/web/dist/assets/java-CGc3VwQr.js +1 -0
- package/web/dist/assets/javascript-CUt1pgmJ.js +1 -0
- package/web/dist/assets/jinja-CD-Z-FLd.js +1 -0
- package/web/dist/assets/jison-imPNup1l.js +1 -0
- package/web/dist/assets/json-Bg9ijW3F.js +1 -0
- package/web/dist/assets/json5-BR5RXkoi.js +1 -0
- package/web/dist/assets/jsonc-CYpm1nAK.js +1 -0
- package/web/dist/assets/jsonl-CmCQp5Yx.js +1 -0
- package/web/dist/assets/jsonnet-CJTPZ8u_.js +1 -0
- package/web/dist/assets/jssm-DXw9l8Rf.js +1 -0
- package/web/dist/assets/jsx-CY6oMTks.js +1 -0
- package/web/dist/assets/julia-Dc3O-irA.js +1 -0
- package/web/dist/assets/just-BhOq_Kbv.js +1 -0
- package/web/dist/assets/kanagawa-dragon-CXtmUGW6.js +1 -0
- package/web/dist/assets/kanagawa-lotus-BN08jTvb.js +1 -0
- package/web/dist/assets/kanagawa-wave-CTweb8Dz.js +1 -0
- package/web/dist/assets/kdl-CsD5j6eV.js +1 -0
- package/web/dist/assets/kotlin-DhhofPvG.js +1 -0
- package/web/dist/assets/kusto-C7mF5XQf.js +1 -0
- package/web/dist/assets/laserwave-C_8bwKvT.js +1 -0
- package/web/dist/assets/latex-Cu4Y1d5w.js +1 -0
- package/web/dist/assets/lean-CewbzKMR.js +1 -0
- package/web/dist/assets/less-DVTAwKKz.js +1 -0
- package/web/dist/assets/light-plus-DVQuIRkW.js +1 -0
- package/web/dist/assets/liquid-CvXMrjlQ.js +1 -0
- package/web/dist/assets/llvm-Cm23YOpf.js +1 -0
- package/web/dist/assets/log-BNLmms1o.js +1 -0
- package/web/dist/assets/logo-Cluzi2Zq.js +1 -0
- package/web/dist/assets/lua-BjLEUjKY.js +1 -0
- package/web/dist/assets/luau-FMPmPwt6.js +1 -0
- package/web/dist/assets/make-Dixweg8N.js +1 -0
- package/web/dist/assets/markdown-BYOwaDjH.js +1 -0
- package/web/dist/assets/marko-DvhNOisQ.js +1 -0
- package/web/dist/assets/material-theme-Bm3Qr25_.js +1 -0
- package/web/dist/assets/material-theme-darker-2IIEA8gg.js +1 -0
- package/web/dist/assets/material-theme-lighter-uhdI0v04.js +1 -0
- package/web/dist/assets/material-theme-ocean-CHQ94UKr.js +1 -0
- package/web/dist/assets/material-theme-palenight-B5W6OYN7.js +1 -0
- package/web/dist/assets/matlab-D7qyCx1q.js +1 -0
- package/web/dist/assets/mdc-Bm9TpL1X.js +1 -0
- package/web/dist/assets/mdx-DQZ5AkYe.js +1 -0
- package/web/dist/assets/mermaid-Bk4SNUv9.js +1 -0
- package/web/dist/assets/min-dark-BSWPekZh.js +1 -0
- package/web/dist/assets/min-light-DDpmG2fV.js +1 -0
- package/web/dist/assets/mipsasm-BMqwQI7S.js +1 -0
- package/web/dist/assets/mojo-BgCJLMeH.js +1 -0
- package/web/dist/assets/monokai-CdkpiU2Y.js +1 -0
- package/web/dist/assets/moonbit-CaWjb8XO.js +1 -0
- package/web/dist/assets/move-B1IS1UjX.js +1 -0
- package/web/dist/assets/narrat-_X_XdTYD.js +1 -0
- package/web/dist/assets/nextflow-BJtWHP5T.js +1 -0
- package/web/dist/assets/nextflow-groovy-DJMQeKeT.js +1 -0
- package/web/dist/assets/nginx-Bhc82uuv.js +1 -0
- package/web/dist/assets/night-owl-DhmEMT88.js +1 -0
- package/web/dist/assets/night-owl-light-eJ-hLW7d.js +1 -0
- package/web/dist/assets/nim-DXTVBFnF.js +1 -0
- package/web/dist/assets/nix-IvuFDN5E.js +1 -0
- package/web/dist/assets/nord-Cb4Vim4T.js +1 -0
- package/web/dist/assets/nushell-DcLAeLz5.js +1 -0
- package/web/dist/assets/objective-c-D1A_Heim.js +1 -0
- package/web/dist/assets/objective-cpp-BsSzOQcm.js +1 -0
- package/web/dist/assets/ocaml-O90oeIOV.js +1 -0
- package/web/dist/assets/odin-B1RWQWA5.js +1 -0
- package/web/dist/assets/one-dark-pro-CLwyXe_n.js +1 -0
- package/web/dist/assets/one-light-D7Lr4KcI.js +1 -0
- package/web/dist/assets/openscad-BUDT5pXO.js +1 -0
- package/web/dist/assets/pascal-4ZHwLPI5.js +1 -0
- package/web/dist/assets/perl-C7veXV9z.js +1 -0
- package/web/dist/assets/php-BRiuMnnr.js +1 -0
- package/web/dist/assets/pierre-dark-CpLgRqie.js +1 -0
- package/web/dist/assets/pierre-dark-protanopia-deuteranopia-B35FxJx-.js +1 -0
- package/web/dist/assets/pierre-dark-soft-kZQmAZld.js +1 -0
- package/web/dist/assets/pierre-dark-tritanopia-CpjhbsIL.js +1 -0
- package/web/dist/assets/pierre-dark-vibrant-CpQYzh95.js +1 -0
- package/web/dist/assets/pierre-light-CoaEpmwp.js +1 -0
- package/web/dist/assets/pierre-light-protanopia-deuteranopia-0fSaH845.js +1 -0
- package/web/dist/assets/pierre-light-soft-lWLdNTOI.js +1 -0
- package/web/dist/assets/pierre-light-tritanopia-CEbqgOJL.js +1 -0
- package/web/dist/assets/pierre-light-vibrant-D80Fkn33.js +1 -0
- package/web/dist/assets/pkl-ot-7Btpt.js +1 -0
- package/web/dist/assets/plastic-DQwYfKfQ.js +1 -0
- package/web/dist/assets/plsql-DGHpHOYJ.js +1 -0
- package/web/dist/assets/po-BiJDBrnU.js +1 -0
- package/web/dist/assets/poimandres-DRFjx7u4.js +1 -0
- package/web/dist/assets/polar-C7UOKdEL.js +1 -0
- package/web/dist/assets/postcss-BXeXVLqQ.js +1 -0
- package/web/dist/assets/powerquery-DNMTfnFr.js +1 -0
- package/web/dist/assets/powershell-DshXNtvi.js +1 -0
- package/web/dist/assets/prisma-BsRQq5mF.js +1 -0
- package/web/dist/assets/prolog-iXnhIJG7.js +1 -0
- package/web/dist/assets/proto-DB4EqR-F.js +1 -0
- package/web/dist/assets/pug-C5hz5LQ7.js +1 -0
- package/web/dist/assets/puppet-CDv2pdJW.js +1 -0
- package/web/dist/assets/purescript-9MfHhQsQ.js +1 -0
- package/web/dist/assets/python-gzcpVVnB.js +1 -0
- package/web/dist/assets/qml-BdUV3aTS.js +1 -0
- package/web/dist/assets/qmldir-DCQb3MpD.js +1 -0
- package/web/dist/assets/qss-Fe1Jh2GI.js +1 -0
- package/web/dist/assets/r-8R7vtdQc.js +1 -0
- package/web/dist/assets/racket-DcIDlBhZ.js +1 -0
- package/web/dist/assets/raku-B3gFvitq.js +1 -0
- package/web/dist/assets/razor-DRL52XO2.js +1 -0
- package/web/dist/assets/red-CJ3rzSJv.js +1 -0
- package/web/dist/assets/reg-CRGYupPL.js +1 -0
- package/web/dist/assets/regexp-Omp9DhTb.js +1 -0
- package/web/dist/assets/rel-BtDbiS_P.js +1 -0
- package/web/dist/assets/riscv-Ckw8ddFX.js +1 -0
- package/web/dist/assets/rolldown-runtime-QTnfLwEv.js +1 -0
- package/web/dist/assets/ron-VUp2lXgN.js +1 -0
- package/web/dist/assets/rose-pine-BthvhNj6.js +1 -0
- package/web/dist/assets/rose-pine-dawn-Dg85fqjY.js +1 -0
- package/web/dist/assets/rose-pine-moon-hon4tzzS.js +1 -0
- package/web/dist/assets/rosmsg-CAekHB0j.js +1 -0
- package/web/dist/assets/rst-BHX71KW9.js +1 -0
- package/web/dist/assets/ruby-B--HzjGU.js +1 -0
- package/web/dist/assets/rust-Cfkwpbl8.js +1 -0
- package/web/dist/assets/sas-DrLaYOK_.js +1 -0
- package/web/dist/assets/sass-DXrisJhu.js +1 -0
- package/web/dist/assets/scala-DKOlJaKm.js +1 -0
- package/web/dist/assets/scheme-DQCgrYNe.js +1 -0
- package/web/dist/assets/scss-DdSxiZKl.js +1 -0
- package/web/dist/assets/sdbl-bTVj8UrX.js +1 -0
- package/web/dist/assets/shaderlab-TOUzSsQk.js +1 -0
- package/web/dist/assets/shellscript-DwcUjJBL.js +1 -0
- package/web/dist/assets/shellsession-CPZkydE6.js +1 -0
- package/web/dist/assets/slack-dark-DnToyrRv.js +1 -0
- package/web/dist/assets/slack-ochin-B2OO5cIa.js +1 -0
- package/web/dist/assets/smalltalk-B16xEiuN.js +1 -0
- package/web/dist/assets/snazzy-light-4G7pJPwS.js +1 -0
- package/web/dist/assets/solarized-dark-DV17i1UV.js +1 -0
- package/web/dist/assets/solarized-light-DSh2HLQt.js +1 -0
- package/web/dist/assets/solidity-CKzVLygQ.js +1 -0
- package/web/dist/assets/soy-Br5FhD7c.js +1 -0
- package/web/dist/assets/sparql-D_iOobhT.js +1 -0
- package/web/dist/assets/splunk-BC2Px7Mm.js +1 -0
- package/web/dist/assets/sql-DNssxck8.js +1 -0
- package/web/dist/assets/ssh-config-BgfXC-Er.js +1 -0
- package/web/dist/assets/stata-DXn1tqOr.js +1 -0
- package/web/dist/assets/stylus-B6D30XZt.js +1 -0
- package/web/dist/assets/surfaces-B8Ko8AJ3.js +1 -0
- package/web/dist/assets/surrealql-IeLNQw0f.js +1 -0
- package/web/dist/assets/svelte-DOdLCIlh.js +1 -0
- package/web/dist/assets/swift-DonLKvLd.js +1 -0
- package/web/dist/assets/synthwave-84-nFMaYfgc.js +1 -0
- package/web/dist/assets/system-verilog-DJ5XKQeo.js +1 -0
- package/web/dist/assets/systemd-BxMlprV5.js +1 -0
- package/web/dist/assets/talonscript-CohzipZa.js +1 -0
- package/web/dist/assets/tasl-DMoTqEGO.js +1 -0
- package/web/dist/assets/tcl-CZd0xW_V.js +1 -0
- package/web/dist/assets/templ-CIwIngms.js +1 -0
- package/web/dist/assets/terraform-DswuEJGm.js +1 -0
- package/web/dist/assets/tex-D8QMumu5.js +1 -0
- package/web/dist/assets/tokyo-night-oM2G3aXe.js +1 -0
- package/web/dist/assets/toml-CcmNWLt0.js +1 -0
- package/web/dist/assets/ts-tags-BMVY4q-l.js +1 -0
- package/web/dist/assets/tsv-sltzmVWM.js +1 -0
- package/web/dist/assets/tsx-5Eka4NBX.js +1 -0
- package/web/dist/assets/turtle-ByJddavk.js +1 -0
- package/web/dist/assets/twig-C8o_5mgw.js +1 -0
- package/web/dist/assets/typescript-DOu2WMV5.js +1 -0
- package/web/dist/assets/typespec-BRdr0IET.js +1 -0
- package/web/dist/assets/typst-DI99ib-x.js +1 -0
- package/web/dist/assets/v-DETTlOr0.js +1 -0
- package/web/dist/assets/vala-zf12oZj6.js +1 -0
- package/web/dist/assets/vb-Djn5o6TS.js +1 -0
- package/web/dist/assets/verilog-CiiDBU1e.js +1 -0
- package/web/dist/assets/vesper-DdrHHSXu.js +1 -0
- package/web/dist/assets/vhdl-BroJfC0k.js +1 -0
- package/web/dist/assets/viml-DvXPmvsu.js +1 -0
- package/web/dist/assets/vitesse-black-fwtXNY1n.js +1 -0
- package/web/dist/assets/vitesse-dark-BZCL-v6S.js +1 -0
- package/web/dist/assets/vitesse-light-VbXTXTou.js +1 -0
- package/web/dist/assets/vue-BU18DNDL.js +1 -0
- package/web/dist/assets/vue-html-BeluIYX0.js +1 -0
- package/web/dist/assets/vue-vine-DGUAbOCX.js +1 -0
- package/web/dist/assets/vyper-CgoNMtux.js +1 -0
- package/web/dist/assets/wasm-BnjxR4X6.js +1 -0
- package/web/dist/assets/wasm-ByWQv1Qj.js +1 -0
- package/web/dist/assets/wenyan-C8pVoKbM.js +1 -0
- package/web/dist/assets/wgsl-BsKzXJz4.js +1 -0
- package/web/dist/assets/wikitext-ClFFjSW2.js +1 -0
- package/web/dist/assets/wit-DdvCle-K.js +1 -0
- package/web/dist/assets/wolfram-DLL8P-h_.js +1 -0
- package/web/dist/assets/worker-CBKQOXEl.js +160 -0
- package/web/dist/assets/xml-DIqSwXR3.js +1 -0
- package/web/dist/assets/xsl-Ct_-YIAy.js +1 -0
- package/web/dist/assets/yaml-DTtCYNlS.js +1 -0
- package/web/dist/assets/zenscript-BnlCZFoB.js +1 -0
- package/web/dist/assets/zig-CMLA9XwU.js +1 -0
- package/web/dist/icons/neondeck-icon-192.png +0 -0
- package/web/dist/icons/neondeck-icon-512.png +0 -0
- package/web/dist/icons/neondeck-icon.svg +41 -0
- package/web/dist/icons/neondeck-maskable-512.png +0 -0
- package/web/dist/index.html +24 -0
- package/web/dist/manifest.webmanifest +28 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-BuuvLo98.js","names":[],"sources":["../../node_modules/@hono/node-server/dist/utils/stream.cjs","../../node_modules/hono/dist/cjs/utils/mime.js","../../node_modules/@hono/node-server/dist/serve-static.cjs","../../src/server/events/config-stream.ts","../../src/server/events/notification-stream.ts","../../src/server/events/session-stream.ts","../../src/server/learning-hooks.ts","../../src/server/middleware.ts","../../src/server/autopilot-push-dispatch.ts","../../src/server/http.ts","../../src/server/routes/autopilot.ts","../../src/server/routes/commands.ts","../../src/server/routes/config.ts","../../src/server/routes/execution.ts","../../src/server/routes/github.ts","../../src/modules/handoff/schemas.ts","../../src/modules/handoff/service.ts","../../src/server/routes/handoff.ts","../../src/server/routes/kilo.ts","../../src/server/routes/learning.ts","../../src/server/routes/memory.ts","../../src/server/routes/metrics.ts","../../src/server/routes/mcp.ts","../../src/server/routes/notifications.ts","../../src/server/routes/repo-edit.ts","../../src/modules/docs-drift/service.ts","../../src/server/routes/reports.ts","../../src/server/routes/repos.ts","../../src/server/routes/scheduled-tasks.ts","../../src/server/routes/runtime.ts","../../src/server/routes/safety.ts","../../src/server/scheduler-workflow.ts","../../src/server/routes/scheduler.ts","../../src/server/routes/sessions.ts","../../src/server/routes/skills.ts","../../src/server/routes/watches.ts","../../src/server/routes/workflows.ts","../../src/server/routes/worktrees.ts","../../src/server/create-app.ts","../../src/server/app.ts"],"sourcesContent":["Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\nlet node_stream = require(\"node:stream\");\nlet node_process = require(\"node:process\");\n\n//#region src/utils/stream.ts\nconst pr54206Applied = () => {\n\tconst [major, minor] = node_process.versions.node.split(\".\").map((component) => parseInt(component));\n\treturn major >= 23 || major === 22 && minor >= 7 || major === 20 && minor >= 18;\n};\nconst useReadableToWeb = pr54206Applied();\nconst createStreamBody = (stream, useNativeReadableToWeb = useReadableToWeb) => {\n\tif (useNativeReadableToWeb) return node_stream.Readable.toWeb(stream);\n\tlet controller;\n\tlet settled = false;\n\tconst cleanup = () => {\n\t\tstream.off(\"data\", onData);\n\t\tstream.off(\"error\", onError);\n\t\tstream.off(\"end\", onTerminate);\n\t\tstream.off(\"close\", onTerminate);\n\t};\n\tconst settle = (callback) => {\n\t\tif (settled) return;\n\t\tsettled = true;\n\t\tcleanup();\n\t\tcallback?.();\n\t};\n\tconst onData = (chunk) => {\n\t\tif (settled || !controller) return;\n\t\tcontroller.enqueue(chunk);\n\t\tif ((controller.desiredSize ?? 0) <= 0) stream.pause();\n\t};\n\tconst onError = (error) => {\n\t\tsettle(() => {\n\t\t\tcontroller?.error(error);\n\t\t});\n\t};\n\tconst onTerminate = () => {\n\t\tsettle(() => {\n\t\t\tcontroller?.close();\n\t\t});\n\t};\n\treturn new ReadableStream({\n\t\tstart(streamController) {\n\t\t\tcontroller = streamController;\n\t\t\tstream.on(\"data\", onData);\n\t\t\tstream.on(\"error\", onError);\n\t\t\tstream.on(\"end\", onTerminate);\n\t\t\tstream.on(\"close\", onTerminate);\n\t\t\tstream.pause();\n\t\t},\n\t\tpull() {\n\t\t\tif (!settled) stream.resume();\n\t\t},\n\t\tcancel() {\n\t\t\tsettle();\n\t\t\tconst ignoreError = () => {};\n\t\t\tstream.on(\"error\", ignoreError);\n\t\t\tstream.once(\"close\", () => stream.off(\"error\", ignoreError));\n\t\t\tstream.destroy();\n\t\t}\n\t});\n};\n\n//#endregion\nexports.createStreamBody = createStreamBody;","var __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\nvar mime_exports = {};\n__export(mime_exports, {\n getExtension: () => getExtension,\n getMimeType: () => getMimeType,\n mimes: () => baseMimes\n});\nmodule.exports = __toCommonJS(mime_exports);\nconst getMimeType = (filename, mimes = baseMimes) => {\n const regexp = /\\.([a-zA-Z0-9]+?)$/;\n const match = filename.match(regexp);\n if (!match) {\n return;\n }\n return mimes[match[1].toLowerCase()];\n};\nconst getExtension = (mimeType) => {\n const baseType = mimeType.split(\";\", 1)[0].trim();\n for (const ext in baseMimes) {\n const stored = baseMimes[ext];\n if (stored === mimeType || stored.split(\";\", 1)[0].trim() === baseType) {\n return ext;\n }\n }\n};\nconst _baseMimes = {\n aac: \"audio/aac\",\n avi: \"video/x-msvideo\",\n avif: \"image/avif\",\n av1: \"video/av1\",\n bin: \"application/octet-stream\",\n bmp: \"image/bmp\",\n css: \"text/css; charset=utf-8\",\n csv: \"text/csv; charset=utf-8\",\n eot: \"application/vnd.ms-fontobject\",\n epub: \"application/epub+zip\",\n gif: \"image/gif\",\n gz: \"application/gzip\",\n htm: \"text/html; charset=utf-8\",\n html: \"text/html; charset=utf-8\",\n ico: \"image/x-icon\",\n ics: \"text/calendar; charset=utf-8\",\n jpeg: \"image/jpeg\",\n jpg: \"image/jpeg\",\n js: \"text/javascript; charset=utf-8\",\n json: \"application/json\",\n jsonld: \"application/ld+json\",\n map: \"application/json\",\n mid: \"audio/x-midi\",\n midi: \"audio/x-midi\",\n mjs: \"text/javascript; charset=utf-8\",\n mp3: \"audio/mpeg\",\n mp4: \"video/mp4\",\n mpeg: \"video/mpeg\",\n oga: \"audio/ogg\",\n ogv: \"video/ogg\",\n ogx: \"application/ogg\",\n opus: \"audio/opus\",\n otf: \"font/otf\",\n pdf: \"application/pdf\",\n png: \"image/png\",\n rtf: \"application/rtf\",\n svg: \"image/svg+xml; charset=utf-8\",\n tif: \"image/tiff\",\n tiff: \"image/tiff\",\n ts: \"video/mp2t\",\n ttf: \"font/ttf\",\n txt: \"text/plain; charset=utf-8\",\n wasm: \"application/wasm\",\n webm: \"video/webm\",\n weba: \"audio/webm\",\n webmanifest: \"application/manifest+json\",\n webp: \"image/webp\",\n woff: \"font/woff\",\n woff2: \"font/woff2\",\n xhtml: \"application/xhtml+xml; charset=utf-8\",\n xml: \"application/xml; charset=utf-8\",\n zip: \"application/zip\",\n \"3gp\": \"video/3gpp\",\n \"3g2\": \"video/3gpp2\",\n gltf: \"model/gltf+json\",\n glb: \"model/gltf-binary\"\n};\nconst baseMimes = _baseMimes;\n// Annotate the CommonJS export names for ESM import in node:\n0 && (module.exports = {\n getExtension,\n getMimeType,\n mimes\n});\n","Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\nconst require_utils_stream = require('./utils/stream.cjs');\nlet hono_utils_mime = require(\"hono/utils/mime\");\nlet node_fs = require(\"node:fs\");\nlet node_path = require(\"node:path\");\n\n//#region src/serve-static.ts\nconst COMPRESSIBLE_CONTENT_TYPE_REGEX = /^\\s*(?:text\\/[^;\\s]+|application\\/(?:javascript|json|xml|xml-dtd|ecmascript|dart|postscript|rtf|tar|toml|vnd\\.dart|vnd\\.ms-fontobject|vnd\\.ms-opentype|wasm|x-httpd-php|x-javascript|x-ns-proxy-autoconfig|x-sh|x-tar|x-virtualbox-hdd|x-virtualbox-ova|x-virtualbox-ovf|x-virtualbox-vbox|x-virtualbox-vdi|x-virtualbox-vhd|x-virtualbox-vmdk|x-www-form-urlencoded)|font\\/(?:otf|ttf)|image\\/(?:bmp|vnd\\.adobe\\.photoshop|vnd\\.microsoft\\.icon|vnd\\.ms-dds|x-icon|x-ms-bmp)|message\\/rfc822|model\\/gltf-binary|x-shader\\/x-fragment|x-shader\\/x-vertex|[^;\\s]+?\\+(?:json|text|xml|yaml))(?:[;\\s]|$)/i;\nconst ENCODINGS = {\n\tbr: \".br\",\n\tzstd: \".zst\",\n\tgzip: \".gz\"\n};\nconst ENCODINGS_ORDERED_KEYS = Object.keys(ENCODINGS);\nconst getStats = (path) => {\n\tlet stats;\n\ttry {\n\t\tstats = (0, node_fs.statSync)(path);\n\t} catch {}\n\treturn stats;\n};\nconst tryDecode = (str, decoder) => {\n\ttry {\n\t\treturn decoder(str);\n\t} catch {\n\t\treturn str.replace(/(?:%[0-9A-Fa-f]{2})+/g, (match) => {\n\t\t\ttry {\n\t\t\t\treturn decoder(match);\n\t\t\t} catch {\n\t\t\t\treturn match;\n\t\t\t}\n\t\t});\n\t}\n};\nconst tryDecodeURI = (str) => tryDecode(str, decodeURI);\nconst serveStatic = (options = { root: \"\" }) => {\n\tconst root = options.root || \"\";\n\tconst optionPath = options.path;\n\tif (root !== \"\" && !(0, node_fs.existsSync)(root)) console.error(`serveStatic: root path '${root}' is not found, are you sure it's correct?`);\n\treturn async (c, next) => {\n\t\tif (c.finalized) return next();\n\t\tlet filename;\n\t\tif (optionPath) filename = optionPath;\n\t\telse try {\n\t\t\tfilename = tryDecodeURI(c.req.path);\n\t\t\tif (/(?:^|[\\/\\\\])\\.{1,2}(?:$|[\\/\\\\])|[\\/\\\\]{2,}|\\\\/.test(filename)) throw new Error();\n\t\t} catch {\n\t\t\tawait options.onNotFound?.(c.req.path, c);\n\t\t\treturn next();\n\t\t}\n\t\tlet path = (0, node_path.join)(root, !optionPath && options.rewriteRequestPath ? options.rewriteRequestPath(filename, c) : filename);\n\t\tlet stats = getStats(path);\n\t\tif (stats && stats.isDirectory()) {\n\t\t\tconst indexFile = options.index ?? \"index.html\";\n\t\t\tpath = (0, node_path.join)(path, indexFile);\n\t\t\tstats = getStats(path);\n\t\t}\n\t\tif (!stats) {\n\t\t\tawait options.onNotFound?.(path, c);\n\t\t\treturn next();\n\t\t}\n\t\tconst mimeType = (0, hono_utils_mime.getMimeType)(path);\n\t\tc.header(\"Content-Type\", mimeType || \"application/octet-stream\");\n\t\tif (options.precompressed && (!mimeType || mimeType === \"application/octet-stream\" || COMPRESSIBLE_CONTENT_TYPE_REGEX.test(mimeType))) {\n\t\t\tconst acceptEncodingSet = new Set(c.req.header(\"Accept-Encoding\")?.split(\",\").map((encoding) => encoding.trim()));\n\t\t\tfor (const encoding of ENCODINGS_ORDERED_KEYS) {\n\t\t\t\tif (!acceptEncodingSet.has(encoding)) continue;\n\t\t\t\tconst precompressedStats = getStats(path + ENCODINGS[encoding]);\n\t\t\t\tif (precompressedStats) {\n\t\t\t\t\tc.header(\"Content-Encoding\", encoding);\n\t\t\t\t\tc.header(\"Vary\", \"Accept-Encoding\", { append: true });\n\t\t\t\t\tstats = precompressedStats;\n\t\t\t\t\tpath = path + ENCODINGS[encoding];\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tlet result;\n\t\tconst size = stats.size;\n\t\tconst range = c.req.header(\"range\") || \"\";\n\t\tc.header(\"Last-Modified\", stats.mtime.toUTCString());\n\t\tif (c.req.method == \"HEAD\" || c.req.method == \"OPTIONS\") {\n\t\t\tc.header(\"Content-Length\", size.toString());\n\t\t\tc.status(200);\n\t\t\tresult = c.body(null);\n\t\t} else if (!range) {\n\t\t\tc.header(\"Content-Length\", size.toString());\n\t\t\tresult = c.body(require_utils_stream.createStreamBody((0, node_fs.createReadStream)(path)), 200);\n\t\t} else {\n\t\t\tc.header(\"Accept-Ranges\", \"bytes\");\n\t\t\tconst parts = range.replace(/bytes=/, \"\").split(\"-\", 2);\n\t\t\tconst start = parseInt(parts[0], 10) || 0;\n\t\t\tlet end = parseInt(parts[1], 10) || size - 1;\n\t\t\tif (size < end - start + 1) end = size - 1;\n\t\t\tconst chunksize = end - start + 1;\n\t\t\tconst stream = (0, node_fs.createReadStream)(path, {\n\t\t\t\tstart,\n\t\t\t\tend\n\t\t\t});\n\t\t\tc.header(\"Content-Length\", chunksize.toString());\n\t\t\tc.header(\"Content-Range\", `bytes ${start}-${end}/${stats.size}`);\n\t\t\tresult = c.body(require_utils_stream.createStreamBody(stream), 206);\n\t\t}\n\t\tawait options.onFound?.(path, c);\n\t\treturn result;\n\t};\n};\n\n//#endregion\nexports.serveStatic = serveStatic;","import { Hono } from 'hono';\nimport {\n formatConfigServerSentEvent,\n replayConfigEventsAfter,\n subscribeConfigEvents,\n} from '../../modules/config';\n\nconst configEventHeartbeatMs = 10_000;\nconst configEventStreamMaxAgeMs = 20_000;\n\nexport function createConfigEventRoutes() {\n const routes = new Hono();\n\n routes.get('/config', (c) => {\n const lastEventId = c.req.header('last-event-id');\n const encoder = new TextEncoder();\n let cleanup = () => {};\n\n const stream = new ReadableStream<Uint8Array>({\n start(controller) {\n let active = true;\n function send(value: string) {\n if (!active) return;\n controller.enqueue(encoder.encode(value));\n }\n\n send('retry: 3000\\n: connected\\n\\n');\n const unsubscribe = subscribeConfigEvents((event) => {\n send(formatConfigServerSentEvent(event));\n });\n for (const event of replayConfigEventsAfter(lastEventId)) {\n send(formatConfigServerSentEvent(event));\n }\n const heartbeat = setInterval(() => {\n send(`: heartbeat ${Date.now()}\\n\\n`);\n }, configEventHeartbeatMs);\n const maxAge = setTimeout(() => {\n send(': reconnecting\\n\\n');\n cleanup();\n controller.close();\n }, configEventStreamMaxAgeMs);\n\n cleanup = () => {\n if (!active) return;\n active = false;\n clearInterval(heartbeat);\n clearTimeout(maxAge);\n unsubscribe();\n };\n },\n cancel() {\n cleanup();\n },\n });\n\n return new Response(stream, {\n headers: {\n 'cache-control': 'no-cache, no-transform',\n connection: 'keep-alive',\n 'content-type': 'text/event-stream; charset=utf-8',\n 'x-accel-buffering': 'no',\n },\n });\n });\n\n return routes;\n}\n","import { Hono } from 'hono';\nimport {\n formatNotificationServerSentEvent,\n subscribeNotificationEvents,\n} from '../../modules/app-state';\n\nexport function createNotificationEventRoutes() {\n const routes = new Hono();\n\n routes.get('/notifications', () => {\n const encoder = new TextEncoder();\n let cleanup = () => {};\n\n const stream = new ReadableStream<Uint8Array>({\n start(controller) {\n function send(value: string) {\n controller.enqueue(encoder.encode(value));\n }\n\n send(': connected\\n\\n');\n const unsubscribe = subscribeNotificationEvents((event) => {\n send(formatNotificationServerSentEvent(event));\n });\n const heartbeat = setInterval(() => {\n send(`: heartbeat ${Date.now()}\\n\\n`);\n }, 25_000);\n\n cleanup = () => {\n clearInterval(heartbeat);\n unsubscribe();\n };\n },\n cancel() {\n cleanup();\n },\n });\n\n return new Response(stream, {\n headers: {\n 'cache-control': 'no-cache, no-transform',\n connection: 'keep-alive',\n 'content-type': 'text/event-stream; charset=utf-8',\n 'x-accel-buffering': 'no',\n },\n });\n });\n\n return routes;\n}\n","import { Hono } from 'hono';\nimport {\n formatChatSessionServerSentEvent,\n subscribeChatSessionEvents,\n} from '../../modules/sessions';\n\nexport function createSessionEventRoutes() {\n const routes = new Hono();\n\n routes.get('/sessions', () => {\n const encoder = new TextEncoder();\n let cleanup = () => {};\n\n const stream = new ReadableStream<Uint8Array>({\n start(controller) {\n function send(value: string) {\n controller.enqueue(encoder.encode(value));\n }\n\n send(': connected\\n\\n');\n const unsubscribe = subscribeChatSessionEvents((event) => {\n send(formatChatSessionServerSentEvent(event));\n });\n const heartbeat = setInterval(() => {\n send(`: heartbeat ${Date.now()}\\n\\n`);\n }, 25_000);\n\n cleanup = () => {\n clearInterval(heartbeat);\n unsubscribe();\n };\n },\n cancel() {\n cleanup();\n },\n });\n\n return new Response(stream, {\n headers: {\n 'cache-control': 'no-cache, no-transform',\n connection: 'keep-alive',\n 'content-type': 'text/event-stream; charset=utf-8',\n 'x-accel-buffering': 'no',\n },\n });\n });\n\n return routes;\n}\n","import {\n invoke,\n observe,\n type FlueEventContext,\n type FlueObservation,\n type FlueObservationSubscriber,\n} from '@flue/runtime';\nimport type { MiddlewareHandler } from 'hono';\nimport { addNotification, setWorkflowSummaryRunId } from '../modules/app-state';\nimport { settleScheduledTaskWorkflowRun } from '../modules/scheduled-tasks';\nimport {\n beginAutopilotAdmissionPrepare,\n failAutopilotAdmission,\n recordAutopilotAdmissionRun,\n recordAutopilotAdmissionTerminalFact,\n settleAutopilotAdmissionPrepare,\n settleAutopilotAdmissionTriage,\n} from '../modules/autopilot';\nimport {\n attachLearningReviewRunId,\n recordConversationTurnAndMaybeQueueLearning,\n recordHandledPrFromWorkflowResult,\n} from '../modules/learning/reviews';\nimport type { RuntimePaths } from '../runtime-home';\nimport { recordFlueObservation } from '../modules/learning';\nimport curateLearningStoreWorkflow from '../workflows/curate_learning_store';\nimport reviewConversationForLearningWorkflow from '../workflows/review_conversation_for_learning';\nimport reviewPrBatchForLearningWorkflow from '../workflows/review_pr_batch_for_learning';\n\ntype ObservationInstallDependencies = {\n observe?: (subscriber: FlueObservationSubscriber) => () => void;\n};\n\nconst observationHandlerUnsubscribers = new Map<string, () => void>();\n\nexport function installFlueObservationHandlers(\n paths: RuntimePaths,\n dependencies: ObservationInstallDependencies = {},\n) {\n if (observationHandlerUnsubscribers.has(paths.home)) return;\n const observeFn = dependencies.observe ?? observe;\n const unsubscribe = observeFn((event, context) => {\n const contextHome = flueContextRuntimeHome(context);\n if (contextHome && contextHome !== paths.home) return;\n\n if (event.type === 'run_end') {\n void recordFlueObservation(event, paths)\n .then(async () => {\n const terminalFact = autopilotTerminalFact(event);\n if (terminalFact) {\n await recordAutopilotAdmissionTerminalFact(\n { runId: event.runId, fact: terminalFact },\n paths,\n );\n }\n })\n .then(() =>\n Promise.all([\n settleScheduledTaskWorkflowRun(\n { workflowRunId: event.runId, failed: event.isError },\n paths,\n ),\n settleAutopilotAdmissionTriage(\n {\n runId: event.runId,\n failed: terminalActionFailed(event),\n shouldPrepare: triageRequestsPrepare(event),\n },\n paths,\n ),\n settleAutopilotAdmissionPrepare(\n {\n runId: event.runId,\n failed: terminalActionFailed(event),\n worktreeId: prepareWorktreeId(event),\n },\n paths,\n ),\n ]),\n )\n .then(() => startPrepareAfterTriage(event, paths))\n .catch((error) => {\n console.error(\n '[neondeck] failed to record or settle Flue observation',\n error,\n );\n });\n void attachCommandRunSummaryRunId(event, paths).catch((error) => {\n console.error('[neondeck] failed to attach Flue run id', error);\n });\n const learningReviewId = learningReviewResultId(event);\n if (learningReviewId) {\n void Promise.resolve()\n .then(() =>\n attachLearningReviewRunId(\n { reviewId: learningReviewId, runId: event.runId },\n paths,\n ),\n )\n .catch((error) => {\n console.error(\n '[neondeck] failed to attach learning review run id',\n error,\n );\n });\n }\n if (!learningReviewId && !event.isError && 'result' in event) {\n void Promise.resolve()\n .then(() =>\n recordHandledPrFromWorkflowResult(\n {\n workflow: workflowLabel(event),\n runId: event.runId,\n result: event.result,\n },\n paths,\n {\n async invokePrBatchReview(input) {\n return invoke(reviewPrBatchForLearningWorkflow, { input });\n },\n },\n ),\n )\n .catch((error) => {\n console.error(\n '[neondeck] failed to record handled PR learning event',\n error,\n );\n });\n }\n\n if (event.isError) {\n void addNotification(\n {\n level: 'attention',\n title: 'Workflow failed',\n message: `${workflowLabel(event)} failed.`,\n source: 'flue',\n sourceId: event.runId,\n data: {\n runId: event.runId,\n workflow: workflowLabel(event),\n error: 'See guarded Flue run inspection for error details.',\n },\n },\n paths,\n ).catch((error) => {\n console.error('[neondeck] failed to record Flue failure', error);\n });\n }\n\n return;\n }\n\n void recordFlueObservation(event, paths).catch((error) => {\n console.error('[neondeck] failed to record Flue observation', error);\n });\n\n if (\n event.type === 'operation' &&\n event.durationMs > 15_000 &&\n event.isError\n ) {\n void addNotification(\n {\n level: 'attention',\n title: 'Slow Flue operation failed',\n message: `${event.operationKind} failed after ${Math.round(event.durationMs / 1000)}s.`,\n source: 'flue',\n sourceId: event.operationId,\n data: {\n operationKind: event.operationKind,\n durationMs: event.durationMs,\n error: 'See workflow observability for error details.',\n },\n },\n paths,\n ).catch((error) => {\n console.error('[neondeck] failed to record Flue operation', error);\n });\n }\n });\n observationHandlerUnsubscribers.set(paths.home, unsubscribe);\n}\n\nexport function resetFlueObservationHandlersForTests() {\n for (const unsubscribe of observationHandlerUnsubscribers.values()) {\n unsubscribe();\n }\n observationHandlerUnsubscribers.clear();\n}\n\nfunction flueContextRuntimeHome(context: FlueEventContext | undefined) {\n const value = context?.env?.NEONDECK_HOME;\n return typeof value === 'string' && value ? value : undefined;\n}\n\nasync function startPrepareAfterTriage(\n event: Extract<FlueObservation, { type: 'run_end' }>,\n paths: RuntimePaths,\n) {\n if (event.isError || !triageRequestsPrepare(event)) return;\n const admission = await beginAutopilotAdmissionPrepare(\n { triageRunId: event.runId },\n paths,\n );\n if (!admission) return;\n try {\n const workflow = await import('../workflows/prepare-pr-worktree');\n const { runId } = await invoke(workflow.default, {\n input: {\n repoId: admission.repoId,\n prNumber: admission.prNumber,\n eventId: admission.eventFingerprint,\n lock: false,\n },\n });\n await recordAutopilotAdmissionRun({ id: admission.id, runId }, paths);\n } catch (error) {\n await failAutopilotAdmission(\n {\n id: admission.id,\n error: error instanceof Error ? error.message : String(error),\n },\n paths,\n );\n }\n}\n\nfunction triageRequestsPrepare(\n event: Extract<FlueObservation, { type: 'run_end' }>,\n) {\n if (workflowLabel(event) !== 'triage-pr-event' || !('result' in event)) {\n return false;\n }\n const result = event.result;\n if (!result || typeof result !== 'object') return false;\n const data = (result as Record<string, unknown>).data;\n return Boolean(\n data &&\n typeof data === 'object' &&\n (data as Record<string, unknown>).shouldPrepareWorktree === true,\n );\n}\n\nfunction prepareWorktreeId(\n event: Extract<FlueObservation, { type: 'run_end' }>,\n) {\n if (\n !('result' in event) ||\n !event.result ||\n typeof event.result !== 'object'\n ) {\n return undefined;\n }\n const data = (event.result as Record<string, unknown>).data;\n if (!data || typeof data !== 'object') return undefined;\n const worktree = (data as Record<string, unknown>).worktree;\n if (!worktree || typeof worktree !== 'object') return undefined;\n const id = (worktree as Record<string, unknown>).id;\n return typeof id === 'string' ? id : undefined;\n}\n\nfunction autopilotTerminalFact(\n event: Extract<FlueObservation, { type: 'run_end' }>,\n) {\n const workflow = workflowLabel(event);\n const failed = terminalActionFailed(event);\n if (workflow === 'triage-pr-event') {\n return {\n workflow,\n failed,\n shouldPrepare: !failed && triageRequestsPrepare(event),\n } as const;\n }\n if (workflow === 'prepare-pr-worktree') {\n return {\n workflow,\n failed,\n worktreeId: failed ? undefined : prepareWorktreeId(event),\n } as const;\n }\n return undefined;\n}\n\nfunction terminalActionFailed(\n event: Extract<FlueObservation, { type: 'run_end' }>,\n) {\n if (event.isError || !('result' in event)) return event.isError;\n const result = event.result;\n return Boolean(\n result &&\n typeof result === 'object' &&\n (result as { ok?: unknown }).ok === false,\n );\n}\n\nexport function recordHandledPrApiResult(\n paths: RuntimePaths,\n workflow: string,\n result: unknown,\n) {\n void Promise.resolve()\n .then(() =>\n recordHandledPrFromWorkflowResult(\n {\n workflow,\n result,\n },\n paths,\n {\n async invokePrBatchReview(input) {\n return invoke(reviewPrBatchForLearningWorkflow, { input });\n },\n },\n ),\n )\n .catch((error) => {\n console.error(\n '[neondeck] failed to record handled PR learning event',\n error,\n );\n });\n}\n\nexport function displayAssistantLearningMiddleware(\n paths: RuntimePaths,\n): MiddlewareHandler {\n return async (c, next) => {\n const method = c.req.method.toUpperCase();\n const sessionId = displayAssistantSessionId(c.req.path);\n await next();\n if (!sessionId || method !== 'POST' || c.res.status >= 400) return;\n\n void recordConversationTurnAndMaybeQueueLearning(sessionId, paths, {\n async invokeConversationReview(input) {\n return invoke(reviewConversationForLearningWorkflow, { input });\n },\n async invokeCurationReview(input) {\n return invoke(curateLearningStoreWorkflow, { input });\n },\n }).catch((error) => {\n console.error('[neondeck] failed to queue learning review', error);\n });\n };\n}\n\nexport async function attachCommandRunSummaryRunId(\n event: FlueObservation,\n paths: RuntimePaths,\n) {\n const link = commandRunSummaryLink(event);\n if (!link) return;\n await setWorkflowSummaryRunId(link.summaryId, link.runId, paths);\n}\n\nfunction commandRunSummaryLink(event: FlueObservation) {\n if (!('result' in event)) return undefined;\n const result = event.result;\n if (!result || typeof result !== 'object') return undefined;\n\n const summary = (result as { workflowSummary?: unknown }).workflowSummary;\n if (!summary || typeof summary !== 'object') return undefined;\n\n const id = (summary as { id?: unknown }).id;\n if (typeof id !== 'string') return undefined;\n const summaryWorkflow = stringField(summary, 'workflow');\n const runId =\n summaryWorkflow === 'ci_fix_run'\n ? stringField(event, 'runId')\n : (objectStringField(result, 'data', 'runId') ??\n stringField(summary, 'runId') ??\n stringField(event, 'runId'));\n if (!runId) return undefined;\n\n return {\n summaryId: id,\n runId,\n };\n}\n\nfunction learningReviewResultId(event: FlueObservation) {\n if (!('result' in event)) return undefined;\n const result = event.result;\n if (!result || typeof result !== 'object') return undefined;\n\n const action = (result as { action?: unknown }).action;\n if (\n action !== 'learning_review_conversation' &&\n action !== 'learning_curate' &&\n action !== 'learning_review_pr_batch'\n ) {\n return undefined;\n }\n const reviewId = (result as { reviewId?: unknown }).reviewId;\n return typeof reviewId === 'string' ? reviewId : undefined;\n}\n\nfunction workflowLabel(event: FlueObservation) {\n if ('workflow' in event && typeof event.workflow === 'string') {\n return event.workflow;\n }\n\n return `Workflow run ${event.runId ?? 'unknown'}`;\n}\n\nfunction objectStringField(\n value: object,\n objectKey: string,\n stringKey: string,\n) {\n if (!(objectKey in value)) return undefined;\n const nested = (value as Record<string, unknown>)[objectKey];\n if (!nested || typeof nested !== 'object') return undefined;\n return stringField(nested, stringKey);\n}\n\nfunction stringField(value: object, key: string) {\n if (!(key in value)) return undefined;\n const field = (value as Record<string, unknown>)[key];\n return typeof field === 'string' && field.trim() ? field : undefined;\n}\n\nfunction displayAssistantSessionId(path: string) {\n const prefix = '/api/flue/agents/display-assistant/';\n if (!path.startsWith(prefix)) return undefined;\n const remainder = path.slice(prefix.length);\n if (!remainder || remainder.includes('/')) return undefined;\n return decodeURIComponent(remainder);\n}\n","import type { MiddlewareHandler } from 'hono';\nimport {\n bearerToken,\n localApiAuthHeader,\n localApiTokenMatches,\n localApiTokenQueryParam,\n readLocalApiToken,\n} from '../modules/runtime';\nimport type { RuntimePaths } from '../runtime-home';\n\nconst localHosts = new Set(['127.0.0.1', 'localhost', '[::1]', '::1']);\n\nexport const requireLocalApiAccess: MiddlewareHandler = async (c, next) => {\n const host = hostName(c.req.header('host'));\n if (host && localHosts.has(host)) {\n if (!isSafeMethod(c.req.method) && !isAllowedBrowserOrigin(c.req.raw)) {\n return c.json({ error: 'Not found' }, 404);\n }\n\n await next();\n return;\n }\n\n return c.json({ error: 'Not found' }, 404);\n};\n\nexport function requireFlueRunInspectionToken(\n paths: RuntimePaths,\n): MiddlewareHandler {\n return async (c, next) => {\n const expected = await readLocalApiToken(paths);\n const provided =\n c.req.header(localApiAuthHeader) ??\n bearerToken(c.req.header('authorization')) ??\n c.req.query(localApiTokenQueryParam);\n\n if (!localApiTokenMatches(provided, expected)) {\n return c.json({ error: 'Not found' }, 404);\n }\n\n await next();\n };\n}\n\nfunction hostName(host: string | undefined) {\n if (!host) return undefined;\n const lower = host.toLowerCase();\n if (lower.startsWith('[')) {\n return lower.slice(0, lower.indexOf(']') + 1);\n }\n\n return lower.split(':')[0];\n}\n\nfunction isSafeMethod(method: string) {\n return method === 'GET' || method === 'HEAD' || method === 'OPTIONS';\n}\n\nfunction isAllowedBrowserOrigin(request: Request) {\n const fetchSite = request.headers.get('sec-fetch-site');\n if (fetchSite && fetchSite !== 'same-origin' && fetchSite !== 'none') {\n return false;\n }\n\n const origin = request.headers.get('origin');\n if (origin) return isLocalUrl(origin);\n\n const referer = request.headers.get('referer');\n if (referer) return isLocalUrl(referer);\n\n return true;\n}\n\nfunction isLocalUrl(value: string) {\n try {\n const url = new URL(value);\n return localHosts.has(url.hostname.toLowerCase());\n } catch {\n return false;\n }\n}\n","import { invoke, type WorkflowDefinition } from '@flue/runtime';\nimport { asJsonValue } from '../lib/action-result';\nimport { addNotification, addWorkflowSummary } from '../modules/app-state';\nimport { approvePreparedDiffPushWithPolicy } from '../modules/autopilot';\nimport {\n type PreparedDiffActionResult,\n type PreparedDiffRecord,\n} from '../modules/prepared-diffs';\nimport {\n type RuntimePaths,\n parseAppConfig,\n readRuntimeJson,\n runtimePaths,\n} from '../runtime-home';\n\ntype PushOnApprovalMode = 'push' | 'verify-then-push' | 'off';\ntype DispatchWorkflowName = 'push-pr-autofix' | 'verify-then-push-pr-autofix';\ntype WorkflowReceipt = { runId: string };\n\ntype ApprovalDispatchDependencies = {\n invokeWorkflow?: (\n workflow: DispatchWorkflowName,\n input: Record<string, unknown>,\n ) => Promise<WorkflowReceipt>;\n};\ntype DispatchPlan =\n ReturnType<typeof pushDispatch> | ReturnType<typeof verifyThenPushDispatch>;\n\nexport async function approvePreparedDiffPushWithDispatch(\n rawInput: unknown,\n paths: RuntimePaths = runtimePaths(),\n dependencies: ApprovalDispatchDependencies = {},\n): Promise<PreparedDiffActionResult> {\n const approval = await approvePreparedDiffPushWithPolicy(rawInput, paths);\n if (!approval.ok || !approval.preparedDiff) return approval;\n return dispatchApprovedPreparedDiffPush(approval, paths, dependencies);\n}\n\nasync function dispatchApprovedPreparedDiffPush(\n approval: PreparedDiffActionResult,\n paths: RuntimePaths,\n dependencies: ApprovalDispatchDependencies,\n): Promise<PreparedDiffActionResult> {\n const preparedDiff = approval.preparedDiff;\n if (!preparedDiff) return approval;\n\n const mode = await readPushOnApprovalMode(paths);\n if (mode === 'off') {\n return withDispatchData(\n approval,\n {\n mode,\n status: 'off',\n message: 'Push dispatch is disabled by autopilot.pushOnApproval=off.',\n },\n 'Recorded prepared diff push approval. Push dispatch is disabled by autopilot.pushOnApproval=off.',\n );\n }\n\n const dispatch =\n mode === 'verify-then-push' && preparedDiff.verificationStatus !== 'passed'\n ? verifyThenPushDispatch(preparedDiff)\n : pushDispatch(preparedDiff);\n const invokeWorkflow = dependencies.invokeWorkflow ?? invokeAutopilotWorkflow;\n const approvalId = approval.approvals?.[0]?.id ?? null;\n let receipt: WorkflowReceipt;\n try {\n receipt = await invokeWorkflowForRuntimeHome(\n paths,\n dispatch,\n invokeWorkflow,\n );\n } catch (error) {\n const message = errorMessage(error);\n await recordDispatchFailure(\n preparedDiff,\n mode,\n dispatch,\n approvalId,\n message,\n paths,\n );\n return {\n ...withDispatchData(\n approval,\n {\n mode,\n status: 'dispatch-failed',\n workflow: dispatch.workflow,\n message,\n },\n `Recorded prepared diff push approval, but workflow dispatch failed: ${message}`,\n ),\n requires: ['workflowDispatch'],\n errors: [message],\n };\n }\n\n const workflowSummary = await addWorkflowSummary(\n {\n workflow: dispatch.workflow.replaceAll('-', '_'),\n runId: receipt.runId,\n status: 'pending',\n summary: {\n event: 'prepared_diff_push_approval_dispatch',\n mode,\n approvalId,\n preparedDiffId: preparedDiff.id,\n worktreeId: preparedDiff.worktreeId,\n repoId: preparedDiff.repoId,\n repoFullName: preparedDiff.repoFullName,\n prNumber: preparedDiff.prNumber,\n workflow: dispatch.workflow,\n input: dispatch.input,\n dispatchedAt: new Date().toISOString(),\n },\n },\n paths,\n ).catch(async (error) => {\n const message = errorMessage(error);\n await recordDispatchSummaryFailure(\n preparedDiff,\n mode,\n dispatch,\n approvalId,\n receipt.runId,\n message,\n paths,\n );\n return null;\n });\n\n const summaryFailedMessage = workflowSummary\n ? undefined\n : ' Workflow summary recording failed; the workflow was still admitted.';\n return {\n ...withDispatchData(\n approval,\n {\n mode,\n status: 'dispatched',\n workflow: dispatch.workflow,\n runId: receipt.runId,\n workflowSummaryId: workflowSummary?.id ?? null,\n message: `${dispatch.message}${summaryFailedMessage ?? ''}`,\n },\n `${dispatch.message}${summaryFailedMessage ?? ''}`,\n ),\n ...(workflowSummary\n ? {}\n : {\n requires: ['workflowSummary'],\n errors: [summaryFailedMessage!.trim()],\n }),\n };\n}\n\nfunction pushDispatch(preparedDiff: PreparedDiffRecord) {\n return {\n workflow: 'push-pr-autofix' as const,\n input: {\n preparedDiffId: preparedDiff.id,\n lockOwner: 'approval_push_pr_autofix',\n },\n message: `Approved prepared diff ${preparedDiff.id}; dispatched push-pr-autofix workflow.`,\n };\n}\n\nfunction verifyThenPushDispatch(preparedDiff: PreparedDiffRecord) {\n return {\n workflow: 'verify-then-push-pr-autofix' as const,\n input: {\n preparedDiffId: preparedDiff.id,\n worktreeId: preparedDiff.worktreeId,\n },\n message: `Approved prepared diff ${preparedDiff.id}; dispatched verify-then-push-pr-autofix workflow.`,\n };\n}\n\nasync function readPushOnApprovalMode(\n paths: RuntimePaths,\n): Promise<PushOnApprovalMode> {\n const config = await readRuntimeJson(paths.config, parseAppConfig);\n const value = config.autopilot?.pushOnApproval;\n return value === 'push' || value === 'off' ? value : 'verify-then-push';\n}\n\nasync function invokeWorkflowForRuntimeHome(\n paths: RuntimePaths,\n dispatch: DispatchPlan,\n invokeWorkflow: NonNullable<ApprovalDispatchDependencies['invokeWorkflow']>,\n) {\n // Flue workflows still call runtimePaths() from the process environment after\n // admission, so keep NEONDECK_HOME aligned with this app instance instead of\n // restoring it immediately after the dynamic import/invoke boundary.\n process.env.NEONDECK_HOME = paths.home;\n return invokeWorkflow(dispatch.workflow, dispatch.input);\n}\n\nasync function invokeAutopilotWorkflow(\n workflow: DispatchWorkflowName,\n input: Record<string, unknown>,\n) {\n if (workflow === 'push-pr-autofix') {\n const module = await import('../workflows/push-pr-autofix');\n return invokeWorkflow(module.default, { input });\n }\n const module = await import('../workflows/verify-then-push-pr-autofix');\n return invokeWorkflow(module.default, { input });\n}\n\nasync function recordDispatchFailure(\n preparedDiff: PreparedDiffRecord,\n mode: PushOnApprovalMode,\n dispatch: DispatchPlan,\n approvalId: string | null,\n error: string,\n paths: RuntimePaths,\n) {\n await addWorkflowSummary(\n {\n workflow: dispatch.workflow.replaceAll('-', '_'),\n status: 'failed',\n summary: {\n event: 'prepared_diff_push_approval_dispatch',\n mode,\n approvalId,\n preparedDiffId: preparedDiff.id,\n worktreeId: preparedDiff.worktreeId,\n repoId: preparedDiff.repoId,\n repoFullName: preparedDiff.repoFullName,\n prNumber: preparedDiff.prNumber,\n workflow: dispatch.workflow,\n input: dispatch.input,\n error,\n dispatchedAt: new Date().toISOString(),\n },\n },\n paths,\n ).catch(() => undefined);\n await addNotification(\n {\n level: 'attention',\n title: 'Push dispatch failed',\n message: `Prepared diff ${preparedDiff.id} was approved, but workflow dispatch failed: ${error}`,\n source: 'autopilot',\n sourceId: `prepared-diff:${preparedDiff.id}:push-dispatch-failed`,\n data: {\n approvalId,\n preparedDiffId: preparedDiff.id,\n worktreeId: preparedDiff.worktreeId,\n workflow: dispatch.workflow,\n error,\n },\n },\n paths,\n ).catch(() => undefined);\n}\n\nasync function recordDispatchSummaryFailure(\n preparedDiff: PreparedDiffRecord,\n mode: PushOnApprovalMode,\n dispatch: DispatchPlan,\n approvalId: string | null,\n runId: string,\n error: string,\n paths: RuntimePaths,\n) {\n await addNotification(\n {\n level: 'attention',\n title: 'Push dispatch audit failed',\n message: `Prepared diff ${preparedDiff.id} dispatched ${dispatch.workflow} (${runId}), but workflow summary recording failed: ${error}`,\n source: 'autopilot',\n sourceId: `prepared-diff:${preparedDiff.id}:push-dispatch-summary-failed:${runId}`,\n data: {\n mode,\n approvalId,\n preparedDiffId: preparedDiff.id,\n worktreeId: preparedDiff.worktreeId,\n workflow: dispatch.workflow,\n runId,\n error,\n },\n },\n paths,\n ).catch(() => undefined);\n}\n\nasync function invokeWorkflow(\n workflow: WorkflowDefinition,\n request: { input: Record<string, unknown> },\n) {\n return invoke(workflow, request);\n}\n\nfunction errorMessage(error: unknown) {\n return error instanceof Error ? error.message : String(error);\n}\n\nfunction withDispatchData(\n approval: PreparedDiffActionResult,\n dispatch: Record<string, unknown>,\n message: string,\n): PreparedDiffActionResult {\n const existing =\n approval.data &&\n typeof approval.data === 'object' &&\n !Array.isArray(approval.data)\n ? approval.data\n : {};\n return {\n ...approval,\n message,\n data: asJsonValue({\n ...existing,\n pushApprovalDispatch: dispatch,\n dispatchedPushRunId:\n typeof dispatch.runId === 'string' ? dispatch.runId : null,\n workflowSummaryId:\n typeof dispatch.workflowSummaryId === 'string'\n ? dispatch.workflowSummaryId\n : null,\n }),\n };\n}\n","import type { Context } from 'hono';\n\nexport async function safeJsonBody(c: Context): Promise<unknown> {\n return c.req.json().catch(() => ({}));\n}\n\nexport async function safeJsonObject(\n c: Context,\n): Promise<Record<string, unknown>> {\n const body = await safeJsonBody(c);\n return body && typeof body === 'object' && !Array.isArray(body)\n ? (body as Record<string, unknown>)\n : {};\n}\n\nexport function boundedQueryLimit(value: string | undefined, fallback: number) {\n if (!value) return fallback;\n const limit = Number(value);\n if (!Number.isInteger(limit) || limit < 1 || limit > 100) return undefined;\n return limit;\n}\n\nexport function queryNumber(value: string | undefined) {\n if (!value) return undefined;\n const parsed = Number(value);\n return Number.isFinite(parsed) ? parsed : undefined;\n}\n\nexport function queryBoolean(value: string | undefined) {\n if (!value) return undefined;\n if (value === '1' || value === 'true') return true;\n if (value === '0' || value === 'false') return false;\n return undefined;\n}\n\nexport function kiloSessionQuery(c: Context) {\n return {\n limit: queryNumber(c.req.query('limit')),\n offset: queryNumber(c.req.query('offset')),\n maxBytes: queryNumber(c.req.query('maxBytes')),\n includeFullTranscript: queryBoolean(c.req.query('includeFullTranscript')),\n includeToolOutput: queryBoolean(c.req.query('includeToolOutput')),\n includeDiff: queryBoolean(c.req.query('includeDiff')),\n requesterSurface: c.req.query('requesterSurface') ?? 'dashboard',\n readReason: c.req.query('readReason') ?? 'dashboard-kilo-session-read',\n };\n}\n\nexport function preparedDiffHttpStatus(result: {\n ok: boolean;\n error?: { code?: string };\n}) {\n if (result.ok) return 200;\n if (result.error?.code === 'PREPARED_DIFF_NOT_FOUND') return 404;\n return 400;\n}\n","import { Hono } from 'hono';\nimport {\n commentPrAutofixResult,\n fixPrCiFailure,\n fixPrReviewFeedback,\n abandonPreparedDiffWithRevisionAbort,\n preparePrWorktree,\n pushPrAutofix,\n runPreparedDiffRevision,\n triagePrEvent,\n verifyPrWorktree,\n} from '../../modules/autopilot';\nimport {\n readAutopilotRecoveryOptions,\n runAutopilotRecoveryAction,\n} from '../../modules/autopilot/recovery';\nimport {\n listPreparedDiffs,\n openPreparedDiffWorktree,\n readPreparedDiffChangedFiles,\n readPreparedDiffFileDiff,\n readPreparedDiffApprovalRecord,\n readPreparedDiffSummary,\n requestPreparedDiffRevision,\n runPreparedDiffVerification,\n} from '../../modules/prepared-diffs';\nimport { resolveExecutionApproval } from '../../modules/execution';\nimport type { RuntimePaths } from '../../runtime-home';\nimport { approvePreparedDiffPushWithDispatch } from '../autopilot-push-dispatch';\nimport {\n preparedDiffHttpStatus,\n queryBoolean,\n queryNumber,\n safeJsonBody,\n safeJsonObject,\n} from '../http';\nimport { recordHandledPrApiResult } from '../learning-hooks';\n\nexport function createAutopilotRoutes(paths: RuntimePaths) {\n const routes = new Hono();\n\n routes.post('/autopilot/triage-pr-event', async (c) => {\n const result = await triagePrEvent(await safeJsonBody(c));\n return c.json(result, result.ok ? 200 : 400);\n });\n\n routes.post('/autopilot/prepare-pr-worktree', async (c) => {\n const result = await preparePrWorktree(await safeJsonBody(c), paths);\n return c.json(result, result.ok ? 200 : 400);\n });\n\n routes.post('/autopilot/fix-pr-ci-failure', async (c) => {\n const result = await fixPrCiFailure(await safeJsonBody(c), paths);\n recordHandledPrApiResult(paths, 'api:fix_pr_ci_failure', result);\n return c.json(result, result.ok ? 200 : 400);\n });\n\n routes.post('/autopilot/fix-pr-review-feedback', async (c) => {\n const result = await fixPrReviewFeedback(await safeJsonBody(c), paths);\n recordHandledPrApiResult(paths, 'api:fix_pr_review_feedback', result);\n return c.json(result, result.ok ? 200 : 400);\n });\n\n routes.post('/autopilot/comment-pr-autofix-result', async (c) => {\n const result = await commentPrAutofixResult(await safeJsonBody(c), paths);\n recordHandledPrApiResult(paths, 'api:comment_pr_autofix_result', result);\n return c.json(result, result.ok ? 200 : 400);\n });\n\n routes.post('/autopilot/approvals/:id/resolve', async (c) => {\n const input = await safeJsonObject(c);\n const decision = input.decision;\n if (decision !== 'approve' && decision !== 'deny') {\n return c.json(\n {\n ok: false,\n action: 'autopilot_approval_resolve',\n changed: false,\n message: 'Decision must be approve or deny.',\n errors: ['decision is required.'],\n },\n 400,\n );\n }\n\n const executionResult = await resolveExecutionApproval(\n {\n id: c.req.param('id'),\n decision: decision === 'approve' ? 'allow-once' : 'deny',\n approverSurface: 'dashboard',\n },\n paths,\n );\n if (executionResult.ok || !approvalNotFound(executionResult.message)) {\n return c.json(executionResult, executionResult.ok ? 200 : 400);\n }\n\n const approval = readPreparedDiffApprovalRecord(c.req.param('id'), paths);\n if (!approval) {\n return c.json(\n {\n ok: false,\n action: 'autopilot_approval_resolve',\n changed: false,\n message: `Autopilot approval \"${c.req.param('id')}\" was not found.`,\n errors: ['approval not found.'],\n },\n 404,\n );\n }\n\n const result =\n decision === 'approve'\n ? await approvePreparedDiffPushWithDispatch(\n {\n preparedDiffId: approval.preparedDiffId,\n confirm: true,\n reason: 'Approved from dashboard Autopilot panel.',\n approverSurface: 'dashboard',\n },\n paths,\n )\n : await resolvePreparedDiffRevisionFromRoute(\n approval.preparedDiffId,\n input,\n paths,\n );\n return c.json(result, preparedDiffHttpStatus(result));\n });\n\n routes.get('/prepared-diffs', async (c) => {\n const result = await listPreparedDiffs(\n {\n status: c.req.query('status') || undefined,\n includeTerminal: queryBoolean(c.req.query('includeTerminal')),\n repoId: c.req.query('repoId') || undefined,\n },\n paths,\n );\n return c.json(result, preparedDiffHttpStatus(result));\n });\n\n routes.get('/prepared-diffs/:id/summary', async (c) => {\n const result = await readPreparedDiffSummary(\n { preparedDiffId: c.req.param('id') },\n paths,\n );\n return c.json(result, preparedDiffHttpStatus(result));\n });\n\n routes.get('/prepared-diffs/:id/files', async (c) => {\n const result = await readPreparedDiffChangedFiles(\n { preparedDiffId: c.req.param('id') },\n paths,\n );\n return c.json(result, preparedDiffHttpStatus(result));\n });\n\n routes.get('/prepared-diffs/:id/files/diff', async (c) => {\n const result = await readPreparedDiffFileDiff(\n {\n preparedDiffId: c.req.param('id'),\n path: c.req.query('path'),\n maxPatchBytes: queryNumber(c.req.query('maxPatchBytes')),\n },\n paths,\n );\n return c.json(result, preparedDiffHttpStatus(result));\n });\n\n routes.post('/prepared-diffs/:id/approve-push', async (c) => {\n const result = await approvePreparedDiffPushWithDispatch(\n { ...(await safeJsonObject(c)), preparedDiffId: c.req.param('id') },\n paths,\n );\n return c.json(result, preparedDiffHttpStatus(result));\n });\n\n routes.post('/prepared-diffs/:id/request-revision', async (c) => {\n const body = await safeJsonObject(c);\n const requested = await requestPreparedDiffRevision(\n { ...body, preparedDiffId: c.req.param('id') },\n paths,\n );\n const result =\n requested.ok && (body.runRevisionNow === true || body.runNow === true)\n ? await runPreparedDiffRevision(\n {\n preparedDiffId: c.req.param('id'),\n reason: typeof body.reason === 'string' ? body.reason : undefined,\n approverSurface:\n typeof body.approverSurface === 'string'\n ? body.approverSurface\n : 'dashboard',\n },\n paths,\n )\n : requested;\n return c.json(result, preparedDiffHttpStatus(result));\n });\n\n routes.post('/prepared-diffs/:id/run-revision', async (c) => {\n const result = await runPreparedDiffRevision(\n { ...(await safeJsonObject(c)), preparedDiffId: c.req.param('id') },\n paths,\n );\n return c.json(result, preparedDiffHttpStatus(result));\n });\n\n routes.post('/prepared-diffs/:id/abandon', async (c) => {\n const result = await abandonPreparedDiffWithRevisionAbort(\n { ...(await safeJsonObject(c)), preparedDiffId: c.req.param('id') },\n paths,\n );\n return c.json(result, preparedDiffHttpStatus(result));\n });\n\n routes.get('/prepared-diffs/:id/worktree-path', async (c) => {\n const result = await openPreparedDiffWorktree(\n { preparedDiffId: c.req.param('id') },\n paths,\n );\n return c.json(result, preparedDiffHttpStatus(result));\n });\n\n routes.post('/prepared-diffs/:id/verify', async (c) => {\n const result = await runPreparedDiffVerification(\n { ...(await safeJsonObject(c)), preparedDiffId: c.req.param('id') },\n paths,\n );\n return c.json(result, preparedDiffHttpStatus(result));\n });\n\n routes.get('/prepared-diffs/:id/recovery', async (c) => {\n const result = await readAutopilotRecoveryOptions(\n { preparedDiffId: c.req.param('id') },\n paths,\n );\n return c.json(result, preparedDiffHttpStatus(result));\n });\n\n routes.post('/prepared-diffs/:id/recovery/run', async (c) => {\n const result = await runAutopilotRecoveryAction(\n { ...(await safeJsonObject(c)), preparedDiffId: c.req.param('id') },\n paths,\n { allowRevisionDispatch: true },\n );\n recordHandledPrApiResult(paths, 'api:autopilot_recovery', result);\n return c.json(result, preparedDiffHttpStatus(result));\n });\n\n routes.post('/autopilot/verify-pr-worktree', async (c) => {\n const result = await verifyPrWorktree(await safeJsonBody(c), paths);\n recordHandledPrApiResult(paths, 'api:verify_pr_worktree', result);\n return c.json(result, result.ok ? 200 : 400);\n });\n\n routes.post('/autopilot/push-pr-autofix', async (c) => {\n const result = await pushPrAutofix(await safeJsonBody(c), paths);\n recordHandledPrApiResult(paths, 'api:push_pr_autofix', result);\n return c.json(result, result.ok ? 200 : 400);\n });\n\n routes.post('/prepared-diffs/:id/push', async (c) => {\n const result = await pushPrAutofix(\n { ...(await safeJsonObject(c)), preparedDiffId: c.req.param('id') },\n paths,\n );\n recordHandledPrApiResult(paths, 'api:push_pr_autofix', result);\n return c.json(result, result.ok ? 200 : 400);\n });\n\n return routes;\n}\n\nfunction approvalNotFound(message: string | undefined) {\n return Boolean(message?.includes('was not found'));\n}\n\nasync function resolvePreparedDiffRevisionFromRoute(\n preparedDiffId: string,\n input: Record<string, unknown>,\n paths: RuntimePaths,\n) {\n const reason = typeof input.reason === 'string' ? input.reason : undefined;\n const runRevisionNow = input.runRevisionNow !== false;\n if (runRevisionNow && !reason?.trim()) {\n return {\n ok: false,\n action: 'prepared_diff_request_revision',\n changed: false,\n message: 'Running a prepared-diff revision requires a revision note.',\n requires: ['reason'],\n errors: ['reason is required.'],\n };\n }\n const requested = await requestPreparedDiffRevision(\n {\n preparedDiffId,\n reason,\n approverSurface: 'dashboard',\n },\n paths,\n );\n if (!requested.ok || !runRevisionNow) return requested;\n const run = await runPreparedDiffRevision(\n {\n preparedDiffId,\n reason,\n approverSurface: 'dashboard',\n },\n paths,\n );\n return {\n ...run,\n data: { request: requested, run },\n };\n}\n","import { Hono } from 'hono';\nimport { supportedCommands } from '../../modules/commands';\n\nexport function createCommandRoutes() {\n const routes = new Hono();\n\n routes.get('/', (c) => {\n return c.json({ items: supportedCommands() });\n });\n\n return routes;\n}\n","import { Hono } from 'hono';\nimport {\n applyDashboardPreset,\n readProviderConfig,\n reloadConfig,\n updateAgentModels,\n updateDashboardLayout,\n updateProviderConfig,\n updateRepoAutopilotPolicy,\n updateWorktreePolicy,\n} from '../../modules/config';\nimport { isRegisteredProvider } from '../../modules/repos';\nimport {\n ConfigValidationError,\n parseDashboardConfig,\n readRuntimeJson,\n type RuntimePaths,\n} from '../../runtime-home';\nimport { safeJsonBody, safeJsonObject } from '../http';\n\nexport function createConfigRoutes(paths: RuntimePaths) {\n const routes = new Hono();\n\n routes.get('/providers', async (c) => {\n return c.json(await readProviderConfig(paths));\n });\n\n routes.post('/config/reload', async (c) => {\n return c.json(await reloadConfig(paths));\n });\n\n routes.post('/models', async (c) => {\n return c.json(await updateAgentModels(await c.req.json(), paths));\n });\n\n routes.post('/providers/kilocode', async (c) => {\n const input = (await c.req.json()) as Record<string, unknown>;\n return c.json(\n await updateProviderConfig(\n {\n ...input,\n provider: 'kilocode',\n },\n paths,\n ),\n );\n });\n\n routes.post('/providers/:provider', async (c) => {\n const input = (await safeJsonObject(c)) as Record<string, unknown>;\n const provider = c.req.param('provider');\n if (!isRegisteredProvider(provider)) {\n return c.json(\n {\n ok: false,\n changed: false,\n action: 'config_update_provider',\n message: `Unsupported provider \"${provider}\".`,\n },\n 400,\n );\n }\n\n return c.json(\n await updateProviderConfig(\n {\n ...input,\n provider,\n },\n paths,\n ),\n );\n });\n\n routes.post('/worktrees/policy', async (c) => {\n const input = (await safeJsonBody(c)) as Parameters<\n typeof updateWorktreePolicy\n >[0];\n const result = await updateWorktreePolicy(input, paths);\n return c.json(result, result.ok ? 200 : 400);\n });\n\n routes.post('/repos/:repoId/autopilot-policy', async (c) => {\n const input = (await safeJsonObject(c)) as Record<string, unknown>;\n const result = await updateRepoAutopilotPolicy(\n { ...input, repoId: c.req.param('repoId') },\n paths,\n );\n return c.json(result, result.ok ? 200 : 400);\n });\n\n routes.get('/dashboard/config', async (c) => {\n try {\n return c.json(\n await readRuntimeJson(paths.dashboard, parseDashboardConfig),\n );\n } catch (error) {\n if (error instanceof ConfigValidationError) {\n return c.json(\n {\n error: 'Invalid dashboard config',\n message: error.message,\n path: error.path,\n },\n 500,\n );\n }\n\n throw error;\n }\n });\n\n routes.post('/dashboard/config', async (c) => {\n const result = await updateDashboardLayout(await safeJsonBody(c), paths);\n return c.json(result, result.ok ? 200 : 400);\n });\n\n routes.post('/dashboard/preset', async (c) => {\n const result = await applyDashboardPreset(await safeJsonBody(c), paths);\n return c.json(result, result.ok ? 200 : 400);\n });\n\n return routes;\n}\n","import { Hono } from 'hono';\nimport {\n listExecutionApprovals,\n requestExecutionApproval,\n resolveExecutionApproval,\n runApprovedExecution,\n} from '../../modules/execution';\nimport { syncExeDevCheckout } from '../../modules/execution';\nimport {\n checkExecutionPolicy,\n readExecutionPolicy,\n} from '../../modules/execution';\nimport type { RuntimePaths } from '../../runtime-home';\nimport { updateExecutionPolicy } from '../../modules/config';\nimport { safeJsonBody } from '../http';\n\nexport function createExecutionRoutes(paths: RuntimePaths) {\n const routes = new Hono();\n\n routes.get('/policy', async (c) => {\n return c.json(await readExecutionPolicy(paths));\n });\n\n routes.post('/policy', async (c) => {\n const input = (await safeJsonBody(c)) as Parameters<\n typeof updateExecutionPolicy\n >[0];\n return c.json(await updateExecutionPolicy(input, paths));\n });\n\n routes.post('/check', async (c) => {\n const input = (await safeJsonBody(c)) as Parameters<\n typeof checkExecutionPolicy\n >[0];\n return c.json(await checkExecutionPolicy(input, paths));\n });\n\n routes.get('/approvals', async (c) => {\n const includeResolved = c.req.query('includeResolved') === '1';\n return c.json(await listExecutionApprovals(paths, { includeResolved }));\n });\n\n routes.post('/approvals', async (c) => {\n const result = await requestExecutionApproval(await safeJsonBody(c), paths);\n return c.json(result, result.ok ? 200 : 400);\n });\n\n routes.post('/approvals/:id/resolve', async (c) => {\n const input = (await c.req.json().catch(() => ({}))) as Record<\n string,\n unknown\n >;\n const result = await resolveExecutionApproval(\n { ...input, id: c.req.param('id') },\n paths,\n );\n return c.json(result, result.ok ? 200 : 400);\n });\n\n routes.post('/run', async (c) => {\n const result = await runApprovedExecution(await safeJsonBody(c), paths);\n return c.json(result, result.ok ? 200 : 400);\n });\n\n routes.post('/exedev/sync-checkout', async (c) => {\n const result = await syncExeDevCheckout(await safeJsonBody(c), paths);\n return c.json(result, result.ok ? 200 : 400);\n });\n\n return routes;\n}\n","import { Hono } from 'hono';\nimport { getGitHubPullRequest, listGitHubPrQueue } from '../../modules/github';\nimport {\n getGitHubPrBranchPermissions,\n getGitHubPrEventState,\n getGitHubPrFileDiff,\n getGitHubPrFiles,\n getGitHubPrReviewDraft,\n getGitHubPrRequestedChanges,\n getGitHubPrReviewThreads,\n deleteGitHubPrReviewDraft,\n deleteGitHubPrReviewDraftComment,\n patchGitHubPrReviewDraftComment,\n postGitHubPrComment,\n postGitHubPrReview,\n postGitHubPrReviewDraftComment,\n postGitHubPrThreadReply,\n postGitHubPrThreadResolution,\n putGitHubPrReviewDraft,\n} from '../../modules/pr-events';\nimport type { RuntimePaths } from '../../runtime-home';\nimport { queryNumber, safeJsonBody } from '../http';\n\nexport function createGitHubRoutes(paths: RuntimePaths) {\n const routes = new Hono();\n\n routes.get('/prs', async (c) => {\n const result = await listGitHubPrQueue(paths);\n const queue =\n result.ok && result.data && typeof result.data === 'object'\n ? (result.data as { queue?: unknown }).queue\n : undefined;\n if (queue && typeof queue === 'object') {\n return c.json(queue);\n }\n\n return c.json(\n {\n error: result.message,\n items: [],\n issues: (result.errors ?? [result.message]).map((message) => ({\n type: 'search-error',\n message,\n })),\n },\n result.requires?.includes('GITHUB_TOKEN') ? 503 : 502,\n );\n });\n\n routes.get('/prs/:owner/:repo/:number', async (c) => {\n const target = prTargetFromParams(\n c.req.param('owner'),\n c.req.param('repo'),\n c.req.param('number'),\n );\n if (!target.ok) return c.json(target.result, 400);\n const result = await getGitHubPullRequest(\n { repo: target.input.repo, number: target.input.prNumber },\n paths,\n );\n return c.json(result, result.ok ? 200 : 400);\n });\n\n routes.get('/prs/:owner/:repo/:number/files/diff', async (c) => {\n const owner = c.req.param('owner');\n const repo = c.req.param('repo');\n const number = Number(c.req.param('number'));\n if (!Number.isInteger(number) || number <= 0) {\n return c.json(\n {\n ok: false,\n action: 'github_pr_file_diff_get',\n changed: false,\n message: 'Invalid PR number.',\n requires: ['prNumber'],\n },\n 400,\n );\n }\n\n const result = await getGitHubPrFileDiff(\n {\n repo: `${owner}/${repo}`,\n prNumber: number,\n path: c.req.query('path') ?? '',\n headSha: c.req.query('head')?.trim() || undefined,\n baseSha: c.req.query('base')?.trim() || undefined,\n baseRef: c.req.query('baseRef')?.trim() || undefined,\n source: sourceQuery(c.req.query('source')),\n maxPatchBytes: queryNumber(c.req.query('maxPatchBytes')),\n },\n paths,\n );\n return c.json(result, result.ok ? 200 : 400);\n });\n\n routes.get('/prs/:owner/:repo/:number/files', async (c) => {\n const owner = c.req.param('owner');\n const repo = c.req.param('repo');\n const number = Number(c.req.param('number'));\n if (!Number.isInteger(number) || number <= 0) {\n return c.json(\n {\n ok: false,\n action: 'github_pr_files_get',\n changed: false,\n message: 'Invalid PR number.',\n requires: ['prNumber'],\n },\n 400,\n );\n }\n\n const result = await getGitHubPrFiles(\n {\n repo: `${owner}/${repo}`,\n prNumber: number,\n headSha: c.req.query('head')?.trim() || undefined,\n baseSha: c.req.query('base')?.trim() || undefined,\n baseRef: c.req.query('baseRef')?.trim() || undefined,\n patches: patchesQuery(c.req.query('patches')),\n source: sourceQuery(c.req.query('source')),\n },\n paths,\n );\n return c.json(result, result.ok ? 200 : 400);\n });\n\n routes.get('/prs/:owner/:repo/:number/review-draft', async (c) => {\n const target = prTargetFromParams(\n c.req.param('owner'),\n c.req.param('repo'),\n c.req.param('number'),\n );\n if (!target.ok) return c.json(target.result, 400);\n const result = await getGitHubPrReviewDraft(target.input, paths);\n return c.json(result, result.ok ? 200 : 400);\n });\n\n routes.put('/prs/:owner/:repo/:number/review-draft', async (c) => {\n const target = prTargetFromParams(\n c.req.param('owner'),\n c.req.param('repo'),\n c.req.param('number'),\n );\n if (!target.ok) return c.json(target.result, 400);\n const result = await putGitHubPrReviewDraft(\n target.input,\n (await safeJsonBody(c)) as Parameters<typeof putGitHubPrReviewDraft>[1],\n paths,\n );\n return c.json(result, result.ok ? 200 : 400);\n });\n\n routes.post('/prs/:owner/:repo/:number/review-draft/comments', async (c) => {\n const target = prTargetFromParams(\n c.req.param('owner'),\n c.req.param('repo'),\n c.req.param('number'),\n );\n if (!target.ok) return c.json(target.result, 400);\n const result = await postGitHubPrReviewDraftComment(\n target.input,\n (await safeJsonBody(c)) as Parameters<\n typeof postGitHubPrReviewDraftComment\n >[1],\n paths,\n );\n return c.json(result, result.ok ? 200 : 400);\n });\n\n routes.patch(\n '/prs/:owner/:repo/:number/review-draft/comments/:id',\n async (c) => {\n const target = prTargetFromParams(\n c.req.param('owner'),\n c.req.param('repo'),\n c.req.param('number'),\n );\n if (!target.ok) return c.json(target.result, 400);\n const result = await patchGitHubPrReviewDraftComment(\n target.input,\n c.req.param('id'),\n (await safeJsonBody(c)) as Parameters<\n typeof patchGitHubPrReviewDraftComment\n >[2],\n paths,\n );\n return c.json(result, result.ok ? 200 : 400);\n },\n );\n\n routes.delete(\n '/prs/:owner/:repo/:number/review-draft/comments/:id',\n async (c) => {\n const target = prTargetFromParams(\n c.req.param('owner'),\n c.req.param('repo'),\n c.req.param('number'),\n );\n if (!target.ok) return c.json(target.result, 400);\n const result = await deleteGitHubPrReviewDraftComment(\n target.input,\n c.req.param('id'),\n paths,\n );\n return c.json(result, result.ok ? 200 : 400);\n },\n );\n\n routes.delete('/prs/:owner/:repo/:number/review-draft', async (c) => {\n const target = prTargetFromParams(\n c.req.param('owner'),\n c.req.param('repo'),\n c.req.param('number'),\n );\n if (!target.ok) return c.json(target.result, 400);\n const result = await deleteGitHubPrReviewDraft(target.input, paths);\n return c.json(result, result.ok ? 200 : 400);\n });\n\n routes.post('/prs/:owner/:repo/:number/reviews', async (c) => {\n const target = prTargetFromParams(\n c.req.param('owner'),\n c.req.param('repo'),\n c.req.param('number'),\n );\n if (!target.ok) return c.json(target.result, 400);\n const result = await postGitHubPrReview(\n target.input,\n (await safeJsonBody(c)) as Parameters<typeof postGitHubPrReview>[1],\n paths,\n );\n return c.json(result, result.ok ? 200 : 400);\n });\n\n routes.post(\n '/prs/:owner/:repo/:number/review-threads/:threadId/reply',\n async (c) => {\n const target = prTargetFromParams(\n c.req.param('owner'),\n c.req.param('repo'),\n c.req.param('number'),\n );\n if (!target.ok) return c.json(target.result, 400);\n const result = await postGitHubPrThreadReply(\n target.input,\n c.req.param('threadId'),\n (await safeJsonBody(c)) as Parameters<\n typeof postGitHubPrThreadReply\n >[2],\n paths,\n );\n return c.json(result, result.ok ? 200 : 400);\n },\n );\n\n routes.post(\n '/prs/:owner/:repo/:number/review-threads/:threadId/resolve',\n async (c) => {\n const target = prTargetFromParams(\n c.req.param('owner'),\n c.req.param('repo'),\n c.req.param('number'),\n );\n if (!target.ok) return c.json(target.result, 400);\n const result = await postGitHubPrThreadResolution(\n target.input,\n c.req.param('threadId'),\n true,\n paths,\n );\n return c.json(result, result.ok ? 200 : 400);\n },\n );\n\n routes.post(\n '/prs/:owner/:repo/:number/review-threads/:threadId/unresolve',\n async (c) => {\n const target = prTargetFromParams(\n c.req.param('owner'),\n c.req.param('repo'),\n c.req.param('number'),\n );\n if (!target.ok) return c.json(target.result, 400);\n const result = await postGitHubPrThreadResolution(\n target.input,\n c.req.param('threadId'),\n false,\n paths,\n );\n return c.json(result, result.ok ? 200 : 400);\n },\n );\n\n routes.post('/prs/event-state', async (c) => {\n const result = await getGitHubPrEventState(\n (await safeJsonBody(c)) as Parameters<typeof getGitHubPrEventState>[0],\n paths,\n );\n return c.json(result, result.ok ? 200 : 400);\n });\n\n routes.post('/prs/review-threads', async (c) => {\n const result = await getGitHubPrReviewThreads(\n (await safeJsonBody(c)) as Parameters<typeof getGitHubPrReviewThreads>[0],\n paths,\n );\n return c.json(result, result.ok ? 200 : 400);\n });\n\n routes.post('/prs/requested-changes', async (c) => {\n const result = await getGitHubPrRequestedChanges(\n (await safeJsonBody(c)) as Parameters<\n typeof getGitHubPrRequestedChanges\n >[0],\n paths,\n );\n return c.json(result, result.ok ? 200 : 400);\n });\n\n routes.post('/prs/branch-permissions', async (c) => {\n const result = await getGitHubPrBranchPermissions(\n (await safeJsonBody(c)) as Parameters<\n typeof getGitHubPrBranchPermissions\n >[0],\n paths,\n );\n return c.json(result, result.ok ? 200 : 400);\n });\n\n routes.post('/prs/comment', async (c) => {\n const result = await postGitHubPrComment(\n (await safeJsonBody(c)) as Parameters<typeof postGitHubPrComment>[0],\n paths,\n );\n return c.json(result, result.ok ? 200 : 400);\n });\n\n return routes;\n}\n\nfunction prTargetFromParams(owner: string, repo: string, numberText: string) {\n const number = Number(numberText);\n if (!Number.isInteger(number) || number <= 0) {\n return {\n ok: false as const,\n result: {\n ok: false,\n action: 'github_pr_review_target',\n changed: false,\n message: 'Invalid PR number.',\n requires: ['prNumber'],\n },\n };\n }\n\n return {\n ok: true as const,\n input: { repo: `${owner}/${repo}`, prNumber: number },\n };\n}\n\nfunction patchesQuery(value: string | undefined) {\n return value === 'none' || value === 'all' ? value : undefined;\n}\n\nfunction sourceQuery(value: string | undefined) {\n return value === 'local' || value === 'github' || value === 'auto'\n ? value\n : undefined;\n}\n","import type { JsonValue } from '@flue/runtime';\nimport * as v from 'valibot';\n\nexport type HandoffActionResult = {\n ok: boolean;\n action: string;\n changed: boolean;\n message: string;\n id?: string;\n deckUrl?: string;\n watch?: JsonValue;\n notification?: JsonValue;\n release?: JsonValue;\n review?: JsonValue;\n audit?: JsonValue;\n errors?: string[];\n requires?: string[];\n};\n\nexport const handoffSourceSchema = v.pipe(\n v.string(),\n v.minLength(1),\n v.maxLength(120),\n);\n\nexport const handoffNoteLevelSchema = v.optional(\n v.picklist(['info', 'ready', 'attention', 'urgent']),\n 'info',\n);\n\nexport const handoffNoteInputSchema = v.strictObject({\n text: v.pipe(v.string(), v.minLength(1), v.maxLength(4096)),\n source: v.optional(handoffSourceSchema),\n repo: v.optional(v.pipe(v.string(), v.minLength(1))),\n pr: v.optional(v.pipe(v.string(), v.minLength(1))),\n level: handoffNoteLevelSchema,\n});\n\nexport const handoffRegisterPrInputSchema = v.strictObject({\n ref: v.pipe(v.string(), v.minLength(1)),\n source: v.optional(handoffSourceSchema),\n watch: v.optional(v.boolean()),\n review: v.optional(v.boolean()),\n note: v.optional(v.pipe(v.string(), v.minLength(1), v.maxLength(4096))),\n});\n\nexport const handoffWatchPrInputSchema = v.strictObject({\n ref: v.pipe(v.string(), v.minLength(1)),\n source: v.optional(handoffSourceSchema),\n desiredTerminalState: v.optional(v.picklist(['checks', 'merged'])),\n intervalSeconds: v.optional(v.pipe(v.number(), v.integer(), v.minValue(60))),\n});\n\nexport const handoffActionOutputSchema = v.looseObject({\n ok: v.boolean(),\n action: v.string(),\n changed: v.boolean(),\n message: v.string(),\n id: v.optional(v.string()),\n deckUrl: v.optional(v.string()),\n});\n","import { createHash } from 'node:crypto';\nimport { asJsonValue } from '../../lib/action-result';\nimport { parseInput } from '../../lib/valibot';\nimport {\n ensureRuntimeHome,\n parseAppConfig,\n readRuntimeJson,\n runtimePaths,\n type RuntimePaths,\n} from '../../runtime-home';\nimport { addNotification, addWorkflowSummary } from '../app-state';\nimport { readRepoRegistrySnapshot, repoFullName } from '../repos';\nimport { addPrWatch, resolvePrReference, type PrWatch } from '../watches';\nimport {\n handoffNoteInputSchema,\n handoffRegisterPrInputSchema,\n handoffWatchPrInputSchema,\n type HandoffActionResult,\n} from './schemas';\nimport type * as v from 'valibot';\n\nexport type HandoffDependencies = {\n addPrWatch?: typeof addPrWatch;\n createNotification?: typeof addNotification;\n invokeReviewPrWorkflow?: (input: {\n ref: string;\n }) => Promise<{ runId: string }>;\n};\n\ntype ResolvedRepo = Awaited<\n ReturnType<typeof readRepoRegistrySnapshot>\n>['repos'][number];\n\ntype PrLink = {\n repo: ResolvedRepo;\n ref: {\n id: string;\n repoId: string;\n repoFullName: string;\n githubOwner: string;\n githubName: string;\n prNumber: number;\n };\n};\n\nconst deckUrl = '/';\n\nexport async function registerHandoffWatchPr(\n rawInput: v.InferInput<typeof handoffWatchPrInputSchema>,\n paths = runtimePaths(),\n dependencies: HandoffDependencies = {},\n): Promise<HandoffActionResult> {\n await ensureRuntimeHome(paths);\n const parsed = parseHandoffInput(\n handoffWatchPrInputSchema,\n rawInput,\n 'handoff_pr_watch',\n );\n if (!parsed.ok) return parsed.result;\n\n const source = normalizeHandoffSource(parsed.input.source);\n const prLink = await resolveRegisteredPrLink(parsed.input.ref, paths);\n if (!prLink.ok) return prLink.result;\n\n const desiredTerminalState = parsed.input.desiredTerminalState ?? 'checks';\n const watchResult = await (dependencies.addPrWatch ?? addPrWatch)(\n {\n ref: prLink.link.ref.id,\n desiredTerminalState,\n ...(parsed.input.intervalSeconds !== undefined\n ? { intervalSeconds: parsed.input.intervalSeconds }\n : {}),\n createdBy: source,\n },\n paths,\n );\n if (!watchResult.ok) {\n return failResult('handoff_pr_watch', watchResult.message, {\n errors: watchResult.errors,\n requires: watchResult.requires,\n });\n }\n\n const watchId = watchIdFromValue(watchResult.watch);\n const audit = await addHandoffAudit(\n {\n event: 'watch-pr',\n source,\n ref: prLink.link.ref.id,\n desiredTerminalState,\n intervalSeconds: parsed.input.intervalSeconds ?? null,\n watchId: watchId ?? null,\n },\n paths,\n );\n\n return okResult(\n 'handoff_pr_watch',\n watchResult.changed,\n watchResult.changed\n ? `Watching ${prLink.link.ref.id} from ${displaySource(source)}.`\n : `Watch for ${prLink.link.ref.id} was already current.`,\n {\n id: watchId,\n watch: watchResult.watch,\n audit,\n },\n );\n}\n\nexport async function createHandoffNote(\n rawInput: v.InferInput<typeof handoffNoteInputSchema>,\n paths = runtimePaths(),\n dependencies: HandoffDependencies = {},\n): Promise<HandoffActionResult> {\n await ensureRuntimeHome(paths);\n const parsed = parseHandoffInput(\n handoffNoteInputSchema,\n rawInput,\n 'handoff_note_create',\n );\n if (!parsed.ok) return parsed.result;\n\n const source = normalizeHandoffSource(parsed.input.source);\n const prLink = parsed.input.pr\n ? await resolveRegisteredPrLink(parsed.input.pr, paths)\n : null;\n if (prLink && !prLink.ok) return prLink.result;\n\n const repoResult = parsed.input.repo\n ? await resolveRegisteredRepo(parsed.input.repo, paths)\n : null;\n if (repoResult && !repoResult.ok) return repoResult.result;\n\n const repo = prLink?.link.repo ?? repoResult?.repo ?? null;\n if (prLink?.link.repo && repoResult?.repo) {\n const prRepo = repoFullName(prLink.link.repo).toLowerCase();\n const noteRepo = repoFullName(repoResult.repo).toLowerCase();\n if (prRepo !== noteRepo) {\n return failResult(\n 'handoff_note_create',\n `Note repo \"${repoFullName(repoResult.repo)}\" does not match PR repo \"${repoFullName(prLink.link.repo)}\".`,\n { requires: ['repo'] },\n );\n }\n }\n\n const level =\n parsed.input.level === 'urgent' ? 'attention' : parsed.input.level;\n const sourceId = noteSourceId({\n source,\n text: parsed.input.text,\n repoFullName: repo ? repoFullName(repo) : null,\n prId: prLink?.link.ref.id ?? null,\n });\n const notification = await (\n dependencies.createNotification ?? addNotification\n )(\n {\n level,\n title: `Note from ${displaySource(source)}`,\n message: parsed.input.text,\n source,\n sourceId,\n data: {\n kind: 'external-note',\n source,\n repoId: repo?.id ?? null,\n repoFullName: repo ? repoFullName(repo) : null,\n prNumber: prLink?.link.ref.prNumber ?? null,\n prRef: prLink?.link.ref.id ?? null,\n },\n },\n paths,\n );\n\n const audit = await addHandoffAudit(\n {\n event: 'note',\n source,\n notificationId: notification.id,\n repoId: repo?.id ?? null,\n repoFullName: repo ? repoFullName(repo) : null,\n prRef: prLink?.link.ref.id ?? null,\n level,\n },\n paths,\n );\n\n return okResult('handoff_note_create', true, 'Created handoff note.', {\n id: notification.id,\n notification,\n audit,\n });\n}\n\nexport async function registerHandoffPr(\n rawInput: v.InferInput<typeof handoffRegisterPrInputSchema>,\n paths = runtimePaths(),\n dependencies: HandoffDependencies = {},\n): Promise<HandoffActionResult> {\n await ensureRuntimeHome(paths);\n const parsed = parseHandoffInput(\n handoffRegisterPrInputSchema,\n rawInput,\n 'handoff_pr_register',\n );\n if (!parsed.ok) return parsed.result;\n\n const input = parsed.input;\n const source = normalizeHandoffSource(input.source);\n if (input.review === true) {\n const allowed = await externalReviewQueueAllowed(paths);\n if (!allowed) {\n return failResult(\n 'handoff_pr_register',\n 'External PR review queueing is disabled by handoff.allowExternalReviewQueue.',\n { requires: ['handoff.allowExternalReviewQueue'] },\n );\n }\n }\n\n const prLink = await resolveRegisteredPrLink(input.ref, paths);\n if (!prLink.ok) return prLink.result;\n\n const ref = prLink.link.ref.id;\n const watchEnabled = input.watch ?? true;\n let watch: HandoffActionResult['watch'];\n let watchChanged = false;\n let watchId: string | undefined;\n if (watchEnabled) {\n const watchResult = await (dependencies.addPrWatch ?? addPrWatch)(\n {\n ref,\n desiredTerminalState: 'checks',\n createdBy: source,\n },\n paths,\n );\n if (!watchResult.ok) {\n return failResult('handoff_pr_register', watchResult.message, {\n errors: watchResult.errors,\n requires: watchResult.requires,\n });\n }\n watch = watchResult.watch;\n watchChanged = watchResult.changed;\n watchId = watchIdFromValue(watch);\n }\n\n let notification: HandoffActionResult['notification'];\n if (input.note) {\n const noteResult = await createHandoffNote(\n {\n text: input.note,\n source,\n pr: ref,\n level: 'ready',\n },\n paths,\n dependencies,\n );\n if (!noteResult.ok) return noteResult;\n notification = noteResult.notification;\n }\n\n let review: HandoffActionResult['review'];\n if (input.review === true) {\n const invokeReview =\n dependencies.invokeReviewPrWorkflow ?? invokeReviewPrWorkflow;\n try {\n const { runId } = await invokeReview({ ref });\n review = asJsonValue({\n workflow: 'review-pr-for-human',\n runId,\n ref,\n queued: true,\n });\n } catch (error) {\n const message = errorMessage(error);\n const audit = await addHandoffAudit(\n {\n event: 'register-pr',\n source,\n ref,\n watch: watchEnabled,\n watchId: watchId ?? null,\n note: Boolean(input.note),\n notificationId: notificationIdFromValue(notification),\n review: true,\n error: message,\n },\n paths,\n { status: 'failed' },\n );\n return failResult(\n 'handoff_pr_register',\n `Review workflow dispatch failed for ${ref}.`,\n {\n changed: watchChanged || Boolean(notification),\n id: watchId ?? notificationIdFromValue(notification),\n watch,\n notification,\n audit,\n errors: [message],\n requires: ['workflowDispatch'],\n },\n );\n }\n }\n\n const reviewRunId = reviewRunIdFromValue(review);\n const audit = await addHandoffAudit(\n {\n event: 'register-pr',\n source,\n ref,\n watch: watchEnabled,\n watchId: watchId ?? null,\n note: Boolean(input.note),\n notificationId: notificationIdFromValue(notification),\n review: input.review === true,\n reviewRunId,\n },\n paths,\n reviewRunId ? { runId: reviewRunId } : {},\n );\n\n const changed = watchChanged || Boolean(notification) || Boolean(review);\n return okResult(\n 'handoff_pr_register',\n changed,\n changed\n ? `Registered ${ref} from ${displaySource(source)}.`\n : `Registration for ${ref} was already current.`,\n {\n id: watchId ?? notificationIdFromValue(notification),\n watch,\n notification,\n review,\n audit,\n },\n );\n}\n\nexport function normalizeHandoffSource(\n value: string | undefined,\n fallback = 'external:cli',\n) {\n const raw = (value?.trim() || fallback).replace(/\\s+/g, '-');\n const normalized = /^(?:external|ci):/i.test(raw) ? raw : `external:${raw}`;\n return normalized.slice(0, 120);\n}\n\nfunction parseHandoffInput<T>(\n schema: v.GenericSchema<unknown, T>,\n input: unknown,\n action: string,\n):\n | { ok: true; input: T }\n | {\n ok: false;\n result: HandoffActionResult;\n } {\n return parseInput(schema, input, (message) =>\n failResult(action, 'Invalid handoff input.', {\n errors: [message],\n }),\n );\n}\n\nasync function resolveRegisteredPrLink(\n ref: string,\n paths: RuntimePaths,\n): Promise<\n | { ok: true; link: PrLink }\n | {\n ok: false;\n result: HandoffActionResult;\n }\n> {\n const registry = await readRepoRegistrySnapshot(paths);\n const resolved = resolvePrReference(ref, registry);\n if (!resolved.ok) {\n return {\n ok: false,\n result: failResult('handoff_pr_reference', resolved.result.message, {\n errors: resolved.result.errors,\n requires: resolved.result.requires,\n }),\n };\n }\n\n const repo = registry.repos.find(\n (item) =>\n repoFullName(item).toLowerCase() ===\n resolved.reference.repoFullName.toLowerCase() ||\n item.id === resolved.reference.repoId,\n );\n if (!repo) {\n return {\n ok: false,\n result: failResult(\n 'handoff_pr_reference',\n `Repository \"${resolved.reference.repoFullName}\" is not configured.`,\n { requires: ['repo'] },\n ),\n };\n }\n\n return { ok: true, link: { repo, ref: resolved.reference } };\n}\n\nasync function resolveRegisteredRepo(\n ref: string,\n paths: RuntimePaths,\n): Promise<\n | { ok: true; repo: ResolvedRepo }\n | {\n ok: false;\n result: HandoffActionResult;\n }\n> {\n const registry = await readRepoRegistrySnapshot(paths);\n const matches = registry.repos.filter(\n (repo) =>\n repo.id === ref ||\n repo.github.name === ref ||\n repoFullName(repo).toLowerCase() === ref.toLowerCase(),\n );\n if (matches.length === 1) return { ok: true, repo: matches[0] };\n if (matches.length > 1) {\n return {\n ok: false,\n result: failResult(\n 'handoff_repo_reference',\n `Repository \"${ref}\" is ambiguous.`,\n { requires: ['repo'] },\n ),\n };\n }\n return {\n ok: false,\n result: failResult(\n 'handoff_repo_reference',\n `Repository \"${ref}\" is not configured.`,\n { requires: ['repo'] },\n ),\n };\n}\n\nasync function externalReviewQueueAllowed(paths: RuntimePaths) {\n const config = await readRuntimeJson(paths.config, parseAppConfig);\n return config.handoff?.allowExternalReviewQueue ?? true;\n}\n\nasync function invokeReviewPrWorkflow(input: { ref: string }) {\n const { invoke } = await import('@flue/runtime');\n const workflow = await import('../../workflows/review-pr-for-human');\n return invoke(workflow.default, { input });\n}\n\nasync function addHandoffAudit(\n summary: Record<string, unknown>,\n paths: RuntimePaths,\n options: { status?: string; runId?: string } = {},\n) {\n return addWorkflowSummary(\n {\n workflow: 'agent_handoff',\n status: options.status ?? 'completed',\n ...(options.runId ? { runId: options.runId } : {}),\n summary,\n },\n paths,\n );\n}\n\nfunction okResult(\n action: string,\n changed: boolean,\n message: string,\n data: {\n id?: string;\n watch?: unknown;\n notification?: unknown;\n release?: unknown;\n review?: unknown;\n audit?: unknown;\n } = {},\n): HandoffActionResult {\n return {\n ok: true,\n action,\n changed,\n message,\n ...(data.id ? { id: data.id } : {}),\n deckUrl,\n ...(data.watch ? { watch: asJsonValue(data.watch) } : {}),\n ...(data.notification\n ? { notification: asJsonValue(data.notification) }\n : {}),\n ...(data.release ? { release: asJsonValue(data.release) } : {}),\n ...(data.review ? { review: asJsonValue(data.review) } : {}),\n ...(data.audit ? { audit: asJsonValue(data.audit) } : {}),\n };\n}\n\nfunction failResult(\n action: string,\n message: string,\n data: {\n changed?: boolean;\n id?: string;\n watch?: unknown;\n notification?: unknown;\n release?: unknown;\n review?: unknown;\n audit?: unknown;\n errors?: string[];\n requires?: string[];\n } = {},\n): HandoffActionResult {\n return {\n ok: false,\n action,\n changed: data.changed ?? false,\n message,\n ...(data.id ? { id: data.id } : {}),\n deckUrl,\n ...(data.watch ? { watch: asJsonValue(data.watch) } : {}),\n ...(data.notification\n ? { notification: asJsonValue(data.notification) }\n : {}),\n ...(data.release ? { release: asJsonValue(data.release) } : {}),\n ...(data.review ? { review: asJsonValue(data.review) } : {}),\n ...(data.audit ? { audit: asJsonValue(data.audit) } : {}),\n ...(data.errors ? { errors: data.errors } : {}),\n ...(data.requires ? { requires: data.requires } : {}),\n };\n}\n\nfunction displaySource(source: string) {\n return source.replace(/^(?:external|ci):/, '');\n}\n\nfunction errorMessage(error: unknown) {\n if (error instanceof Error) return error.message;\n return String(error);\n}\n\nfunction noteSourceId(input: {\n source: string;\n text: string;\n repoFullName: string | null;\n prId: string | null;\n}) {\n return createHash('sha256')\n .update(\n [\n input.source,\n input.text,\n input.repoFullName ?? '',\n input.prId ?? '',\n ].join('\\0'),\n )\n .digest('hex')\n .slice(0, 32);\n}\n\nfunction watchIdFromValue(value: unknown) {\n if (!value || typeof value !== 'object') return undefined;\n const id = (value as Partial<PrWatch>).id;\n return typeof id === 'string' ? id : undefined;\n}\n\nfunction notificationIdFromValue(value: unknown) {\n if (!value || typeof value !== 'object') return undefined;\n const id = (value as { id?: unknown }).id;\n return typeof id === 'string' ? id : undefined;\n}\n\nfunction reviewRunIdFromValue(value: unknown) {\n if (!value || typeof value !== 'object') return undefined;\n const runId = (value as { runId?: unknown }).runId;\n return typeof runId === 'string' ? runId : undefined;\n}\n","import { Hono, type Context } from 'hono';\nimport {\n createHandoffNote,\n registerHandoffPr,\n registerHandoffWatchPr,\n} from '../../modules/handoff';\nimport type { RuntimePaths } from '../../runtime-home';\nimport { safeJsonObject } from '../http';\n\nexport function createHandoffRoutes(paths: RuntimePaths) {\n const routes = new Hono();\n\n routes.post('/handoff/watch-pr', async (c) => {\n const input = await handoffBody(c);\n if (!input.ok) return c.json(input.result, 400);\n const body = input.body;\n const result = await registerHandoffWatchPr(\n {\n ref: body.ref,\n source: body.source,\n desiredTerminalState: body.desiredTerminalState,\n intervalSeconds: body.intervalSeconds,\n } as Parameters<typeof registerHandoffWatchPr>[0],\n paths,\n );\n return c.json(result, result.ok ? 200 : 400);\n });\n\n routes.post('/handoff/note', async (c) => {\n const input = await handoffBody(c);\n if (!input.ok) return c.json(input.result, 400);\n const result = await createHandoffNote(\n input.body as Parameters<typeof createHandoffNote>[0],\n paths,\n );\n return c.json(result, result.ok ? 200 : 400);\n });\n\n routes.post('/handoff/register-pr', async (c) => {\n const input = await handoffBody(c);\n if (!input.ok) return c.json(input.result, 400);\n const result = await registerHandoffPr(\n input.body as Parameters<typeof registerHandoffPr>[0],\n paths,\n );\n return c.json(result, result.ok ? 200 : 400);\n });\n\n return routes;\n}\n\nasync function handoffBody(c: Context) {\n const body = await safeJsonObject(c);\n if (typeof body.source !== 'string' || !body.source.trim()) {\n return {\n ok: false as const,\n result: {\n ok: false,\n action: 'handoff_request',\n changed: false,\n message: 'Handoff API requests require a source field.',\n deckUrl: '/',\n requires: ['source'],\n },\n };\n }\n\n return { ok: true as const, body };\n}\n","import { Hono } from 'hono';\nimport {\n abortKiloTask,\n listKiloTasks,\n readKiloSession,\n readKiloSessionChildren,\n readKiloSessionDiff,\n readKiloSessionMessages,\n readKiloTaskDiff,\n readKiloTaskEvents,\n readKiloTaskSessions,\n readKiloTaskStatus,\n readUnavailableSessionAdapter,\n searchKiloSessions,\n startKiloTask,\n} from '../../modules/kilo';\nimport {\n listKiloResultStates,\n promoteKiloResult,\n reviewKiloResult,\n verifyKiloResult,\n} from '../../modules/kilo/results';\nimport type { RuntimePaths } from '../../runtime-home';\nimport {\n kiloSessionQuery,\n queryBoolean,\n queryNumber,\n safeJsonBody,\n safeJsonObject,\n} from '../http';\nimport { recordHandledPrApiResult } from '../learning-hooks';\n\nexport function createKiloRoutes(paths: RuntimePaths) {\n const routes = new Hono();\n\n routes.get('/tasks', async (c) => {\n return c.json(\n await listKiloTasks(\n {\n status: c.req.query('status'),\n repoId: c.req.query('repoId'),\n limit: queryNumber(c.req.query('limit')),\n includeDiff: queryBoolean(c.req.query('includeDiff')),\n },\n paths,\n ),\n );\n });\n\n routes.get('/results', async (c) => {\n const result = await listKiloResultStates(\n {\n taskId: c.req.query('taskId') || undefined,\n limit: queryNumber(c.req.query('limit')),\n },\n paths,\n );\n return c.json(result, result.ok ? 200 : 400);\n });\n\n routes.post('/tasks', async (c) => {\n const result = await startKiloTask(await safeJsonBody(c), paths);\n return c.json(result, result.ok ? 200 : 400);\n });\n\n routes.get('/tasks/:id', async (c) => {\n const result = await readKiloTaskStatus(\n { taskId: c.req.param('id') },\n paths,\n );\n return c.json(result, result.ok ? 200 : 404);\n });\n\n routes.get('/tasks/:id/events', async (c) => {\n const result = await readKiloTaskEvents(\n { taskId: c.req.param('id'), limit: queryNumber(c.req.query('limit')) },\n paths,\n );\n return c.json(result, result.ok ? 200 : 404);\n });\n\n routes.post('/tasks/:id/abort', async (c) => {\n const result = await abortKiloTask({ taskId: c.req.param('id') }, paths);\n return c.json(result, result.ok ? 200 : 400);\n });\n\n routes.get('/tasks/:id/sessions', async (c) => {\n const result = await readKiloTaskSessions(\n { taskId: c.req.param('id') },\n paths,\n );\n return c.json(result, result.ok ? 200 : 404);\n });\n\n routes.get('/tasks/:id/diff', async (c) => {\n const result = await readKiloTaskDiff({ taskId: c.req.param('id') }, paths);\n return c.json(result, result.ok ? 200 : 404);\n });\n\n routes.get('/tasks/:id/result', async (c) => {\n const result = await listKiloResultStates(\n { taskId: c.req.param('id') },\n paths,\n );\n return c.json(result, result.ok ? 200 : 404);\n });\n\n routes.post('/tasks/:id/review', async (c) => {\n const result = await reviewKiloResult({ taskId: c.req.param('id') }, paths);\n recordHandledPrApiResult(paths, 'api:kilo_result_review', result);\n return c.json(result, result.ok ? 200 : 400);\n });\n\n routes.post('/tasks/:id/verify', async (c) => {\n const result = await verifyKiloResult(\n { ...(await safeJsonObject(c)), taskId: c.req.param('id') },\n paths,\n );\n recordHandledPrApiResult(paths, 'api:kilo_result_verify', result);\n return c.json(result, result.ok ? 200 : 400);\n });\n\n routes.post('/tasks/:id/promote', async (c) => {\n const result = await promoteKiloResult(\n { taskId: c.req.param('id') },\n paths,\n );\n recordHandledPrApiResult(paths, 'api:kilo_result_promote', result);\n return c.json(result, result.ok ? 200 : 400);\n });\n\n routes.post('/sessions/search', async (c) => {\n const result = await searchKiloSessions(await safeJsonBody(c), paths);\n return c.json(result, result.ok ? 200 : 400);\n });\n\n routes.get('/sessions/:id', async (c) => {\n const result = await readKiloSession(\n { sessionId: c.req.param('id'), ...kiloSessionQuery(c) },\n paths,\n );\n return c.json(result, result.ok ? 200 : 404);\n });\n\n routes.get('/sessions/:id/messages', async (c) => {\n const result = await readKiloSessionMessages(\n { sessionId: c.req.param('id'), ...kiloSessionQuery(c) },\n paths,\n );\n return c.json(result, result.ok ? 200 : 404);\n });\n\n routes.get('/sessions/:id/children', async (c) => {\n const result = await readKiloSessionChildren(\n { sessionId: c.req.param('id'), ...kiloSessionQuery(c) },\n paths,\n );\n return c.json(result, result.ok ? 200 : 404);\n });\n\n routes.get('/sessions/:id/todos', async (c) => {\n const result = await readUnavailableSessionAdapter(\n { sessionId: c.req.param('id'), ...kiloSessionQuery(c) },\n 'todos',\n paths,\n );\n return c.json(result, result.ok ? 200 : 404);\n });\n\n routes.get('/sessions/:id/diff', async (c) => {\n const result = await readKiloSessionDiff(\n { sessionId: c.req.param('id'), ...kiloSessionQuery(c) },\n paths,\n );\n return c.json(result, result.ok ? 200 : 404);\n });\n\n return routes;\n}\n","import { invoke } from '@flue/runtime';\nimport { Hono } from 'hono';\nimport * as v from 'valibot';\nimport {\n decideMemoryCandidate,\n listMemoryCandidates,\n} from '../../modules/memory';\nimport { listLearningReviews } from '../../modules/learning/reviews';\nimport { readLearningOperatorState } from '../../modules/learning';\nimport type { RuntimePaths } from '../../runtime-home';\nimport {\n applySkillPatchCandidate,\n listSkillPatchCandidates,\n rejectSkillPatchCandidate,\n} from '../../modules/learning/skill-patches';\nimport { readChatSession } from '../../modules/sessions';\nimport curateLearningStoreWorkflow from '../../workflows/curate_learning_store';\nimport reviewConversationForLearningWorkflow from '../../workflows/review_conversation_for_learning';\nimport reviewPrBatchForLearningWorkflow from '../../workflows/review_pr_batch_for_learning';\nimport { boundedQueryLimit, safeJsonBody } from '../http';\n\nexport function createLearningRoutes(paths: RuntimePaths) {\n const routes = new Hono();\n\n routes.post('/curate', async (c) => {\n const parsed = v.safeParse(\n v.object({\n mode: v.optional(v.picklist(['off', 'review', 'auto'])),\n reason: v.optional(v.string()),\n }),\n await safeJsonBody(c),\n );\n if (!parsed.success) {\n return c.json(\n {\n ok: false,\n action: 'learning_curate',\n changed: false,\n message: v.summarize(parsed.issues),\n },\n 400,\n );\n }\n const receipt = await invoke(curateLearningStoreWorkflow, {\n input: { ...parsed.output, trigger: 'manual' },\n });\n return c.json({\n ok: true,\n action: 'learning_curate',\n changed: true,\n runId: receipt.runId,\n message: 'Queued memory curation learning workflow.',\n });\n });\n\n routes.get('/state', async (c) => {\n const input = {\n limit: boundedQueryLimit(c.req.query('limit'), 25),\n reviewKind: learningReviewKind(c.req.query('reviewKind')),\n reviewStatus: learningReviewStatus(c.req.query('reviewStatus')),\n candidateStatus: learningCandidateStatus(c.req.query('candidateStatus')),\n candidateTarget: learningCandidateTarget(c.req.query('candidateTarget')),\n memoryId: c.req.query('memoryId') || undefined,\n };\n if (c.req.query('limit') && input.limit === undefined) {\n return c.json(\n {\n ok: false,\n action: 'learning_operator_state',\n changed: false,\n message: `Invalid learning state limit \"${c.req.query('limit')}\".`,\n },\n 400,\n );\n }\n if (c.req.query('reviewKind') && !input.reviewKind) {\n return c.json(\n {\n ok: false,\n action: 'learning_operator_state',\n changed: false,\n message: `Invalid review kind \"${c.req.query('reviewKind')}\".`,\n },\n 400,\n );\n }\n if (c.req.query('reviewStatus') && !input.reviewStatus) {\n return c.json(\n {\n ok: false,\n action: 'learning_operator_state',\n changed: false,\n message: `Invalid review status \"${c.req.query('reviewStatus')}\".`,\n },\n 400,\n );\n }\n if (c.req.query('candidateStatus') && !input.candidateStatus) {\n return c.json(\n {\n ok: false,\n action: 'learning_operator_state',\n changed: false,\n message: `Invalid candidate status \"${c.req.query('candidateStatus')}\".`,\n },\n 400,\n );\n }\n if (c.req.query('candidateTarget') && !input.candidateTarget) {\n return c.json(\n {\n ok: false,\n action: 'learning_operator_state',\n changed: false,\n message: `Invalid candidate target \"${c.req.query('candidateTarget')}\".`,\n },\n 400,\n );\n }\n const result = await readLearningOperatorState(input, paths);\n return c.json(result, result.ok ? 200 : 400);\n });\n\n routes.get('/reviews', (c) => {\n const kind = learningReviewKind(c.req.query('kind'));\n const status = learningReviewStatus(c.req.query('status'));\n const limit = boundedQueryLimit(c.req.query('limit'), 50);\n if (c.req.query('kind') && !kind) {\n return c.json(\n {\n ok: false,\n action: 'learning_review_list',\n changed: false,\n message: `Invalid learning review kind \"${c.req.query('kind')}\".`,\n },\n 400,\n );\n }\n if (c.req.query('status') && !status) {\n return c.json(\n {\n ok: false,\n action: 'learning_review_list',\n changed: false,\n message: `Invalid learning review status \"${c.req.query('status')}\".`,\n },\n 400,\n );\n }\n if (c.req.query('limit') && limit === undefined) {\n return c.json(\n {\n ok: false,\n action: 'learning_review_list',\n changed: false,\n message: `Invalid review limit \"${c.req.query('limit')}\".`,\n },\n 400,\n );\n }\n return c.json(\n listLearningReviews(\n {\n kind,\n status,\n limit,\n },\n paths,\n ),\n );\n });\n\n routes.post('/reviews/conversation', async (c) => {\n const parsed = v.safeParse(\n v.object({\n sessionId: v.optional(v.pipe(v.string(), v.minLength(1))),\n reason: v.optional(v.string()),\n }),\n await safeJsonBody(c),\n );\n if (!parsed.success) {\n return c.json(\n {\n ok: false,\n action: 'learning_review_conversation',\n changed: false,\n message: v.summarize(parsed.issues),\n },\n 400,\n );\n }\n if (parsed.output.sessionId) {\n const session = await readChatSession(\n {\n id: parsed.output.sessionId,\n reason: 'manual-conversation-learning-review',\n surface: 'learning',\n },\n paths,\n );\n if (!session.ok) return c.json(session, 400);\n }\n const receipt = await invoke(reviewConversationForLearningWorkflow, {\n input: { ...parsed.output, trigger: 'manual' },\n });\n return c.json({\n ok: true,\n action: 'learning_review_conversation',\n changed: true,\n runId: receipt.runId,\n message: 'Queued conversation learning review workflow.',\n });\n });\n\n routes.post('/reviews/prs', async (c) => {\n const parsed = v.safeParse(\n v.object({\n repoId: v.optional(v.pipe(v.string(), v.minLength(1))),\n reason: v.optional(v.string()),\n limit: v.optional(v.pipe(v.number(), v.integer(), v.minValue(1))),\n }),\n await safeJsonBody(c),\n );\n if (!parsed.success) {\n return c.json(\n {\n ok: false,\n action: 'learning_review_pr_batch',\n changed: false,\n message: v.summarize(parsed.issues),\n },\n 400,\n );\n }\n const receipt = await invoke(reviewPrBatchForLearningWorkflow, {\n input: { ...parsed.output, trigger: 'manual' },\n });\n return c.json({\n ok: true,\n action: 'learning_review_pr_batch',\n changed: true,\n runId: receipt.runId,\n message: 'Queued PR/autopilot learning retrospective workflow.',\n });\n });\n\n routes.get('/candidates', async (c) => {\n const status = learningCandidateStatus(c.req.query('status'));\n if (c.req.query('status') && !status) {\n return c.json(\n {\n ok: false,\n action: 'memory_candidate_list',\n changed: false,\n message: `Invalid candidate status \"${c.req.query('status')}\".`,\n },\n 400,\n );\n }\n const limit = Number(c.req.query('limit') ?? '100');\n if (c.req.query('limit') && !boundedQueryLimit(c.req.query('limit'), 100)) {\n return c.json(\n {\n ok: false,\n action: 'learning_candidate_list',\n changed: false,\n message: `Invalid candidate limit \"${c.req.query('limit')}\".`,\n },\n 400,\n );\n }\n const boundedLimit = Number.isFinite(limit) ? limit : undefined;\n const [memoryCandidates, skillCandidates] = await Promise.all([\n listMemoryCandidates({ status, limit: boundedLimit }, paths),\n listSkillPatchCandidates({ status, limit: boundedLimit }, paths),\n ]);\n return c.json({\n ok: memoryCandidates.ok && skillCandidates.ok,\n action: 'learning_candidate_list',\n changed: false,\n candidates: [\n ...(memoryCandidates.candidates ?? []),\n ...(skillCandidates.candidates ?? []),\n ],\n memoryCandidates: memoryCandidates.candidates ?? [],\n skillCandidates: skillCandidates.candidates ?? [],\n fetchedAt: new Date().toISOString(),\n });\n });\n\n routes.post('/candidates/:id/approve', async (c) => {\n const body = (await safeJsonBody(c)) as Record<string, unknown>;\n const result = await decideMemoryCandidate(\n {\n ...body,\n id: c.req.param('id'),\n decision: 'apply',\n },\n paths,\n );\n if (result.ok) return c.json(result);\n if (!memoryCandidateWasNotFound(result)) return c.json(result, 400);\n const skillResult = await applySkillPatchCandidate(\n { ...body, id: c.req.param('id') },\n paths,\n );\n return c.json(skillResult, skillResult.ok ? 200 : 400);\n });\n\n routes.post('/candidates/:id/reject', async (c) => {\n const body = (await safeJsonBody(c)) as Record<string, unknown>;\n const result = await decideMemoryCandidate(\n {\n ...body,\n id: c.req.param('id'),\n decision: 'reject',\n },\n paths,\n );\n if (result.ok) return c.json(result);\n if (!memoryCandidateWasNotFound(result)) return c.json(result, 400);\n const skillResult = await rejectSkillPatchCandidate(\n { ...body, id: c.req.param('id') },\n paths,\n );\n return c.json(skillResult, skillResult.ok ? 200 : 400);\n });\n\n return routes;\n}\n\nexport function learningCandidateStatus(\n value: string | undefined,\n): 'proposed' | 'applied' | 'rejected' | 'archived' | undefined {\n if (\n value === 'proposed' ||\n value === 'applied' ||\n value === 'rejected' ||\n value === 'archived'\n ) {\n return value;\n }\n\n return undefined;\n}\n\nfunction learningCandidateTarget(\n value: string | undefined,\n): 'memory' | 'skill' | undefined {\n if (value === 'memory' || value === 'skill') return value;\n return undefined;\n}\n\nfunction learningReviewKind(\n value: string | undefined,\n): 'conversation' | 'curation' | 'pr-batch' | undefined {\n if (\n value === 'conversation' ||\n value === 'curation' ||\n value === 'pr-batch'\n ) {\n return value;\n }\n return undefined;\n}\n\nfunction learningReviewStatus(\n value: string | undefined,\n): 'running' | 'completed' | 'failed' | undefined {\n if (value === 'running' || value === 'completed' || value === 'failed') {\n return value;\n }\n return undefined;\n}\n\nfunction memoryCandidateWasNotFound(result: unknown) {\n if (!result || typeof result !== 'object') return false;\n const record = result as { message?: unknown; requires?: unknown };\n return (\n record.message === 'Memory candidate was not found.' &&\n Array.isArray(record.requires) &&\n record.requires.includes('id')\n );\n}\n","import { Hono } from 'hono';\nimport {\n archiveMemory,\n listMemories,\n listMemoryEvents,\n upsertMemory,\n} from '../../modules/memory';\nimport type { RuntimePaths } from '../../runtime-home';\nimport { safeJsonBody } from '../http';\n\nexport function createMemoryRoutes(paths: RuntimePaths) {\n const routes = new Hono();\n\n routes.get('/memories', async (c) => {\n const rawScope = c.req.query('scope');\n const scope = memoryScope(rawScope);\n const key = c.req.query('key');\n const rawStatus = c.req.query('status');\n const status = memoryStatus(rawStatus);\n if (rawScope && !scope) {\n return c.json(\n {\n ok: false,\n action: 'memory_list',\n changed: false,\n message: `Invalid memory scope \"${rawScope}\".`,\n },\n 400,\n );\n }\n if (rawStatus && !status) {\n return c.json(\n {\n ok: false,\n action: 'memory_list',\n changed: false,\n message: `Invalid memory status \"${rawStatus}\".`,\n },\n 400,\n );\n }\n\n return c.json(\n await listMemories(\n {\n scope,\n key: key || undefined,\n status,\n includeArchived: c.req.query('includeArchived') === 'true',\n repoId: c.req.query('repoId') || undefined,\n },\n paths,\n ),\n );\n });\n\n routes.post('/memories', async (c) => {\n return c.json(await upsertMemory(await c.req.json(), paths));\n });\n\n routes.post('/memories/:id/archive', async (c) => {\n const result = await archiveMemory(\n {\n ...((await safeJsonBody(c)) as Record<string, unknown>),\n id: c.req.param('id'),\n },\n paths,\n );\n return c.json(result, result.ok ? 200 : 400);\n });\n\n routes.get('/memory-events', async (c) => {\n const limit = Number(c.req.query('limit') ?? '100');\n return c.json(\n await listMemoryEvents(\n {\n memoryId: c.req.query('memoryId') || undefined,\n limit: Number.isFinite(limit) ? limit : undefined,\n },\n paths,\n ),\n );\n });\n\n return routes;\n}\n\nfunction memoryScope(value: string | undefined) {\n if (value === 'user' || value === 'local' || value === 'project') {\n return value;\n }\n\n return undefined;\n}\n\nfunction memoryStatus(value: string | undefined) {\n if (value === 'active' || value === 'archived') return value;\n return undefined;\n}\n","import { Hono } from 'hono';\nimport { readHostMetrics } from '../../modules/runtime';\n\nexport function createMetricsRoutes() {\n const routes = new Hono();\n\n routes.get('/host', async (c) => {\n return c.json(await readHostMetrics());\n });\n\n return routes;\n}\n","import type { Context } from 'hono';\nimport { Hono } from 'hono';\nimport {\n addMcpServer,\n completeMcpOAuthCallback,\n getMcpRegistry,\n listMcpApprovals,\n listMcpAudit,\n logoutMcpOAuthServer,\n readPublicMcpOAuthLogin,\n removeMcpServer,\n resolveMcpApprovalWithPaths,\n setMcpServerEnabled,\n startMcpOAuthLogin,\n updateMcpServer,\n} from '../../domains/mcp';\nimport type { RuntimePaths } from '../../runtime-home';\nimport { queryNumber, safeJsonBody, safeJsonObject } from '../http';\n\nexport function createMcpRoutes(paths: RuntimePaths) {\n const routes = new Hono();\n\n routes.get('/servers', async (c) => {\n return c.json({\n ok: true,\n action: 'mcp_servers_list',\n changed: false,\n message: 'Read MCP server statuses.',\n servers: await getMcpRegistry(paths).status(),\n });\n });\n\n routes.post('/servers', async (c) => {\n const result = await addMcpServer(await safeJsonBody(c), paths);\n if (result.ok) {\n const id = readIdFromResultData(result.data);\n await getMcpRegistry(paths).refresh(id);\n }\n return c.json(result, result.ok ? 200 : 400);\n });\n\n routes.patch('/servers/:id', async (c) => {\n const id = c.req.param('id');\n const result = await updateMcpServer(\n { ...(await safeJsonObject(c)), id },\n paths,\n );\n if (result.ok) await getMcpRegistry(paths).refresh(id);\n return c.json(result, result.ok ? 200 : 400);\n });\n\n routes.delete('/servers/:id', async (c) => {\n const body = await safeJsonObject(c);\n const id = c.req.param('id');\n const result = await removeMcpServer(\n {\n ...body,\n id,\n confirm: body.confirm === true || c.req.query('confirm') === 'true',\n },\n paths,\n );\n if (result.ok) await getMcpRegistry(paths).refresh(id);\n return c.json(result, result.ok ? 200 : 400);\n });\n\n routes.post('/servers/:id/enable', async (c) => {\n const id = c.req.param('id');\n const result = await setMcpServerEnabled({ id }, true, paths);\n if (result.ok) await getMcpRegistry(paths).refresh(id);\n return c.json(result, result.ok ? 200 : 400);\n });\n\n routes.post('/servers/:id/disable', async (c) => {\n const id = c.req.param('id');\n const result = await setMcpServerEnabled({ id }, false, paths);\n if (result.ok) await getMcpRegistry(paths).refresh(id);\n return c.json(result, result.ok ? 200 : 400);\n });\n\n routes.get('/servers/:id/tools', async (c) => {\n return c.json({\n ok: true,\n action: 'mcp_tools_list',\n changed: false,\n message: 'Read cached MCP tools.',\n tools: await getMcpRegistry(paths).listTools(c.req.param('id')),\n });\n });\n\n routes.post('/servers/:id/refresh', async (c) => {\n const id = c.req.param('id');\n const refreshed = await getMcpRegistry(paths).refresh(id);\n if (!refreshed) {\n return c.json(\n {\n ok: false,\n action: 'mcp_server_refresh',\n changed: false,\n message: `MCP server \"${id}\" was not found.`,\n requires: ['id'],\n },\n 404,\n );\n }\n return c.json({\n ok: true,\n action: 'mcp_server_refresh',\n changed: false,\n message: `Refreshed MCP server \"${id}\".`,\n });\n });\n\n routes.post('/servers/:id/login', async (c) => {\n const body = await safeJsonObject(c);\n const redirectUrl =\n typeof body.redirectUrl === 'string'\n ? body.redirectUrl\n : `${requestOrigin(c)}/api/mcp/oauth/callback`;\n const result = await startMcpOAuthLogin(\n { id: c.req.param('id'), redirectUrl },\n paths,\n );\n return c.json(result, result.ok ? 200 : 400);\n });\n\n routes.get('/logins/:id', async (c) => {\n const login = await readPublicMcpOAuthLogin(c.req.param('id'), paths);\n if (!login) {\n return c.json(\n {\n ok: false,\n action: 'mcp_login_read',\n changed: false,\n message: 'MCP OAuth login was not found.',\n },\n 404,\n );\n }\n return c.json({\n ok: true,\n action: 'mcp_login_read',\n changed: false,\n message: `Read MCP OAuth login \"${login.id}\".`,\n login,\n });\n });\n\n routes.get('/oauth/callback', async (c) => {\n const result = await completeMcpOAuthCallback(\n {\n state: c.req.query('state'),\n code: c.req.query('code'),\n error: c.req.query('error'),\n },\n paths,\n );\n const login =\n 'login' in result && isRecord(result.login) ? result.login : null;\n const serverId =\n login && typeof login.serverId === 'string' ? login.serverId : undefined;\n if (result.ok && serverId) {\n await getMcpRegistry(paths).refresh(serverId);\n }\n return c.html(\n oauthCallbackHtml(result.ok, result.message),\n result.ok ? 200 : 400,\n );\n });\n\n routes.post('/servers/:id/logout', async (c) => {\n const body = await safeJsonObject(c);\n const id = c.req.param('id');\n const result = await logoutMcpOAuthServer(\n {\n id,\n confirm: body.confirm === true,\n },\n paths,\n );\n if (result.ok) await getMcpRegistry(paths).refresh(id);\n return c.json(result, result.ok ? 200 : 400);\n });\n\n routes.get('/approvals', async (c) => {\n return c.json({\n ok: true,\n action: 'mcp_approvals_list',\n changed: false,\n message: 'Read MCP approvals.',\n approvals: await listMcpApprovals(paths, {\n includeResolved: c.req.query('includeResolved') === '1',\n }),\n });\n });\n\n routes.post('/approvals/:id/resolve', async (c) => {\n const result = await resolveMcpApprovalWithPaths(\n { ...(await safeJsonObject(c)), id: c.req.param('id') } as {\n id: string;\n decision: 'approve' | 'deny';\n approverSurface?: string;\n },\n paths,\n );\n return c.json(result, result.ok ? 200 : 400);\n });\n\n routes.get('/audit', async (c) => {\n return c.json({\n ok: true,\n action: 'mcp_audit_list',\n changed: false,\n message: 'Read MCP audit rows.',\n audit: await listMcpAudit(paths, {\n serverId: c.req.query('serverId') || undefined,\n limit: queryNumber(c.req.query('limit')),\n }),\n });\n });\n\n return routes;\n}\n\nfunction requestOrigin(c: Context) {\n return new URL(c.req.url).origin;\n}\n\nfunction readIdFromResultData(data: unknown) {\n if (!isRecord(data)) return undefined;\n const id = data.id ?? data.serverId;\n if (typeof id === 'string') return id;\n const server = data.server;\n return isRecord(server) && typeof server.id === 'string'\n ? server.id\n : undefined;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === 'object' && !Array.isArray(value);\n}\n\nfunction oauthCallbackHtml(ok: boolean, message: string) {\n const title = ok ? 'MCP login complete' : 'MCP login failed';\n return `<!doctype html>\n<html lang=\"en\">\n <head>\n <meta charset=\"utf-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n <title>${escapeHtml(title)}</title>\n <style>\n body {\n margin: 0;\n min-height: 100vh;\n display: grid;\n place-items: center;\n background: #0a0b10;\n color: #d7f7ff;\n font: 14px/1.5 system-ui, sans-serif;\n }\n main {\n max-width: 36rem;\n border: 1px solid #ffffff1f;\n padding: 24px;\n }\n h1 {\n margin: 0 0 8px;\n color: ${ok ? '#69e6ff' : '#ff4fb8'};\n font: 600 16px/1.2 ui-monospace, SFMono-Regular, Menlo, monospace;\n }\n p {\n margin: 0;\n color: #d7f7ffb3;\n }\n </style>\n </head>\n <body>\n <main>\n <h1>${escapeHtml(title)}</h1>\n <p>${escapeHtml(message)}</p>\n </main>\n </body>\n</html>`;\n}\n\nfunction escapeHtml(value: string) {\n return value.replace(/[&<>\"']/g, (char) => {\n switch (char) {\n case '&':\n return '&';\n case '<':\n return '<';\n case '>':\n return '>';\n case '\"':\n return '"';\n default:\n return ''';\n }\n });\n}\n","import { Hono } from 'hono';\nimport {\n listNotifications,\n markNotificationRead,\n resolveNotification,\n} from '../../modules/app-state';\nimport type { RuntimePaths } from '../../runtime-home';\n\nexport function createNotificationRoutes(paths: RuntimePaths) {\n const routes = new Hono();\n\n routes.get('/', async (c) => {\n const includeResolved = c.req.query('includeResolved') === '1';\n return c.json({\n items: await listNotifications(paths, { includeResolved }),\n policy: notificationPolicy(),\n fetchedAt: new Date().toISOString(),\n });\n });\n\n routes.post('/:id/read', async (c) => {\n await markNotificationRead(c.req.param('id'), paths);\n return c.json({ ok: true });\n });\n\n routes.post('/:id/resolve', async (c) => {\n await resolveNotification(c.req.param('id'), paths);\n return c.json({ ok: true });\n });\n\n return routes;\n}\n\nfunction notificationPolicy() {\n return {\n info: 'Passive updates such as queued scheduled work.',\n ready: 'Completed work or green checks that can be glanced at and cleared.',\n attention:\n 'Actionable failures, missing configuration, blocked watches, or failed Flue work.',\n urgent:\n 'Release or production-facing failures that should interrupt passive viewing.',\n reconcile:\n 'Unresolved notifications with the same source and source id are updated in place and counted.',\n autopilot:\n 'Autopilot notifications use deterministic source ids by prepared diff/workflow and state: review-fix, ci-fix, verify, push-blocked, pushed, comment-result, and failed-workflow. Repeated retries reconcile in place; state changes create separate actionable records with recovery metadata.',\n kilo: 'Kilo notifications reconcile by delegated task and state: started, progress, waiting-approval, completed, failed, timed-out, needs-review, verified, promote-blocked, and promoted. Progress updates replace one task progress row; result workflow states create separate actionable records linked to the task.',\n };\n}\n","import { Hono } from 'hono';\nimport {\n listRepoEditEvents,\n patchRepoFiles,\n readRepoCheckoutStatus,\n readRepoDiff,\n readRepoFile,\n replaceRepoFile,\n searchRepoFiles,\n writeRepoFile,\n} from '../../repo-edit';\nimport type { RuntimePaths } from '../../runtime-home';\nimport { safeJsonObject } from '../http';\n\nexport function createRepoEditRoutes(paths: RuntimePaths) {\n const routes = new Hono();\n\n routes.get('/repo-edits', async (c) => {\n return c.json(await listRepoEditEvents(paths));\n });\n\n routes.get('/repos/:repoId/status', async (c) => {\n const result = await readRepoCheckoutStatus(\n { repoId: c.req.param('repoId') },\n paths,\n );\n return c.json(result, result.ok ? 200 : 400);\n });\n\n routes.post('/repos/:repoId/files/read', async (c) => {\n const result = await readRepoFile(\n { ...(await safeJsonObject(c)), repoId: c.req.param('repoId') },\n paths,\n );\n return c.json(result, result.ok ? 200 : 400);\n });\n\n routes.post('/repos/:repoId/files/search', async (c) => {\n const result = await searchRepoFiles(\n { ...(await safeJsonObject(c)), repoId: c.req.param('repoId') },\n paths,\n );\n return c.json(result, result.ok ? 200 : 400);\n });\n\n routes.post('/repos/:repoId/files/write/preview', async (c) => {\n const result = await writeRepoFile(\n {\n ...(await safeJsonObject(c)),\n repoId: c.req.param('repoId'),\n dryRun: true,\n },\n paths,\n );\n return c.json(result, result.ok ? 200 : 400);\n });\n\n routes.post('/repos/:repoId/files/write', async (c) => {\n const result = await writeRepoFile(\n { ...(await safeJsonObject(c)), repoId: c.req.param('repoId') },\n paths,\n );\n return c.json(result, result.ok ? 200 : 400);\n });\n\n routes.post('/repos/:repoId/files/replace/preview', async (c) => {\n const result = await replaceRepoFile(\n {\n ...(await safeJsonObject(c)),\n repoId: c.req.param('repoId'),\n dryRun: true,\n },\n paths,\n );\n return c.json(result, result.ok ? 200 : 400);\n });\n\n routes.post('/repos/:repoId/files/replace', async (c) => {\n const result = await replaceRepoFile(\n { ...(await safeJsonObject(c)), repoId: c.req.param('repoId') },\n paths,\n );\n return c.json(result, result.ok ? 200 : 400);\n });\n\n routes.post('/repos/:repoId/files/patch/preview', async (c) => {\n const result = await patchRepoFiles(\n {\n ...(await safeJsonObject(c)),\n repoId: c.req.param('repoId'),\n dryRun: true,\n },\n paths,\n );\n return c.json(result, result.ok ? 200 : 400);\n });\n\n routes.post('/repos/:repoId/files/patch', async (c) => {\n const result = await patchRepoFiles(\n { ...(await safeJsonObject(c)), repoId: c.req.param('repoId') },\n paths,\n );\n return c.json(result, result.ok ? 200 : 400);\n });\n\n routes.post('/repos/:repoId/diff', async (c) => {\n const result = await readRepoDiff(\n { ...(await safeJsonObject(c)), repoId: c.req.param('repoId') },\n paths,\n );\n return c.json(result, result.ok ? 200 : 400);\n });\n\n return routes;\n}\n","import { randomUUID } from 'node:crypto';\nimport { readFile } from 'node:fs/promises';\nimport { basename } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport * as v from 'valibot';\nimport {\n asJsonValue,\n failedAction,\n invalidInputAction,\n okAction,\n} from '../../lib/action-result';\nimport { runBoundedGit, runBoundedGitLines } from '../../lib/git';\nimport { renderReportHtml } from '../../lib/report-html';\nimport { parseInput, nonEmptyStringSchema } from '../../lib/valibot';\nimport {\n addWorkflowSummary,\n type AutomationExecutionResult,\n} from '../app-state';\nimport { recordDocsDriftFixTaskBoundary, startKiloTask } from '../kilo';\nimport { loadAutomationLearningMemoryContext } from '../learning';\nimport { loadRuntimeSkill } from '../runtime';\nimport { readReport, writeReport, type ReportRecord } from '../reports';\nimport { readRepoRegistrySnapshot, repoFullName } from '../repos';\nimport { createWorktree } from '../worktrees';\nimport type { RuntimePaths } from '../../runtime-home';\nimport { runtimePaths } from '../../runtime-home';\nimport type { JsonValue } from '@flue/runtime';\n\ntype ChangedPath = {\n path: string;\n previousPath: string | null;\n status: string;\n removedSymbols: string[];\n};\n\ntype DriftHit = {\n docPath: string;\n changedPath: string;\n previousPath: string | null;\n status: string;\n line: number;\n excerpt: string;\n};\n\ntype ReportAutomationInput = {\n id: string;\n config: JsonValue | null;\n lastResult: JsonValue | null;\n};\n\nconst maxDocsToScan = 200;\nconst maxSourceChangesToScan = 200;\nconst neonDocsFixSkillPath = fileURLToPath(\n new URL('../../skills/neon-docs-fix/SKILL.md', import.meta.url),\n);\n\nexport const docsDriftStageFixInputSchema = v.object({\n reportId: nonEmptyStringSchema,\n});\n\nexport type DocsDriftStageFixDependencies = {\n createWorktree?: typeof createWorktree;\n readReport?: typeof readReport;\n startKiloTask?: typeof startKiloTask;\n};\n\nexport async function runDocsDriftReport(\n job: ReportAutomationInput,\n paths: RuntimePaths,\n): Promise<AutomationExecutionResult> {\n try {\n return await runDocsDriftReportInner(job, paths);\n } catch (error) {\n return failed(job, `Docs drift failed: ${errorMessage(error)}.`);\n }\n}\n\nasync function runDocsDriftReportInner(\n job: ReportAutomationInput,\n paths: RuntimePaths,\n): Promise<AutomationExecutionResult> {\n const config = objectConfig(job.config);\n const repoRef = stringConfig(config.repo);\n if (!repoRef) {\n return failed(job, 'Docs drift requires a configured repository.');\n }\n\n const registry = await readRepoRegistrySnapshot(paths);\n const repo = registry.repos.find(\n (candidate) =>\n candidate.id === repoRef ||\n candidate.github.name === repoRef ||\n repoFullName(candidate).toLowerCase() === repoRef.toLowerCase(),\n );\n if (!repo) {\n return failed(job, `Docs drift repository \"${repoRef}\" is not configured.`);\n }\n\n const target = await docsDriftHead(repo.path, repo.defaultBranch);\n if (!target) {\n return failed(\n job,\n `Could not read ${repoFullName(repo)} default branch state.`,\n );\n }\n const previousCursor = docsDriftCursor(job.lastResult, target.head);\n const base =\n previousCursor?.base ??\n lastScannedCommit(job.lastResult) ??\n (await git(repo.path, ['rev-parse', `${target.head}~1`]).catch(\n () => target.head,\n ));\n const sourceOffset = previousCursor?.sourceOffset ?? 0;\n const docOffset = previousCursor?.docOffset ?? 0;\n const docsGlobs = stringArrayConfig(config.docsGlobs);\n const sourceGlobs = stringArrayConfig(config.sourceGlobs);\n const changed = await changedPaths(repo.path, base, target.head);\n const allSourceChanges = changed.filter(\n (item) =>\n !matchesDocsPath(item.path, docsGlobs) &&\n (!sourceGlobs.length || matchesAnyGlob(item.path, sourceGlobs)),\n );\n const sourceChanges = await addRemovedExportSymbols(\n repo.path,\n base,\n target.head,\n allSourceChanges.slice(sourceOffset, sourceOffset + maxSourceChangesToScan),\n );\n const allDocs = (\n await gitLines(repo.path, ['ls-tree', '-r', '--name-only', target.head])\n ).filter((file) => matchesDocsPath(file, docsGlobs));\n const docs = allDocs.slice(docOffset, docOffset + maxDocsToScan);\n const scan = await findDriftHits(repo.path, target.head, docs, sourceChanges);\n const nextCursor = scan.truncated\n ? { base, target: target.head, sourceOffset, docOffset }\n : nextDocsDriftCursor({\n base,\n target: target.head,\n sourceOffset,\n docOffset,\n allSourceChanges: allSourceChanges.length,\n scannedSourceChanges: sourceChanges.length,\n allDocs: allDocs.length,\n scannedDocs: docs.length,\n });\n const truncated = Boolean(nextCursor || scan.truncated);\n const hits = scan.hits;\n const result = {\n repo: repo.id,\n repoFullName: repoFullName(repo),\n base,\n scannedCommit: nextCursor ? base : target.head,\n attemptedCommit: target.head,\n cursor: nextCursor,\n headSource: target.source,\n headFetchError: target.fetchError,\n changedPathCount: allSourceChanges.length,\n scannedChangedPathCount: sourceChanges.length,\n sourceOffset,\n docCount: allDocs.length,\n scannedDocCount: docs.length,\n docOffset,\n hitCount: hits.length,\n truncated,\n hitTruncated: scan.truncated,\n hits,\n checkedAt: new Date().toISOString(),\n };\n\n if (hits.length === 0) {\n return {\n outcome: 'silent',\n message: `Docs drift found no hits for ${repoFullName(repo)}.`,\n result,\n };\n }\n\n const scanReportItems = [\n { label: 'repo', value: repoFullName(repo) },\n { label: 'range', value: `${base}..${target.head}` },\n { label: 'head source', value: target.source },\n target.fetchError\n ? { label: 'fetch warning', value: target.fetchError }\n : null,\n {\n label: 'docs scanned',\n value: `${docs.length} of ${allDocs.length}`,\n },\n {\n label: 'source changes scanned',\n value: `${sourceChanges.length} of ${allSourceChanges.length}`,\n },\n { label: 'truncated', value: truncated ? 'yes' : 'no' },\n ].filter((item): item is { label: string; value: string } => item !== null);\n\n const report = await writeReport(\n {\n kind: 'docs-drift',\n title: `Docs drift: ${repoFullName(repo)}`,\n repoId: repo.id,\n sourceRef: `${base}..${target.head}`,\n createdBy: `scheduler:${job.id}`,\n summary: result,\n html: renderReportHtml({\n title: `Docs drift: ${repoFullName(repo)}`,\n eyebrow: 'DOCS DRIFT',\n summary: `${hits.length} documentation reference${hits.length === 1 ? '' : 's'} may need review after ${sourceChanges.length} source path change${sourceChanges.length === 1 ? '' : 's'}.`,\n sections: [\n {\n title: 'Scan',\n items: scanReportItems,\n },\n {\n title: 'Stage Fix',\n items: [\n {\n label: 'action',\n value:\n 'Use the Reports panel stage button to start a docs-only Kilo handoff for these drift hits.',\n },\n ],\n },\n {\n title: 'Hits',\n items: hits.slice(0, 40).map((hit) => ({\n label: `${hit.docPath}:${hit.line}`,\n value: `${hit.changedPath}${hit.previousPath ? ` (was ${hit.previousPath})` : ''}\\n${hit.excerpt}`,\n })),\n },\n ],\n }),\n },\n paths,\n );\n\n return {\n outcome: 'updated',\n message: `Docs drift found ${hits.length} hit${hits.length === 1 ? '' : 's'} for ${repoFullName(repo)}.`,\n result: { ...result, reportId: report.id },\n notifications: [\n {\n level: 'attention',\n title: 'Docs drift found',\n message: `${repoFullName(repo)} has ${hits.length} documentation reference${hits.length === 1 ? '' : 's'} to review.`,\n source: 'docs-drift',\n sourceId: job.id,\n data: {\n repo: repo.id,\n reportId: report.id,\n reportUrl: `/reports/${report.id}`,\n },\n },\n ],\n };\n}\n\nexport async function stageDocsDriftFix(\n rawInput: unknown,\n paths = runtimePaths(),\n dependencies: DocsDriftStageFixDependencies = {},\n) {\n const parsed = parseInput(docsDriftStageFixInputSchema, rawInput, (message) =>\n invalidInputAction('docs_drift_stage_fix', message),\n );\n if (!parsed.ok) return parsed.result;\n\n const report = await (dependencies.readReport ?? readReport)(\n parsed.input.reportId,\n paths,\n );\n if (!report) {\n return failedAction(\n 'docs_drift_stage_fix',\n 'Docs drift report not found.',\n {\n requires: ['reportId'],\n },\n );\n }\n if (report.kind !== 'docs-drift') {\n return failedAction(\n 'docs_drift_stage_fix',\n 'Only docs-drift reports can stage docs fixes.',\n { requires: ['docsDriftReport'] },\n );\n }\n\n const summary = docsDriftSummary(report);\n if (!summary || summary.hits.length === 0) {\n return failedAction(\n 'docs_drift_stage_fix',\n 'Docs drift report has no fixable drift hits.',\n { requires: ['driftHits'] },\n );\n }\n\n const registry = await readRepoRegistrySnapshot(paths);\n const repo = registry.repos.find(\n (candidate) => candidate.id === summary.repo,\n );\n if (!repo) {\n return failedAction(\n 'docs_drift_stage_fix',\n `Repository \"${summary.repo}\" is not configured.`,\n { requires: ['repo'] },\n );\n }\n\n const created = await (dependencies.createWorktree ?? createWorktree)(\n {\n repoId: repo.id,\n baseRef: docsFixHeadSha(summary),\n headSha: docsFixHeadSha(summary),\n createdBy: 'neondeck',\n },\n paths,\n );\n if (!created.ok || !('worktree' in created)) {\n const result = objectConfig(created);\n return failedAction('docs_drift_stage_fix', created.message, {\n errors: stringArrayConfig(result.errors),\n requires: stringArrayConfig(result.requires),\n });\n }\n\n const taskId = `docs-drift-${randomUUID()}`;\n try {\n await recordDocsDriftFixTaskBoundary(\n {\n taskId,\n reportId: report.id,\n repoId: repo.id,\n repoFullName: summary.repoFullName,\n worktreeId: created.worktree.id,\n allowedDocsPaths: docsFixAllowedDocsPaths(summary),\n },\n paths,\n );\n } catch (error) {\n return failedAction(\n 'docs_drift_stage_fix',\n `Could not record docs drift fix boundary: ${errorMessage(error)}.`,\n {\n requires: ['docsDriftBoundary'],\n errors: [errorMessage(error)],\n },\n );\n }\n\n const learningMemoryContext = await loadAutomationLearningMemoryContext(\n paths,\n {\n repoId: repo.id,\n includeGlobal: true,\n },\n );\n const kilo = await (dependencies.startKiloTask ?? startKiloTask)(\n {\n taskId,\n worktreeId: created.worktree.id,\n title: `Docs drift fix: ${summary.repoFullName}`,\n prompt: await docsFixPrompt(\n summary,\n report,\n paths,\n learningMemoryContext,\n ),\n mode: 'draft-fix',\n allowAuto: true,\n confirmAuto: true,\n explicitUserRequest: true,\n },\n paths,\n );\n if (!kilo.ok) {\n const result = objectConfig(kilo);\n return failedAction('docs_drift_stage_fix', kilo.message, {\n errors: stringArrayConfig(result.errors),\n requires: stringArrayConfig(result.requires),\n });\n }\n const startedTaskId = 'task' in kilo ? kilo.task.id : taskId;\n await addWorkflowSummary(\n {\n workflow: 'docs_drift_stage_fix',\n status: 'started',\n summary: {\n outcome: 'kilo-started',\n reportId: report.id,\n repoId: repo.id,\n repoFullName: summary.repoFullName,\n kiloTaskId: startedTaskId,\n worktreeId: created.worktree.id,\n memoryIds: learningMemoryContext.memoryIds,\n },\n },\n paths,\n );\n\n return okAction(\n 'docs_drift_stage_fix',\n true,\n `Started docs drift fix task for ${summary.repoFullName}.`,\n {\n data: asJsonValue({\n report: reportLink(report),\n worktree: {\n id: created.worktree.id,\n path: created.worktree.localPath,\n headSha: created.worktree.headSha,\n targetSha: docsFixHeadSha(summary),\n },\n kiloTask: {\n id: startedTaskId,\n },\n }),\n },\n );\n}\n\ntype DocsDriftSummary = {\n repo: string;\n repoFullName: string;\n base: string | null;\n scannedCommit: string;\n attemptedCommit: string | null;\n truncated: boolean;\n hits: DriftHit[];\n};\n\nfunction docsDriftSummary(report: ReportRecord): DocsDriftSummary | null {\n const summary = objectConfig(report.summary);\n const repo = stringConfig(summary.repo);\n const repoFullName = stringConfig(summary.repoFullName);\n const scannedCommit = stringConfig(summary.scannedCommit);\n if (!repo || !repoFullName || !scannedCommit) return null;\n\n const hits = Array.isArray(summary.hits)\n ? summary.hits.flatMap((hit) => {\n const record = objectConfig(hit);\n const docPath = stringConfig(record.docPath);\n const changedPath = stringConfig(record.changedPath);\n const status = stringConfig(record.status);\n const excerpt = stringConfig(record.excerpt);\n const line =\n typeof record.line === 'number' && Number.isInteger(record.line)\n ? record.line\n : null;\n if (!docPath || !changedPath || !status || !excerpt || line === null) {\n return [];\n }\n return [\n {\n docPath,\n changedPath,\n previousPath: stringConfig(record.previousPath),\n status,\n line,\n excerpt,\n },\n ];\n })\n : [];\n\n return {\n repo,\n repoFullName,\n base: stringConfig(summary.base),\n scannedCommit,\n attemptedCommit: stringConfig(summary.attemptedCommit),\n truncated: Boolean(summary.truncated),\n hits,\n };\n}\n\nasync function docsFixPrompt(\n summary: DocsDriftSummary,\n report: ReportRecord,\n paths: RuntimePaths,\n learningMemoryContext: Awaited<\n ReturnType<typeof loadAutomationLearningMemoryContext>\n >,\n) {\n const skill = await runtimeSkillContent(\n 'neon-docs-fix',\n neonDocsFixSkillPath,\n paths,\n );\n const docPaths = docsFixAllowedDocsPaths(summary);\n return [\n skill.trim()\n ? `Runtime skill neon-docs-fix:\\n${skill.trim()}`\n : 'Runtime skill neon-docs-fix was unavailable; follow the task bounds below.',\n '',\n `Task: update stale documentation references for ${summary.repoFullName}.`,\n `Report: /reports/${report.id}`,\n `Scanned commit: ${summary.scannedCommit}`,\n summary.attemptedCommit\n ? `Attempted commit: ${summary.attemptedCommit}`\n : null,\n summary.truncated\n ? 'The drift scan was truncated. Fix only the listed, evidence-backed hits.'\n : null,\n '',\n 'Bounds:',\n '- Edit only documentation files listed under allowedDocsPaths.',\n '- Do not change source code, tests, generated files, package metadata, lockfiles, or runtime config.',\n '- Keep documentation edits minimal and fact-backed by the drift hits.',\n '- Commit local changes in this managed worktree when you make a fix.',\n '- Never push, open a pull request, post comments, submit reviews, or mutate external systems.',\n '',\n learningMemoryContext.text,\n '',\n 'Drift facts:',\n JSON.stringify(\n {\n report: reportLink(report),\n repo: summary.repo,\n repoFullName: summary.repoFullName,\n base: summary.base,\n scannedCommit: summary.scannedCommit,\n attemptedCommit: summary.attemptedCommit,\n targetCommit: docsFixHeadSha(summary),\n allowedDocsPaths: docPaths,\n hits: summary.hits.slice(0, 100),\n },\n null,\n 2,\n ),\n ]\n .filter((line): line is string => line !== null)\n .join('\\n');\n}\n\nasync function runtimeSkillContent(\n id: string,\n fallbackPath: string,\n paths: RuntimePaths,\n) {\n const loaded = await loadRuntimeSkill({ id }, paths);\n if (loaded.ok) return loaded.skill.content;\n return readFile(fallbackPath, 'utf8').catch(() => '');\n}\n\nfunction docsFixAllowedDocsPaths(summary: DocsDriftSummary) {\n return [...new Set(summary.hits.map((hit) => hit.docPath))].sort();\n}\n\nfunction docsFixHeadSha(summary: DocsDriftSummary) {\n return summary.attemptedCommit ?? summary.scannedCommit;\n}\n\nfunction reportLink(report: ReportRecord) {\n return {\n id: report.id,\n title: report.title,\n url: `/reports/${report.id}`,\n };\n}\n\nasync function docsDriftHead(repoPath: string, defaultBranch: string) {\n const localHead = await git(repoPath, ['rev-parse', 'HEAD']).catch(\n () => null,\n );\n const remoteRef = `refs/remotes/origin/${defaultBranch}`;\n let fetchError: string | null = null;\n await git(repoPath, [\n 'fetch',\n '--quiet',\n 'origin',\n `+refs/heads/${defaultBranch}:${remoteRef}`,\n ]).catch((error) => {\n fetchError = errorMessage(error);\n });\n const remoteHead = await git(repoPath, [\n 'rev-parse',\n '--verify',\n `${remoteRef}^{commit}`,\n ]).catch(() => null);\n if (remoteHead) {\n return {\n head: remoteHead,\n source: `origin/${defaultBranch}`,\n fetchError,\n };\n }\n if (localHead) {\n return {\n head: localHead,\n source: 'local-head',\n fetchError,\n };\n }\n return null;\n}\n\nfunction nextDocsDriftCursor(input: {\n base: string;\n target: string;\n sourceOffset: number;\n docOffset: number;\n allSourceChanges: number;\n scannedSourceChanges: number;\n allDocs: number;\n scannedDocs: number;\n}) {\n if (input.allSourceChanges === 0 || input.allDocs === 0) return null;\n const nextDocOffset = input.docOffset + input.scannedDocs;\n if (nextDocOffset < input.allDocs) {\n return {\n base: input.base,\n target: input.target,\n sourceOffset: input.sourceOffset,\n docOffset: nextDocOffset,\n };\n }\n\n const nextSourceOffset = input.sourceOffset + input.scannedSourceChanges;\n if (nextSourceOffset < input.allSourceChanges) {\n return {\n base: input.base,\n target: input.target,\n sourceOffset: nextSourceOffset,\n docOffset: 0,\n };\n }\n\n return null;\n}\n\nasync function changedPaths(cwd: string, base: string, head: string) {\n if (base === head) return [];\n const lines = await gitLines(cwd, ['diff', '--name-status', base, head]);\n return lines.flatMap((line): ChangedPath[] => {\n const parts = line.split('\\t');\n const status = parts[0] ?? '';\n if (status.startsWith('R')) {\n const previousPath = parts[1] ?? null;\n const path = parts[2] ?? previousPath;\n return path ? [{ path, previousPath, status, removedSymbols: [] }] : [];\n }\n const path = parts[1];\n return path\n ? [{ path, previousPath: null, status, removedSymbols: [] }]\n : [];\n });\n}\n\nasync function addRemovedExportSymbols(\n cwd: string,\n base: string,\n head: string,\n changes: ChangedPath[],\n) {\n return Promise.all(\n changes.map(async (change) => ({\n ...change,\n removedSymbols: await removedExportSymbols(cwd, base, head, change),\n })),\n );\n}\n\nasync function removedExportSymbols(\n cwd: string,\n base: string,\n head: string,\n change: ChangedPath,\n) {\n const diff = await git(cwd, [\n 'diff',\n '--unified=0',\n base,\n head,\n '--',\n change.previousPath ?? change.path,\n change.path,\n ]).catch(() => '');\n const symbols = new Set<string>();\n for (const line of diff.split('\\n')) {\n if (!line.startsWith('-') || line.startsWith('---')) continue;\n for (const symbol of removedExportSymbolsFromLine(line.slice(1))) {\n symbols.add(symbol);\n }\n }\n return [...symbols].sort();\n}\n\nfunction removedExportSymbolsFromLine(line: string) {\n const trimmed = line.trim();\n const declaration = trimmed.match(\n /^export\\s+(?:declare\\s+)?(?:async\\s+)?(?:function|class|const|let|var|interface|type|enum)\\s+([A-Za-z_$][\\w$]*)/,\n );\n if (declaration?.[1]) return [declaration[1]];\n\n const grouped = trimmed.match(/^export\\s*\\{\\s*([^}]+)\\s*\\}/);\n if (!grouped?.[1]) return [];\n return grouped[1]\n .split(',')\n .flatMap((part) => {\n const names = part\n .trim()\n .split(/\\s+as\\s+/i)\n .map((name) => name.trim())\n .filter(Boolean);\n return names.length === 2 ? names : names.slice(0, 1);\n })\n .filter((name) => /^[A-Za-z_$][\\w$]*$/.test(name));\n}\n\nasync function findDriftHits(\n repoPath: string,\n treeish: string,\n docs: string[],\n changes: ChangedPath[],\n) {\n const hits: DriftHit[] = [];\n let truncated = false;\n const needles = changes.flatMap((change) =>\n [\n change.path,\n change.previousPath,\n basename(change.path),\n ...change.removedSymbols,\n ]\n .filter((value): value is string => Boolean(value && value.length > 2))\n .map((value) => ({ value, change })),\n );\n for (const docPath of docs) {\n const content = await readGitFile(repoPath, treeish, docPath).catch(\n () => '',\n );\n if (!content) continue;\n const lines = content.split(/\\r?\\n/);\n for (const [index, line] of lines.entries()) {\n for (const needle of needles) {\n if (!line.includes(needle.value)) continue;\n if (hits.length < 100) {\n hits.push({\n docPath,\n changedPath: needle.change.path,\n previousPath: needle.change.previousPath,\n status: needle.change.status,\n line: index + 1,\n excerpt: line.trim().slice(0, 240),\n });\n } else {\n truncated = true;\n }\n break;\n }\n }\n }\n return { hits, truncated };\n}\n\nasync function readGitFile(repoPath: string, treeish: string, path: string) {\n return git(repoPath, ['show', `${treeish}:${path}`]);\n}\n\nfunction matchesDocsPath(path: string, globs: string[]) {\n if (globs.length === 0) return /^docs\\/.*\\.(md|mdx|astro)$/.test(path);\n return matchesAnyGlob(path, globs);\n}\n\nfunction matchesAnyGlob(path: string, globs: string[]) {\n return globs.some((glob) => globToRegExp(glob).test(path));\n}\n\nfunction globToRegExp(glob: string) {\n const globStarSlash = '__NEONDECK_GLOBSTAR_SLASH__';\n const globStar = '__NEONDECK_GLOBSTAR__';\n const escaped = glob\n .replace(/[.+^${}()|[\\]\\\\]/g, '\\\\$&')\n .replace(\n /\\\\\\{([^}]+)\\\\\\}/g,\n (_, choices: string) =>\n `(${choices.split(',').map(escapeRegExp).join('|')})`,\n )\n .replace(/\\*\\*\\//g, globStarSlash)\n .replace(/\\*\\*/g, globStar)\n .replace(/\\*/g, '[^/]*')\n .replaceAll(globStarSlash, '(?:.*/)?')\n .replaceAll(globStar, '.*');\n return new RegExp(`^${escaped}$`);\n}\n\nfunction escapeRegExp(value: string) {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n\nasync function gitLines(cwd: string, args: string[]) {\n return runBoundedGitLines(cwd, args);\n}\n\nasync function git(cwd: string, args: string[]) {\n return runBoundedGit(cwd, args);\n}\n\nfunction lastScannedCommit(value: unknown) {\n const result = objectConfig(value);\n const commit = result.scannedCommit;\n return typeof commit === 'string' && commit.trim() ? commit : null;\n}\n\nfunction docsDriftCursor(value: unknown, target: string) {\n const result = objectConfig(value);\n const cursor = objectConfig(result.cursor);\n if (cursor.target !== target) return null;\n const base = stringConfig(cursor.base);\n const sourceOffset =\n typeof cursor.sourceOffset === 'number' &&\n Number.isInteger(cursor.sourceOffset) &&\n cursor.sourceOffset >= 0\n ? cursor.sourceOffset\n : null;\n const docOffset =\n typeof cursor.docOffset === 'number' &&\n Number.isInteger(cursor.docOffset) &&\n cursor.docOffset >= 0\n ? cursor.docOffset\n : null;\n if (!base || sourceOffset === null || docOffset === null) return null;\n return { base, target, sourceOffset, docOffset };\n}\n\nfunction stringConfig(value: unknown) {\n return typeof value === 'string' && value.trim() ? value.trim() : null;\n}\n\nfunction stringArrayConfig(value: unknown) {\n return Array.isArray(value)\n ? value.filter((item): item is string => typeof item === 'string')\n : [];\n}\n\nfunction objectConfig(value: unknown) {\n return value && typeof value === 'object' && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : {};\n}\n\nfunction errorMessage(error: unknown) {\n return error instanceof Error ? error.message : String(error);\n}\n\nfunction failed(\n job: ReportAutomationInput,\n message: string,\n): AutomationExecutionResult {\n return {\n outcome: 'failed',\n message,\n notifications: [\n {\n level: 'attention',\n title: 'Docs drift failed',\n message,\n source: 'docs-drift',\n sourceId: job.id,\n },\n ],\n };\n}\n","import { Hono } from 'hono';\nimport { stageDocsDriftFix } from '../../modules/docs-drift';\nimport { listReports, readReport, readReportHtml } from '../../modules/reports';\nimport type { RuntimePaths } from '../../runtime-home';\nimport { safeJsonObject } from '../http';\n\nexport function createReportApiRoutes(paths: RuntimePaths) {\n const routes = new Hono();\n\n routes.get('/reports', async (c) => {\n const kind = c.req.query('kind')?.trim() || undefined;\n const limitText = c.req.query('limit');\n const limit = limitText ? Number(limitText) : undefined;\n if (\n limitText &&\n (limit === undefined || !Number.isFinite(limit) || limit <= 0)\n ) {\n return c.json(\n {\n ok: false,\n action: 'reports_list',\n message: 'Report limit must be a positive number.',\n items: [],\n },\n 400,\n );\n }\n\n try {\n return c.json({\n ok: true,\n action: 'reports_list',\n items: await listReports(paths, { kind, limit }),\n fetchedAt: new Date().toISOString(),\n });\n } catch (error) {\n return c.json(\n {\n ok: false,\n action: 'reports_list',\n message: error instanceof Error ? error.message : String(error),\n items: [],\n },\n 400,\n );\n }\n });\n\n routes.get('/reports/:id', async (c) => {\n const id = c.req.param('id')?.trim();\n if (!id) {\n return c.json(\n {\n ok: false,\n action: 'reports_read',\n message: 'Report id is required.',\n item: null,\n },\n 400,\n );\n }\n\n try {\n const item = await readReport(id, paths);\n if (!item) {\n return c.json(\n {\n ok: false,\n action: 'reports_read',\n message: 'Report not found.',\n item: null,\n },\n 404,\n );\n }\n return c.json({\n ok: true,\n action: 'reports_read',\n item,\n fetchedAt: new Date().toISOString(),\n });\n } catch (error) {\n return c.json(\n {\n ok: false,\n action: 'reports_read',\n message: error instanceof Error ? error.message : String(error),\n item: null,\n },\n 400,\n );\n }\n });\n\n routes.post('/reports/:id/stage-docs-fix', async (c) => {\n const result = await stageDocsDriftFix(\n { ...(await safeJsonObject(c)), reportId: c.req.param('id') },\n paths,\n );\n return c.json(result, result.ok ? 200 : 400);\n });\n\n return routes;\n}\n\nexport function createReportFileRoutes(paths: RuntimePaths) {\n const routes = new Hono();\n\n routes.get('/:id', async (c) => {\n const id = c.req.param('id')?.trim();\n if (!id) return c.text('Not found', 404);\n\n try {\n const result = await readReportHtml(id, paths);\n if (!result) return c.text('Not found', 404);\n return c.html(result.html, 200, {\n 'content-security-policy':\n \"default-src 'none'; style-src 'unsafe-inline';\",\n 'x-content-type-options': 'nosniff',\n });\n } catch {\n return c.text('Not found', 404);\n }\n });\n\n return routes;\n}\n","import { Hono } from 'hono';\nimport {\n readRepoHealthSnapshot,\n readRepoRegistrySnapshot,\n} from '../../modules/repos';\nimport { ConfigValidationError, type RuntimePaths } from '../../runtime-home';\n\nexport function createReposRoutes(paths: RuntimePaths) {\n const routes = new Hono();\n\n routes.get('/', async (c) => {\n try {\n return c.json(await readRepoRegistrySnapshot(paths));\n } catch (error) {\n if (error instanceof ConfigValidationError) {\n return c.json(\n {\n error: 'Invalid repo registry',\n message: error.message,\n path: error.path,\n },\n 500,\n );\n }\n\n throw error;\n }\n });\n\n routes.get('/health', async (c) => {\n try {\n return c.json(await readRepoHealthSnapshot(paths));\n } catch (error) {\n if (error instanceof ConfigValidationError) {\n return c.json(\n {\n error: 'Invalid repo registry',\n message: error.message,\n path: error.path,\n },\n 500,\n );\n }\n\n throw error;\n }\n });\n\n return routes;\n}\n","import { Hono } from 'hono';\nimport {\n createAgentInstructionTask,\n createBriefingTask,\n listTaskRecords,\n readTaskRecord,\n removeTask,\n setTaskEnabled,\n} from '../../modules/scheduled-tasks';\nimport type { RuntimePaths } from '../../runtime-home';\nimport { safeJsonObject } from '../http';\n\nexport function createScheduledTaskRoutes(paths: RuntimePaths) {\n const routes = new Hono();\n\n routes.get('/scheduled-tasks', async (c) => c.json(await listTaskRecords(paths)));\n routes.post('/scheduled-tasks/briefings', async (c) => {\n const result = await createBriefingTask(await safeJsonObject(c), paths);\n return c.json(result, result.ok ? 200 : 400);\n });\n routes.post('/scheduled-tasks/instructions', async (c) => {\n const result = await createAgentInstructionTask(\n await safeJsonObject(c),\n paths,\n );\n return c.json(result, result.ok ? 200 : 400);\n });\n routes.get('/scheduled-tasks/:id', async (c) => {\n const result = await readTaskRecord(c.req.param('id'), paths);\n return c.json(result, result.ok ? 200 : 404);\n });\n routes.post('/scheduled-tasks/:id/pause', async (c) => {\n const result = await setTaskEnabled(c.req.param('id'), false, paths);\n return c.json(result, result.ok ? 200 : 404);\n });\n routes.post('/scheduled-tasks/:id/resume', async (c) => {\n const result = await setTaskEnabled(c.req.param('id'), true, paths);\n return c.json(result, result.ok ? 200 : 404);\n });\n routes.delete('/scheduled-tasks/:id', async (c) => {\n if (c.req.query('confirm') !== 'true') {\n return c.json(\n {\n ok: false,\n action: 'scheduled_task_delete',\n changed: false,\n message: 'Deleting a scheduled task requires confirm=true.',\n requires: ['confirm'],\n },\n 400,\n );\n }\n const result = await removeTask(c.req.param('id'), paths);\n return c.json(result, result.ok ? 200 : 404);\n });\n\n return routes;\n}\n","import { Hono } from 'hono';\nimport {\n autopilotStateSchema,\n readAutopilotState,\n} from '../../modules/autopilot/state';\nimport {\n localApiAuthHeader,\n localApiTokenQueryParam,\n readLocalApiToken,\n} from '../../modules/runtime';\nimport type { RuntimePaths } from '../../runtime-home';\nimport { readRuntimeStatus } from '../../modules/runtime';\nimport * as v from 'valibot';\n\nexport function createRuntimeRoutes(paths: RuntimePaths) {\n const routes = new Hono();\n\n routes.get('/health', (c) =>\n c.json({\n ok: true,\n service: 'neondeck',\n home: paths.home,\n uptimeSeconds: Math.round(process.uptime()),\n }),\n );\n\n routes.get('/runtime/status', async (c) => {\n return c.json(await readRuntimeStatus(paths));\n });\n\n routes.get('/local-api/session', async (c) => {\n return c.json({\n ok: true,\n action: 'local_api_session_read',\n token: await readLocalApiToken(paths),\n header: localApiAuthHeader,\n queryParam: localApiTokenQueryParam,\n });\n });\n\n routes.get('/autopilot/state', async (c) => {\n return c.json(\n v.parse(autopilotStateSchema, await readAutopilotState(paths)),\n );\n });\n\n return routes;\n}\n","import { Hono } from 'hono';\nimport type { RuntimePaths } from '../../runtime-home';\nimport { readSafetyPolicy } from '../../modules/safety';\n\nexport function createSafetyRoutes(paths: RuntimePaths) {\n const routes = new Hono();\n\n routes.get('/policy', (c) => {\n return c.json(readSafetyPolicy(paths));\n });\n\n return routes;\n}\n","import { randomUUID } from 'node:crypto';\nimport { DatabaseSync } from 'node:sqlite';\nimport {\n getRun,\n invoke,\n listRuns,\n type RunRecord,\n type WorkflowInvocationReceipt,\n} from '@flue/runtime';\nimport schedulerTickWorkflow from '../workflows/scheduler-tick';\nimport { addNotification } from '../modules/app-state';\nimport type { SchedulerResult } from '../modules/scheduler/schemas';\nimport { runSchedulerTick } from '../modules/scheduler/service';\nimport {\n isSqliteBusy,\n readMetadataValue,\n rollbackQuietly,\n} from '../modules/scheduler/lease';\nimport { ensureRuntimeHome, type RuntimePaths } from '../runtime-home';\n\nconst schedulerWorkflowName = 'scheduler-tick';\nconst schedulerWorkflowAdmissionLeaseKey =\n 'scheduler.tick.workflow.admission.lease';\nconst defaultWorkflowWaitTimeoutMs = 5 * 60 * 1000;\nconst defaultWorkflowAdmissionLeaseTtlMs =\n defaultWorkflowWaitTimeoutMs + 60_000;\nconst defaultWorkflowPollMs = 250;\n\ntype ObservedSchedulerTickResult = SchedulerResult & { runId?: string };\ntype SchedulerWorkflowAdmissionLease = {\n owner: string;\n runtimeHome: string;\n acquiredAt: string;\n expiresAt: string;\n runId: string | null;\n};\ntype SchedulerWorkflowAdmissionLeaseResult =\n | { acquired: true; lease: SchedulerWorkflowAdmissionLease }\n | { acquired: false; lease: SchedulerWorkflowAdmissionLease | null };\n\ntype SchedulerWorkflowDependencies = {\n getRun?: typeof getRun;\n invokeWorkflow?: (paths: RuntimePaths) => Promise<WorkflowInvocationReceipt>;\n listRuns?: typeof listRuns;\n now?: () => Date;\n pollMs?: number;\n sleep?: typeof sleep;\n admissionLeaseTtlMs?: number;\n activeRunTtlMs?: number;\n waitTimeoutMs?: number;\n};\n\nconst schedulerTickInFlight = new Map<\n string,\n Promise<ObservedSchedulerTickResult>\n>();\n\nexport async function runObservedSchedulerTick(\n paths: RuntimePaths,\n dependencies: SchedulerWorkflowDependencies = {},\n): Promise<ObservedSchedulerTickResult> {\n const key = paths.home;\n const inFlight = schedulerTickInFlight.get(key);\n if (inFlight) return inFlight;\n const next = runObservedSchedulerTickOnce(paths, dependencies).finally(() => {\n schedulerTickInFlight.delete(key);\n });\n schedulerTickInFlight.set(key, next);\n return next;\n}\n\nasync function runObservedSchedulerTickOnce(\n paths: RuntimePaths,\n dependencies: SchedulerWorkflowDependencies,\n): Promise<ObservedSchedulerTickResult> {\n await ensureRuntimeHome(paths);\n\n const now = currentDate(dependencies);\n let activeRun: RunRecord | null;\n try {\n activeRun = await activeSchedulerTickRun(paths, dependencies, now);\n } catch (error) {\n return runDirectSchedulerTickFallback(paths, error, 'inspection');\n }\n if (activeRun) {\n return resultFromObservedRun(paths, activeRun.runId, dependencies);\n }\n\n const admission = acquireSchedulerWorkflowAdmissionLease(\n paths,\n now,\n schedulerWorkflowAdmissionLeaseTtlMs(dependencies),\n );\n if (!admission.acquired) {\n if (admission.lease?.runId) {\n return resultFromObservedRun(paths, admission.lease.runId, dependencies);\n }\n\n return {\n ok: true,\n action: 'scheduler_tick',\n changed: false,\n outcome: 'silent',\n message:\n 'Scheduler tick skipped because another process is admitting the observed scheduler workflow.',\n extra: { admissionLease: admission.lease ? 'active' : 'busy' },\n };\n }\n\n try {\n let receipt: WorkflowInvocationReceipt;\n try {\n receipt = await invokeSchedulerTickWorkflow(paths, dependencies);\n } catch (error) {\n return runDirectSchedulerTickFallback(paths, error, 'admission');\n }\n recordSchedulerWorkflowAdmissionRunId(\n paths,\n admission.lease.owner,\n receipt.runId,\n currentDate(dependencies),\n schedulerWorkflowAdmissionLeaseTtlMs(dependencies),\n );\n return resultFromObservedRun(paths, receipt.runId, dependencies);\n } finally {\n await releaseSchedulerWorkflowAdmissionLease(paths, admission.lease.owner);\n }\n}\n\nasync function resultFromObservedRun(\n paths: RuntimePaths,\n runId: string,\n dependencies: SchedulerWorkflowDependencies,\n) {\n try {\n return resultFromTerminalRun(runId, await waitForRun(runId, dependencies));\n } catch (error) {\n return runDirectSchedulerTickFallback(paths, error, 'inspection');\n }\n}\n\nasync function runDirectSchedulerTickFallback(\n paths: RuntimePaths,\n error: unknown,\n phase: 'inspection' | 'admission',\n): Promise<ObservedSchedulerTickResult> {\n const message = errorMessage(error);\n const fallback = await runSchedulerTick(paths);\n await addNotification(\n {\n level: 'attention',\n title: 'Scheduler workflow observation failed',\n message: `Scheduler tick workflow ${phase} failed; ran the direct scheduler tick instead. ${message}`,\n source: 'scheduler',\n sourceId: 'scheduler-tick:workflow-observation-fallback',\n data: {\n phase,\n error: message,\n fallbackOutcome: fallback.outcome ?? null,\n },\n },\n paths,\n );\n\n return {\n ...fallback,\n changed: true,\n message: `Scheduler tick workflow ${phase} failed; ran direct scheduler tick instead. ${fallback.message}`,\n extra: {\n ...objectField(fallback.extra),\n workflowObservationFallback: true,\n workflowObservationPhase: phase,\n ...(phase === 'admission'\n ? {\n workflowAdmissionFailed: true,\n workflowAdmissionError: message,\n }\n : {\n workflowInspectionFailed: true,\n workflowInspectionError: message,\n }),\n },\n };\n}\n\nfunction resultFromTerminalRun(\n runId: string,\n run: RunRecord | null,\n): ObservedSchedulerTickResult {\n if (!run || run.status === 'active') {\n return {\n ok: false,\n action: 'scheduler_tick',\n changed: false,\n outcome: 'failed',\n message: `Scheduler tick workflow ${runId} did not complete within ${defaultWorkflowWaitTimeoutMs}ms.`,\n errors: ['scheduler-tick workflow timed out'],\n extra: { runId, activeWorkflow: true },\n runId,\n };\n }\n if (run.status === 'errored') {\n return {\n ok: false,\n action: 'scheduler_tick',\n changed: false,\n outcome: 'failed',\n message: `Scheduler tick workflow ${runId} failed: ${errorMessage(run.error)}.`,\n errors: [errorMessage(run.error)],\n extra: { runId },\n runId,\n };\n }\n\n return {\n ...schedulerResultFromRun(run.result),\n runId,\n };\n}\n\nexport function startSchedulerObservedLoop(\n paths: RuntimePaths,\n intervalMs = 60_000,\n runTick: (paths: RuntimePaths) => Promise<unknown> = runObservedSchedulerTick,\n) {\n let tickInFlight = false;\n const timer = setInterval(() => {\n if (tickInFlight) return;\n tickInFlight = true;\n void runTick(paths)\n .catch((error) => {\n console.error('[neondeck] scheduler observed tick failed', error);\n })\n .finally(() => {\n tickInFlight = false;\n });\n }, intervalMs);\n\n timer.unref?.();\n return timer;\n}\n\nasync function invokeSchedulerTickWorkflow(\n paths: RuntimePaths,\n dependencies: SchedulerWorkflowDependencies,\n): Promise<WorkflowInvocationReceipt> {\n if (dependencies.invokeWorkflow) return dependencies.invokeWorkflow(paths);\n return invoke(schedulerTickWorkflow, {\n input: { runtimeHome: paths.home },\n });\n}\n\nasync function activeSchedulerTickRun(\n paths: RuntimePaths,\n dependencies: SchedulerWorkflowDependencies,\n now: Date,\n) {\n const active = await (dependencies.listRuns ?? listRuns)({\n workflowName: schedulerWorkflowName,\n status: 'active',\n limit: 50,\n });\n for (const pointer of active.runs) {\n const run = await (dependencies.getRun ?? getRun)(pointer.runId);\n if (!run || run.status !== 'active') continue;\n if (runRuntimeHome(run) !== paths.home) continue;\n if (isStaleActiveRun(run, now, activeRunTtlMs(dependencies))) continue;\n return run;\n }\n return null;\n}\n\nasync function waitForRun(\n runId: string,\n dependencies: SchedulerWorkflowDependencies,\n) {\n const deadline =\n Date.now() + (dependencies.waitTimeoutMs ?? defaultWorkflowWaitTimeoutMs);\n let run: RunRecord | null = null;\n while (Date.now() < deadline) {\n run = await (dependencies.getRun ?? getRun)(runId);\n if (run && run.status !== 'active') return run;\n await (dependencies.sleep ?? sleep)(\n dependencies.pollMs ?? defaultWorkflowPollMs,\n );\n }\n return run;\n}\n\nfunction schedulerResultFromRun(result: unknown): SchedulerResult {\n const record = objectField(result);\n if (typeof record.ok === 'boolean' && typeof record.message === 'string') {\n return record as SchedulerResult;\n }\n return {\n ok: false,\n action: 'scheduler_tick',\n changed: false,\n outcome: 'failed',\n message: 'Scheduler tick workflow returned an invalid result.',\n errors: ['invalid scheduler-tick workflow result'],\n };\n}\n\nfunction objectField(value: unknown): Record<string, unknown> {\n return value && typeof value === 'object' && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : {};\n}\n\nfunction runRuntimeHome(run: RunRecord) {\n const input = objectField(run.input);\n return typeof input.runtimeHome === 'string' && input.runtimeHome\n ? input.runtimeHome\n : null;\n}\n\nfunction acquireSchedulerWorkflowAdmissionLease(\n paths: RuntimePaths,\n now: Date,\n ttlMs: number,\n): SchedulerWorkflowAdmissionLeaseResult {\n const database = new DatabaseSync(paths.neondeckDatabase);\n\n try {\n database.exec('BEGIN IMMEDIATE;');\n const existing = database\n .prepare('SELECT value FROM app_metadata WHERE key = ?;')\n .get(schedulerWorkflowAdmissionLeaseKey);\n const existingLease = parseSchedulerWorkflowAdmissionLease(\n readMetadataValue(existing),\n );\n if (\n existingLease &&\n existingLease.runtimeHome === paths.home &&\n Date.parse(existingLease.expiresAt) > now.getTime()\n ) {\n database.exec('COMMIT;');\n return { acquired: false, lease: existingLease };\n }\n\n const acquiredAt = now.toISOString();\n const lease: SchedulerWorkflowAdmissionLease = {\n owner: `pid-${process.pid}-${randomUUID()}`,\n runtimeHome: paths.home,\n acquiredAt,\n expiresAt: new Date(now.getTime() + ttlMs).toISOString(),\n runId: null,\n };\n database\n .prepare(\n `\n INSERT INTO app_metadata (key, value, updated_at)\n VALUES (?, ?, ?)\n ON CONFLICT(key) DO UPDATE SET\n value = excluded.value,\n updated_at = excluded.updated_at;\n `,\n )\n .run(\n schedulerWorkflowAdmissionLeaseKey,\n JSON.stringify(lease),\n acquiredAt,\n );\n database.exec('COMMIT;');\n\n return { acquired: true, lease };\n } catch (error) {\n rollbackQuietly(database);\n if (isSqliteBusy(error)) return { acquired: false, lease: null };\n throw error;\n } finally {\n database.close();\n }\n}\n\nfunction recordSchedulerWorkflowAdmissionRunId(\n paths: RuntimePaths,\n owner: string,\n runId: string,\n now: Date,\n ttlMs: number,\n) {\n const database = new DatabaseSync(paths.neondeckDatabase);\n\n try {\n database.exec('BEGIN IMMEDIATE;');\n const existing = database\n .prepare('SELECT value FROM app_metadata WHERE key = ?;')\n .get(schedulerWorkflowAdmissionLeaseKey);\n const existingLease = parseSchedulerWorkflowAdmissionLease(\n readMetadataValue(existing),\n );\n if (existingLease?.owner !== owner) {\n database.exec('COMMIT;');\n return false;\n }\n\n const updatedLease: SchedulerWorkflowAdmissionLease = {\n ...existingLease,\n runId,\n expiresAt: new Date(now.getTime() + ttlMs).toISOString(),\n };\n database\n .prepare(\n `\n UPDATE app_metadata\n SET value = ?, updated_at = ?\n WHERE key = ?;\n `,\n )\n .run(\n JSON.stringify(updatedLease),\n now.toISOString(),\n schedulerWorkflowAdmissionLeaseKey,\n );\n database.exec('COMMIT;');\n return true;\n } catch (error) {\n rollbackQuietly(database);\n if (isSqliteBusy(error)) return false;\n throw error;\n } finally {\n database.close();\n }\n}\n\nasync function releaseSchedulerWorkflowAdmissionLease(\n paths: RuntimePaths,\n owner: string,\n) {\n const maxAttempts = 5;\n for (let attempt = 1; attempt <= maxAttempts; attempt += 1) {\n if (releaseSchedulerWorkflowAdmissionLeaseOnce(paths, owner)) return;\n if (attempt < maxAttempts) await sleep(25 * attempt);\n }\n\n console.warn(\n '[neondeck] scheduler workflow admission lease release was blocked by SQLite; lease will expire automatically.',\n );\n try {\n await addNotification(\n {\n level: 'attention',\n title: 'Scheduler workflow lease release blocked',\n message:\n 'Scheduler workflow admission lease release was blocked by SQLite; future observed ticks may wait for the lease TTL before retrying.',\n source: 'scheduler',\n sourceId: 'scheduler-tick:workflow-admission-lease-release',\n data: { owner },\n },\n paths,\n );\n } catch (error) {\n console.warn(\n '[neondeck] failed to persist scheduler workflow lease release warning',\n error,\n );\n }\n}\n\nfunction releaseSchedulerWorkflowAdmissionLeaseOnce(\n paths: RuntimePaths,\n owner: string,\n) {\n const database = new DatabaseSync(paths.neondeckDatabase);\n\n try {\n database.exec('BEGIN IMMEDIATE;');\n const existing = database\n .prepare('SELECT value FROM app_metadata WHERE key = ?;')\n .get(schedulerWorkflowAdmissionLeaseKey);\n const existingLease = parseSchedulerWorkflowAdmissionLease(\n readMetadataValue(existing),\n );\n if (existingLease?.owner === owner) {\n database\n .prepare('DELETE FROM app_metadata WHERE key = ?;')\n .run(schedulerWorkflowAdmissionLeaseKey);\n }\n database.exec('COMMIT;');\n return true;\n } catch (error) {\n rollbackQuietly(database);\n if (isSqliteBusy(error)) return false;\n throw error;\n } finally {\n database.close();\n }\n}\n\nfunction parseSchedulerWorkflowAdmissionLease(value: string | undefined) {\n if (!value) return;\n\n try {\n const parsed = objectField(JSON.parse(value));\n if (\n typeof parsed.owner === 'string' &&\n typeof parsed.runtimeHome === 'string' &&\n typeof parsed.acquiredAt === 'string' &&\n typeof parsed.expiresAt === 'string'\n ) {\n return {\n owner: parsed.owner,\n runtimeHome: parsed.runtimeHome,\n acquiredAt: parsed.acquiredAt,\n expiresAt: parsed.expiresAt,\n runId: typeof parsed.runId === 'string' ? parsed.runId : null,\n };\n }\n } catch {\n return;\n }\n}\n\nfunction isStaleActiveRun(run: RunRecord, now: Date, ttlMs: number) {\n const startedAt = Date.parse(run.startedAt);\n return Number.isFinite(startedAt) && startedAt + ttlMs <= now.getTime();\n}\n\nfunction schedulerWorkflowAdmissionLeaseTtlMs(\n dependencies: SchedulerWorkflowDependencies,\n) {\n return dependencies.admissionLeaseTtlMs ?? defaultWorkflowAdmissionLeaseTtlMs;\n}\n\nfunction activeRunTtlMs(dependencies: SchedulerWorkflowDependencies) {\n return dependencies.activeRunTtlMs ?? defaultWorkflowWaitTimeoutMs;\n}\n\nfunction currentDate(dependencies: SchedulerWorkflowDependencies) {\n return dependencies.now?.() ?? new Date();\n}\n\nfunction errorMessage(error: unknown) {\n return error instanceof Error ? error.message : String(error);\n}\n\nfunction sleep(milliseconds: number) {\n return new Promise((resolve) => setTimeout(resolve, milliseconds));\n}\n","import { Hono } from 'hono';\nimport type { RuntimePaths } from '../../runtime-home';\nimport { runObservedSchedulerTick } from '../scheduler-workflow';\n\nexport function createSchedulerRoutes(paths: RuntimePaths) {\n const routes = new Hono();\n\n routes.post('/scheduler/tick', async (c) => {\n return c.json(await runObservedSchedulerTick(paths));\n });\n\n return routes;\n}\n","import { Hono } from 'hono';\nimport type { RuntimePaths } from '../../runtime-home';\nimport {\n archiveChatSession,\n createChatSession,\n createChatSessionCommandEvent,\n linkChatSessionContext,\n listChatSessionCommandEvents,\n listChatSessions,\n pinChatSession,\n readChatSession,\n readChatSessionMessages,\n readNeonSessionState,\n referenceChatSession,\n renameChatSession,\n refreshChatSessionSummary,\n restoreChatSession,\n searchChatSessions,\n switchChatSession,\n updateChatSessionCommandEvent,\n} from '../../modules/sessions';\nimport { safeJsonBody, safeJsonObject } from '../http';\n\nexport function createSessionRoutes(paths: RuntimePaths) {\n const routes = new Hono();\n\n routes.get('/session', async (c) => {\n return c.json(await readNeonSessionState(paths, c.req.query('surface')));\n });\n\n routes.get('/sessions', async (c) => {\n return c.json(\n await listChatSessions(\n {\n includeArchived: c.req.query('includeArchived') === '1',\n kind: sessionKind(c.req.query('kind')),\n surface: c.req.query('surface') || undefined,\n },\n paths,\n ),\n );\n });\n\n routes.post('/sessions/search', async (c) => {\n const result = await searchChatSessions(\n (await safeJsonBody(c)) as Parameters<typeof searchChatSessions>[0],\n paths,\n );\n return c.json(result, result.ok ? 200 : 400);\n });\n\n routes.post('/sessions', async (c) => {\n const result = await createChatSession(\n (await safeJsonBody(c)) as Parameters<typeof createChatSession>[0],\n paths,\n );\n return c.json(result, result.ok ? 200 : 400);\n });\n\n routes.get('/sessions/:id', async (c) => {\n const result = await readChatSession(\n {\n id: c.req.param('id'),\n surface: c.req.query('surface') || undefined,\n reason: c.req.query('reason') || undefined,\n },\n paths,\n );\n return c.json(result, result.ok ? 200 : 404);\n });\n\n routes.get('/sessions/:id/messages', async (c) => {\n const rawLimit = Number(c.req.query('limit'));\n const result = await readChatSessionMessages(\n {\n id: c.req.param('id'),\n cursor: c.req.query('cursor') || undefined,\n limit: Number.isFinite(rawLimit) ? rawLimit : undefined,\n surface: c.req.query('surface') || undefined,\n reason: c.req.query('reason') || undefined,\n explicitUserRequest: c.req.query('explicitUserRequest') === '1',\n },\n paths,\n );\n return c.json(result, result.ok ? 200 : 'requires' in result ? 400 : 404);\n });\n\n routes.get('/sessions/:id/command-events', async (c) => {\n const rawLimit = Number(c.req.query('limit'));\n const result = await listChatSessionCommandEvents(\n {\n sessionId: c.req.param('id'),\n limit: Number.isFinite(rawLimit) ? rawLimit : undefined,\n },\n paths,\n );\n return c.json(result, result.ok ? 200 : 404);\n });\n\n routes.post('/sessions/:id/command-events', async (c) => {\n const result = await createChatSessionCommandEvent(\n {\n ...(await safeJsonObject(c)),\n sessionId: c.req.param('id'),\n } as Parameters<typeof createChatSessionCommandEvent>[0],\n paths,\n );\n return c.json(result, result.ok ? 200 : 400);\n });\n\n routes.post('/sessions/:id/command-events/:eventId', async (c) => {\n const result = await updateChatSessionCommandEvent(\n {\n ...(await safeJsonObject(c)),\n sessionId: c.req.param('id'),\n eventId: c.req.param('eventId'),\n } as Parameters<typeof updateChatSessionCommandEvent>[0],\n paths,\n );\n return c.json(result, result.ok ? 200 : 400);\n });\n\n routes.post('/sessions/:id/summary/refresh', async (c) => {\n const result = await refreshChatSessionSummary(\n {\n ...(await safeJsonObject(c)),\n id: c.req.param('id'),\n } as Parameters<typeof refreshChatSessionSummary>[0],\n paths,\n );\n return c.json(result, result.ok ? 200 : 400);\n });\n\n routes.post('/sessions/:id/reference', async (c) => {\n const result = await referenceChatSession(\n {\n ...(await safeJsonObject(c)),\n id: c.req.param('id'),\n } as Parameters<typeof referenceChatSession>[0],\n paths,\n );\n return c.json(result, result.ok ? 200 : 400);\n });\n\n routes.post('/sessions/:id/switch', async (c) => {\n const result = await switchChatSession(\n { ...(await safeJsonObject(c)), id: c.req.param('id') },\n paths,\n );\n return c.json(result, result.ok ? 200 : 400);\n });\n\n routes.post('/sessions/:id/rename', async (c) => {\n const result = await renameChatSession(\n {\n ...(await safeJsonObject(c)),\n id: c.req.param('id'),\n } as Parameters<typeof renameChatSession>[0],\n paths,\n );\n return c.json(result, result.ok ? 200 : 400);\n });\n\n routes.post('/sessions/:id/pin', async (c) => {\n const result = await pinChatSession(\n {\n ...(await safeJsonObject(c)),\n id: c.req.param('id'),\n } as Parameters<typeof pinChatSession>[0],\n paths,\n );\n return c.json(result, result.ok ? 200 : 400);\n });\n\n routes.post('/sessions/:id/archive', async (c) => {\n const result = await archiveChatSession(\n { ...(await safeJsonObject(c)), id: c.req.param('id') },\n paths,\n );\n return c.json(result, result.ok ? 200 : 400);\n });\n\n routes.post('/sessions/:id/restore', async (c) => {\n const result = await restoreChatSession(\n { ...(await safeJsonObject(c)), id: c.req.param('id') },\n paths,\n );\n return c.json(result, result.ok ? 200 : 400);\n });\n\n routes.post('/sessions/:id/link-context', async (c) => {\n const result = await linkChatSessionContext(\n { ...(await safeJsonObject(c)), id: c.req.param('id') },\n paths,\n );\n return c.json(result, result.ok ? 200 : 400);\n });\n\n return routes;\n}\n\nfunction sessionKind(value: string | undefined) {\n if (\n value === 'main' ||\n value === 'scratch' ||\n value === 'general' ||\n value === 'repo' ||\n value === 'watch' ||\n value === 'task' ||\n value === 'briefing'\n ) {\n return value;\n }\n\n return undefined;\n}\n","import { Hono } from 'hono';\nimport {\n listRuntimeSkills,\n loadRuntimeSkill,\n reloadRuntimeSkills,\n} from '../../modules/runtime';\nimport type { RuntimePaths } from '../../runtime-home';\nimport {\n applySkillPatchCandidate,\n listSkillPatchCandidates,\n rejectSkillPatchCandidate,\n restoreSkillPatchCandidate,\n} from '../../modules/learning/skill-patches';\nimport { boundedQueryLimit, safeJsonObject } from '../http';\nimport { learningCandidateStatus } from './learning';\n\nexport function createSkillRoutes(paths: RuntimePaths) {\n const routes = new Hono();\n\n routes.get('/patches', async (c) => {\n const status = learningCandidateStatus(c.req.query('status'));\n if (c.req.query('status') && !status) {\n return c.json(\n {\n ok: false,\n action: 'skill_patch_list',\n changed: false,\n message: `Invalid candidate status \"${c.req.query('status')}\".`,\n },\n 400,\n );\n }\n if (c.req.query('limit') && !boundedQueryLimit(c.req.query('limit'), 100)) {\n return c.json(\n {\n ok: false,\n action: 'skill_patch_list',\n changed: false,\n message: `Invalid patch limit \"${c.req.query('limit')}\".`,\n },\n 400,\n );\n }\n return c.json(\n await listSkillPatchCandidates(\n {\n status,\n skillId: c.req.query('skillId') || undefined,\n limit: boundedQueryLimit(c.req.query('limit'), 100),\n },\n paths,\n ),\n );\n });\n\n routes.post('/patches/:id/apply', async (c) => {\n const result = await applySkillPatchCandidate(\n { ...(await safeJsonObject(c)), id: c.req.param('id') },\n paths,\n );\n return c.json(result, result.ok ? 200 : 400);\n });\n\n routes.post('/patches/:id/reject', async (c) => {\n const result = await rejectSkillPatchCandidate(\n { ...(await safeJsonObject(c)), id: c.req.param('id') },\n paths,\n );\n return c.json(result, result.ok ? 200 : 400);\n });\n\n routes.post('/patches/:id/restore', async (c) => {\n const body = await safeJsonObject(c);\n const result = await restoreSkillPatchCandidate(\n { ...body, id: c.req.param('id') } as {\n id: string;\n confirm: true;\n reason?: string;\n },\n paths,\n );\n return c.json(result, result.ok ? 200 : 400);\n });\n\n routes.get('/', async (c) => {\n return c.json(await listRuntimeSkills(paths));\n });\n\n routes.get('/:id', async (c) => {\n const result = await loadRuntimeSkill({ id: c.req.param('id') }, paths);\n if (!result.ok) {\n return c.json(result, 404);\n }\n\n return c.json(result);\n });\n\n routes.post('/reload', async (c) => {\n return c.json(await reloadRuntimeSkills(paths));\n });\n\n return routes;\n}\n","import { Hono } from 'hono';\nimport {\n listPrWatchEventWatermarks,\n refreshPrWatchEventState,\n} from '../../modules/pr-events';\nimport type { RuntimePaths } from '../../runtime-home';\nimport {\n addPrWatch,\n addRefWatch,\n listPrWatches,\n listRefWatches,\n removePrWatch,\n setPrWatchPolling,\n} from '../../modules/watches';\nimport { safeJsonBody, safeJsonObject } from '../http';\n\nexport function createWatchRoutes(paths: RuntimePaths) {\n const routes = new Hono();\n\n routes.get('/watches', async (c) => {\n return c.json(await listPrWatches(paths));\n });\n\n routes.post('/watches', async (c) => {\n const input = (await safeJsonBody(c)) as Parameters<typeof addPrWatch>[0];\n const result = await addPrWatch(input, paths);\n return c.json(result, result.ok ? 200 : 400);\n });\n\n routes.get('/watches/events/watermarks', async (c) => {\n return c.json(\n await listPrWatchEventWatermarks(\n { watchId: c.req.query('watchId') || undefined },\n paths,\n ),\n );\n });\n\n routes.get('/watches/:id/events/watermarks', async (c) => {\n return c.json(\n await listPrWatchEventWatermarks({ watchId: c.req.param('id') }, paths),\n );\n });\n\n routes.post('/watches/:id/events/refresh', async (c) => {\n const result = await refreshPrWatchEventState(\n { ...(await safeJsonObject(c)), watchId: c.req.param('id') },\n paths,\n );\n return c.json(result, result.ok ? 200 : 400);\n });\n\n routes.get('/watches/ref', async (c) => {\n return c.json(await listRefWatches(paths));\n });\n\n routes.post('/watches/ref', async (c) => {\n const input = (await safeJsonBody(c)) as Parameters<typeof addRefWatch>[0];\n const result = await addRefWatch(input, paths);\n return c.json(result, result.ok ? 200 : 400);\n });\n\n routes.post('/watches/:id/polling', async (c) => {\n const input = {\n ...(await safeJsonObject(c)),\n id: c.req.param('id'),\n } as Parameters<typeof setPrWatchPolling>[0];\n const result = await setPrWatchPolling(input, paths);\n return c.json(result, result.ok ? 200 : 400);\n });\n\n routes.post('/watches/:id', async (c) => {\n const result = await removePrWatch(\n { ...(await safeJsonObject(c)), id: c.req.param('id') },\n paths,\n );\n return c.json(result, result.ok ? 200 : 400);\n });\n\n return routes;\n}\n","import { Hono } from 'hono';\nimport { listWorkflowSummaries } from '../../modules/app-state';\nimport type { RuntimePaths } from '../../runtime-home';\nimport { readWorkflowObservability } from '../../modules/learning';\n\nexport function createWorkflowRoutes(paths: RuntimePaths) {\n const routes = new Hono();\n\n routes.get('/summaries', async (c) => {\n return c.json({\n items: await listWorkflowSummaries(paths),\n fetchedAt: new Date().toISOString(),\n });\n });\n\n routes.get('/observability', async (c) => {\n return c.json(await readWorkflowObservability(paths));\n });\n\n return routes;\n}\n","import { Hono } from 'hono';\nimport type { RuntimePaths } from '../../runtime-home';\nimport {\n cleanupWorktrees,\n createWorktree,\n listWorktrees,\n lockWorktree,\n readWorktreeStatus,\n releaseWorktreeLock,\n syncWorktree,\n} from '../../modules/worktrees';\nimport { safeJsonBody, safeJsonObject } from '../http';\n\nexport function createWorktreeRoutes(paths: RuntimePaths) {\n const routes = new Hono();\n\n routes.get('/worktrees', async (c) => {\n return c.json(await listWorktrees(paths));\n });\n\n routes.post('/worktrees', async (c) => {\n const result = await createWorktree(await safeJsonBody(c), paths);\n return c.json(result, result.ok ? 200 : 400);\n });\n\n routes.get('/worktrees/:id/status', async (c) => {\n const result = await readWorktreeStatus(\n { worktreeId: c.req.param('id') },\n paths,\n );\n return c.json(result, result.ok ? 200 : 400);\n });\n\n routes.post('/worktrees/:id/sync', async (c) => {\n const result = await syncWorktree(\n { ...(await safeJsonObject(c)), worktreeId: c.req.param('id') },\n paths,\n );\n return c.json(result, result.ok ? 200 : 400);\n });\n\n routes.post('/worktrees/:id/lock', async (c) => {\n const result = await lockWorktree(\n { ...(await safeJsonObject(c)), worktreeId: c.req.param('id') },\n paths,\n );\n return c.json(result, result.ok ? 200 : 400);\n });\n\n routes.post('/worktree-locks/:id/release', async (c) => {\n const result = await releaseWorktreeLock(\n { ...(await safeJsonObject(c)), lockId: c.req.param('id') },\n paths,\n );\n return c.json(result, result.ok ? 200 : 400);\n });\n\n routes.post('/worktrees/cleanup', async (c) => {\n const result = await cleanupWorktrees(await safeJsonBody(c), paths);\n return c.json(result, result.ok ? 200 : 400);\n });\n\n return routes;\n}\n","import { registerProvider } from '@flue/runtime';\nimport { flue } from '@flue/runtime/routing';\nimport { serveStatic } from '@hono/node-server/serve-static';\nimport { existsSync } from 'node:fs';\nimport { fileURLToPath } from 'node:url';\nimport { Hono } from 'hono';\nimport { getMcpRegistry } from '../domains/mcp';\nimport { installFlueExecutionContextTracker } from '../modules/flue/execution-context';\nimport { loadNeondeckEnv } from '../modules/runtime';\nimport {\n providerRuntimeRegistrations,\n readProviderConfigSync,\n} from '../modules/repos';\nimport {\n ensureRuntimeHome,\n ensureRuntimeHomeSync,\n type RuntimePaths,\n runtimePaths,\n} from '../runtime-home';\nimport { createConfigEventRoutes } from './events/config-stream';\nimport { createNotificationEventRoutes } from './events/notification-stream';\nimport { createSessionEventRoutes } from './events/session-stream';\nimport {\n displayAssistantLearningMiddleware,\n installFlueObservationHandlers,\n} from './learning-hooks';\nimport {\n requireFlueRunInspectionToken,\n requireLocalApiAccess,\n} from './middleware';\nimport { createAutopilotRoutes } from './routes/autopilot';\nimport { createCommandRoutes } from './routes/commands';\nimport { createConfigRoutes } from './routes/config';\nimport { createExecutionRoutes } from './routes/execution';\nimport { createGitHubRoutes } from './routes/github';\nimport { createHandoffRoutes } from './routes/handoff';\nimport { createKiloRoutes } from './routes/kilo';\nimport { createLearningRoutes } from './routes/learning';\nimport { createMemoryRoutes } from './routes/memory';\nimport { createMetricsRoutes } from './routes/metrics';\nimport { createMcpRoutes } from './routes/mcp';\nimport { createNotificationRoutes } from './routes/notifications';\nimport { createRepoEditRoutes } from './routes/repo-edit';\nimport {\n createReportApiRoutes,\n createReportFileRoutes,\n} from './routes/reports';\nimport { createReposRoutes } from './routes/repos';\nimport { createScheduledTaskRoutes } from './routes/scheduled-tasks';\nimport { createRuntimeRoutes } from './routes/runtime';\nimport { createSafetyRoutes } from './routes/safety';\nimport { createSchedulerRoutes } from './routes/scheduler';\nimport { startSchedulerObservedLoop } from './scheduler-workflow';\nimport { createSessionRoutes } from './routes/sessions';\nimport { createSkillRoutes } from './routes/skills';\nimport { createWatchRoutes } from './routes/watches';\nimport { createWorkflowRoutes } from './routes/workflows';\nimport { createWorktreeRoutes } from './routes/worktrees';\n\nexport type CreateAppOptions = {\n paths?: RuntimePaths;\n staticRoot?: string;\n scheduler?: boolean;\n};\n\nexport async function createApp(options: CreateAppOptions = {}) {\n const paths = options.paths ?? runtimePaths();\n process.env.NEONDECK_HOME = paths.home;\n ensureRuntimeHomeSync(paths);\n loadNeondeckEnv(paths);\n const providerConfig = readProviderConfigSync(paths);\n for (const provider of providerRuntimeRegistrations(\n process.env,\n providerConfig,\n )) {\n registerProvider(provider.id, provider.registration);\n }\n\n const app = new Hono();\n const staticRoot = options.staticRoot ?? resolveStaticRoot();\n\n await ensureRuntimeHome(paths);\n installFlueExecutionContextTracker();\n installFlueObservationHandlers(paths);\n\n if (\n options.scheduler !== false &&\n process.env.NEONDECK_DISABLE_SCHEDULER !== '1'\n ) {\n startSchedulerObservedLoop(paths);\n }\n await getMcpRegistry(paths).start();\n\n app.use('/api/*', requireLocalApiAccess);\n app.use('/reports/*', requireLocalApiAccess);\n\n app.route('/api', createRuntimeRoutes(paths));\n app.route('/api/events', createConfigEventRoutes());\n app.route('/api/events', createNotificationEventRoutes());\n app.route('/api/events', createSessionEventRoutes());\n app.route('/api/safety', createSafetyRoutes(paths));\n app.route('/api/execution', createExecutionRoutes(paths));\n app.route('/api', createSessionRoutes(paths));\n app.route('/api', createConfigRoutes(paths));\n app.route('/api/metrics', createMetricsRoutes());\n app.route('/api/mcp', createMcpRoutes(paths));\n app.route('/api/repos', createReposRoutes(paths));\n app.route('/api', createRepoEditRoutes(paths));\n app.route('/api', createWorktreeRoutes(paths));\n app.route('/api/kilo', createKiloRoutes(paths));\n app.route('/api', createAutopilotRoutes(paths));\n app.route('/api', createHandoffRoutes(paths));\n app.route('/api', createWatchRoutes(paths));\n app.route('/api', createSchedulerRoutes(paths));\n app.route('/api', createScheduledTaskRoutes(paths));\n app.route('/api/notifications', createNotificationRoutes(paths));\n app.route('/api', createMemoryRoutes(paths));\n app.route('/api/learning', createLearningRoutes(paths));\n app.route('/api/skills', createSkillRoutes(paths));\n app.route('/api/commands', createCommandRoutes());\n app.route('/api', createReportApiRoutes(paths));\n app.route('/api/workflows', createWorkflowRoutes(paths));\n app.route('/api/github', createGitHubRoutes(paths));\n\n app.use(\n '/api/flue/agents/display-assistant/*',\n displayAssistantLearningMiddleware(paths),\n );\n\n const requireRunInspection = requireFlueRunInspectionToken(paths);\n app.use('/api/flue/runs', requireRunInspection);\n app.use('/api/flue/runs/*', requireRunInspection);\n app.route('/api/flue', flue());\n app.route('/reports', createReportFileRoutes(paths));\n\n app.use('/assets/*', serveStatic({ root: staticRoot }));\n app.get(\n '/manifest.webmanifest',\n serveStatic({ root: staticRoot, path: 'manifest.webmanifest' }),\n );\n app.use('/icons/*', serveStatic({ root: staticRoot }));\n app.get(\n '/favicon.svg',\n serveStatic({ root: staticRoot, path: 'favicon.svg' }),\n );\n app.get('*', serveStatic({ root: staticRoot, path: 'index.html' }));\n\n return app;\n}\n\nexport function resolveStaticRoot(env = process.env) {\n const candidates = [\n env.NEONDECK_STATIC_ROOT,\n fileURLToPath(new URL('../../web/dist', import.meta.url)),\n fileURLToPath(new URL('../web/dist', import.meta.url)),\n './web/dist',\n ].filter((value): value is string => Boolean(value));\n\n return candidates.find((candidate) => existsSync(candidate)) ?? candidates[0];\n}\n","import { createApp } from './create-app';\n\nexport { createApp, resolveStaticRoot } from './create-app';\n\nexport default await createApp();\n"],"x_google_ignoreList":[0,1,2],"mappings":"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"}
|