neondeck 1.0.0-beta.10
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 +76 -0
- package/DEVELOPMENT.md +304 -0
- package/LICENSE +21 -0
- package/README.md +129 -0
- package/SOUL.md +8 -0
- package/bin/neondeck.mjs +27 -0
- package/config/dashboard.json +224 -0
- package/config/dashboard.schema.json +247 -0
- package/dist/SOUL.md +8 -0
- package/dist/assets/app-CnXGMuTl.js +3878 -0
- package/dist/assets/app-CnXGMuTl.js.map +1 -0
- package/dist/assets/autopilot-B8lfWyA1.js +68813 -0
- package/dist/assets/autopilot-B8lfWyA1.js.map +1 -0
- package/dist/assets/briefing-BT8h9XXT.js +52 -0
- package/dist/assets/briefing-BT8h9XXT.js.map +1 -0
- package/dist/assets/briefing-VMdQPEGc.js +2 -0
- package/dist/assets/briefings-DuApznpN.js +1596 -0
- package/dist/assets/briefings-DuApznpN.js.map +1 -0
- package/dist/assets/command-run-CnPOA8iY.js +20 -0
- package/dist/assets/command-run-CnPOA8iY.js.map +1 -0
- package/dist/assets/command-run-Smpq7waT.js +2 -0
- package/dist/assets/display-assistant-CKU4YJlc.js +392 -0
- package/dist/assets/display-assistant-CKU4YJlc.js.map +1 -0
- package/dist/assets/fix-pr-ci-Ce2SIcyf.js +46 -0
- package/dist/assets/fix-pr-ci-Ce2SIcyf.js.map +1 -0
- package/dist/assets/fix-pr-ci-P3dLxmbx.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 +7126 -0
- package/dist/assets/migrations/20260711171708_conversational_briefings/migration.sql +35 -0
- package/dist/assets/migrations/20260711171708_conversational_briefings/snapshot.json +7458 -0
- package/dist/assets/migrations/20260714191624_worktree_lock_revocation/migration.sql +1 -0
- package/dist/assets/migrations/20260714191624_worktree_lock_revocation/snapshot.json +7468 -0
- package/dist/assets/migrations/20260714213018_pr_reviews/migration.sql +34 -0
- package/dist/assets/migrations/20260714213018_pr_reviews/snapshot.json +7809 -0
- package/dist/assets/pr-reviews-BtJ5cm5P.js +521 -0
- package/dist/assets/pr-reviews-BtJ5cm5P.js.map +1 -0
- package/dist/assets/prepare-pr-worktree-B0qMZMRP.js +2 -0
- package/dist/assets/prepare-pr-worktree-C7SmiaTp.js +17 -0
- package/dist/assets/prepare-pr-worktree-C7SmiaTp.js.map +1 -0
- package/dist/assets/push-pr-autofix-CsMbrnXR.js +17 -0
- package/dist/assets/push-pr-autofix-CsMbrnXR.js.map +1 -0
- package/dist/assets/push-pr-autofix-njuM6ej2.js +2 -0
- package/dist/assets/review-pr-for-human-CEciM46A.js +2 -0
- package/dist/assets/review-pr-for-human-TPiQNRWV.js +790 -0
- package/dist/assets/review-pr-for-human-TPiQNRWV.js.map +1 -0
- package/dist/assets/safety-BQC7exnI.js +1931 -0
- package/dist/assets/safety-BQC7exnI.js.map +1 -0
- package/dist/assets/scheduled-agent-instruction-BbxwCKbU.js +2 -0
- package/dist/assets/scheduled-agent-instruction-C58itQyU.js +22 -0
- package/dist/assets/scheduled-agent-instruction-C58itQyU.js.map +1 -0
- package/dist/assets/scheduler-tick-B2S9jCYS.js +90 -0
- package/dist/assets/scheduler-tick-B2S9jCYS.js.map +1 -0
- package/dist/assets/scheduler-workflow-CnI0tWbg.js +21 -0
- package/dist/assets/scheduler-workflow-CnI0tWbg.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 +127 -0
- package/dist/assets/skills/neondeck-handoff/SKILL.md +31 -0
- package/dist/assets/triage-pr-event-CBje6df5.js +2 -0
- package/dist/assets/triage-pr-event-IgC-IrNs.js +17 -0
- package/dist/assets/triage-pr-event-IgC-IrNs.js.map +1 -0
- package/dist/assets/verify-then-push-pr-autofix-C5Dpomtd.js +75 -0
- package/dist/assets/verify-then-push-pr-autofix-C5Dpomtd.js.map +1 -0
- package/dist/assets/verify-then-push-pr-autofix-oZ0-wa7L.js +2 -0
- package/dist/config/dashboard.json +224 -0
- package/dist/config/dashboard.schema.json +247 -0
- package/dist/server.mjs +583 -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 +127 -0
- package/dist/skills/neondeck-handoff/SKILL.md +31 -0
- package/drizzle.config.ts +7 -0
- package/package.json +156 -0
- package/shared/patch-anchors.ts +78 -0
- package/shared/report-document.ts +91 -0
- package/src/agents/busywork-workflow.ts +24 -0
- package/src/agents/display-assistant.ts +137 -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 +666 -0
- package/src/cli/options.ts +102 -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 +4 -0
- package/src/modules/app-state/notification-events.ts +44 -0
- package/src/modules/app-state/notifications.ts +259 -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 +186 -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 +718 -0
- package/src/modules/autopilot/comments.ts +426 -0
- package/src/modules/autopilot/fixtures.ts +344 -0
- package/src/modules/autopilot/github-facts.ts +306 -0
- package/src/modules/autopilot/index.ts +64 -0
- package/src/modules/autopilot/notifications.ts +271 -0
- package/src/modules/autopilot/push-support.ts +260 -0
- package/src/modules/autopilot/push.ts +670 -0
- package/src/modules/autopilot/recovery.ts +656 -0
- package/src/modules/autopilot/review-feedback.ts +649 -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 +517 -0
- package/src/modules/autopilot/state-schemas.ts +450 -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 +637 -0
- package/src/modules/autopilot-policy/config.ts +101 -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 +229 -0
- package/src/modules/autopilot-policy/service.ts +272 -0
- package/src/modules/briefings/actions.ts +80 -0
- package/src/modules/briefings/index.ts +5 -0
- package/src/modules/briefings/schemas.ts +125 -0
- package/src/modules/briefings/service.ts +642 -0
- package/src/modules/briefings/snapshot.ts +291 -0
- package/src/modules/briefings/store.ts +644 -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 +367 -0
- package/src/modules/commands/handlers/queue.ts +710 -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 +109 -0
- package/src/modules/commands/summaries.ts +108 -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 +333 -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 +663 -0
- package/src/modules/config/read.ts +130 -0
- package/src/modules/config/result.ts +66 -0
- package/src/modules/config/schemas.ts +180 -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 +40 -0
- package/src/modules/flue/index.ts +2 -0
- package/src/modules/flue/origin.ts +7 -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 +93 -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 +411 -0
- package/src/modules/github/queue.ts +350 -0
- package/src/modules/github/reviews.ts +1446 -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 +46 -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 +239 -0
- package/src/modules/pr-review-assist/index.ts +3 -0
- package/src/modules/pr-review-assist/schemas.ts +86 -0
- package/src/modules/pr-review-assist/service.ts +706 -0
- package/src/modules/pr-reviews/events.ts +39 -0
- package/src/modules/pr-reviews/index.ts +4 -0
- package/src/modules/pr-reviews/service.ts +655 -0
- package/src/modules/pr-reviews/store.ts +186 -0
- package/src/modules/pr-reviews/types.ts +48 -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 +791 -0
- package/src/modules/prepared-diffs/store.ts +678 -0
- package/src/modules/repo-guardrails/config.ts +61 -0
- package/src/modules/repo-guardrails/index.ts +162 -0
- package/src/modules/repo-guardrails/risk.ts +2 -0
- package/src/modules/reports/index.ts +1 -0
- package/src/modules/reports/service.ts +337 -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 +481 -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 +2528 -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 +107 -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 +192 -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 +48 -0
- package/src/modules/sessions/actions.ts +213 -0
- package/src/modules/sessions/active-session.ts +46 -0
- package/src/modules/sessions/activity.ts +122 -0
- package/src/modules/sessions/agent-context.ts +152 -0
- package/src/modules/sessions/approval-nudges.ts +156 -0
- package/src/modules/sessions/events.ts +57 -0
- package/src/modules/sessions/index.ts +12 -0
- package/src/modules/sessions/queries.ts +252 -0
- package/src/modules/sessions/references.ts +113 -0
- package/src/modules/sessions/repo-context.ts +131 -0
- package/src/modules/sessions/schemas.ts +285 -0
- package/src/modules/sessions/service.ts +845 -0
- package/src/modules/sessions/store.ts +560 -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 +557 -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/ensure-pr-worktree.ts +63 -0
- package/src/modules/worktrees/errors.ts +38 -0
- package/src/modules/worktrees/git.ts +48 -0
- package/src/modules/worktrees/index.ts +7 -0
- package/src/modules/worktrees/locks.ts +231 -0
- package/src/modules/worktrees/paths.ts +209 -0
- package/src/modules/worktrees/push-target.ts +39 -0
- package/src/modules/worktrees/queries.ts +31 -0
- package/src/modules/worktrees/schemas.ts +237 -0
- package/src/modules/worktrees/service.ts +680 -0
- package/src/modules/worktrees/store.ts +415 -0
- package/src/repo-edit/actions.ts +509 -0
- package/src/repo-edit/audit.ts +180 -0
- package/src/repo-edit/fuzzy-replace.ts +256 -0
- package/src/repo-edit/git.ts +830 -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 +299 -0
- package/src/repo-edit/schemas.ts +239 -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 +74 -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 +7126 -0
- package/src/runtime-home/app-db/migrations/20260711171708_conversational_briefings/migration.sql +35 -0
- package/src/runtime-home/app-db/migrations/20260711171708_conversational_briefings/snapshot.json +7458 -0
- package/src/runtime-home/app-db/migrations/20260714191624_worktree_lock_revocation/migration.sql +1 -0
- package/src/runtime-home/app-db/migrations/20260714191624_worktree_lock_revocation/snapshot.json +7468 -0
- package/src/runtime-home/app-db/migrations/20260714213018_pr_reviews/migration.sql +34 -0
- package/src/runtime-home/app-db/migrations/20260714213018_pr_reviews/snapshot.json +7809 -0
- package/src/runtime-home/app-db/reconcile.ts +155 -0
- package/src/runtime-home/app-db/schema.ts +1209 -0
- package/src/runtime-home/bootstrap.ts +177 -0
- package/src/runtime-home/dashboard-migrations.ts +101 -0
- package/src/runtime-home/defaults.ts +54 -0
- package/src/runtime-home/files.ts +193 -0
- package/src/runtime-home/guardrails.ts +77 -0
- package/src/runtime-home/index.ts +71 -0
- package/src/runtime-home/paths.ts +75 -0
- package/src/runtime-home/schemas.ts +520 -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/event-stream.ts +109 -0
- package/src/server/http.ts +56 -0
- package/src/server/learning-hooks.ts +489 -0
- package/src/server/middleware.ts +81 -0
- package/src/server/routes/autopilot.ts +318 -0
- package/src/server/routes/briefings.ts +34 -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 +559 -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 +128 -0
- package/src/server/routes/repos.ts +50 -0
- package/src/server/routes/reviews.ts +257 -0
- package/src/server/routes/runtime.ts +48 -0
- package/src/server/routes/safety.ts +13 -0
- package/src/server/routes/scheduled-tasks.ts +60 -0
- package/src/server/routes/scheduler.ts +13 -0
- package/src/server/routes/sessions.ts +229 -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 +127 -0
- package/src/skills/neondeck-handoff/SKILL.md +31 -0
- package/src/workflows/briefing.ts +50 -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-Bf8PXCaq.js +3 -0
- package/web/dist/assets/MultiFileView-CFYStqTV.js +2970 -0
- package/web/dist/assets/PrReviewPopoutPage-CZN1CV82.js +1 -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/ccount-CMHa3wy6.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-BTjK1c82.js +44 -0
- package/web/dist/assets/index-D0kg2-9O.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/kilo-CvN-tXHs.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/reviews-CUXp47M8.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-Dlg1xLbg.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-05jVtNwz.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 +27 -0
- package/web/dist/manifest.webmanifest +28 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"safety-BQC7exnI.js","names":[],"sources":["../../src/modules/commands/schemas.ts","../../src/modules/commands/registry.ts","../../src/modules/commands/handlers/misc.ts","../../src/modules/commands/handlers/repo.ts","../../src/modules/commands/runner.ts","../../src/modules/commands/actions.ts","../../src/modules/scheduler/schemas.ts","../../src/modules/scheduler/lease.ts","../../src/modules/scheduler/service.ts","../../src/modules/scheduler/actions.ts","../../src/modules/safety/schemas.ts","../../src/modules/safety/policy-entries.ts","../../src/modules/safety/service.ts","../../src/modules/safety/tools.ts"],"sourcesContent":["import type { JsonValue } from '@flue/runtime';\nimport type { WorkflowSummaryRecord } from '../app-state';\nimport type { fetchGitHubLogin, fetchPullRequestQueue } from '../github';\nimport type { CiFixRunInput, createCiFailureDossierReport } from '../autopilot';\nimport type { PrReviewAssistInput } from '../pr-review-assist';\nimport type { startPrReview } from '../pr-reviews';\nimport type { addPrWatch } from '../watches';\nimport * as v from 'valibot';\n\nexport type NeonCommandName =\n | 'repo-status'\n | 'review-queue'\n | 'review-pr'\n | 'fix-ci'\n | 'explain-ci'\n | 'summarize-pr'\n | 'draft-pr-description'\n | 'prepare-pr'\n | 'review-local'\n | 'briefing'\n | 'reasoning'\n | 'memory'\n | 'watch-pr'\n | 'dev-doctor';\n\nexport type ParsedNeonCommand = {\n name: NeonCommandName;\n args: string[];\n raw: string;\n};\n\nexport type NeonCommandResult = {\n ok: boolean;\n command: NeonCommandName;\n input: string;\n status: 'running' | 'completed' | 'failed' | 'needs-config';\n message: string;\n data?: JsonValue;\n errors?: string[];\n requires?: string[];\n workflowSummary?: WorkflowSummaryRecord;\n};\n\nexport type CommandDependencies = {\n fetchPullRequestQueue?: typeof fetchPullRequestQueue;\n fetchGitHubLogin?: typeof fetchGitHubLogin;\n invokeReviewPrWorkflow?: (\n input: PrReviewAssistInput,\n ) => Promise<{ runId: string }>;\n startPrReview?: typeof startPrReview;\n invokeFixCiWorkflow?: (input: CiFixRunInput) => Promise<{ runId: string }>;\n createCiFailureDossierReport?: typeof createCiFailureDossierReport;\n addPrWatch?: typeof addPrWatch;\n};\n\nexport type CommandExecutionContext = {\n sessionId?: string;\n surface?: string;\n};\n\nexport type ReviewQueueAction = {\n title: string;\n reason: string;\n priority: 'urgent' | 'high' | 'medium' | 'low';\n url?: string | null;\n repo?: string;\n number?: number;\n};\n\nexport const commandRunInputSchema = v.object({\n command: v.pipe(v.string(), v.minLength(1)),\n sessionId: v.optional(v.pipe(v.string(), v.minLength(1))),\n surface: v.optional(v.pipe(v.string(), v.minLength(1), v.maxLength(64))),\n});\nexport const workflowSummaryRecordSchema = v.looseObject({\n id: v.string(),\n workflow: v.string(),\n runId: v.nullable(v.string()),\n status: v.string(),\n summary: v.nullable(v.unknown()),\n createdAt: v.string(),\n updatedAt: v.string(),\n});\nexport const supportedCommandSchema = v.object({\n name: v.string(),\n usage: v.string(),\n description: v.string(),\n});\nexport const commandRunOutputSchema = v.looseObject({\n ok: v.boolean(),\n command: v.string(),\n input: v.string(),\n status: v.picklist(['running', 'completed', 'failed', 'needs-config']),\n message: v.string(),\n data: v.optional(v.unknown()),\n errors: v.optional(v.array(v.string())),\n requires: v.optional(v.array(v.string())),\n workflowSummary: v.optional(workflowSummaryRecordSchema),\n});\nexport const commandActionOutputSchema = v.looseObject({\n ok: v.boolean(),\n action: v.string(),\n changed: v.boolean(),\n message: v.optional(v.string()),\n commands: v.optional(v.array(supportedCommandSchema)),\n summaries: v.optional(v.array(workflowSummaryRecordSchema)),\n errors: v.optional(v.array(v.string())),\n requires: v.optional(v.array(v.string())),\n});\n","import type { NeonCommandName, ParsedNeonCommand } from './schemas';\n\nexport function supportedCommands() {\n return [\n {\n name: 'repo-status',\n usage: '/repo-status [repo-id]',\n description: 'Inspect local git status for configured repositories.',\n },\n {\n name: 'review-queue',\n usage: '/review-queue',\n description: 'Fetch and summarize the configured GitHub PR queue.',\n },\n {\n name: 'review-pr',\n usage: '/review-pr <repo#number|owner/repo#number|url>',\n description:\n 'Prepare local PR review reports and Neon-origin draft comments for a human reviewer.',\n },\n {\n name: 'fix-ci',\n usage: '/fix-ci [repo#number|owner/repo#number]',\n description:\n 'Queue a bounded CI fix workflow for a PR with failing checks.',\n },\n {\n name: 'explain-ci',\n usage: '/explain-ci [--report] [repo#number|owner/repo#number]',\n description:\n 'Explain deterministic CI/check status for a PR before agent reasoning, optionally writing a local dossier report.',\n },\n {\n name: 'summarize-pr',\n usage: '/summarize-pr [repo#number|owner/repo#number]',\n description: 'Summarize PR facts from the GitHub queue.',\n },\n {\n name: 'draft-pr-description',\n usage: '/draft-pr-description [repo-id|owner/repo]',\n description:\n 'Draft a PR description scaffold from local repo status and configured metadata.',\n },\n {\n name: 'prepare-pr',\n usage: '/prepare-pr [repo-id|owner/repo]',\n description:\n 'Prepare a local repo for PR creation with deterministic readiness checks.',\n },\n {\n name: 'review-local',\n usage: '/review-local [repo-id|owner/repo]',\n description:\n 'Review local working tree status and call out deterministic risks.',\n },\n {\n name: 'briefing',\n usage: '/briefing',\n description:\n 'Summarize repos, watches, scheduled tasks, notifications, and PR queue readiness.',\n },\n {\n name: 'reasoning',\n usage: '/reasoning [off|minimal|low|medium|high|xhigh]',\n description:\n 'Show or change the active Neon session reasoning level for the selected display model.',\n },\n {\n name: 'memory',\n usage:\n '/memory [scope] | /memory learn <user|local|project> <key> <json-or-text> | /memory archive <scope> <key>',\n description:\n 'List or mutate durable structured memory through typed memory actions.',\n },\n {\n name: 'watch-pr',\n usage: '/watch-pr <repo#number|owner/repo#number|url>',\n description: 'Create a persistent PR watch.',\n },\n {\n name: 'dev-doctor',\n usage: '/dev-doctor',\n description:\n 'Inspect local repo, package, env, port, server, and database health.',\n },\n ];\n}\n\nexport function parseNeonCommand(\n input: string,\n):\n | { ok: true; command: ParsedNeonCommand }\n | { ok: false; error: string; requires?: string[] } {\n const trimmed = input.trim();\n if (!trimmed.startsWith('/')) {\n return {\n ok: false,\n error: 'Neon commands must start with slash.',\n requires: ['command'],\n };\n }\n\n const [head, ...args] = splitCommand(trimmed.slice(1));\n if (!head) {\n return {\n ok: false,\n error: 'A command name is required.',\n requires: ['command'],\n };\n }\n\n if (!isCommandName(head)) {\n return {\n ok: false,\n error: `Unknown Neon command \"/${head}\".`,\n requires: ['supportedCommand'],\n };\n }\n\n return {\n ok: true,\n command: {\n name: head,\n args,\n raw: trimmed,\n },\n };\n}\n\nexport function splitCommand(input: string) {\n const parts = input.match(/\"[^\"]*\"|'[^']*'|\\S+/g) ?? [];\n return parts.map((part) =>\n (part.startsWith('\"') && part.endsWith('\"')) ||\n (part.startsWith(\"'\") && part.endsWith(\"'\"))\n ? part.slice(1, -1)\n : part,\n );\n}\n\nexport function isCommandName(value: string): value is NeonCommandName {\n return [\n 'repo-status',\n 'review-queue',\n 'review-pr',\n 'fix-ci',\n 'explain-ci',\n 'summarize-pr',\n 'draft-pr-description',\n 'prepare-pr',\n 'review-local',\n 'briefing',\n 'reasoning',\n 'memory',\n 'watch-pr',\n 'dev-doctor',\n ].includes(value);\n}\n","import { readAgentModelSelectionSync, isThinkingLevel } from '../../runtime';\nimport { updateAgentModels } from '../../config';\nimport { runDevDoctor } from '../../runtime';\nimport { archiveMemory, listMemories, upsertMemory } from '../../memory';\nimport {\n readChatSession,\n readNeonSessionState,\n createChatSession,\n type ChatSessionRecord,\n} from '../../sessions';\nimport { addPrWatch } from '../../watches';\nimport { collectBriefingSnapshot } from '../../briefings';\nimport type { RuntimePaths } from '../../../runtime-home';\nimport type {\n CommandExecutionContext,\n NeonCommandResult,\n ParsedNeonCommand,\n CommandDependencies,\n} from '../schemas';\nimport { completedCommand, failedCommand } from '../summaries';\nimport {\n formatList,\n isActiveMemoryScope,\n isMemoryScope,\n parseMemoryValue,\n readStringArrayProperty,\n supportedReasoningLevelsForModel,\n} from '../utils';\n\nexport async function briefingCommand(\n command: ParsedNeonCommand,\n paths: RuntimePaths,\n dependencies: CommandDependencies,\n): Promise<NeonCommandResult> {\n const snapshot = await collectBriefingSnapshot(paths, dependencies);\n\n return completedCommand(\n command.name,\n command.raw,\n 'Prepared deterministic briefing snapshot.',\n { snapshot },\n );\n}\n\nexport async function reasoningCommand(\n command: ParsedNeonCommand,\n paths: RuntimePaths,\n): Promise<NeonCommandResult> {\n const models = readAgentModelSelectionSync(paths);\n const supportedLevels = supportedReasoningLevelsForModel(\n models.displayAssistant,\n );\n const requestedLevel = command.args[0]?.toLowerCase();\n\n if (!requestedLevel) {\n return completedCommand(\n command.name,\n command.raw,\n `Current reasoning is ${models.displayAssistantThinkingLevel} for ${models.displayAssistant}.`,\n {\n model: models.displayAssistant,\n thinkingLevel: models.displayAssistantThinkingLevel,\n supportedLevels,\n usage: '/reasoning [off|minimal|low|medium|high|xhigh]',\n },\n );\n }\n\n if (!isThinkingLevel(requestedLevel)) {\n return failedCommand(\n command.name,\n command.raw,\n `Unknown reasoning level \"${requestedLevel}\".`,\n {\n requires: ['reasoningLevel'],\n data: {\n model: models.displayAssistant,\n currentLevel: models.displayAssistantThinkingLevel,\n supportedLevels,\n },\n },\n );\n }\n\n if (!supportedLevels.includes(requestedLevel)) {\n return failedCommand(\n command.name,\n command.raw,\n `${models.displayAssistant} supports ${formatList(supportedLevels)} reasoning, not \"${requestedLevel}\".`,\n {\n requires: ['reasoningLevel'],\n data: {\n model: models.displayAssistant,\n currentLevel: models.displayAssistantThinkingLevel,\n requestedLevel,\n supportedLevels,\n },\n },\n );\n }\n\n const update = await updateAgentModels(\n { displayAssistantThinkingLevel: requestedLevel },\n paths,\n );\n if (!update.ok) {\n return failedCommand(command.name, command.raw, update.message, {\n errors: update.errors,\n requires: update.requires,\n });\n }\n\n const session = update.changed\n ? await createChatSession(\n {\n title: `Reasoning ${requestedLevel}`,\n reason: `reasoning-level:${requestedLevel}`,\n surface: 'dashboard',\n activate: true,\n },\n paths,\n )\n : undefined;\n const nextModels = readAgentModelSelectionSync(paths);\n\n return completedCommand(\n command.name,\n command.raw,\n update.changed\n ? `Set reasoning to ${requestedLevel} for ${models.displayAssistant} and started a fresh Neon session.`\n : `Reasoning is already ${requestedLevel} for ${models.displayAssistant}.`,\n {\n model: models.displayAssistant,\n previousLevel: models.displayAssistantThinkingLevel,\n thinkingLevel: nextModels.displayAssistantThinkingLevel,\n supportedLevels,\n sessionStarted: Boolean(session?.ok),\n session: session && 'state' in session ? session.state : null,\n },\n );\n}\n\nexport async function memoryCommand(\n command: ParsedNeonCommand,\n paths: RuntimePaths,\n): Promise<NeonCommandResult> {\n const [operation, ...rest] = command.args;\n\n if (!operation || isMemoryScope(operation)) {\n const result = await listMemories(\n {\n scope: isMemoryScope(operation) ? operation : undefined,\n },\n paths,\n );\n return completedCommand(\n command.name,\n command.raw,\n result.memories.length === 0\n ? 'No durable memory entries matched.'\n : `Listed ${result.memories.length} durable memory entr${result.memories.length === 1 ? 'y' : 'ies'}.`,\n result,\n );\n }\n\n if (operation === 'learn') {\n const [scope, key, ...valueParts] = rest;\n if (!isActiveMemoryScope(scope) || !key || valueParts.length === 0) {\n return failedCommand(\n command.name,\n command.raw,\n '/memory learn requires user, local, or project scope, key, and a JSON-safe value.',\n {\n requires: ['scope', 'key', 'value'],\n },\n );\n }\n\n const result = await upsertMemory(\n {\n scope,\n key,\n value: parseMemoryValue(valueParts.join(' ')),\n },\n paths,\n );\n if (!result.ok) {\n return failedCommand(command.name, command.raw, result.message, {\n requires: readStringArrayProperty(result, 'requires'),\n errors: readStringArrayProperty(result, 'errors'),\n data: result,\n });\n }\n\n return completedCommand(command.name, command.raw, result.message, result);\n }\n\n if (operation === 'archive') {\n const [scope, key] = rest;\n if (!isActiveMemoryScope(scope) || !key) {\n return failedCommand(\n command.name,\n command.raw,\n '/memory archive requires scope and key.',\n {\n requires: ['scope', 'key'],\n },\n );\n }\n\n const result = await archiveMemory(\n {\n scope,\n key,\n },\n paths,\n );\n if (!result.ok) {\n return failedCommand(command.name, command.raw, result.message, {\n requires: readStringArrayProperty(result, 'requires'),\n data: result,\n });\n }\n\n return completedCommand(command.name, command.raw, result.message, result);\n }\n\n return failedCommand(\n command.name,\n command.raw,\n `Unknown /memory operation \"${operation}\".`,\n {\n requires: ['memoryOperation'],\n data: {\n usage:\n '/memory [scope] | /memory learn <user|local|project> <key> <json-or-text> | /memory archive <scope> <key>',\n },\n },\n );\n}\n\nexport async function watchPrCommand(\n command: ParsedNeonCommand,\n paths: RuntimePaths,\n dependencies: CommandDependencies = {},\n context: CommandExecutionContext = {},\n): Promise<NeonCommandResult> {\n const explicitRef = command.args.join(' ').trim();\n const inferredRef = explicitRef\n ? null\n : await inferWatchPrReferenceFromContext(paths, context);\n const ref = explicitRef || inferredRef;\n if (!ref) {\n return failedCommand(\n command.name,\n command.raw,\n '/watch-pr requires a PR reference.',\n {\n requires: ['ref'],\n },\n );\n }\n\n const watch = await (dependencies.addPrWatch ?? addPrWatch)({ ref }, paths);\n if (!watch.ok) {\n return failedCommand(command.name, command.raw, watch.message, {\n errors: watch.errors,\n requires: watch.requires,\n data: { watch },\n });\n }\n\n return completedCommand(command.name, command.raw, watch.message, {\n watch: watch.watch,\n ...(inferredRef ? { inferredRef } : {}),\n });\n}\n\nasync function inferWatchPrReferenceFromContext(\n paths: RuntimePaths,\n context: CommandExecutionContext,\n) {\n const session = await readWatchPrContextSession(paths, context);\n return session ? inferWatchPrReferenceFromSession(session) : null;\n}\n\nasync function readWatchPrContextSession(\n paths: RuntimePaths,\n context: CommandExecutionContext,\n) {\n if (context.sessionId) {\n const result = await readChatSession(\n {\n id: context.sessionId,\n reason: 'watch-pr-command-context',\n },\n paths,\n );\n return result.ok && 'session' in result ? result.session : undefined;\n }\n\n if (context.surface) {\n const state = await readNeonSessionState(paths, context.surface);\n return state.activeChatSession;\n }\n\n return undefined;\n}\n\nexport function inferWatchPrReferenceFromSession(\n session: Pick<\n ChatSessionRecord,\n 'linkedTaskId' | 'uiMetadata' | 'title' | 'summary'\n >,\n) {\n const linkedTaskMatch = session.linkedTaskId\n ?.trim()\n .match(/^github-pr:([^#\\s]+\\/[^#\\s]+#\\d+)$/);\n if (linkedTaskMatch) return linkedTaskMatch[1];\n\n if (isRecord(session.uiMetadata)) {\n const repo =\n readMetadataString(session.uiMetadata.repo) ??\n readMetadataString(session.uiMetadata.repoFullName);\n const prNumber = readMetadataPrNumber(session.uiMetadata.prNumber);\n if (repo && prNumber) return `${repo}#${prNumber}`;\n\n const url = readMetadataString(session.uiMetadata.url);\n if (\n url &&\n /^https:\\/\\/github\\.com\\/[^/\\s]+\\/[^/\\s]+\\/pull\\/\\d+\\/?$/i.test(url)\n ) {\n return url;\n }\n }\n\n return null;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value && typeof value === 'object' && !Array.isArray(value));\n}\n\nfunction readMetadataString(value: unknown) {\n return typeof value === 'string' && value.trim() ? value.trim() : null;\n}\n\nfunction readMetadataPrNumber(value: unknown) {\n if (typeof value === 'number' && Number.isInteger(value) && value > 0) {\n return value;\n }\n\n if (typeof value === 'string' && /^\\d+$/.test(value.trim())) {\n return Number(value.trim());\n }\n\n return null;\n}\n\nexport async function devDoctorCommand(\n command: ParsedNeonCommand,\n paths: RuntimePaths,\n): Promise<NeonCommandResult> {\n const doctor = await runDevDoctor(paths);\n\n return completedCommand(command.name, command.raw, doctor.message, doctor);\n}\n","import {\n readGitDiffSummary,\n readGitRepoStatus,\n readRepoRegistrySnapshot,\n repoFullName,\n} from '../../repos';\nimport type { RuntimePaths } from '../../../runtime-home';\nimport type { NeonCommandResult, ParsedNeonCommand } from '../schemas';\nimport { completedCommand, failedCommand } from '../summaries';\n\nexport async function repoStatusCommand(\n command: ParsedNeonCommand,\n paths: RuntimePaths,\n): Promise<NeonCommandResult> {\n const registry = await readRepoRegistrySnapshot(paths);\n const target = command.args[0];\n const repos = target\n ? registry.repos.filter(\n (repo) =>\n repo.id === target ||\n repoFullName(repo).toLowerCase() === target.toLowerCase(),\n )\n : registry.repos;\n\n if (target && repos.length === 0) {\n return failedCommand(\n command.name,\n command.raw,\n `Repository \"${target}\" is not configured.`,\n { requires: ['repo'] },\n );\n }\n\n const statuses = await Promise.all(repos.map(readGitRepoStatus));\n return completedCommand(\n command.name,\n command.raw,\n repos.length === 0\n ? 'No repositories are configured.'\n : `Checked ${statuses.length} configured repositor${\n statuses.length === 1 ? 'y' : 'ies'\n }.`,\n {\n home: registry.home,\n repos: statuses,\n attention: statuses.filter((repo) => repo.dirty || repo.error),\n },\n );\n}\n\nexport async function draftPrDescriptionCommand(\n command: ParsedNeonCommand,\n paths: RuntimePaths,\n): Promise<NeonCommandResult> {\n const resolved = await resolveCommandRepo(command, paths);\n if (!resolved.ok) {\n return failedCommand(command.name, command.raw, resolved.message, {\n requires: resolved.requires,\n data: resolved.data,\n });\n }\n\n const health = await readGitRepoStatus(resolved.repo);\n const draft = {\n title: `${resolved.repo.id}: <short change summary>`,\n body: [\n '## Summary',\n '- <what changed>',\n '',\n '## Validation',\n ...validationChecklist(resolved.repo).map((item) => `- [ ] ${item}`),\n '',\n '## Risk',\n `- Working tree: ${health.dirty ? `${health.changeCount} uncommitted change${health.changeCount === 1 ? '' : 's'}` : 'clean'}`,\n `- Branch: ${health.branch ?? 'unknown'} -> ${resolved.repo.defaultBranch}`,\n ].join('\\n'),\n };\n\n return completedCommand(\n command.name,\n command.raw,\n `Prepared a PR description scaffold for ${resolved.repo.id}.`,\n {\n repo: resolved.repo,\n health,\n draft,\n assistantBrief:\n 'Use this scaffold as a draft only. Ask for diff details or run local review before making specific claims about changed behavior.',\n },\n );\n}\n\nexport async function preparePrCommand(\n command: ParsedNeonCommand,\n paths: RuntimePaths,\n): Promise<NeonCommandResult> {\n const resolved = await resolveCommandRepo(command, paths);\n if (!resolved.ok) {\n return failedCommand(command.name, command.raw, resolved.message, {\n requires: resolved.requires,\n data: resolved.data,\n });\n }\n\n const health = await readGitRepoStatus(resolved.repo);\n const checks = preparePrChecks(resolved.repo, health);\n\n return completedCommand(\n command.name,\n command.raw,\n `Prepared PR readiness checklist for ${resolved.repo.id}.`,\n {\n repo: resolved.repo,\n health,\n checks,\n ready: checks.every((item) => item.status === 'ok'),\n assistantBrief:\n 'Use these deterministic readiness checks before recommending PR creation. Do not run host commands unless a future approved action exists.',\n },\n );\n}\n\nexport async function reviewLocalCommand(\n command: ParsedNeonCommand,\n paths: RuntimePaths,\n): Promise<NeonCommandResult> {\n const resolved = await resolveCommandRepo(command, paths);\n if (!resolved.ok) {\n return failedCommand(command.name, command.raw, resolved.message, {\n requires: resolved.requires,\n data: resolved.data,\n });\n }\n\n const health = await readGitRepoStatus(resolved.repo);\n const diff = await readGitDiffSummary(resolved.repo);\n const findings = localReviewFindings(resolved.repo, health, diff);\n\n return completedCommand(\n command.name,\n command.raw,\n findings.length > 0\n ? `Found ${findings.length} local review finding${findings.length === 1 ? '' : 's'} for ${resolved.repo.id}.`\n : `No deterministic local review findings for ${resolved.repo.id}.`,\n {\n repo: resolved.repo,\n health,\n diff,\n findings,\n assistantBrief:\n 'Lead with these deterministic local findings and diff metadata. This is still not a semantic code review because file contents were not read by this command.',\n },\n );\n}\n\nexport async function resolveCommandRepo(\n command: ParsedNeonCommand,\n paths: RuntimePaths,\n): Promise<\n | {\n ok: true;\n repo: Awaited<\n ReturnType<typeof readRepoRegistrySnapshot>\n >['repos'][number];\n }\n | {\n ok: false;\n message: string;\n requires?: string[];\n data?: unknown;\n }\n> {\n const registry = await readRepoRegistrySnapshot(paths);\n const target = command.args.join(' ').trim();\n if (registry.repos.length === 0) {\n return {\n ok: false,\n message: 'No repositories are configured.',\n requires: ['repo'],\n };\n }\n\n if (!target) {\n if (registry.repos.length === 1) {\n return { ok: true, repo: registry.repos[0] };\n }\n\n return {\n ok: false,\n message: 'A repository id or owner/repo is required.',\n requires: ['repo'],\n data: { repos: registry.repos.map((repo) => repo.id) },\n };\n }\n\n const repo = registry.repos.find(\n (item) =>\n item.id === target ||\n item.github.name === target ||\n repoFullName(item).toLowerCase() === target.toLowerCase(),\n );\n if (!repo) {\n return {\n ok: false,\n message: `Repository \"${target}\" is not configured.`,\n requires: ['repo'],\n data: { repos: registry.repos.map((item) => item.id) },\n };\n }\n\n return { ok: true, repo };\n}\n\nexport function validationChecklist(\n repo: Awaited<ReturnType<typeof readRepoRegistrySnapshot>>['repos'][number],\n) {\n const scripts = repo.packageScripts ?? {};\n const preferred = ['format:check', 'lint', 'typecheck', 'test', 'check'];\n const available = preferred.filter((script) => scripts[script]);\n if (available.length > 0) {\n return available.map((script) => `npm run ${script}`);\n }\n\n return ['Run the project validation command for this repo.'];\n}\n\nexport function preparePrChecks(\n repo: Awaited<ReturnType<typeof readRepoRegistrySnapshot>>['repos'][number],\n health: Awaited<ReturnType<typeof readGitRepoStatus>>,\n) {\n return [\n {\n id: 'working-tree',\n status: health.error || health.dirty ? 'attention' : 'ok',\n message: health.error\n ? `Git status failed: ${health.error}`\n : health.dirty\n ? `${health.changeCount} local change${health.changeCount === 1 ? '' : 's'} need review before PR creation.`\n : 'Working tree is clean.',\n },\n {\n id: 'branch',\n status:\n health.branch && health.branch !== repo.defaultBranch\n ? 'ok'\n : 'attention',\n message: health.branch\n ? health.branch === repo.defaultBranch\n ? `Current branch is the default branch (${repo.defaultBranch}).`\n : `Current branch is ${health.branch}.`\n : 'Current branch is unknown.',\n },\n {\n id: 'upstream',\n status:\n health.ahead === null && health.behind === null ? 'attention' : 'ok',\n message:\n health.ahead === null && health.behind === null\n ? 'No upstream tracking branch was detected.'\n : `Ahead ${health.ahead ?? 0}, behind ${health.behind ?? 0}.`,\n },\n {\n id: 'validation',\n status: 'attention',\n message: `Run validation before opening PR: ${validationChecklist(repo).join(', ')}.`,\n },\n ];\n}\n\nexport function localReviewFindings(\n repo: Awaited<ReturnType<typeof readRepoRegistrySnapshot>>['repos'][number],\n health: Awaited<ReturnType<typeof readGitRepoStatus>>,\n diff: Awaited<ReturnType<typeof readGitDiffSummary>>,\n) {\n const findings: Array<{\n severity: 'high' | 'medium' | 'low';\n title: string;\n message: string;\n }> = [];\n\n if (health.error) {\n findings.push({\n severity: 'high',\n title: 'Git status unavailable',\n message: health.error,\n });\n return findings;\n }\n\n if (health.branch === repo.defaultBranch) {\n findings.push({\n severity: 'medium',\n title: 'Working on default branch',\n message: `Current branch is ${repo.defaultBranch}; create a topic branch before PR prep.`,\n });\n }\n\n if (health.behind && health.behind > 0) {\n findings.push({\n severity: 'medium',\n title: 'Branch is behind upstream',\n message: `Branch is ${health.behind} commit${health.behind === 1 ? '' : 's'} behind upstream.`,\n });\n }\n\n if (health.dirty) {\n findings.push({\n severity: 'low',\n title: 'Uncommitted changes present',\n message: `${health.changeCount} local change${health.changeCount === 1 ? '' : 's'} detected: ${health.changes.slice(0, 5).join(', ')}`,\n });\n }\n\n if (!diff.ok) {\n findings.push({\n severity: 'medium',\n title: 'Diff summary unavailable',\n message: diff.error ?? 'Could not read git diff metadata.',\n });\n }\n\n if (diff.fileCount > 15) {\n findings.push({\n severity: 'medium',\n title: 'Large local diff',\n message: `${diff.fileCount} files changed with ${diff.additions} additions and ${diff.deletions} deletions.`,\n });\n }\n\n if (diff.binaryFiles > 0) {\n findings.push({\n severity: 'low',\n title: 'Binary files changed',\n message: `${diff.binaryFiles} changed file${diff.binaryFiles === 1 ? ' is' : 's are'} binary or uncounted by git numstat.`,\n });\n }\n\n return findings;\n}\n","import * as v from 'valibot';\nimport { addWorkflowSummary } from '../app-state';\nimport {\n ensureRuntimeHome,\n runtimePaths,\n type RuntimePaths,\n} from '../../runtime-home';\nimport type {\n CommandExecutionContext,\n CommandDependencies,\n NeonCommandResult,\n ParsedNeonCommand,\n} from './schemas';\nimport { commandRunInputSchema } from './schemas';\nimport { parseNeonCommand } from './registry';\nimport {\n briefingCommand,\n devDoctorCommand,\n draftPrDescriptionCommand,\n explainCiCommand,\n fixCiCommand,\n memoryCommand,\n preparePrCommand,\n reasoningCommand,\n repoStatusCommand,\n reviewPrCommand,\n reviewLocalCommand,\n reviewQueueCommand,\n summarizePrCommand,\n watchPrCommand,\n} from './handlers';\nimport { compactCommandSummary, failedCommand } from './summaries';\n\nexport async function runNeonCommand(\n input: v.InferInput<typeof commandRunInputSchema>,\n paths = runtimePaths(),\n dependencies: CommandDependencies = {},\n): Promise<NeonCommandResult> {\n await ensureRuntimeHome(paths);\n const parsedInput = v.safeParse(commandRunInputSchema, input);\n if (!parsedInput.success) {\n return failedCommand('repo-status', '', 'Invalid command input.', {\n errors: [v.summarize(parsedInput.issues)],\n });\n }\n\n const parsed = parseNeonCommand(parsedInput.output.command);\n if (!parsed.ok) {\n return failedCommand(\n 'repo-status',\n parsedInput.output.command,\n parsed.error,\n {\n requires: parsed.requires,\n },\n );\n }\n\n const context: CommandExecutionContext = {\n sessionId: parsedInput.output.sessionId,\n surface: parsedInput.output.surface,\n };\n const result = await executeCommand(\n parsed.command,\n paths,\n dependencies,\n context,\n );\n const runId = commandWorkflowRunId(result);\n const workflowSummary = await addWorkflowSummary(\n {\n workflow: `command:${parsed.command.name}`,\n ...(runId ? { runId } : {}),\n status: result.status,\n summary: compactCommandSummary(result),\n },\n paths,\n );\n\n return {\n ...result,\n workflowSummary,\n };\n}\n\nasync function executeCommand(\n command: ParsedNeonCommand,\n paths: RuntimePaths,\n dependencies: CommandDependencies,\n context: CommandExecutionContext,\n): Promise<NeonCommandResult> {\n if (command.name === 'repo-status') {\n return repoStatusCommand(command, paths);\n }\n\n if (command.name === 'review-queue') {\n return reviewQueueCommand(command, paths, dependencies);\n }\n\n if (command.name === 'review-pr') {\n return reviewPrCommand(command, paths, dependencies);\n }\n\n if (command.name === 'fix-ci') {\n return fixCiCommand(command, paths, dependencies);\n }\n\n if (command.name === 'explain-ci') {\n return explainCiCommand(command, paths, dependencies);\n }\n\n if (command.name === 'summarize-pr') {\n return summarizePrCommand(command, paths, dependencies);\n }\n\n if (command.name === 'draft-pr-description') {\n return draftPrDescriptionCommand(command, paths);\n }\n\n if (command.name === 'prepare-pr') {\n return preparePrCommand(command, paths);\n }\n\n if (command.name === 'review-local') {\n return reviewLocalCommand(command, paths);\n }\n\n if (command.name === 'briefing') {\n return briefingCommand(command, paths, dependencies);\n }\n\n if (command.name === 'reasoning') {\n return reasoningCommand(command, paths);\n }\n\n if (command.name === 'memory') {\n return memoryCommand(command, paths);\n }\n\n if (command.name === 'watch-pr') {\n return watchPrCommand(command, paths, dependencies, context);\n }\n\n return devDoctorCommand(command, paths);\n}\n\nfunction commandWorkflowRunId(result: NeonCommandResult) {\n if (!result.data || typeof result.data !== 'object') return null;\n if (!('runId' in result.data)) return null;\n const runId = result.data.runId;\n return typeof runId === 'string' && runId.trim() ? runId : null;\n}\n","import { defineAction } from '@flue/runtime';\nimport * as v from 'valibot';\nimport { listWorkflowSummaries } from '../app-state';\nimport { runNeonCommand } from './runner';\nimport { parseNeonCommand, supportedCommands } from './registry';\nimport {\n commandActionOutputSchema,\n commandRunInputSchema,\n commandRunOutputSchema,\n} from './schemas';\n\nexport const commandRunAction = defineAction({\n name: 'neondeck_command_run',\n description:\n 'Run a safe Neon slash command such as /repo-status, /review-queue, /review-pr, /explain-ci, /summarize-pr, /draft-pr-description, /prepare-pr, /review-local, /briefing, /reasoning, /memory, /watch-pr, or /dev-doctor and persist a workflow summary.',\n input: commandRunInputSchema,\n output: commandRunOutputSchema,\n async run({ input, log }) {\n log.info('Neon command requested', { command: input.command });\n\n const parsed = parseNeonCommand(input.command);\n if (parsed.ok && modelCallableCommandDenylist.has(parsed.command.name)) {\n return {\n ok: false,\n command: parsed.command.name,\n input: input.command,\n status: 'failed' as const,\n message: `${parsed.command.raw} starts a host-executing workflow and cannot run through model-callable neondeck_command_run. Use the dashboard workflow button or a direct human workflow admission surface.`,\n requires: ['humanWorkflowAdmission'],\n };\n }\n\n return runCommandAction(input, log);\n },\n});\n\nconst modelCallableCommandDenylist = new Set(['fix-ci']);\n\nexport const commandRunWorkflowAction = defineAction({\n name: 'neondeck_command_workflow_run',\n description:\n 'Run a human-admitted Neon slash command and persist a workflow summary.',\n input: commandRunInputSchema,\n output: commandRunOutputSchema,\n async run({ input, log }) {\n log.info('Human Neon command workflow requested', {\n command: input.command,\n });\n return runCommandAction(input, log);\n },\n});\n\nasync function runCommandAction(\n input: v.InferOutput<typeof commandRunInputSchema>,\n log: {\n info(message: string, data?: unknown): void;\n warn(message: string, data?: unknown): void;\n },\n) {\n const result = await runNeonCommand(input);\n const payload = {\n status: result.status,\n ok: result.ok,\n command: result.command,\n message: result.message,\n workflowSummaryId: result.workflowSummary?.id ?? null,\n };\n if (result.ok) {\n log.info('Neon command completed', payload);\n } else {\n log.warn('Neon command failed', payload);\n }\n\n return result;\n}\n\nexport const commandsListAction = defineAction({\n name: 'neondeck_commands_list',\n description: 'List supported Neon slash commands.',\n input: v.object({}),\n output: commandActionOutputSchema,\n async run() {\n return {\n ok: true,\n action: 'commands_list',\n changed: false,\n commands: supportedCommands(),\n };\n },\n});\n\nexport const workflowSummariesListAction = defineAction({\n name: 'neondeck_workflow_summaries_list',\n description:\n 'List recently persisted Neondeck workflow and command summaries for follow-up questions.',\n input: v.object({}),\n output: commandActionOutputSchema,\n async run() {\n return {\n ok: true,\n action: 'workflow_summaries_list',\n changed: false,\n summaries: await listWorkflowSummaries(),\n };\n },\n});\n\nexport const neondeckCommandActions = [\n commandRunAction,\n commandsListAction,\n workflowSummariesListAction,\n];\n","import type { JsonValue } from '@flue/runtime';\nimport type { RuntimePaths } from '../../runtime-home';\nimport { refreshPrWatch, type WatchActionResult } from '../watches';\nimport {\n listPrWatchEventWatermarks,\n refreshPrWatchEventState,\n} from '../pr-events';\nimport { checkAutopilotConcurrency } from '../autopilot-policy';\nimport { fetchCheckSummary } from '../github';\nimport * as v from 'valibot';\n\nexport type SchedulerResult = {\n ok: boolean;\n action: string;\n changed: boolean;\n message: string;\n outcome?: string;\n tasks?: JsonValue[];\n notifications?: JsonValue[];\n extra?: JsonValue;\n errors?: string[];\n requires?: string[];\n};\n\nexport type { AutomationExecutionResult } from '../app-state';\n\nexport type SchedulerDependencies = {\n refreshPrWatch?: (\n input: Parameters<typeof refreshPrWatch>[0],\n paths: RuntimePaths,\n ) => Promise<WatchActionResult>;\n refreshPrWatchEventState?: (\n input: Parameters<typeof refreshPrWatchEventState>[0],\n paths: RuntimePaths,\n ) => ReturnType<typeof refreshPrWatchEventState>;\n listPrWatchEventWatermarks?: (\n input: Parameters<typeof listPrWatchEventWatermarks>[0],\n paths: RuntimePaths,\n ) => ReturnType<typeof listPrWatchEventWatermarks>;\n checkAutopilotConcurrency?: typeof checkAutopilotConcurrency;\n fetchCheckSummary?: typeof fetchCheckSummary;\n invokeWorkflow?: (\n workflow: ScheduledWorkflowName,\n input: JsonValue,\n ) => Promise<{ runId: string }>;\n tickLeaseTtlMs?: number;\n};\n\nexport type ScheduledWorkflowName =\n | 'briefing'\n | 'command-run'\n | 'scheduled-agent-instruction'\n | 'prepare-pr-worktree'\n | 'triage-pr-event';\nexport type SchedulerTickLease = {\n owner: string;\n acquiredAt: string;\n expiresAt: string;\n};\nexport type SchedulerTickLeaseResult =\n | { acquired: true; owner: string }\n | { acquired: false; reason: 'active' | 'busy' };\nexport type SchedulerTickLeaseRenewResult = 'renewed' | 'lost' | 'busy';\n\nexport const schedulerTickLeaseKey = 'scheduler.tick.lease';\nexport const defaultSchedulerTickLeaseTtlMs = 5 * 60 * 1000;\nexport const nonEmptyStringSchema = v.pipe(v.string(), v.minLength(1));\nexport const schedulerActionOutputSchema = v.looseObject({\n ok: v.boolean(),\n action: v.string(),\n changed: v.boolean(),\n message: v.string(),\n outcome: v.optional(v.string()),\n tasks: v.optional(v.array(v.unknown())),\n notifications: v.optional(v.array(v.unknown())),\n extra: v.optional(v.unknown()),\n errors: v.optional(v.array(v.string())),\n requires: v.optional(v.array(v.string())),\n});\n","import { randomUUID } from 'node:crypto';\nimport { DatabaseSync } from 'node:sqlite';\nimport type { RuntimePaths } from '../../runtime-home';\nimport type {\n SchedulerTickLease,\n SchedulerTickLeaseRenewResult,\n SchedulerTickLeaseResult,\n} from './schemas';\nimport { schedulerTickLeaseKey } from './schemas';\nimport { errorMessage } from './utils';\n\nexport function acquireSchedulerTickLease(\n paths: RuntimePaths,\n now: Date,\n ttlMs: number,\n): SchedulerTickLeaseResult {\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(schedulerTickLeaseKey);\n const existingLease = parseSchedulerTickLease(readMetadataValue(existing));\n if (existingLease && Date.parse(existingLease.expiresAt) > now.getTime()) {\n database.exec('COMMIT;');\n return { acquired: false, reason: 'active' };\n }\n\n const acquiredAt = now.toISOString();\n const lease: SchedulerTickLease = {\n owner: `pid-${process.pid}-${randomUUID()}`,\n acquiredAt,\n expiresAt: new Date(now.getTime() + ttlMs).toISOString(),\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(schedulerTickLeaseKey, JSON.stringify(lease), acquiredAt);\n database.exec('COMMIT;');\n\n return { acquired: true, owner: lease.owner };\n } catch (error) {\n rollbackQuietly(database);\n if (isSqliteBusy(error)) return { acquired: false, reason: 'busy' };\n throw error;\n } finally {\n database.close();\n }\n}\n\nexport function startSchedulerTickLeaseHeartbeat(\n paths: RuntimePaths,\n owner: string,\n ttlMs: number,\n) {\n const intervalMs = Math.max(10, Math.floor(ttlMs / 3));\n const timer = setInterval(() => {\n try {\n const result = renewSchedulerTickLease(paths, owner, new Date(), ttlMs);\n if (result === 'lost') {\n clearInterval(timer);\n }\n } catch (error) {\n console.warn(\n `[neondeck] scheduler tick lease heartbeat failed: ${errorMessage(error)}`,\n );\n }\n }, intervalMs);\n\n timer.unref?.();\n return () => clearInterval(timer);\n}\n\nexport function renewSchedulerTickLease(\n paths: RuntimePaths,\n owner: string,\n now: Date,\n ttlMs: number,\n): SchedulerTickLeaseRenewResult {\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(schedulerTickLeaseKey);\n const existingLease = parseSchedulerTickLease(readMetadataValue(existing));\n if (existingLease?.owner !== owner) {\n database.exec('COMMIT;');\n return 'lost';\n }\n\n const renewedLease = {\n ...existingLease,\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(renewedLease),\n now.toISOString(),\n schedulerTickLeaseKey,\n );\n database.exec('COMMIT;');\n return 'renewed';\n } catch (error) {\n rollbackQuietly(database);\n if (isSqliteBusy(error)) return 'busy';\n throw error;\n } finally {\n database.close();\n }\n}\n\nexport function isSchedulerTickLeaseOwned(\n paths: RuntimePaths,\n owner: string,\n now: Date,\n) {\n const database = new DatabaseSync(paths.neondeckDatabase);\n\n try {\n const existing = database\n .prepare('SELECT value FROM app_metadata WHERE key = ?;')\n .get(schedulerTickLeaseKey);\n const existingLease = parseSchedulerTickLease(readMetadataValue(existing));\n return (\n existingLease?.owner === owner &&\n Date.parse(existingLease.expiresAt) > now.getTime()\n );\n } catch (error) {\n if (isSqliteBusy(error)) return false;\n throw error;\n } finally {\n database.close();\n }\n}\n\nexport async function releaseSchedulerTickLease(\n paths: RuntimePaths,\n owner: string,\n) {\n const maxAttempts = 5;\n\n for (let attempt = 1; attempt <= maxAttempts; attempt += 1) {\n const released = releaseSchedulerTickLeaseOnce(paths, owner);\n if (released) return;\n if (attempt < maxAttempts) {\n await sleep(25 * attempt);\n }\n }\n\n console.warn(\n '[neondeck] scheduler tick lease release was blocked by SQLite; lease will expire automatically.',\n );\n}\n\nexport function releaseSchedulerTickLeaseOnce(\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(schedulerTickLeaseKey);\n const existingLease = parseSchedulerTickLease(readMetadataValue(existing));\n if (existingLease?.owner === owner) {\n database\n .prepare('DELETE FROM app_metadata WHERE key = ?;')\n .run(schedulerTickLeaseKey);\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\nexport function parseSchedulerTickLease(value: string | undefined) {\n if (!value) return;\n\n try {\n const parsed = JSON.parse(value) as Partial<SchedulerTickLease>;\n if (\n typeof parsed.owner === 'string' &&\n typeof parsed.acquiredAt === 'string' &&\n typeof parsed.expiresAt === 'string'\n ) {\n return {\n owner: parsed.owner,\n acquiredAt: parsed.acquiredAt,\n expiresAt: parsed.expiresAt,\n };\n }\n } catch {\n return;\n }\n}\n\nexport function readMetadataValue(row: unknown) {\n if (row && typeof row === 'object' && 'value' in row) {\n const value = row.value;\n return typeof value === 'string' ? value : undefined;\n }\n}\n\nexport function rollbackQuietly(database: DatabaseSync) {\n try {\n database.exec('ROLLBACK;');\n } catch {\n // The transaction may already be closed.\n }\n}\n\nexport function isSqliteBusy(error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return (\n message.includes('SQLITE_BUSY') ||\n message.includes('SQLITE_LOCKED') ||\n message.includes('database is locked')\n );\n}\n\nexport function sleep(ms: number) {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n","import { addNotification } from '../app-state';\nimport {\n activateScheduledTaskWorkflowRun,\n attachScheduledTaskWorkflowRunId,\n canAdmitScheduledWorkflow,\n claimDueScheduledTasks,\n deferUnstartedScheduledTaskClaim,\n executeScheduledTask,\n listScheduledTasks,\n readLatestScheduledTaskRun,\n releaseUnstartedScheduledTaskClaim,\n settleScheduledTaskRun,\n} from '../scheduled-tasks';\nimport {\n ensureRuntimeHome,\n runtimePaths,\n type RuntimePaths,\n} from '../../runtime-home';\nimport type { SchedulerDependencies, SchedulerResult } from './schemas';\nimport { defaultSchedulerTickLeaseTtlMs } from './schemas';\nimport {\n acquireSchedulerTickLease,\n isSchedulerTickLeaseOwned,\n releaseSchedulerTickLease,\n startSchedulerTickLeaseHeartbeat,\n} from './lease';\nimport { errorMessage, okResult } from './utils';\n\nexport async function runSchedulerTick(\n paths = runtimePaths(),\n now = new Date(),\n dependencies: SchedulerDependencies = {},\n): Promise<SchedulerResult> {\n await ensureRuntimeHome(paths);\n const leaseTtlMs =\n dependencies.tickLeaseTtlMs ?? defaultSchedulerTickLeaseTtlMs;\n const lease = acquireSchedulerTickLease(paths, new Date(), leaseTtlMs);\n if (!lease.acquired) {\n return okResult(\n 'scheduler_tick',\n false,\n 'silent',\n 'Scheduler tick skipped because another tick is active.',\n {\n tasks: await listScheduledTasks(paths),\n notifications: [],\n extra: { lease: lease.reason },\n },\n );\n }\n const stopLeaseHeartbeat = startSchedulerTickLeaseHeartbeat(\n paths,\n lease.owner,\n leaseTtlMs,\n );\n\n try {\n const claimedTasks = await claimDueScheduledTasks(paths, now);\n const notifications = [];\n let taskChanged = false;\n let stoppedForLostLease = false;\n\n for (const [index, claim] of claimedTasks.entries()) {\n const { task, run } = claim;\n if (!isSchedulerTickLeaseOwned(paths, lease.owner, new Date())) {\n stoppedForLostLease = true;\n const message =\n 'Scheduled task was released because the scheduler tick lost its lease before execution.';\n await Promise.all(\n claimedTasks\n .slice(index)\n .map((unstarted) =>\n releaseUnstartedScheduledTaskClaim(\n { ...unstarted, message },\n paths,\n ),\n ),\n );\n break;\n }\n const previous = await readLatestScheduledTaskRun(task.id, paths);\n try {\n const workflowTask = requiresWorkflowAdmission(task);\n if (\n workflowTask &&\n !(await canAdmitScheduledWorkflow(task.id, paths))\n ) {\n await deferUnstartedScheduledTaskClaim(\n {\n task,\n previous: claim.previous,\n run,\n message:\n 'Scheduled task was deferred because the active workflow limit is reached.',\n },\n paths,\n );\n continue;\n }\n if (workflowTask) {\n await activateScheduledTaskWorkflowRun(\n {\n taskId: task.id,\n runId: run.id,\n claimId: task.claimId ?? '',\n },\n paths,\n );\n }\n const result = await executeScheduledTask(\n task,\n previous?.result ?? null,\n paths,\n dependencies,\n );\n if (result.workflowRunId) {\n await attachScheduledTaskWorkflowRunId(\n { runId: run.id, workflowRunId: result.workflowRunId },\n paths,\n );\n } else {\n await settleScheduledTaskRun(\n {\n taskId: task.id,\n runId: run.id,\n claimId: task.claimId ?? '',\n status: 'completed',\n outcome: result.outcome,\n message: result.message,\n sessionId: result.sessionId,\n result: result.result,\n },\n paths,\n );\n }\n if (result.outcome !== 'silent') taskChanged = true;\n for (const notification of result.notifications ?? []) {\n notifications.push(\n await addNotification(\n {\n ...notification,\n source: notification.source ?? 'scheduled-task',\n sourceId: notification.sourceId ?? task.id,\n },\n paths,\n ),\n );\n }\n } catch (error) {\n const message = `Scheduled task failed: ${errorMessage(error)}.`;\n await settleScheduledTaskRun(\n {\n taskId: task.id,\n runId: run.id,\n claimId: task.claimId ?? '',\n status: 'failed',\n outcome: 'failed',\n message,\n error: errorMessage(error),\n },\n paths,\n );\n taskChanged = true;\n notifications.push(\n await addNotification(\n {\n level: 'attention',\n title: 'Scheduled task failed',\n message,\n source: 'scheduler',\n sourceId: task.id,\n },\n paths,\n ),\n );\n }\n }\n\n const changed = taskChanged || notifications.length > 0;\n const message =\n claimedTasks.length === 0\n ? 'No scheduled tasks were due.'\n : stoppedForLostLease\n ? 'Scheduler tick stopped because it no longer owns the active lease.'\n : `Ran ${claimedTasks.length} scheduled task${claimedTasks.length === 1 ? '' : 's'}.`;\n return okResult(\n 'scheduler_tick',\n changed,\n changed ? 'updated' : 'silent',\n message,\n { tasks: await listScheduledTasks(paths), notifications },\n );\n } finally {\n stopLeaseHeartbeat();\n await releaseSchedulerTickLease(paths, lease.owner);\n }\n}\n\nfunction requiresWorkflowAdmission(task: {\n spec: { kind: string; target?: { kind: string } };\n}) {\n return (\n task.spec.kind === 'run-briefing' ||\n (task.spec.kind === 'run-agent-instruction' &&\n task.spec.target?.kind === 'workflow')\n );\n}\n\nexport function startSchedulerLoop(\n paths = runtimePaths(),\n intervalMs = 60_000,\n runTick: (paths: RuntimePaths) => Promise<SchedulerResult> = runSchedulerTick,\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 tick failed', error);\n })\n .finally(() => {\n tickInFlight = false;\n });\n }, intervalMs);\n timer.unref?.();\n return timer;\n}\n","import { defineAction } from '@flue/runtime';\nimport * as v from 'valibot';\nimport { runtimePaths } from '../../runtime-home';\nimport { runSchedulerTick } from './service';\nimport { schedulerActionOutputSchema } from './schemas';\n\nexport const schedulerTickAction = defineAction({\n name: 'neondeck_scheduler_tick',\n description:\n 'Claim due canonical scheduled tasks and run their bounded executions.',\n input: v.object({ runtimeHome: v.optional(v.string()) }),\n output: schedulerActionOutputSchema,\n async run({ input, log }) {\n log.info('Scheduler tick requested');\n\n const result = await runSchedulerTick(\n input.runtimeHome ? runtimePaths(input.runtimeHome) : runtimePaths(),\n );\n const payload = {\n ok: result.ok,\n outcome: result.outcome ?? null,\n changed: result.changed,\n message: result.message,\n tasks: result.tasks?.length ?? 0,\n notifications: result.notifications?.length ?? 0,\n };\n if (result.ok) {\n log.info('Scheduler tick completed', payload);\n } else {\n log.warn('Scheduler tick failed', payload);\n }\n\n return result;\n },\n});\n\nexport const neondeckSchedulerActions = [];\n","import * as v from 'valibot';\n\nexport type SafetyClass =\n 'read-only' | 'safe-mutation' | 'destructive-mutation' | 'host-execution';\n\nexport type SafetyPrimitive = 'tool' | 'action' | 'workflow' | 'route' | 'cli';\n\nexport type SafetyPolicyEntry = {\n id: string;\n primitive: SafetyPrimitive;\n title: string;\n class: SafetyClass;\n unattended: boolean;\n requiresConfirmation: boolean;\n audited: boolean;\n auditTarget: string;\n notes: string;\n};\n\nexport type SafetyPolicy = {\n ok: boolean;\n action: 'safety_policy_read';\n version: number;\n summary: {\n readOnly: number;\n safeMutation: number;\n destructiveMutation: number;\n hostExecution: number;\n requiresConfirmation: number;\n unattendedAllowed: number;\n audited: number;\n };\n confirmationPolicy: string;\n hostExecutionPolicy: string;\n executionPolicy: {\n defaultBackend: string;\n enabledBackends: string[];\n supportedBackends: string[];\n approvalMode: string;\n unattended: string;\n preapprovedCommandCount: number;\n defaultLocalAccess: boolean;\n exeDevPlanned: boolean;\n };\n entries: SafetyPolicyEntry[];\n fetchedAt: string;\n};\n\nexport const safetyPolicySchema = v.looseObject({\n ok: v.boolean(),\n action: v.literal('safety_policy_read'),\n version: v.number(),\n summary: v.looseObject({\n readOnly: v.number(),\n safeMutation: v.number(),\n destructiveMutation: v.number(),\n hostExecution: v.number(),\n requiresConfirmation: v.number(),\n unattendedAllowed: v.number(),\n audited: v.number(),\n }),\n entries: v.array(v.unknown()),\n});\n","import type { SafetyPolicyEntry } from './schemas';\n\nexport const readOnly = {\n class: 'read-only',\n unattended: true,\n requiresConfirmation: false,\n audited: false,\n auditTarget: 'none',\n} satisfies Partial<SafetyPolicyEntry>;\n\nexport const safeMutation = {\n class: 'safe-mutation',\n unattended: false,\n requiresConfirmation: false,\n audited: true,\n} satisfies Partial<SafetyPolicyEntry>;\n\nexport const unauditedSafeMutation = {\n class: 'safe-mutation',\n unattended: false,\n requiresConfirmation: false,\n audited: false,\n auditTarget: 'none',\n} satisfies Partial<SafetyPolicyEntry>;\n\nexport const destructiveMutation = {\n class: 'destructive-mutation',\n unattended: false,\n requiresConfirmation: true,\n audited: true,\n} satisfies Partial<SafetyPolicyEntry>;\n\nexport const hostExecution = {\n class: 'host-execution',\n unattended: false,\n requiresConfirmation: true,\n audited: true,\n} satisfies Partial<SafetyPolicyEntry>;\n\nconst cliHostExecution = {\n ...hostExecution,\n audited: false,\n auditTarget: 'none',\n} satisfies Partial<SafetyPolicyEntry>;\n\nconst cliDestructiveMutation = {\n ...destructiveMutation,\n audited: false,\n auditTarget: 'none',\n} satisfies Partial<SafetyPolicyEntry>;\n\nexport const entries: SafetyPolicyEntry[] = [\n tool(\n 'neondeck_safety_policy_lookup',\n 'Read safety policy',\n readOnly,\n 'Reads this approval and audit policy.',\n ),\n tool(\n 'neondeck_commands_lookup',\n 'List slash commands',\n readOnly,\n 'Lists supported Neon slash commands.',\n ),\n tool(\n 'neondeck_workflow_summaries_lookup',\n 'Read workflow summaries',\n readOnly,\n 'Reads persisted command and workflow summaries.',\n ),\n tool(\n 'neondeck_runtime_status_lookup',\n 'Read runtime readiness',\n readOnly,\n 'Reads local runtime status, credentials presence, counts, and recent failure summaries.',\n ),\n tool(\n 'neondeck_app_db_migrations_lookup',\n 'Read app DB migrations',\n readOnly,\n 'Reads the Neondeck app database migration journal, pending migrations, hash mismatches, unknown newer migrations, and latest backup path.',\n ),\n tool(\n 'neondeck_session_status_lookup',\n 'Read active session state',\n readOnly,\n 'Reads the active Neon session id and stale-context reasons.',\n ),\n tool(\n 'neondeck_session_list_lookup',\n 'List chat sessions',\n readOnly,\n 'Reads indexed chat session metadata without reading Flue transcripts.',\n ),\n tool(\n 'neondeck_session_search_lookup',\n 'Search chat sessions',\n {\n ...readOnly,\n audited: true,\n auditTarget: 'chat_session_audit',\n },\n 'Searches chat session metadata and summaries, recording an audit row.',\n ),\n tool(\n 'neondeck_session_read_lookup',\n 'Read chat session metadata',\n {\n ...readOnly,\n audited: true,\n auditTarget: 'chat_session_audit',\n },\n 'Reads one indexed chat session metadata record and audits the read.',\n ),\n tool(\n 'neondeck_session_messages_lookup',\n 'Request session messages',\n {\n ...readOnly,\n audited: true,\n auditTarget: 'chat_session_audit',\n },\n 'Audits a request for Flue-owned messages without duplicating transcripts into app state.',\n ),\n tool(\n 'neondeck_repo_status_lookup',\n 'Read local repo status',\n readOnly,\n 'Reads deterministic git status for configured repositories.',\n ),\n tool(\n 'neondeck_github_pr_queue_lookup',\n 'Read GitHub PR queue',\n readOnly,\n 'Fetches configured GitHub PR queue facts.',\n ),\n tool(\n 'neondeck_github_check_summary_lookup',\n 'Read GitHub check summary',\n readOnly,\n 'Fetches GitHub check summary facts for a configured repository ref.',\n ),\n tool(\n 'neondeck_github_issues_lookup',\n 'Read GitHub issues',\n readOnly,\n 'Fetches open GitHub issue facts for a configured repository without posting comments or changing labels.',\n ),\n tool(\n 'neondeck_pr_review_comments_lookup',\n 'Read PR review comments',\n readOnly,\n 'Fetches unresolved GitHub PR review comments and review thread metadata.',\n ),\n tool(\n 'neondeck_pr_requested_changes_lookup',\n 'Read requested changes',\n readOnly,\n 'Fetches current requested-changes review state for a GitHub PR.',\n ),\n tool(\n 'neondeck_pr_branch_permissions_lookup',\n 'Read PR branch permissions',\n readOnly,\n 'Fetches branch push permission facts for a GitHub PR without pushing.',\n ),\n tool(\n 'neondeck_pr_watch_event_watermarks_lookup',\n 'Read PR event watermarks',\n readOnly,\n 'Reads persisted PR watch event watermarks without contacting GitHub.',\n ),\n tool(\n 'neondeck_scheduled_tasks_lookup',\n 'Read scheduled tasks',\n readOnly,\n 'Reads canonical scheduled tasks and their most recent run.',\n ),\n tool(\n 'neondeck_pr_watches_lookup',\n 'Read PR watches',\n readOnly,\n 'Reads persistent PR watch state.',\n ),\n tool(\n 'neondeck_ref_watches_lookup',\n 'Read ref watches',\n readOnly,\n 'Reads persistent branch and commit ref watch state.',\n ),\n tool(\n 'neondeck_runtime_skills_lookup',\n 'List runtime skills',\n readOnly,\n 'Lists active, duplicate, and ignored runtime skill entries.',\n ),\n tool(\n 'neondeck_runtime_skill_load',\n 'Load runtime skill content',\n readOnly,\n 'Reads trusted local skill instructions for a selected runtime skill.',\n ),\n tool(\n 'neondeck_memory_lookup',\n 'Read structured memory',\n readOnly,\n 'Reads durable Neondeck memory scoped to user, local, or project.',\n ),\n tool(\n 'neondeck_worktrees_lookup',\n 'Read worktree state',\n readOnly,\n 'Reads Neondeck worktree records, active and stale locks, and cleanup failures.',\n ),\n tool(\n 'neondeck_prepared_diffs_lookup',\n 'Read prepared diffs',\n readOnly,\n 'Reads prepared-diff records and pending decision rows without reading file patches.',\n ),\n tool(\n 'neondeck_kilo_tasks_lookup',\n 'Read Kilo handoff tasks',\n readOnly,\n 'Reads persisted Kilo handoff task metadata without starting or cancelling work.',\n ),\n action(\n 'neondeck_autopilot_triage_pr_event',\n 'Triage PR event',\n readOnly,\n 'Classifies structured PR watcher deltas without mutating GitHub, repos, or worktrees.',\n ),\n action(\n 'neondeck_execution_policy_check',\n 'Check host execution policy',\n readOnly,\n 'Classifies a proposed local or exe.dev command against execution approval policy without running it.',\n ),\n action(\n 'neondeck_execution_request_approval',\n 'Request host execution approval',\n {\n ...safeMutation,\n auditTarget: 'execution_approvals',\n },\n 'Creates a pending approval record for a non-preapproved local or exe.dev command without running it.',\n ),\n action(\n 'neondeck_execution_run',\n 'Run approved host command',\n {\n ...hostExecution,\n auditTarget: 'execution_approvals',\n },\n 'Runs one approved local command or one approved exe.dev sandbox command, records bounded redacted output, and never bypasses hardline denies.',\n ),\n tool(\n 'mcp__<server>__<tool>',\n 'Call external MCP tool family',\n {\n ...hostExecution,\n auditTarget: 'mcp_tool_approvals/mcp_tool_audit',\n },\n 'Dynamic third-party MCP tools are untrusted external tool calls. Per-call confirmation is delegated to the MCP approval gate; deny and auto-approve lists are exact-match per server.',\n ),\n tool(\n 'neondeck_mcp_servers_lookup',\n 'Read MCP servers',\n readOnly,\n 'Reads configured MCP servers with live connection status.',\n ),\n tool(\n 'neondeck_mcp_tools_lookup',\n 'Read MCP tool catalog',\n readOnly,\n 'Reads cached MCP tool catalogs without invoking third-party tools.',\n ),\n tool(\n 'neondeck_mcp_status_lookup',\n 'Read MCP status',\n readOnly,\n 'Reads MCP registry status and enabled server health.',\n ),\n tool(\n 'neondeck_mcp_approvals_lookup',\n 'Read MCP approvals',\n readOnly,\n 'Reads pending MCP tool-call approvals.',\n ),\n tool(\n 'neondeck_mcp_audit_lookup',\n 'Read MCP audit',\n readOnly,\n 'Reads recent MCP tool-call audit rows.',\n ),\n action(\n 'neondeck_exedev_checkout_sync',\n 'Sync exe.dev checkout',\n {\n ...hostExecution,\n auditTarget: 'execution_approvals',\n },\n 'Creates or syncs a declared repo/worktree checkout on the existing exe.dev VM by routing each remote mkdir/git step through execution approvals.',\n ),\n cli(\n 'neondeck_service_install',\n 'Install login service',\n cliHostExecution,\n 'User-invoked CLI command that writes a launchd/systemd user service and starts the local server. It is never model-callable.',\n ),\n cli(\n 'neondeck_service_uninstall',\n 'Uninstall login service',\n cliDestructiveMutation,\n 'User-invoked CLI command that stops and removes only the Neondeck launchd/systemd service file. It does not delete runtime data and is never model-callable.',\n ),\n cli(\n 'neondeck_service_start',\n 'Start login service',\n cliHostExecution,\n 'User-invoked CLI command that starts the installed launchd/systemd user service. It is never model-callable.',\n ),\n cli(\n 'neondeck_service_stop',\n 'Stop login service',\n cliHostExecution,\n 'User-invoked CLI command that stops the installed launchd/systemd user service. It is never model-callable.',\n ),\n cli(\n 'neondeck_service_status',\n 'Read login service status',\n readOnly,\n 'User-invoked CLI command that reads service installation, running state, health, and embedded paths. It is never model-callable.',\n ),\n action(\n 'neondeck_config_read',\n 'Read runtime config',\n readOnly,\n 'Reads validated runtime config files without exposing raw provider secrets.',\n ),\n action(\n 'neondeck_config_validate',\n 'Validate runtime config',\n readOnly,\n 'Validates runtime config files and reports schema errors.',\n ),\n action(\n 'neondeck_config_reload',\n 'Reload runtime config snapshot',\n readOnly,\n 'Validates and returns active disk-backed runtime config.',\n ),\n action(\n 'neondeck_config_read_providers',\n 'Read provider config',\n readOnly,\n 'Reads allowlisted provider config without exposing secret values.',\n ),\n action(\n 'neondeck_commands_list',\n 'List slash commands',\n readOnly,\n 'Lists supported Neon slash commands through an action surface.',\n ),\n action(\n 'neondeck_workflow_summaries_list',\n 'List workflow summaries',\n readOnly,\n 'Lists persisted Neondeck workflow and command summaries.',\n ),\n action(\n 'neondeck_watch_pr_list',\n 'List PR watches',\n readOnly,\n 'Lists persistent PR watches.',\n ),\n action(\n 'neondeck_scheduled_task_list',\n 'List scheduled tasks',\n readOnly,\n 'Lists canonical scheduled tasks and their most recent run.',\n ),\n action(\n 'neondeck_scheduled_task_read',\n 'Read scheduled task',\n readOnly,\n 'Reads one canonical scheduled task and its most recent run.',\n ),\n action(\n 'neondeck_skills_list',\n 'List runtime skills',\n readOnly,\n 'Lists discovered runtime skills.',\n ),\n action(\n 'neondeck_skill_load',\n 'Load runtime skill',\n readOnly,\n 'Loads full content for a selected runtime skill.',\n ),\n action(\n 'neondeck_session_status',\n 'Read session status',\n readOnly,\n 'Reads active Neon session state through an action surface.',\n ),\n action(\n 'neondeck_session_list',\n 'List chat sessions',\n readOnly,\n 'Lists indexed chat session metadata.',\n ),\n action(\n 'neondeck_session_search',\n 'Search chat sessions',\n {\n ...readOnly,\n audited: true,\n auditTarget: 'chat_session_audit',\n },\n 'Searches indexed chat session metadata and records an audit row.',\n ),\n action(\n 'neondeck_session_read',\n 'Read chat session metadata',\n {\n ...readOnly,\n audited: true,\n auditTarget: 'chat_session_audit',\n },\n 'Reads one indexed chat session metadata record and records an audit row.',\n ),\n action(\n 'neondeck_session_messages',\n 'Request session messages',\n {\n ...readOnly,\n audited: true,\n auditTarget: 'chat_session_audit',\n },\n 'Audits a request for Flue-owned messages. Neondeck app state does not store transcript copies.',\n ),\n action(\n 'neondeck_session_refresh_summary',\n 'Refresh session summary',\n {\n ...safeMutation,\n auditTarget: 'chat_sessions/chat_session_audit',\n },\n 'Refreshes stored session summary metadata without copying raw Flue transcript history.',\n ),\n action(\n 'neondeck_session_reference',\n 'Reference chat session',\n {\n ...safeMutation,\n auditTarget: 'chat_sessions/chat_session_audit',\n },\n 'Audits cross-session context use and may refresh missing or stale summary metadata before returning a compact reference.',\n ),\n action(\n 'neondeck_memory_list',\n 'List structured memory',\n readOnly,\n 'Lists durable structured memory entries.',\n ),\n action(\n 'neondeck_memory_events',\n 'List memory audit events',\n readOnly,\n 'Lists durable memory mutation audit history.',\n ),\n action(\n 'neondeck_memory_candidate_list',\n 'List memory candidates',\n readOnly,\n 'Lists review-mode memory learning candidates.',\n ),\n action(\n 'neondeck_repo_status_list',\n 'List repo status',\n readOnly,\n 'Lists deterministic local git status facts.',\n ),\n action(\n 'neondeck_worktree_status',\n 'Read worktree status',\n readOnly,\n 'Reads git status, head/base SHA, dirty state, and lock state for a managed worktree.',\n ),\n action(\n 'neondeck_dev_doctor_run',\n 'Run local dev diagnostics',\n readOnly,\n 'Runs bounded read-only local diagnostics over repo status, package metadata, env presence, ports, API health, and database files.',\n ),\n action(\n 'neondeck_command_run',\n 'Run Neon command workflow action',\n {\n ...safeMutation,\n auditTarget: 'workflow_summaries/workflow_events',\n },\n 'Runs supported slash commands and persists a workflow summary. Individual commands must stay within their own safety class.',\n ),\n action(\n 'neondeck_pr_review_for_human',\n 'Prepare PR review artifacts',\n {\n ...safeMutation,\n auditTarget:\n 'reports/pr_review_drafts/pr_review_draft_comments/notifications/workflow_summaries',\n },\n 'Creates local PR review reports and Neon-origin local draft comments for human review. It never submits a GitHub review or performs external writes.',\n ),\n action(\n 'neondeck_autopilot_ci_fix_run',\n 'Run bounded PR CI fix',\n {\n ...hostExecution,\n auditTarget:\n 'reports/worktrees/worktree_locks/kilo_tasks/kilo_task_events/prepared_diffs/notifications/workflow_summaries/workflow_events',\n },\n 'Creates a local CI dossier report, prepares a managed PR worktree, and starts a bounded Kilo fix task. It may create a local prepared diff, but it never pushes, comments, or submits a GitHub review.',\n ),\n action(\n 'neondeck_config_add_repo',\n 'Add repository config',\n {\n ...safeMutation,\n auditTarget: 'config_history',\n },\n 'Adds a repo after local path, git, GitHub metadata, and schema validation.',\n ),\n action(\n 'neondeck_config_update_repo',\n 'Update repository config',\n {\n ...safeMutation,\n auditTarget: 'config_history',\n },\n 'Updates an existing repo entry after schema and path validation.',\n ),\n action(\n 'neondeck_config_update_repo_autopilot_policy',\n 'Update repository autopilot policy',\n {\n ...safeMutation,\n auditTarget: 'repos.json/config_history',\n requiresConfirmation: true,\n },\n 'Updates typed repo autopilot policy and shared guardrails. Increasing autonomy, relaxing guardrails, expanding push destinations, enabling force push, or changing watch overrides requires confirm=true.',\n ),\n action(\n 'neondeck_config_update_agent_models',\n 'Update agent model choices',\n {\n ...safeMutation,\n auditTarget: 'config_history',\n },\n 'Updates display-assistant, utility, self-improvement, or known subagent model strings using already registered providers.',\n ),\n action(\n 'neondeck_config_update_learning',\n 'Update learning config',\n {\n ...safeMutation,\n auditTarget: 'config_history',\n },\n 'Updates learning, memory write, and memory curation policy without running reviews or mutating memory.',\n ),\n action(\n 'neondeck_scheduled_task_briefing_create',\n 'Create briefing task',\n {\n ...safeMutation,\n auditTarget: 'scheduled_tasks/scheduled_task_runs',\n },\n 'Creates or updates a canonical timezone-aware briefing task without running it.',\n ),\n action(\n 'neondeck_briefing_profile_read',\n 'Read briefing profile',\n readOnly,\n 'Reads the morning briefing profile and operational run metadata without reading or duplicating the Flue transcript.',\n ),\n action(\n 'neondeck_briefing_profile_update',\n 'Update briefing profile',\n {\n ...safeMutation,\n auditTarget: 'briefing_profiles/config_history/scheduled_tasks',\n },\n 'Updates validated briefing instructions and schedule settings without changing MCP approval policy.',\n ),\n action(\n 'neondeck_briefing_run_read',\n 'Read briefing run grounding',\n readOnly,\n 'Reads one exact persisted deterministic snapshot and operational run metadata without reading assistant prose.',\n ),\n action(\n 'neondeck_briefing_run_now',\n 'Run conversational briefing',\n {\n ...safeMutation,\n auditTarget: 'briefing_runs/chat_sessions/notifications',\n },\n 'Collects deterministic local facts and dispatches an informational turn to the persistent display-assistant session.',\n ),\n action(\n 'neondeck_briefing_session_rotate',\n 'Start fresh briefing conversation',\n {\n ...safeMutation,\n auditTarget: 'chat_sessions/briefing_profiles/config_history',\n },\n 'Explicitly starts a fresh briefing conversation while preserving the prior transcript.',\n ),\n action(\n 'neondeck_scheduled_task_instruction_create',\n 'Create scheduled instruction',\n {\n ...safeMutation,\n auditTarget: 'scheduled_tasks/scheduled_task_runs',\n },\n 'Creates or updates a bounded scheduled agent instruction with an explicit workflow or session target.',\n ),\n action(\n 'neondeck_scheduled_task_pause',\n 'Pause scheduled task',\n {\n ...safeMutation,\n auditTarget: 'scheduled_tasks',\n },\n 'Pauses a scheduled task without deleting run history.',\n ),\n action(\n 'neondeck_scheduled_task_resume',\n 'Resume scheduled task',\n {\n ...safeMutation,\n auditTarget: 'scheduled_tasks',\n },\n 'Resumes a scheduled task without immediately executing it.',\n ),\n action(\n 'neondeck_scheduled_task_delete',\n 'Delete scheduled task',\n {\n ...destructiveMutation,\n auditTarget: 'scheduled_tasks/scheduled_task_runs',\n },\n 'Deletes a scheduled task and its local run history after confirm=true.',\n ),\n action(\n 'neondeck_config_update_provider',\n 'Update allowlisted provider config',\n {\n ...safeMutation,\n auditTarget: 'config_history',\n },\n 'Updates allowlisted provider settings using environment variable references only; server restart is required.',\n ),\n action(\n 'neondeck_config_update_execution_policy',\n 'Update execution approval policy',\n {\n ...safeMutation,\n auditTarget: 'config_history',\n },\n 'Updates allowed execution backends and preapproved single-command patterns. It does not execute commands.',\n ),\n action(\n 'neondeck_config_update_worktree_policy',\n 'Update worktree policy',\n {\n ...safeMutation,\n auditTarget: 'config_history',\n },\n 'Updates default worktree storage and cleanup policy. Faster deletion policies should be confirmed with the user first.',\n ),\n action(\n 'neondeck_config_update_dashboard_layout',\n 'Update dashboard layout',\n {\n ...safeMutation,\n auditTarget: 'config_history',\n },\n 'Replaces dashboard.json with a validated statusline plus tabbed-region layout.',\n ),\n action(\n 'neondeck_config_apply_dashboard_preset',\n 'Apply dashboard layout preset',\n {\n ...safeMutation,\n auditTarget: 'config_history',\n },\n 'Applies a known dashboard layout preset such as classic or cockpit.',\n ),\n action(\n 'neondeck_mcp_server_add',\n 'Add MCP server',\n {\n ...safeMutation,\n auditTarget: 'config_history',\n },\n 'Adds a strict mcp.json server entry using environment-variable references for secrets.',\n ),\n action(\n 'neondeck_mcp_server_update',\n 'Update MCP server',\n {\n ...safeMutation,\n auditTarget: 'config_history',\n },\n 'Updates a strict mcp.json server entry and refreshes the registry.',\n ),\n action(\n 'neondeck_mcp_server_enable',\n 'Enable MCP server',\n {\n ...safeMutation,\n auditTarget: 'config_history',\n },\n 'Enables a configured MCP server and refreshes its connection.',\n ),\n action(\n 'neondeck_mcp_server_disable',\n 'Disable MCP server',\n {\n ...safeMutation,\n auditTarget: 'config_history',\n },\n 'Disables a configured MCP server and closes its connection.',\n ),\n action(\n 'neondeck_mcp_registry_refresh',\n 'Refresh MCP registry',\n readOnly,\n 'Reconnects one safe HTTP/OAuth MCP server from the model action surface. Full refresh is available from user-owned API/CLI surfaces.',\n ),\n action(\n 'neondeck_mcp_status',\n 'Read MCP status action',\n readOnly,\n 'Reads MCP server connection status and tool counts through an action surface.',\n ),\n action(\n 'neondeck_mcp_login_start',\n 'Start MCP OAuth login',\n {\n ...safeMutation,\n auditTarget: 'mcp_oauth_logins/mcp_oauth_tokens',\n },\n 'Creates a state-bound OAuth login record and returns a user-facing authorization URL.',\n ),\n action(\n 'neondeck_mcp_logout',\n 'Remove MCP OAuth tokens',\n {\n ...destructiveMutation,\n auditTarget: 'mcp_oauth_tokens',\n },\n 'Requires confirm=true before deleting stored OAuth tokens for one MCP server.',\n ),\n action(\n 'neondeck_mcp_approval_resolve',\n 'Resolve MCP approval',\n {\n ...destructiveMutation,\n auditTarget:\n 'mcp_tool_approvals/chat_session_command_events/notifications',\n },\n 'User-owned approval resolver for local API and CLI surfaces. It records the decision and nudges the requesting display-assistant session when linked. This action is not registered on the display assistant to prevent self-approval.',\n ),\n action(\n 'neondeck_mcp_server_remove',\n 'Remove MCP server',\n {\n ...destructiveMutation,\n auditTarget: 'config_history/mcp_tool_approvals/mcp_oauth_tokens',\n },\n 'Requires confirm=true before removing an MCP server and cached MCP runtime state.',\n ),\n action(\n 'neondeck_config_update_handoff',\n 'Update handoff config',\n {\n ...safeMutation,\n auditTarget: 'config_history',\n },\n 'Updates external agent handoff policy, including whether external registrations can queue bounded PR review assistance.',\n ),\n action(\n 'neondeck_scheduler_tick',\n 'Run due scheduled tasks',\n {\n ...safeMutation,\n auditTarget:\n 'scheduled_tasks/scheduled_task_runs/notifications/workflow_events',\n },\n 'Claims due scheduled tasks and records task runs, notifications, and Flue workflow admissions.',\n ),\n action(\n 'neondeck_watch_pr_add',\n 'Add PR watch',\n {\n ...safeMutation,\n auditTarget: 'pr_watches/scheduled_tasks',\n },\n 'Creates a durable PR watch and its canonical polling task after GitHub PR lookup.',\n ),\n action(\n 'neondeck_watch_pr_refresh',\n 'Refresh PR watch',\n {\n ...safeMutation,\n auditTarget: 'pr_watches/notifications',\n },\n 'Refreshes a watch and records meaningful state changes; silent no-op refreshes should not notify.',\n ),\n action(\n 'neondeck_github_pr_event_state_get',\n 'Fetch PR event state',\n readOnly,\n 'Fetches read-only GitHub PR event facts without persisting watermarks.',\n ),\n action(\n 'neondeck_github_pr_review_threads_get',\n 'Fetch PR review threads',\n readOnly,\n 'Fetches read-only GitHub PR review thread and unresolved comment facts.',\n ),\n action(\n 'neondeck_github_pr_files_get',\n 'Fetch PR file diffs',\n readOnly,\n 'Fetches read-only GitHub PR file patches and per-file diff metadata.',\n ),\n action(\n 'neondeck_github_pr_requested_changes_get',\n 'Fetch requested changes',\n readOnly,\n 'Fetches read-only requested-changes review facts for a PR.',\n ),\n action(\n 'neondeck_github_pr_branch_permissions_get',\n 'Fetch PR branch permissions',\n readOnly,\n 'Fetches read-only branch push permission facts without pushing.',\n ),\n action(\n 'neondeck_pr_comment',\n 'Post PR comment',\n unauditedSafeMutation,\n 'Posts a GitHub PR comment through the server-side GitHub token and returns normalized comment metadata. Durable PR-comment audit records are deferred to the autopilot queue persistence slice.',\n ),\n action(\n 'neondeck_pr_watch_event_state_refresh',\n 'Refresh PR event watermarks',\n {\n ...safeMutation,\n auditTarget: 'pr_watch_event_watermarks',\n },\n 'Fetches read-only GitHub PR event facts and updates per-watch app-state watermarks only.',\n ),\n action(\n 'neondeck_pr_watch_event_watermarks_list',\n 'List PR event watermarks',\n readOnly,\n 'Lists persisted PR watch event watermarks.',\n ),\n route(\n '/api/github/prs/:owner/:repo/:number',\n 'Fetch PR metadata API',\n readOnly,\n 'Local API route for fetching read-only PR metadata with the server-side GitHub token.',\n ),\n route(\n '/api/github/prs/:owner/:repo/:number/files',\n 'Fetch PR file diffs API',\n readOnly,\n 'Local API route for fetching read-only PR file patches with the server-side GitHub token.',\n ),\n route(\n '/api/github/prs/:owner/:repo/:number/review-draft',\n 'Manage PR review draft API',\n {\n ...safeMutation,\n auditTarget: 'pr_review_drafts/pr_review_draft_comments',\n },\n 'User-surface-only local API for reading, saving, and discarding durable PR review drafts. This route is not registered as a model-callable action or tool.',\n ),\n route(\n '/api/github/prs/:owner/:repo/:number/review-draft/comments',\n 'Create PR review draft comment API',\n {\n ...safeMutation,\n auditTarget: 'pr_review_drafts/pr_review_draft_comments',\n },\n 'User-surface-only local API for saving inline PR review draft comments in app DB only.',\n ),\n route(\n '/api/github/prs/:owner/:repo/:number/review-draft/comments/:id',\n 'Update PR review draft comment API',\n {\n ...safeMutation,\n auditTarget: 'pr_review_drafts/pr_review_draft_comments',\n },\n 'User-surface-only local API for editing or deleting app-DB PR review draft comments.',\n ),\n route(\n '/api/github/prs/:owner/:repo/:number/reviews',\n 'Submit PR review API',\n {\n ...safeMutation,\n auditTarget: 'workflow_summaries/pr_reviews/GitHub',\n },\n 'User-surface-only local API for submitting a human-authored GitHub PR review with inline comments and a verdict. Neon has no action or tool path to this route.',\n ),\n route(\n '/api/reviews/:id/reconcile',\n 'Recover interrupted PR review submission API',\n {\n ...safeMutation,\n auditTarget: 'pr_reviews/GitHub',\n },\n 'User-surface-only local API that checks GitHub for an interrupted human-authored review submission and reconciles its app-owned durable record. Neon has no action or tool path to this route.',\n ),\n route(\n '/api/github/prs/:owner/:repo/:number/review-threads/:threadId/reply',\n 'Reply to PR review thread API',\n unauditedSafeMutation,\n 'User-surface-only local API for posting an immediate human-authored reply to an existing GitHub review thread after verifying it belongs to the route PR. Thread replies are visible on GitHub and are not individually audited.',\n ),\n route(\n '/api/github/prs/:owner/:repo/:number/review-threads/:threadId/resolve',\n 'Resolve PR review thread API',\n unauditedSafeMutation,\n 'User-surface-only local API for resolving an existing GitHub review thread after verifying it belongs to the route PR. Resolution is user-owned and not model-callable.',\n ),\n route(\n '/api/github/prs/:owner/:repo/:number/review-threads/:threadId/unresolve',\n 'Unresolve PR review thread API',\n unauditedSafeMutation,\n 'User-surface-only local API for unresolving an existing GitHub review thread after verifying it belongs to the route PR. Resolution is user-owned and not model-callable.',\n ),\n route(\n '/api/github/prs/comment',\n 'Post PR comment API',\n unauditedSafeMutation,\n 'Local API route for posting a bounded PR comment with the server-side GitHub token. Durable PR-comment audit records are deferred to the autopilot queue persistence slice.',\n ),\n action(\n 'neondeck_watch_ref_add',\n 'Add ref watch',\n {\n ...safeMutation,\n auditTarget: 'ref_watches/jobs',\n },\n 'Creates durable branch or commit ref watch and job records after GitHub check lookup.',\n ),\n action(\n 'neondeck_watch_ref_refresh',\n 'Refresh ref watch',\n {\n ...safeMutation,\n auditTarget: 'ref_watches/notifications',\n },\n 'Refreshes a branch or commit ref watch and records meaningful state changes; silent no-op refreshes should not notify.',\n ),\n action(\n 'neondeck_worktree_create',\n 'Create or adopt worktree',\n {\n ...safeMutation,\n auditTarget: 'worktrees/worktree_events',\n },\n 'Creates or adopts a git worktree only inside declared Neondeck worktree roots.',\n ),\n action(\n 'neondeck_autopilot_prepare_pr_worktree',\n 'Prepare PR worktree',\n {\n ...safeMutation,\n auditTarget: 'worktrees/worktree_locks',\n },\n 'Creates, syncs, locks, and inspects a Neondeck-managed PR worktree, but does not edit, commit, push, or comment.',\n ),\n action(\n 'neondeck_autopilot_fix_pr_review_feedback',\n 'Fix PR review feedback',\n {\n ...safeMutation,\n auditTarget: 'worktrees/repo_edit_events/prepared_diffs',\n },\n 'Fetches unresolved review feedback, groups it into a plan, applies caller-supplied bounded repo-edit changes inside an isolated worktree, commits locally, and prepares a diff without pushing or commenting.',\n ),\n action(\n 'neondeck_prepared_diff_list',\n 'List prepared diffs',\n readOnly,\n 'Lists prepared diffs and pending prepared-diff decisions.',\n ),\n action(\n 'neondeck_prepared_diff_summary',\n 'Read prepared diff summary',\n readOnly,\n 'Reads one prepared-diff record and backend-computed git diff summary from the source worktree.',\n ),\n action(\n 'neondeck_prepared_diff_changed_files',\n 'Read prepared diff files',\n readOnly,\n 'Reads changed files for a prepared diff through backend git helpers.',\n ),\n action(\n 'neondeck_prepared_diff_file_diff',\n 'Read prepared file diff',\n readOnly,\n 'Reads one prepared file patch through backend git helpers.',\n ),\n action(\n 'neondeck_prepared_diff_open_worktree',\n 'Open prepared diff worktree',\n readOnly,\n 'Returns the managed source worktree path for a prepared diff.',\n ),\n tool(\n 'neondeck_autopilot_recovery_options_lookup',\n 'Read autopilot recovery options',\n readOnly,\n 'Reads bounded recovery options for a prepared diff without mutating app state or repos.',\n ),\n action(\n 'neondeck_autopilot_recovery_options',\n 'Read autopilot recovery options',\n readOnly,\n 'Reads bounded recovery options for a prepared diff without mutating app state or repos.',\n ),\n action(\n 'neondeck_autopilot_recovery_run',\n 'Run autopilot recovery action',\n {\n ...hostExecution,\n auditTarget:\n 'prepared_diffs/prepared_diff_approvals/worktrees/workflow_summaries/notifications/execution_approvals',\n },\n 'Dispatches one bounded recovery action to existing prepared-diff, worktree sync/cleanup, or autopilot workflow services; confirmation, execution, policy, GitHub, and push gates are still enforced by the delegated service.',\n ),\n action(\n 'neondeck_prepared_diff_run_verification',\n 'Request prepared diff verification',\n {\n ...safeMutation,\n auditTarget: 'prepared_diffs/prepared_diff_approvals',\n },\n 'Records a verification request; actual host command execution remains owned by verify_pr_worktree and execution approvals.',\n ),\n action(\n 'neondeck_prepared_diff_request_revision',\n 'Request prepared diff revision',\n {\n ...safeMutation,\n auditTarget: 'prepared_diffs/prepared_diff_approvals',\n },\n 'Records an operator revision request while retaining the source worktree.',\n ),\n action(\n 'neondeck_prepared_diff_approve_push',\n 'Approve prepared diff push',\n {\n ...destructiveMutation,\n auditTarget: 'prepared_diffs/prepared_diff_approvals',\n },\n 'Requires confirm=true and records push-back approval; the later push workflow performs GitHub mutations.',\n ),\n action(\n 'neondeck_prepared_diff_abandon',\n 'Abandon prepared diff',\n {\n ...destructiveMutation,\n auditTarget: 'prepared_diffs/prepared_diff_approvals/worktree_events',\n },\n 'Requires confirm=true and abandons the prepared-diff record without directly deleting the source worktree.',\n ),\n action(\n 'neondeck_autopilot_policy_check',\n 'Check autopilot policy',\n readOnly,\n 'Classifies a worktree diff against shared repo guardrails, high-risk file classes, push destination policy, and autopilot concurrency without mutating repos or GitHub.',\n ),\n action(\n 'neondeck_autopilot_fix_pr_ci_failure',\n 'Fix PR CI failure',\n {\n ...hostExecution,\n auditTarget:\n 'worktrees/worktree_locks/repo_edit_events/prepared_diffs/execution_approvals',\n },\n 'Fetches deterministic failing check facts/log availability, runs configured diagnostics through execution policy, applies an optional scoped repo-edit patch in a managed worktree, commits locally, and creates a prepared diff without pushing or commenting.',\n ),\n action(\n 'neondeck_autopilot_verify_pr_worktree',\n 'Verify PR worktree',\n {\n ...hostExecution,\n auditTarget: 'execution_approvals/workflow_events',\n },\n 'Runs configured repo checks through Neondeck execution approval policy and records execution approvals/results.',\n ),\n action(\n 'neondeck_autopilot_comment_pr_autofix_result',\n 'Comment PR autofix result',\n {\n ...safeMutation,\n auditTarget: 'workflow_summaries/GitHub issue comments',\n },\n 'Posts a concise PR comment generated only from prepared-diff/autopilot result facts and persists the rendered audit summary.',\n ),\n action(\n 'neondeck_autopilot_push_pr_autofix',\n 'Push PR autofix',\n {\n ...destructiveMutation,\n auditTarget: 'prepared_diffs/worktrees/worktree_events/notifications',\n },\n 'Pushes an approved and verified prepared diff back to the PR head branch only when autopilot policy, GitHub branch permissions, and clean committed worktree state allow it; blocked attempts retain the worktree.',\n ),\n action(\n 'neondeck_worktree_sync',\n 'Sync worktree',\n {\n ...safeMutation,\n auditTarget: 'worktrees/worktree_events',\n },\n 'Moves or rebases a clean managed worktree to a requested head ref or SHA and records lifecycle events.',\n ),\n action(\n 'neondeck_worktree_lock',\n 'Lock worktree or PR',\n {\n ...safeMutation,\n auditTarget: 'worktree_locks/worktree_events',\n },\n 'Acquires expiring per-worktree or per-PR locks and recovers stale locks.',\n ),\n action(\n 'neondeck_worktree_release',\n 'Release worktree lock',\n {\n ...safeMutation,\n auditTarget: 'worktree_locks/worktree_events',\n },\n 'Releases a lock and records the final bounded-work status.',\n ),\n action(\n 'neondeck_kilo_task_start',\n 'Start Kilo handoff',\n {\n ...hostExecution,\n auditTarget: 'kilo_tasks/kilo_task_events',\n },\n 'Starts Kilo only after an explicit user handoff request and only inside a declared repo or Neondeck-managed worktree.',\n ),\n action(\n 'neondeck_kilo_task_status',\n 'Read Kilo task status',\n readOnly,\n 'Reads one persisted Kilo task status record.',\n ),\n action(\n 'neondeck_kilo_task_events',\n 'Read Kilo task events',\n readOnly,\n 'Reads captured Kilo stdout/stderr and JSON event summaries.',\n ),\n action(\n 'neondeck_kilo_task_abort',\n 'Abort Kilo handoff',\n {\n ...destructiveMutation,\n auditTarget: 'kilo_tasks/kilo_task_events',\n },\n 'Terminates a running delegated Kilo process and marks the task cancelled.',\n ),\n action(\n 'neondeck_kilo_task_sessions',\n 'Read Kilo task sessions',\n readOnly,\n 'Reads root and child Kilo session ids linked to one task.',\n ),\n action(\n 'neondeck_kilo_task_diff',\n 'Read Kilo task diff',\n readOnly,\n 'Reads a git diff summary for the workspace used by a Kilo task.',\n ),\n action(\n 'neondeck_kilo_task_reconcile',\n 'Reconcile Kilo task',\n {\n ...safeMutation,\n auditTarget: 'kilo_tasks/kilo_task_events/worktree_events',\n },\n 'Reconciles persisted Kilo task state after restart by inspecting detached process, session, and diff facts.',\n ),\n action(\n 'neondeck_kilo_sessions_search',\n 'Search Kilo sessions',\n readOnly,\n 'Searches linked task metadata and Kilo CLI session metadata.',\n ),\n action(\n 'neondeck_kilo_session_read',\n 'Read Kilo session',\n readOnly,\n 'Reads normalized Kilo session metadata without reading storage directly.',\n ),\n action(\n 'neondeck_kilo_session_messages',\n 'Read Kilo session messages',\n readOnly,\n 'Audits transcript-read intent; the CLI MVP reports transcript adapter availability.',\n ),\n action(\n 'neondeck_kilo_session_children',\n 'Read Kilo child sessions',\n readOnly,\n 'Reads child session ids captured from Kilo task events.',\n ),\n action(\n 'neondeck_kilo_session_todos',\n 'Read Kilo todos',\n readOnly,\n 'Reports Kilo todo adapter availability through the typed Kilo surface.',\n ),\n action(\n 'neondeck_kilo_session_diff',\n 'Read Kilo session diff',\n readOnly,\n 'Reads the linked task workspace diff summary for a Kilo session.',\n ),\n action(\n 'neondeck_kilo_result_review',\n 'Review Kilo result',\n {\n ...safeMutation,\n auditTarget: 'kilo_result_state/kilo_result_events/prepared_diffs',\n },\n 'Classifies a Kilo-produced diff with deterministic facts and autopilot policy, then records review state.',\n ),\n action(\n 'neondeck_kilo_result_verify',\n 'Verify Kilo result',\n {\n ...hostExecution,\n auditTarget: 'kilo_result_state/kilo_result_events/execution_approvals',\n },\n 'Runs checks for a Kilo task worktree through the Neondeck execution approval policy.',\n ),\n action(\n 'neondeck_kilo_result_promote',\n 'Promote Kilo result',\n {\n ...safeMutation,\n auditTarget: 'kilo_result_state/kilo_result_events',\n },\n 'Records the safe promotion admission decision without committing, pushing, or commenting.',\n ),\n action(\n 'neondeck_skills_reload',\n 'Reload runtime skills',\n {\n ...safeMutation,\n auditTarget: 'runtime skill cache',\n },\n 'Rescans trusted local runtime skill folders. A new session is required before changed skills affect prompt context.',\n ),\n action(\n 'neondeck_memory_learn',\n 'Learn structured memory',\n {\n ...safeMutation,\n auditTarget: 'memories/memory_events/learning_events',\n },\n 'Writes user, local, or project current-guidance memory. Autonomous writes obey learning.memoryWriteMode.',\n ),\n action(\n 'neondeck_memory_rewrite',\n 'Rewrite structured memory',\n {\n ...safeMutation,\n auditTarget: 'memories/memory_events',\n },\n 'Rewrites one memory row with before/after audit. Autonomous rewrites obey learning.memoryWriteMode.',\n ),\n action(\n 'neondeck_memory_merge',\n 'Merge structured memories',\n {\n ...safeMutation,\n auditTarget: 'memories/memory_events',\n },\n 'Merges duplicate memories by rewriting a target and archiving source rows with audit history.',\n ),\n action(\n 'neondeck_memory_archive',\n 'Archive structured memory',\n {\n ...safeMutation,\n auditTarget: 'memories/memory_events',\n },\n 'Archives one memory so it no longer loads into new prompt snapshots while preserving audit history.',\n ),\n action(\n 'neondeck_memory_mark_used',\n 'Mark memory used',\n {\n ...safeMutation,\n auditTarget: 'memories',\n },\n 'Updates memory usage counters without creating a prompt-context-changing memory event.',\n ),\n action(\n 'neondeck_memory_candidate_create',\n 'Create memory candidate',\n {\n ...safeMutation,\n auditTarget: 'learning_candidates/learning_events',\n },\n 'Creates a review-mode memory candidate without mutating active memory.',\n ),\n action(\n 'neondeck_memory_candidate_decide',\n 'Decide memory candidate',\n {\n ...safeMutation,\n auditTarget: 'learning_candidates/memories/memory_events',\n },\n 'Applies, rejects, or archives a memory candidate after explicit user/API decision.',\n ),\n action(\n 'neondeck_memory_curate',\n 'Curate memory store',\n {\n ...safeMutation,\n auditTarget: 'learning_candidates/memories/memory_events',\n },\n 'Runs bounded memory curation. Review mode creates candidates; auto mode may apply audited archive cleanup.',\n ),\n action(\n 'neondeck_learning_skill_patch_propose',\n 'Propose skill patch',\n {\n ...safeMutation,\n auditTarget: 'learning_candidates/learning_events',\n },\n 'Creates a diff-backed skill patch candidate for the built-in neondeck skill or safe user runtime skills.',\n ),\n action(\n 'neondeck_learning_skill_patch_apply',\n 'Apply skill patch',\n {\n ...safeMutation,\n auditTarget: 'learning_candidates/config_history/learning_events',\n },\n 'Applies one proposed skill patch after policy or explicit review and stores before/after audit data.',\n ),\n action(\n 'neondeck_learning_skill_patch_reject',\n 'Reject skill patch',\n {\n ...safeMutation,\n auditTarget: 'learning_candidates/learning_events',\n },\n 'Rejects one proposed skill patch candidate.',\n ),\n action(\n 'neondeck_learning_skill_patch_list',\n 'List skill patches',\n readOnly,\n 'Lists skill patch candidates and decision history.',\n ),\n action(\n 'neondeck_learning_skill_patch_restore',\n 'Restore skill patch',\n {\n ...safeMutation,\n auditTarget: 'learning_events/config_history/SKILL.md',\n },\n 'Restores an applied skill patch from audited before-content after explicit user/API confirmation, only when the current skill file still matches the applied content.',\n ),\n action(\n 'neondeck_learning_operator_state',\n 'Read learning operator state',\n readOnly,\n 'Reads consolidated learning reviews, candidates, memory decisions, skill patch decisions, and audit history.',\n ),\n action(\n 'neondeck_session_create',\n 'Create chat session',\n {\n ...safeMutation,\n auditTarget: 'chat_sessions/chat_session_surfaces/chat_session_audit',\n },\n 'Creates indexed chat session metadata and optionally activates it for a surface.',\n ),\n action(\n 'neondeck_session_switch',\n 'Switch active chat session',\n {\n ...safeMutation,\n auditTarget: 'chat_session_surfaces/chat_session_audit',\n },\n 'Switches a dashboard or future TUI surface to an existing non-archived session.',\n ),\n action(\n 'neondeck_session_rename',\n 'Rename chat session',\n {\n ...safeMutation,\n auditTarget: 'chat_sessions/chat_session_audit',\n },\n 'Renames indexed chat session metadata.',\n ),\n action(\n 'neondeck_session_pin',\n 'Pin chat session',\n {\n ...safeMutation,\n auditTarget: 'chat_sessions/chat_session_audit',\n },\n 'Pins or unpins indexed chat session metadata.',\n ),\n action(\n 'neondeck_session_archive',\n 'Archive chat session',\n {\n ...safeMutation,\n auditTarget: 'chat_sessions/chat_session_audit',\n },\n 'Archives session metadata without deleting Flue transcript history.',\n ),\n action(\n 'neondeck_session_restore',\n 'Restore chat session',\n {\n ...safeMutation,\n auditTarget: 'chat_sessions/chat_session_audit',\n },\n 'Restores archived session metadata.',\n ),\n action(\n 'neondeck_session_link_context',\n 'Link chat session context',\n {\n ...safeMutation,\n auditTarget: 'chat_sessions/chat_session_audit',\n },\n 'Links repo, watch, task, UI metadata, or summary data to indexed session metadata.',\n ),\n action(\n 'neondeck_config_remove_repo',\n 'Remove repository config',\n {\n ...destructiveMutation,\n auditTarget: 'config_history',\n },\n 'Requires confirm=true before removing a configured repository.',\n ),\n action(\n 'neondeck_watch_pr_remove',\n 'Remove PR watch',\n {\n ...destructiveMutation,\n auditTarget: 'pr_watches/scheduled_tasks/scheduled_task_runs',\n },\n 'Requires confirm=true before removing the watch and its polling task history.',\n ),\n action(\n 'neondeck_worktree_cleanup',\n 'Clean up worktrees',\n {\n ...destructiveMutation,\n auditTarget: 'worktrees/worktree_cleanup_attempts',\n },\n 'Deletes eligible Neondeck-owned worktrees according to cleanup policy and never deletes adopted worktrees without explicit confirmation.',\n ),\n workflow(\n 'command-run',\n 'Run command workflow',\n {\n ...safeMutation,\n auditTarget: 'workflow_summaries/workflow_events',\n },\n 'Runs a bounded command through Flue with durable run identity and summaries.',\n ),\n workflow(\n 'briefing',\n 'Run briefing workflow',\n {\n ...safeMutation,\n auditTarget: 'workflow_summaries/workflow_events',\n },\n 'Runs the bounded briefing workflow and records Flue observations.',\n ),\n workflow(\n 'watch-pr',\n 'Run watch-pr workflow',\n {\n ...safeMutation,\n auditTarget: 'pr_watches/jobs/workflow_events',\n },\n 'Creates a PR watch through the Flue workflow surface.',\n ),\n workflow(\n 'review-pr-for-human',\n 'Run PR review assist workflow',\n {\n ...safeMutation,\n auditTarget:\n 'reports/pr_review_drafts/pr_review_draft_comments/notifications/workflow_events',\n },\n 'Runs bounded PR review assistance through the Flue workflow surface, creating local reports and Neon-origin draft comments only.',\n ),\n workflow(\n 'fix-pr-ci',\n 'Run PR CI fix workflow',\n {\n ...hostExecution,\n auditTarget:\n 'reports/worktrees/worktree_locks/kilo_tasks/kilo_task_events/prepared_diffs/notifications/workflow_events',\n },\n 'Runs bounded CI fix assistance through the Flue workflow surface, creating local reports, local worktree changes, and prepared diffs only. It does not push or comment.',\n ),\n workflow(\n 'scheduled-agent-instruction',\n 'Run scheduled instruction workflow',\n {\n ...safeMutation,\n auditTarget: 'scheduled_task_runs/workflow_events',\n },\n 'Runs one bounded scheduled instruction occurrence through Flue.',\n ),\n workflow(\n 'triage-pr-event',\n 'Run PR event triage workflow',\n readOnly,\n 'Classifies a structured PR watcher delta through the Flue workflow surface without mutating GitHub, repos, or worktrees.',\n ),\n workflow(\n 'prepare-pr-worktree',\n 'Run PR worktree preparation workflow',\n {\n ...safeMutation,\n auditTarget: 'worktrees/worktree_locks/workflow_events',\n },\n 'Creates, syncs, locks, and inspects an isolated PR worktree through the Flue workflow surface without fixing, committing, pushing, or commenting.',\n ),\n workflow(\n 'fix-pr-ci-failure',\n 'Run PR CI fixer workflow',\n {\n ...hostExecution,\n auditTarget:\n 'worktrees/worktree_locks/repo_edit_events/prepared_diffs/execution_approvals/workflow_events',\n },\n 'Runs the bounded PR CI fixer through the Flue workflow surface. It may apply scoped repo-edit patches, commit locally, and prepare a diff, but it does not push or comment.',\n ),\n workflow(\n 'fix-pr-review-feedback',\n 'Run PR review feedback fix workflow',\n {\n ...safeMutation,\n auditTarget: 'worktrees/repo_edit_events/prepared_diffs/workflow_events',\n },\n 'Plans review-feedback fixes from deterministic GitHub facts and applies only bounded repo-edit changes inside an isolated worktree; it commits locally and prepares a diff without pushing or commenting.',\n ),\n workflow(\n 'verify-pr-worktree',\n 'Run PR worktree verification workflow',\n {\n ...hostExecution,\n auditTarget: 'execution_approvals/workflow_events',\n },\n 'Runs configured checks for an isolated PR worktree through the execution approval policy before any push-back workflow is allowed.',\n ),\n workflow(\n 'verify-then-push-pr-autofix',\n 'Run PR autofix verify then push workflow',\n {\n ...destructiveMutation,\n auditTarget:\n 'execution_approvals/prepared_diffs/worktrees/worktree_events/notifications/workflow_events',\n },\n 'Runs configured checks for an approved prepared diff and then delegates to the bounded push workflow. Execution approvals, push policy, branch permissions, and clean-worktree gates remain authoritative.',\n ),\n workflow(\n 'push-pr-autofix',\n 'Run PR autofix push workflow',\n {\n ...destructiveMutation,\n auditTarget:\n 'prepared_diffs/worktrees/worktree_events/notifications/workflow_events',\n },\n 'Runs the bounded PR autofix push workflow. It pushes only approved and verified prepared diffs, and records blocked attempts without deleting worktrees.',\n ),\n workflow(\n 'dev-doctor',\n 'Run dev-doctor workflow',\n readOnly,\n 'Runs read-only local diagnostics through the Flue workflow surface.',\n ),\n workflow(\n 'scheduler-tick',\n 'Run scheduler-tick workflow',\n {\n ...safeMutation,\n auditTarget: 'jobs/notifications/workflow_events/reports',\n },\n 'Runs due scheduled work through the Flue workflow surface and records job outcomes, notifications, workflow observations, and scheduled report artifacts.',\n ),\n workflow(\n 'curate_learning_store',\n 'Run memory curation workflow',\n {\n ...safeMutation,\n auditTarget:\n 'learning_reviews/learning_candidates/memories/memory_events/workflow_events',\n },\n 'Runs bounded model-backed memory curation and applies or proposes changes through typed audited memory actions.',\n ),\n workflow(\n 'review_conversation_for_learning',\n 'Run conversation learning review workflow',\n {\n ...safeMutation,\n auditTarget:\n 'learning_reviews/learning_candidates/memories/memory_events/workflow_events',\n },\n 'Runs bounded model-backed conversation reflection and applies or proposes durable memory changes through typed audited memory actions.',\n ),\n workflow(\n 'review_pr_batch_for_learning',\n 'Run PR learning retrospective workflow',\n {\n ...safeMutation,\n auditTarget:\n 'learning_reviews/learning_candidates/memories/memory_events/config_history/workflow_events',\n },\n 'Runs bounded model-backed PR/autopilot retrospectives over compact summaries and applies or proposes memory and skill changes through typed actions.',\n ),\n workflow(\n 'handoff_to_kilo',\n 'Run Kilo handoff workflow',\n {\n ...hostExecution,\n auditTarget: 'kilo_tasks/kilo_task_events/workflow_events',\n },\n 'Admits an explicit Kilo handoff as a bounded Flue run, then lets the app supervisor own the background process.',\n ),\n workflow(\n 'reconcile_kilo_task',\n 'Reconcile Kilo task workflow',\n {\n ...safeMutation,\n auditTarget: 'kilo_tasks/kilo_task_events/worktree_events',\n },\n 'Reconciles persisted Kilo task state after restart by inspecting detached process, session, and diff facts.',\n ),\n workflow(\n 'summarize_kilo_session',\n 'Summarize Kilo session workflow',\n {\n ...safeMutation,\n auditTarget: 'kilo_tasks/workflow_events',\n },\n 'Summarizes linked Kilo task/session metadata and persists the bounded summary on the task record.',\n ),\n workflow(\n 'review_kilo_result',\n 'Review Kilo result workflow',\n {\n ...safeMutation,\n auditTarget: 'kilo_result_state/kilo_result_events/prepared_diffs',\n },\n 'Runs bounded Kilo result review and records classification in app state.',\n ),\n workflow(\n 'verify_kilo_result',\n 'Verify Kilo result workflow',\n {\n ...hostExecution,\n auditTarget: 'kilo_result_state/kilo_result_events/execution_approvals',\n },\n 'Runs configured Kilo result checks through execution approval policy.',\n ),\n workflow(\n 'promote_kilo_result',\n 'Promote Kilo result workflow',\n {\n ...safeMutation,\n auditTarget: 'kilo_result_state/kilo_result_events',\n },\n 'Runs the Kilo promotion admission layer and explicitly avoids commit, push, or PR comment mutation.',\n ),\n route(\n '/api/reports',\n 'Reports list API',\n readOnly,\n 'Lists local, self-contained Neondeck report artifacts for dashboard display.',\n ),\n route(\n '/api/reports/:id',\n 'Report metadata API',\n readOnly,\n 'Reads one local report metadata record by durable report id for dashboard and local clients.',\n ),\n route(\n '/api/reports/:id/stage-docs-fix',\n 'Stage docs drift fix API',\n {\n ...hostExecution,\n auditTarget:\n 'reports/worktrees/worktree_locks/kilo_tasks/kilo_task_events',\n },\n 'Starts a bounded docs-only Kilo handoff from a docs-drift report. It creates local worktree state only and never pushes or comments.',\n ),\n route(\n '/api/scheduled-tasks',\n 'Scheduled tasks API',\n {\n ...safeMutation,\n auditTarget: 'scheduled_tasks/scheduled_task_runs',\n },\n 'GET lists canonical scheduled tasks; task creation uses the typed briefing and instruction endpoints.',\n ),\n route(\n '/api/briefings',\n 'Briefing state API',\n readOnly,\n 'Reads typed briefing profile and operational run metadata; assistant prose remains in Flue persistence.',\n ),\n route(\n '/api/briefings/profile',\n 'Briefing profile API',\n {\n ...safeMutation,\n auditTarget: 'briefing_profiles/config_history/scheduled_tasks',\n },\n 'Updates validated briefing instructions and scheduling fields.',\n ),\n route(\n '/api/briefings/runs/:id',\n 'Briefing run grounding API',\n readOnly,\n 'Reads one exact deterministic briefing snapshot by durable run id.',\n ),\n route(\n '/api/briefings/run',\n 'Conversational briefing admission API',\n {\n ...safeMutation,\n auditTarget: 'briefing_runs/chat_session_command_events/notifications',\n },\n 'Persists a deterministic snapshot before dispatching a normal display-assistant turn.',\n ),\n route(\n '/api/scheduled-tasks/briefings',\n 'Briefing task API',\n {\n ...safeMutation,\n auditTarget: 'scheduled_tasks/scheduled_task_runs',\n },\n 'Creates or updates canonical briefing tasks.',\n ),\n route(\n '/api/scheduled-tasks/instructions',\n 'Scheduled instruction API',\n {\n ...safeMutation,\n auditTarget: 'scheduled_tasks/scheduled_task_runs',\n },\n 'Creates or updates bounded scheduled agent instructions.',\n ),\n route(\n '/api/scheduled-tasks/:id',\n 'Scheduled task detail API',\n {\n ...readOnly,\n auditTarget: 'scheduled_tasks/scheduled_task_runs',\n },\n 'Reads one canonical scheduled task and its latest execution facts.',\n ),\n route(\n '/api/scheduled-tasks/:id/pause',\n 'Scheduled task pause API',\n {\n ...safeMutation,\n auditTarget: 'scheduled_tasks/scheduled_task_runs',\n },\n 'Pauses a scheduled task without deleting its run history.',\n ),\n route(\n '/api/scheduled-tasks/:id/resume',\n 'Scheduled task resume API',\n {\n ...safeMutation,\n auditTarget: 'scheduled_tasks/scheduled_task_runs',\n },\n 'Resumes a scheduled task without immediately executing it.',\n ),\n route(\n 'DELETE /api/scheduled-tasks/:id',\n 'Scheduled task delete API',\n {\n ...destructiveMutation,\n auditTarget: 'scheduled_task_runs/scheduled_tasks',\n },\n 'DELETE removes a scheduled task and its local execution history.',\n ),\n route(\n '/reports/:id',\n 'Report artifact route',\n readOnly,\n 'Serves one local HTML report artifact by durable report id behind local-access checks.',\n ),\n route(\n 'GET /api/reviews',\n 'PR review inbox API',\n readOnly,\n 'Reads durable local PR review lifecycle records and review-requested queue entries.',\n ),\n route(\n 'GET /api/reviews/:id',\n 'PR review record API',\n readOnly,\n 'Reads one durable local PR review lifecycle record.',\n ),\n route(\n 'POST /api/reviews',\n 'Start PR review API',\n {\n ...safeMutation,\n auditTarget: 'pr_reviews/workflow_summaries/workflow_events',\n },\n 'Creates or resets one local PR review record and admits the bounded review-pr-for-human workflow without submitting anything to GitHub.',\n ),\n route(\n 'POST /api/reviews/:id/review',\n 'Re-review PR API',\n {\n ...safeMutation,\n auditTarget: 'pr_reviews/workflow_summaries/workflow_events',\n },\n 'Reuses one durable local PR review record for a new head and preserves its previous verdict audit field.',\n ),\n route(\n '/api/runtime/status',\n 'Runtime status API',\n readOnly,\n 'Reads readiness facts for the dashboard and local API clients.',\n ),\n route(\n '/api/events',\n 'Dashboard event stream API',\n readOnly,\n 'Multiplexes config, notification, PR review, and chat session changes over one local dashboard stream.',\n ),\n route(\n '/api/config/reload',\n 'Config reload API',\n {\n ...safeMutation,\n auditTarget: 'config_events',\n },\n 'Validates runtime config files and emits a local config reload event without writing config.',\n ),\n route(\n '/api/dashboard/config',\n 'Dashboard config API',\n {\n ...safeMutation,\n auditTarget: 'config_history',\n },\n 'GET reads dashboard layout; POST replaces it with a validated statusline plus tabbed-region layout.',\n ),\n route(\n '/api/dashboard/preset',\n 'Dashboard preset API',\n {\n ...safeMutation,\n auditTarget: 'config_history',\n },\n 'Applies a known dashboard layout preset and emits config-change events.',\n ),\n route(\n '/api/safety/policy',\n 'Safety policy API',\n readOnly,\n 'Reads this safety policy for the dashboard and local API clients.',\n ),\n route(\n '/api/execution/policy',\n 'Execution policy API',\n {\n ...safeMutation,\n auditTarget: 'config_history',\n },\n 'GET reads host execution approval policy; POST updates policy and preapproved commands through audited config history.',\n ),\n route(\n '/api/execution/check',\n 'Execution policy check API',\n readOnly,\n 'Classifies a proposed host command without running it.',\n ),\n route(\n '/api/execution/approvals',\n 'Execution approvals API',\n {\n ...safeMutation,\n auditTarget: 'execution_approvals',\n },\n 'GET lists execution approval records; POST creates a pending approval request without running a command.',\n ),\n route(\n '/api/execution/approvals/:id/resolve',\n 'Execution approval resolution API',\n {\n ...safeMutation,\n auditTarget:\n 'execution_approvals/config_history/chat_session_command_events/notifications',\n },\n 'Approves or denies a pending execution request and nudges the requesting display-assistant session when linked. allow-always also updates preapproved command config.',\n ),\n route(\n '/api/execution/run',\n 'Approved execution API',\n {\n ...hostExecution,\n auditTarget: 'execution_approvals',\n },\n 'Runs one approved local or exe.dev command and records bounded redacted output.',\n ),\n route(\n '/api/execution/exedev/sync-checkout',\n 'exe.dev checkout sync API',\n {\n ...hostExecution,\n auditTarget: 'execution_approvals',\n },\n 'Syncs a declared repo/worktree checkout on an existing exe.dev VM through approved execution steps.',\n ),\n route(\n '/api/mcp/servers',\n 'MCP servers API',\n {\n ...safeMutation,\n auditTarget: 'config_history',\n },\n 'GET reads MCP server status; POST adds a strict mcp.json server entry.',\n ),\n route(\n '/api/mcp/servers/:id',\n 'MCP server mutation API',\n {\n ...destructiveMutation,\n auditTarget: 'config_history/mcp_tool_approvals/mcp_oauth_tokens',\n },\n 'PATCH updates one MCP server; DELETE requires confirmation before removing server config and cached MCP state.',\n ),\n route(\n '/api/mcp/servers/:id/enable',\n 'Enable MCP server API',\n {\n ...safeMutation,\n auditTarget: 'config_history',\n },\n 'Enables one configured MCP server and refreshes the registry.',\n ),\n route(\n '/api/mcp/servers/:id/disable',\n 'Disable MCP server API',\n {\n ...safeMutation,\n auditTarget: 'config_history',\n },\n 'Disables one configured MCP server and closes its connection.',\n ),\n route(\n '/api/mcp/servers/:id/tools',\n 'MCP tool catalog API',\n readOnly,\n 'Reads cached MCP tool catalogs without invoking third-party tools.',\n ),\n route(\n '/api/mcp/servers/:id/refresh',\n 'Refresh MCP server API',\n readOnly,\n 'Reconnects one enabled MCP server and refreshes cached tool catalogs.',\n ),\n route(\n '/api/mcp/servers/:id/login',\n 'Start MCP OAuth login API',\n {\n ...safeMutation,\n auditTarget: 'mcp_oauth_logins/mcp_oauth_tokens',\n },\n 'Starts a state-bound OAuth login and returns the authorization URL.',\n ),\n route(\n '/api/mcp/logins/:id',\n 'MCP OAuth login API',\n readOnly,\n 'Reads one pending or completed MCP OAuth login record without exposing tokens.',\n ),\n route(\n '/api/mcp/oauth/callback',\n 'MCP OAuth callback API',\n {\n ...safeMutation,\n auditTarget: 'mcp_oauth_logins/mcp_oauth_tokens',\n },\n 'Validates OAuth state, exchanges the authorization code, stores tokens in SQLite, and never writes tokens to config.',\n ),\n route(\n '/api/mcp/servers/:id/logout',\n 'MCP OAuth logout API',\n {\n ...destructiveMutation,\n auditTarget: 'mcp_oauth_tokens',\n },\n 'Requires confirmation before deleting stored OAuth tokens for one MCP server.',\n ),\n route(\n '/api/mcp/approvals',\n 'MCP approvals API',\n readOnly,\n 'Lists pending or resolved MCP tool-call approvals.',\n ),\n route(\n '/api/mcp/approvals/:id/resolve',\n 'Resolve MCP approval API',\n {\n ...destructiveMutation,\n auditTarget:\n 'mcp_tool_approvals/chat_session_command_events/notifications',\n },\n 'Approves or denies one pending third-party MCP tool call by exact approval id and nudges the requesting display-assistant session when linked.',\n ),\n route(\n '/api/mcp/audit',\n 'MCP audit API',\n readOnly,\n 'Reads recent MCP tool-call audit rows.',\n ),\n route(\n '/api/autopilot/triage-pr-event',\n 'PR event triage API',\n readOnly,\n 'Classifies a structured PR watcher delta for dashboard, smoke-test, and future TUI clients.',\n ),\n route(\n '/api/autopilot/prepare-pr-worktree',\n 'PR worktree preparation API',\n {\n ...safeMutation,\n auditTarget: 'worktrees/worktree_locks',\n },\n 'Fetches deterministic GitHub PR/check facts and prepares a managed PR worktree without fixing, committing, pushing, or commenting.',\n ),\n route(\n '/api/autopilot/fix-pr-ci-failure',\n 'PR CI fixer API',\n {\n ...hostExecution,\n auditTarget:\n 'worktrees/worktree_locks/repo_edit_events/prepared_diffs/execution_approvals',\n },\n 'Fetches failing check facts/log availability, runs diagnostics, optionally applies a scoped repo-edit patch in a managed worktree, commits locally, and creates a prepared diff without pushing or commenting.',\n ),\n route(\n '/api/autopilot/fix-pr-review-feedback',\n 'PR review feedback fix API',\n {\n ...safeMutation,\n auditTarget: 'worktrees/repo_edit_events/prepared_diffs',\n },\n 'Fetches deterministic review feedback, prepares or reuses a managed worktree, applies bounded repo-edit changes, commits locally, and records a prepared diff without pushing or commenting.',\n ),\n route(\n '/api/prepared-diffs',\n 'Prepared diffs API',\n readOnly,\n 'Lists prepared-diff records for dashboard and future TUI clients.',\n ),\n route(\n '/api/prepared-diffs/:id/summary',\n 'Prepared diff summary API',\n readOnly,\n 'Reads one prepared-diff record and backend-computed diff summary.',\n ),\n route(\n '/api/prepared-diffs/:id/files',\n 'Prepared diff files API',\n readOnly,\n 'Reads changed files for a prepared diff through backend git helpers.',\n ),\n route(\n '/api/prepared-diffs/:id/files/diff',\n 'Prepared file diff API',\n readOnly,\n 'Reads one prepared file patch through backend git helpers.',\n ),\n route(\n '/api/prepared-diffs/:id/verify',\n 'Prepared diff verification API',\n {\n ...safeMutation,\n auditTarget: 'prepared_diffs/prepared_diff_approvals',\n },\n 'Records a verification request without running host commands directly.',\n ),\n route(\n '/api/autopilot/push-pr-autofix',\n 'PR autofix push API',\n {\n ...destructiveMutation,\n auditTarget: 'prepared_diffs/worktrees/worktree_events/notifications',\n },\n 'Pushes an approved and verified prepared diff through the same bounded push service used by the Flue workflow.',\n ),\n route(\n '/api/prepared-diffs/:id/push',\n 'Prepared diff push API',\n {\n ...destructiveMutation,\n auditTarget: 'prepared_diffs/worktrees/worktree_events/notifications',\n },\n 'Pushes one approved and verified prepared diff through the bounded push service, or records a blocked attempt while retaining the worktree.',\n ),\n route(\n '/api/prepared-diffs/:id/request-revision',\n 'Prepared diff revision API',\n {\n ...safeMutation,\n auditTarget: 'prepared_diffs/prepared_diff_approvals/kilo_tasks',\n },\n 'User-surface route that records a revision request and may dispatch a bounded Kilo revision run for the retained source worktree.',\n ),\n route(\n '/api/prepared-diffs/:id/run-revision',\n 'Prepared diff run revision API',\n {\n ...safeMutation,\n auditTarget: 'prepared_diffs/kilo_tasks',\n },\n 'User-surface route that starts a bounded Kilo revision run from an already recorded revision request without adding a model-callable action.',\n ),\n route(\n '/api/prepared-diffs/:id/approve-push',\n 'Prepared diff push approval API',\n {\n ...destructiveMutation,\n auditTarget:\n 'prepared_diffs/prepared_diff_approvals/workflow_summaries/notifications',\n },\n 'Requires confirmation, records push-back approval, and admits the configured push or verify-then-push workflow. Push policy, verification, branch permission, execution approval, and clean-worktree gates still run inside the delegated workflow.',\n ),\n route(\n '/api/prepared-diffs/:id/abandon',\n 'Prepared diff abandon API',\n {\n ...destructiveMutation,\n auditTarget: 'prepared_diffs/prepared_diff_approvals/worktree_events',\n },\n 'Requires confirmation and abandons the prepared-diff record without deleting the source worktree.',\n ),\n route(\n '/api/prepared-diffs/:id/worktree-path',\n 'Prepared diff worktree path API',\n readOnly,\n 'Returns the managed source worktree path for a prepared diff.',\n ),\n route(\n '/api/prepared-diffs/:id/recovery',\n 'Prepared diff recovery options API',\n readOnly,\n 'Reads bounded recovery options for a prepared diff.',\n ),\n route(\n '/api/prepared-diffs/:id/recovery/run',\n 'Prepared diff recovery runner API',\n {\n ...hostExecution,\n auditTarget:\n 'prepared_diffs/prepared_diff_approvals/worktrees/workflow_summaries/notifications/execution_approvals',\n },\n 'Dispatches one bounded recovery action through the same prepared-diff, worktree sync/cleanup, and autopilot workflow services used by Flue actions.',\n ),\n route(\n '/api/autopilot/verify-pr-worktree',\n 'PR worktree verification API',\n {\n ...hostExecution,\n auditTarget: 'execution_approvals',\n },\n 'Runs configured checks for a managed PR worktree through the execution approval policy.',\n ),\n route(\n '/api/autopilot/comment-pr-autofix-result',\n 'Comment PR autofix result API',\n {\n ...safeMutation,\n auditTarget: 'workflow_summaries/GitHub issue comments',\n },\n 'Posts a concise PR comment generated from prepared-diff/autopilot facts and records the human-readable audit summary.',\n ),\n route(\n '/api/session',\n 'Active session API',\n readOnly,\n 'Reads the active chat session for a dashboard or future TUI surface.',\n ),\n route(\n '/api/sessions',\n 'Chat sessions API',\n {\n ...safeMutation,\n auditTarget: 'chat_sessions/chat_session_surfaces/chat_session_audit',\n },\n 'GET lists indexed session metadata; POST creates and optionally activates a new session.',\n ),\n route(\n '/api/sessions/:id',\n 'Chat session read API',\n {\n ...readOnly,\n audited: true,\n auditTarget: 'chat_session_audit',\n },\n 'Reads one indexed session metadata record and audits the read.',\n ),\n route(\n '/api/sessions/:id/messages',\n 'Chat session messages API',\n {\n ...readOnly,\n audited: true,\n auditTarget: 'chat_session_audit',\n },\n 'Audits a request for Flue-owned messages without copying transcripts into app state.',\n ),\n route(\n '/api/sessions/:id/command-events',\n 'Chat session command event API',\n {\n ...safeMutation,\n auditTarget: 'chat_session_command_events/chat_session_audit',\n },\n 'GET lists durable slash-command transcript entries; POST records or updates command event rows for the session UI.',\n ),\n route(\n '/api/sessions/:id/summary/refresh',\n 'Chat session summary refresh API',\n {\n ...safeMutation,\n auditTarget: 'chat_sessions/chat_session_audit',\n },\n 'Refreshes a compact session summary from metadata or an explicitly provided summary.',\n ),\n route(\n '/api/sessions/:id/reference',\n 'Chat session reference API',\n {\n ...safeMutation,\n auditTarget: 'chat_sessions/chat_session_audit',\n },\n 'Reads compact cross-session summary and metadata while auditing context use, refreshing stale metadata when needed.',\n ),\n route(\n '/api/sessions/:id/switch',\n 'Chat session switch API',\n {\n ...safeMutation,\n auditTarget: 'chat_session_surfaces/chat_session_audit',\n },\n 'Switches a local surface to an existing non-archived session id.',\n ),\n route(\n '/api/sessions/:id/*',\n 'Chat session metadata mutation API',\n {\n ...safeMutation,\n auditTarget: 'chat_sessions/chat_session_audit',\n },\n 'Renames, pins, archives, restores, or links context metadata without mutating Flue transcripts.',\n ),\n route(\n '/api/models',\n 'Model config API',\n {\n ...safeMutation,\n auditTarget: 'config_history',\n },\n 'Updates display-assistant, utility, and subagent model settings.',\n ),\n route(\n '/api/providers/:provider',\n 'Provider config API',\n {\n ...safeMutation,\n auditTarget: 'config_history',\n },\n 'Updates allowlisted provider environment variable references.',\n ),\n route(\n '/api/kilo/*',\n 'Kilo handoff API',\n {\n ...hostExecution,\n auditTarget:\n 'kilo_tasks/kilo_task_events/kilo_result_state/kilo_result_events',\n },\n 'Starts, reads, searches, cancels, reviews, verifies, and records promotion admission for explicit Kilo handoff tasks through app-owned SQLite state.',\n ),\n route(\n '/api/handoff/*',\n 'External agent handoff API',\n {\n ...safeMutation,\n auditTarget:\n 'pr_watches/scheduled_tasks/notifications/workflow_summaries',\n },\n 'Localhost-only registration surface for external agents to create attributed watches, notes, and optionally queue bounded PR review assistance when config allows it. It does not execute commands, approve work, push, or mutate remote providers.',\n ),\n route(\n '/api/memories',\n 'Memory API',\n {\n ...destructiveMutation,\n auditTarget: 'memories/memory_events',\n },\n 'GET reads memory, POST writes user-scoped memory, and DELETE requires confirm=true before archiving through the delete alias.',\n ),\n route(\n '/api/memories/:id/archive',\n 'Memory archive API',\n {\n ...safeMutation,\n auditTarget: 'memories/memory_events',\n },\n 'Archives one memory row while preserving audit history.',\n ),\n route(\n '/api/memory-events',\n 'Memory events API',\n readOnly,\n 'Reads memory event audit history.',\n ),\n route(\n '/api/learning/curate',\n 'Learning curation API',\n {\n ...safeMutation,\n auditTarget:\n 'learning_reviews/learning_candidates/memories/memory_events',\n },\n 'Queues manual model-backed memory curation through the bounded Flue workflow surface.',\n ),\n route(\n '/api/learning/state',\n 'Learning operator state API',\n readOnly,\n 'Reads consolidated learning reviews, candidates, memory decisions, skill patch decisions, and audit history.',\n ),\n route(\n '/api/learning/reviews',\n 'Learning reviews API',\n readOnly,\n 'Lists persisted learning review records, summaries, model selections, and failures.',\n ),\n route(\n '/api/learning/reviews/conversation',\n 'Conversation learning review API',\n {\n ...safeMutation,\n auditTarget:\n 'learning_reviews/learning_candidates/memories/memory_events',\n },\n 'Queues manual model-backed conversation reflection through the bounded Flue workflow surface.',\n ),\n route(\n '/api/learning/reviews/prs',\n 'PR learning retrospective API',\n {\n ...safeMutation,\n auditTarget:\n 'learning_reviews/learning_candidates/memories/memory_events/config_history',\n },\n 'Queues manual PR/autopilot retrospectives through the bounded Flue workflow surface.',\n ),\n route(\n '/api/learning/candidates',\n 'Learning candidates API',\n readOnly,\n 'Lists memory and skill learning candidates.',\n ),\n route(\n '/api/learning/candidates/:id/approve',\n 'Approve learning candidate API',\n {\n ...safeMutation,\n auditTarget: 'learning_candidates/memories/memory_events/config_history',\n },\n 'Applies one reviewed memory or skill learning candidate.',\n ),\n route(\n '/api/learning/candidates/:id/reject',\n 'Reject learning candidate API',\n {\n ...safeMutation,\n auditTarget: 'learning_candidates/memory_events/learning_events',\n },\n 'Rejects one reviewed memory or skill learning candidate.',\n ),\n route(\n '/api/skills/patches',\n 'Skill patches API',\n readOnly,\n 'Lists skill patch candidates and decisions.',\n ),\n route(\n '/api/skills/patches/:id/apply',\n 'Apply skill patch API',\n {\n ...safeMutation,\n auditTarget: 'learning_candidates/config_history/learning_events',\n },\n 'Applies one reviewed skill patch candidate.',\n ),\n route(\n '/api/skills/patches/:id/reject',\n 'Reject skill patch API',\n {\n ...safeMutation,\n auditTarget: 'learning_candidates/learning_events',\n },\n 'Rejects one reviewed skill patch candidate.',\n ),\n route(\n '/api/skills/patches/:id/restore',\n 'Restore skill patch API',\n {\n ...safeMutation,\n auditTarget: 'learning_events/config_history/SKILL.md',\n },\n 'Restores an applied skill patch from audit after explicit confirmation when the skill file still matches the applied content.',\n ),\n];\n\nfunction tool(\n id: string,\n title: string,\n policy: Partial<SafetyPolicyEntry>,\n notes: string,\n) {\n return entry('tool', id, title, policy, notes);\n}\n\nfunction action(\n id: string,\n title: string,\n policy: Partial<SafetyPolicyEntry>,\n notes: string,\n) {\n return entry('action', id, title, policy, notes);\n}\n\nfunction workflow(\n id: string,\n title: string,\n policy: Partial<SafetyPolicyEntry>,\n notes: string,\n) {\n return entry('workflow', id, title, policy, notes);\n}\n\nfunction route(\n id: string,\n title: string,\n policy: Partial<SafetyPolicyEntry>,\n notes: string,\n) {\n return entry('route', id, title, policy, notes);\n}\n\nfunction cli(\n id: string,\n title: string,\n policy: Partial<SafetyPolicyEntry>,\n notes: string,\n) {\n return entry('cli', id, title, policy, notes);\n}\n\nfunction entry(\n primitive: SafetyPolicyEntry['primitive'],\n id: string,\n title: string,\n policy: Partial<SafetyPolicyEntry>,\n notes: string,\n): SafetyPolicyEntry {\n return {\n id,\n primitive,\n title,\n class: policy.class ?? 'read-only',\n unattended: policy.unattended ?? false,\n requiresConfirmation: policy.requiresConfirmation ?? false,\n audited: policy.audited ?? false,\n auditTarget: policy.auditTarget ?? 'none',\n notes,\n };\n}\n","import { executionPolicyFromConfig } from '../execution-policy';\nimport {\n type RuntimePaths,\n ensureRuntimeHomeSync,\n parseAppConfig,\n readRuntimeJsonSync,\n runtimePaths,\n} from '../../runtime-home';\nimport { entries } from './policy-entries';\nimport { type SafetyPolicy, type SafetyPolicyEntry } from './schemas';\n\nexport function readSafetyPolicy(\n paths: RuntimePaths = runtimePaths(),\n): SafetyPolicy {\n ensureRuntimeHomeSync(paths);\n const execution = executionPolicyFromConfig(\n readRuntimeJsonSync(paths.config, parseAppConfig),\n );\n return {\n ok: true,\n action: 'safety_policy_read',\n version: 5,\n summary: summarizeEntries(entries),\n confirmationPolicy:\n 'Destructive mutations require explicit user confirmation and action input confirm=true. Safe mutations should be user-directed and audited when they change durable state.',\n hostExecutionPolicy: `Host execution is action-mediated. Backends enabled by config: ${execution.enabledBackends.join(', ')}. Preapproved single commands may run without an interactive approval through neondeck_execution_run; all other interactive commands require approval and unattended commands default to deny. Hardline commands cannot be preapproved.`,\n executionPolicy: {\n defaultBackend: execution.defaultBackend,\n enabledBackends: execution.enabledBackends,\n supportedBackends: execution.supportedBackends,\n approvalMode: execution.approvalMode,\n unattended: execution.unattended,\n preapprovedCommandCount: execution.preapprovedCommands.length,\n defaultLocalAccess: execution.defaults.localAccess,\n exeDevPlanned: execution.defaults.exeDevPlanned,\n },\n entries,\n fetchedAt: new Date().toISOString(),\n };\n}\n\nexport function summarizeEntries(\n items: SafetyPolicyEntry[],\n): SafetyPolicy['summary'] {\n return {\n readOnly: items.filter((item) => item.class === 'read-only').length,\n safeMutation: items.filter((item) => item.class === 'safe-mutation').length,\n destructiveMutation: items.filter(\n (item) => item.class === 'destructive-mutation',\n ).length,\n hostExecution: items.filter((item) => item.class === 'host-execution')\n .length,\n requiresConfirmation: items.filter((item) => item.requiresConfirmation)\n .length,\n unattendedAllowed: items.filter((item) => item.unattended).length,\n audited: items.filter((item) => item.audited).length,\n };\n}\n","import { defineTool } from '@flue/runtime';\nimport * as v from 'valibot';\nimport { readSafetyPolicy } from './service';\nimport { safetyPolicySchema } from './schemas';\n\nexport const safetyPolicyLookupTool = defineTool({\n name: 'neondeck_safety_policy_lookup',\n description:\n 'Read Neondeck safety and approval policy for read-only, mutation, destructive, and future host-execution actions.',\n input: v.object({}),\n output: safetyPolicySchema,\n run() {\n return readSafetyPolicy();\n },\n});\n"],"mappings":"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kCACA,0BACA,UACA,yFACF;CACA,KACE,qCACA,0BACA,UACA,2IACF;CACA,KACE,kCACA,6BACA,UACA,6DACF;CACA,KACE,gCACA,sBACA,UACA,uEACF;CACA,KACE,kCACA,wBACA;EACE,GAAG;EACH,SAAS;EACT,aAAa;CACf,GACA,uEACF;CACA,KACE,gCACA,8BACA;EACE,GAAG;EACH,SAAS;EACT,aAAa;CACf,GACA,qEACF;CACA,KACE,oCACA,4BACA;EACE,GAAG;EACH,SAAS;EACT,aAAa;CACf,GACA,0FACF;CACA,KACE,+BACA,0BACA,UACA,6DACF;CACA,KACE,mCACA,wBACA,UACA,2CACF;CACA,KACE,wCACA,6BACA,UACA,qEACF;CACA,KACE,iCACA,sBACA,UACA,0GACF;CACA,KACE,sCACA,2BACA,UACA,0EACF;CACA,KACE,wCACA,0BACA,UACA,iEACF;CACA,KACE,yCACA,8BACA,UACA,uEACF;CACA,KACE,6CACA,4BACA,UACA,sEACF;CACA,KACE,mCACA,wBACA,UACA,4DACF;CACA,KACE,8BACA,mBACA,UACA,kCACF;CACA,KACE,+BACA,oBACA,UACA,qDACF;CACA,KACE,kCACA,uBACA,UACA,6DACF;CACA,KACE,+BACA,8BACA,UACA,sEACF;CACA,KACE,0BACA,0BACA,UACA,kEACF;CACA,KACE,6BACA,uBACA,UACA,gFACF;CACA,KACE,kCACA,uBACA,UACA,qFACF;CACA,KACE,8BACA,2BACA,UACA,iFACF;CACA,OACE,sCACA,mBACA,UACA,uFACF;CACA,OACE,mCACA,+BACA,UACA,sGACF;CACA,OACE,uCACA,mCACA;EACE,GAAG;EACH,aAAa;CACf,GACA,sGACF;CACA,OACE,0BACA,6BACA;EACE,GAAG;EACH,aAAa;CACf,GACA,+IACF;CACA,KACE,yBACA,iCACA;EACE,GAAG;EACH,aAAa;CACf,GACA,uLACF;CACA,KACE,+BACA,oBACA,UACA,2DACF;CACA,KACE,6BACA,yBACA,UACA,oEACF;CACA,KACE,8BACA,mBACA,UACA,sDACF;CACA,KACE,iCACA,sBACA,UACA,wCACF;CACA,KACE,6BACA,kBACA,UACA,wCACF;CACA,OACE,iCACA,yBACA;EACE,GAAG;EACH,aAAa;CACf,GACA,kJACF;CACA,IACE,4BACA,yBACA,kBACA,8HACF;CACA,IACE,8BACA,2BACA,wBACA,8JACF;CACA,IACE,0BACA,uBACA,kBACA,8GACF;CACA,IACE,yBACA,sBACA,kBACA,6GACF;CACA,IACE,2BACA,6BACA,UACA,kIACF;CACA,OACE,wBACA,uBACA,UACA,6EACF;CACA,OACE,4BACA,2BACA,UACA,2DACF;CACA,OACE,0BACA,kCACA,UACA,0DACF;CACA,OACE,kCACA,wBACA,UACA,mEACF;CACA,OACE,0BACA,uBACA,UACA,gEACF;CACA,OACE,oCACA,2BACA,UACA,0DACF;CACA,OACE,0BACA,mBACA,UACA,8BACF;CACA,OACE,gCACA,wBACA,UACA,4DACF;CACA,OACE,gCACA,uBACA,UACA,6DACF;CACA,OACE,wBACA,uBACA,UACA,kCACF;CACA,OACE,uBACA,sBACA,UACA,kDACF;CACA,OACE,2BACA,uBACA,UACA,4DACF;CACA,OACE,yBACA,sBACA,UACA,sCACF;CACA,OACE,2BACA,wBACA;EACE,GAAG;EACH,SAAS;EACT,aAAa;CACf,GACA,kEACF;CACA,OACE,yBACA,8BACA;EACE,GAAG;EACH,SAAS;EACT,aAAa;CACf,GACA,0EACF;CACA,OACE,6BACA,4BACA;EACE,GAAG;EACH,SAAS;EACT,aAAa;CACf,GACA,gGACF;CACA,OACE,oCACA,2BACA;EACE,GAAG;EACH,aAAa;CACf,GACA,wFACF;CACA,OACE,8BACA,0BACA;EACE,GAAG;EACH,aAAa;CACf,GACA,0HACF;CACA,OACE,wBACA,0BACA,UACA,0CACF;CACA,OACE,0BACA,4BACA,UACA,8CACF;CACA,OACE,kCACA,0BACA,UACA,+CACF;CACA,OACE,6BACA,oBACA,UACA,6CACF;CACA,OACE,4BACA,wBACA,UACA,sFACF;CACA,OACE,2BACA,6BACA,UACA,mIACF;CACA,OACE,wBACA,oCACA;EACE,GAAG;EACH,aAAa;CACf,GACA,6HACF;CACA,OACE,gCACA,+BACA;EACE,GAAG;EACH,aACE;CACJ,GACA,sJACF;CACA,OACE,iCACA,yBACA;EACE,GAAG;EACH,aACE;CACJ,GACA,wMACF;CACA,OACE,4BACA,yBACA;EACE,GAAG;EACH,aAAa;CACf,GACA,4EACF;CACA,OACE,+BACA,4BACA;EACE,GAAG;EACH,aAAa;CACf,GACA,kEACF;CACA,OACE,gDACA,sCACA;EACE,GAAG;EACH,aAAa;EACb,sBAAsB;CACxB,GACA,2MACF;CACA,OACE,uCACA,8BACA;EACE,GAAG;EACH,aAAa;CACf,GACA,2HACF;CACA,OACE,mCACA,0BACA;EACE,GAAG;EACH,aAAa;CACf,GACA,wGACF;CACA,OACE,2CACA,wBACA;EACE,GAAG;EACH,aAAa;CACf,GACA,iFACF;CACA,OACE,kCACA,yBACA,UACA,qHACF;CACA,OACE,oCACA,2BACA;EACE,GAAG;EACH,aAAa;CACf,GACA,qGACF;CACA,OACE,8BACA,+BACA,UACA,gHACF;CACA,OACE,6BACA,+BACA;EACE,GAAG;EACH,aAAa;CACf,GACA,sHACF;CACA,OACE,oCACA,qCACA;EACE,GAAG;EACH,aAAa;CACf,GACA,wFACF;CACA,OACE,8CACA,gCACA;EACE,GAAG;EACH,aAAa;CACf,GACA,uGACF;CACA,OACE,iCACA,wBACA;EACE,GAAG;EACH,aAAa;CACf,GACA,uDACF;CACA,OACE,kCACA,yBACA;EACE,GAAG;EACH,aAAa;CACf,GACA,4DACF;CACA,OACE,kCACA,yBACA;EACE,GAAG;EACH,aAAa;CACf,GACA,wEACF;CACA,OACE,mCACA,sCACA;EACE,GAAG;EACH,aAAa;CACf,GACA,+GACF;CACA,OACE,2CACA,oCACA;EACE,GAAG;EACH,aAAa;CACf,GACA,2GACF;CACA,OACE,0CACA,0BACA;EACE,GAAG;EACH,aAAa;CACf,GACA,wHACF;CACA,OACE,2CACA,2BACA;EACE,GAAG;EACH,aAAa;CACf,GACA,gFACF;CACA,OACE,0CACA,iCACA;EACE,GAAG;EACH,aAAa;CACf,GACA,qEACF;CACA,OACE,2BACA,kBACA;EACE,GAAG;EACH,aAAa;CACf,GACA,wFACF;CACA,OACE,8BACA,qBACA;EACE,GAAG;EACH,aAAa;CACf,GACA,oEACF;CACA,OACE,8BACA,qBACA;EACE,GAAG;EACH,aAAa;CACf,GACA,+DACF;CACA,OACE,+BACA,sBACA;EACE,GAAG;EACH,aAAa;CACf,GACA,6DACF;CACA,OACE,iCACA,wBACA,UACA,sIACF;CACA,OACE,uBACA,0BACA,UACA,+EACF;CACA,OACE,4BACA,yBACA;EACE,GAAG;EACH,aAAa;CACf,GACA,uFACF;CACA,OACE,uBACA,2BACA;EACE,GAAG;EACH,aAAa;CACf,GACA,+EACF;CACA,OACE,iCACA,wBACA;EACE,GAAG;EACH,aACE;CACJ,GACA,wOACF;CACA,OACE,8BACA,qBACA;EACE,GAAG;EACH,aAAa;CACf,GACA,mFACF;CACA,OACE,kCACA,yBACA;EACE,GAAG;EACH,aAAa;CACf,GACA,yHACF;CACA,OACE,2BACA,2BACA;EACE,GAAG;EACH,aACE;CACJ,GACA,gGACF;CACA,OACE,yBACA,gBACA;EACE,GAAG;EACH,aAAa;CACf,GACA,mFACF;CACA,OACE,6BACA,oBACA;EACE,GAAG;EACH,aAAa;CACf,GACA,mGACF;CACA,OACE,sCACA,wBACA,UACA,wEACF;CACA,OACE,yCACA,2BACA,UACA,yEACF;CACA,OACE,gCACA,uBACA,UACA,sEACF;CACA,OACE,4CACA,2BACA,UACA,4DACF;CACA,OACE,6CACA,+BACA,UACA,iEACF;CACA,OACE,uBACA,mBACA,uBACA,iMACF;CACA,OACE,yCACA,+BACA;EACE,GAAG;EACH,aAAa;CACf,GACA,0FACF;CACA,OACE,2CACA,4BACA,UACA,4CACF;CACA,MACE,wCACA,yBACA,UACA,uFACF;CACA,MACE,8CACA,2BACA,UACA,2FACF;CACA,MACE,qDACA,8BACA;EACE,GAAG;EACH,aAAa;CACf,GACA,4JACF;CACA,MACE,8DACA,sCACA;EACE,GAAG;EACH,aAAa;CACf,GACA,wFACF;CACA,MACE,kEACA,sCACA;EACE,GAAG;EACH,aAAa;CACf,GACA,sFACF;CACA,MACE,gDACA,wBACA;EACE,GAAG;EACH,aAAa;CACf,GACA,iKACF;CACA,MACE,8BACA,gDACA;EACE,GAAG;EACH,aAAa;CACf,GACA,gMACF;CACA,MACE,uEACA,iCACA,uBACA,kOACF;CACA,MACE,yEACA,gCACA,uBACA,yKACF;CACA,MACE,2EACA,kCACA,uBACA,2KACF;CACA,MACE,2BACA,uBACA,uBACA,6KACF;CACA,OACE,0BACA,iBACA;EACE,GAAG;EACH,aAAa;CACf,GACA,uFACF;CACA,OACE,8BACA,qBACA;EACE,GAAG;EACH,aAAa;CACf,GACA,wHACF;CACA,OACE,4BACA,4BACA;EACE,GAAG;EACH,aAAa;CACf,GACA,gFACF;CACA,OACE,0CACA,uBACA;EACE,GAAG;EACH,aAAa;CACf,GACA,kHACF;CACA,OACE,6CACA,0BACA;EACE,GAAG;EACH,aAAa;CACf,GACA,+MACF;CACA,OACE,+BACA,uBACA,UACA,2DACF;CACA,OACE,kCACA,8BACA,UACA,gGACF;CACA,OACE,wCACA,4BACA,UACA,sEACF;CACA,OACE,oCACA,2BACA,UACA,4DACF;CACA,OACE,wCACA,+BACA,UACA,+DACF;CACA,KACE,8CACA,mCACA,UACA,yFACF;CACA,OACE,uCACA,mCACA,UACA,yFACF;CACA,OACE,mCACA,iCACA;EACE,GAAG;EACH,aACE;CACJ,GACA,+NACF;CACA,OACE,2CACA,sCACA;EACE,GAAG;EACH,aAAa;CACf,GACA,4HACF;CACA,OACE,2CACA,kCACA;EACE,GAAG;EACH,aAAa;CACf,GACA,2EACF;CACA,OACE,uCACA,8BACA;EACE,GAAG;EACH,aAAa;CACf,GACA,0GACF;CACA,OACE,kCACA,yBACA;EACE,GAAG;EACH,aAAa;CACf,GACA,4GACF;CACA,OACE,mCACA,0BACA,UACA,yKACF;CACA,OACE,wCACA,qBACA;EACE,GAAG;EACH,aACE;CACJ,GACA,iQACF;CACA,OACE,yCACA,sBACA;EACE,GAAG;EACH,aAAa;CACf,GACA,iHACF;CACA,OACE,gDACA,6BACA;EACE,GAAG;EACH,aAAa;CACf,GACA,8HACF;CACA,OACE,sCACA,mBACA;EACE,GAAG;EACH,aAAa;CACf,GACA,oNACF;CACA,OACE,0BACA,iBACA;EACE,GAAG;EACH,aAAa;CACf,GACA,wGACF;CACA,OACE,0BACA,uBACA;EACE,GAAG;EACH,aAAa;CACf,GACA,0EACF;CACA,OACE,6BACA,yBACA;EACE,GAAG;EACH,aAAa;CACf,GACA,4DACF;CACA,OACE,4BACA,sBACA;EACE,GAAG;EACH,aAAa;CACf,GACA,uHACF;CACA,OACE,6BACA,yBACA,UACA,8CACF;CACA,OACE,6BACA,yBACA,UACA,6DACF;CACA,OACE,4BACA,sBACA;EACE,GAAG;EACH,aAAa;CACf,GACA,2EACF;CACA,OACE,+BACA,2BACA,UACA,2DACF;CACA,OACE,2BACA,uBACA,UACA,iEACF;CACA,OACE,gCACA,uBACA;EACE,GAAG;EACH,aAAa;CACf,GACA,6GACF;CACA,OACE,iCACA,wBACA,UACA,8DACF;CACA,OACE,8BACA,qBACA,UACA,0EACF;CACA,OACE,kCACA,8BACA,UACA,qFACF;CACA,OACE,kCACA,4BACA,UACA,yDACF;CACA,OACE,+BACA,mBACA,UACA,wEACF;CACA,OACE,8BACA,0BACA,UACA,kEACF;CACA,OACE,+BACA,sBACA;EACE,GAAG;EACH,aAAa;CACf,GACA,2GACF;CACA,OACE,+BACA,sBACA;EACE,GAAG;EACH,aAAa;CACf,GACA,sFACF;CACA,OACE,gCACA,uBACA;EACE,GAAG;EACH,aAAa;CACf,GACA,2FACF;CACA,OACE,0BACA,yBACA;EACE,GAAG;EACH,aAAa;CACf,GACA,qHACF;CACA,OACE,yBACA,2BACA;EACE,GAAG;EACH,aAAa;CACf,GACA,0GACF;CACA,OACE,2BACA,6BACA;EACE,GAAG;EACH,aAAa;CACf,GACA,qGACF;CACA,OACE,yBACA,6BACA;EACE,GAAG;EACH,aAAa;CACf,GACA,+FACF;CACA,OACE,2BACA,6BACA;EACE,GAAG;EACH,aAAa;CACf,GACA,qGACF;CACA,OACE,6BACA,oBACA;EACE,GAAG;EACH,aAAa;CACf,GACA,wFACF;CACA,OACE,oCACA,2BACA;EACE,GAAG;EACH,aAAa;CACf,GACA,wEACF;CACA,OACE,oCACA,2BACA;EACE,GAAG;EACH,aAAa;CACf,GACA,oFACF;CACA,OACE,0BACA,uBACA;EACE,GAAG;EACH,aAAa;CACf,GACA,4GACF;CACA,OACE,yCACA,uBACA;EACE,GAAG;EACH,aAAa;CACf,GACA,0GACF;CACA,OACE,uCACA,qBACA;EACE,GAAG;EACH,aAAa;CACf,GACA,sGACF;CACA,OACE,wCACA,sBACA;EACE,GAAG;EACH,aAAa;CACf,GACA,6CACF;CACA,OACE,sCACA,sBACA,UACA,oDACF;CACA,OACE,yCACA,uBACA;EACE,GAAG;EACH,aAAa;CACf,GACA,uKACF;CACA,OACE,oCACA,gCACA,UACA,8GACF;CACA,OACE,2BACA,uBACA;EACE,GAAG;EACH,aAAa;CACf,GACA,kFACF;CACA,OACE,2BACA,8BACA;EACE,GAAG;EACH,aAAa;CACf,GACA,iFACF;CACA,OACE,2BACA,uBACA;EACE,GAAG;EACH,aAAa;CACf,GACA,wCACF;CACA,OACE,wBACA,oBACA;EACE,GAAG;EACH,aAAa;CACf,GACA,+CACF;CACA,OACE,4BACA,wBACA;EACE,GAAG;EACH,aAAa;CACf,GACA,qEACF;CACA,OACE,4BACA,wBACA;EACE,GAAG;EACH,aAAa;CACf,GACA,qCACF;CACA,OACE,iCACA,6BACA;EACE,GAAG;EACH,aAAa;CACf,GACA,oFACF;CACA,OACE,+BACA,4BACA;EACE,GAAG;EACH,aAAa;CACf,GACA,gEACF;CACA,OACE,4BACA,mBACA;EACE,GAAG;EACH,aAAa;CACf,GACA,+EACF;CACA,OACE,6BACA,sBACA;EACE,GAAG;EACH,aAAa;CACf,GACA,0IACF;CACA,SACE,eACA,wBACA;EACE,GAAG;EACH,aAAa;CACf,GACA,8EACF;CACA,SACE,YACA,yBACA;EACE,GAAG;EACH,aAAa;CACf,GACA,mEACF;CACA,SACE,YACA,yBACA;EACE,GAAG;EACH,aAAa;CACf,GACA,uDACF;CACA,SACE,uBACA,iCACA;EACE,GAAG;EACH,aACE;CACJ,GACA,kIACF;CACA,SACE,aACA,0BACA;EACE,GAAG;EACH,aACE;CACJ,GACA,yKACF;CACA,SACE,+BACA,sCACA;EACE,GAAG;EACH,aAAa;CACf,GACA,iEACF;CACA,SACE,mBACA,gCACA,UACA,0HACF;CACA,SACE,uBACA,wCACA;EACE,GAAG;EACH,aAAa;CACf,GACA,mJACF;CACA,SACE,qBACA,4BACA;EACE,GAAG;EACH,aACE;CACJ,GACA,6KACF;CACA,SACE,0BACA,uCACA;EACE,GAAG;EACH,aAAa;CACf,GACA,2MACF;CACA,SACE,sBACA,yCACA;EACE,GAAG;EACH,aAAa;CACf,GACA,oIACF;CACA,SACE,+BACA,4CACA;EACE,GAAG;EACH,aACE;CACJ,GACA,4MACF;CACA,SACE,mBACA,gCACA;EACE,GAAG;EACH,aACE;CACJ,GACA,0JACF;CACA,SACE,cACA,2BACA,UACA,qEACF;CACA,SACE,kBACA,+BACA;EACE,GAAG;EACH,aAAa;CACf,GACA,2JACF;CACA,SACE,yBACA,gCACA;EACE,GAAG;EACH,aACE;CACJ,GACA,iHACF;CACA,SACE,oCACA,6CACA;EACE,GAAG;EACH,aACE;CACJ,GACA,wIACF;CACA,SACE,gCACA,0CACA;EACE,GAAG;EACH,aACE;CACJ,GACA,sJACF;CACA,SACE,mBACA,6BACA;EACE,GAAG;EACH,aAAa;CACf,GACA,iHACF;CACA,SACE,uBACA,gCACA;EACE,GAAG;EACH,aAAa;CACf,GACA,6GACF;CACA,SACE,0BACA,mCACA;EACE,GAAG;EACH,aAAa;CACf,GACA,mGACF;CACA,SACE,sBACA,+BACA;EACE,GAAG;EACH,aAAa;CACf,GACA,0EACF;CACA,SACE,sBACA,+BACA;EACE,GAAG;EACH,aAAa;CACf,GACA,uEACF;CACA,SACE,uBACA,gCACA;EACE,GAAG;EACH,aAAa;CACf,GACA,qGACF;CACA,MACE,gBACA,oBACA,UACA,8EACF;CACA,MACE,oBACA,uBACA,UACA,8FACF;CACA,MACE,mCACA,4BACA;EACE,GAAG;EACH,aACE;CACJ,GACA,sIACF;CACA,MACE,wBACA,uBACA;EACE,GAAG;EACH,aAAa;CACf,GACA,uGACF;CACA,MACE,kBACA,sBACA,UACA,yGACF;CACA,MACE,0BACA,wBACA;EACE,GAAG;EACH,aAAa;CACf,GACA,gEACF;CACA,MACE,2BACA,8BACA,UACA,oEACF;CACA,MACE,sBACA,yCACA;EACE,GAAG;EACH,aAAa;CACf,GACA,uFACF;CACA,MACE,kCACA,qBACA;EACE,GAAG;EACH,aAAa;CACf,GACA,8CACF;CACA,MACE,qCACA,6BACA;EACE,GAAG;EACH,aAAa;CACf,GACA,0DACF;CACA,MACE,4BACA,6BACA;EACE,GAAG;EACH,aAAa;CACf,GACA,oEACF;CACA,MACE,kCACA,4BACA;EACE,GAAG;EACH,aAAa;CACf,GACA,2DACF;CACA,MACE,mCACA,6BACA;EACE,GAAG;EACH,aAAa;CACf,GACA,4DACF;CACA,MACE,mCACA,6BACA;EACE,GAAG;EACH,aAAa;CACf,GACA,kEACF;CACA,MACE,gBACA,yBACA,UACA,wFACF;CACA,MACE,oBACA,uBACA,UACA,qFACF;CACA,MACE,wBACA,wBACA,UACA,qDACF;CACA,MACE,qBACA,uBACA;EACE,GAAG;EACH,aAAa;CACf,GACA,yIACF;CACA,MACE,gCACA,oBACA;EACE,GAAG;EACH,aAAa;CACf,GACA,0GACF;CACA,MACE,uBACA,sBACA,UACA,gEACF;CACA,MACE,eACA,8BACA,UACA,wGACF;CACA,MACE,sBACA,qBACA;EACE,GAAG;EACH,aAAa;CACf,GACA,8FACF;CACA,MACE,yBACA,wBACA;EACE,GAAG;EACH,aAAa;CACf,GACA,qGACF;CACA,MACE,yBACA,wBACA;EACE,GAAG;EACH,aAAa;CACf,GACA,yEACF;CACA,MACE,sBACA,qBACA,UACA,mEACF;CACA,MACE,yBACA,wBACA;EACE,GAAG;EACH,aAAa;CACf,GACA,wHACF;CACA,MACE,wBACA,8BACA,UACA,wDACF;CACA,MACE,4BACA,2BACA;EACE,GAAG;EACH,aAAa;CACf,GACA,0GACF;CACA,MACE,wCACA,qCACA;EACE,GAAG;EACH,aACE;CACJ,GACA,uKACF;CACA,MACE,sBACA,0BACA;EACE,GAAG;EACH,aAAa;CACf,GACA,iFACF;CACA,MACE,uCACA,6BACA;EACE,GAAG;EACH,aAAa;CACf,GACA,qGACF;CACA,MACE,oBACA,mBACA;EACE,GAAG;EACH,aAAa;CACf,GACA,wEACF;CACA,MACE,wBACA,2BACA;EACE,GAAG;EACH,aAAa;CACf,GACA,gHACF;CACA,MACE,+BACA,yBACA;EACE,GAAG;EACH,aAAa;CACf,GACA,+DACF;CACA,MACE,gCACA,0BACA;EACE,GAAG;EACH,aAAa;CACf,GACA,+DACF;CACA,MACE,8BACA,wBACA,UACA,oEACF;CACA,MACE,gCACA,0BACA,UACA,uEACF;CACA,MACE,8BACA,6BACA;EACE,GAAG;EACH,aAAa;CACf,GACA,qEACF;CACA,MACE,uBACA,uBACA,UACA,gFACF;CACA,MACE,2BACA,0BACA;EACE,GAAG;EACH,aAAa;CACf,GACA,sHACF;CACA,MACE,+BACA,wBACA;EACE,GAAG;EACH,aAAa;CACf,GACA,+EACF;CACA,MACE,sBACA,qBACA,UACA,oDACF;CACA,MACE,kCACA,4BACA;EACE,GAAG;EACH,aACE;CACJ,GACA,gJACF;CACA,MACE,kBACA,iBACA,UACA,wCACF;CACA,MACE,kCACA,uBACA,UACA,6FACF;CACA,MACE,sCACA,+BACA;EACE,GAAG;EACH,aAAa;CACf,GACA,oIACF;CACA,MACE,oCACA,mBACA;EACE,GAAG;EACH,aACE;CACJ,GACA,gNACF;CACA,MACE,yCACA,8BACA;EACE,GAAG;EACH,aAAa;CACf,GACA,8LACF;CACA,MACE,uBACA,sBACA,UACA,mEACF;CACA,MACE,mCACA,6BACA,UACA,mEACF;CACA,MACE,iCACA,2BACA,UACA,sEACF;CACA,MACE,sCACA,0BACA,UACA,4DACF;CACA,MACE,kCACA,kCACA;EACE,GAAG;EACH,aAAa;CACf,GACA,wEACF;CACA,MACE,kCACA,uBACA;EACE,GAAG;EACH,aAAa;CACf,GACA,gHACF;CACA,MACE,gCACA,0BACA;EACE,GAAG;EACH,aAAa;CACf,GACA,6IACF;CACA,MACE,4CACA,8BACA;EACE,GAAG;EACH,aAAa;CACf,GACA,mIACF;CACA,MACE,wCACA,kCACA;EACE,GAAG;EACH,aAAa;CACf,GACA,8IACF;CACA,MACE,wCACA,mCACA;EACE,GAAG;EACH,aACE;CACJ,GACA,qPACF;CACA,MACE,mCACA,6BACA;EACE,GAAG;EACH,aAAa;CACf,GACA,mGACF;CACA,MACE,yCACA,mCACA,UACA,+DACF;CACA,MACE,oCACA,sCACA,UACA,qDACF;CACA,MACE,wCACA,qCACA;EACE,GAAG;EACH,aACE;CACJ,GACA,qJACF;CACA,MACE,qCACA,gCACA;EACE,GAAG;EACH,aAAa;CACf,GACA,yFACF;CACA,MACE,4CACA,iCACA;EACE,GAAG;EACH,aAAa;CACf,GACA,uHACF;CACA,MACE,gBACA,sBACA,UACA,sEACF;CACA,MACE,iBACA,qBACA;EACE,GAAG;EACH,aAAa;CACf,GACA,0FACF;CACA,MACE,qBACA,yBACA;EACE,GAAG;EACH,SAAS;EACT,aAAa;CACf,GACA,gEACF;CACA,MACE,8BACA,6BACA;EACE,GAAG;EACH,SAAS;EACT,aAAa;CACf,GACA,sFACF;CACA,MACE,oCACA,kCACA;EACE,GAAG;EACH,aAAa;CACf,GACA,oHACF;CACA,MACE,qCACA,oCACA;EACE,GAAG;EACH,aAAa;CACf,GACA,sFACF;CACA,MACE,+BACA,8BACA;EACE,GAAG;EACH,aAAa;CACf,GACA,qHACF;CACA,MACE,4BACA,2BACA;EACE,GAAG;EACH,aAAa;CACf,GACA,kEACF;CACA,MACE,uBACA,sCACA;EACE,GAAG;EACH,aAAa;CACf,GACA,iGACF;CACA,MACE,eACA,oBACA;EACE,GAAG;EACH,aAAa;CACf,GACA,kEACF;CACA,MACE,4BACA,uBACA;EACE,GAAG;EACH,aAAa;CACf,GACA,+DACF;CACA,MACE,eACA,oBACA;EACE,GAAG;EACH,aACE;CACJ,GACA,sJACF;CACA,MACE,kBACA,8BACA;EACE,GAAG;EACH,aACE;CACJ,GACA,qPACF;CACA,MACE,iBACA,cACA;EACE,GAAG;EACH,aAAa;CACf,GACA,+HACF;CACA,MACE,6BACA,sBACA;EACE,GAAG;EACH,aAAa;CACf,GACA,yDACF;CACA,MACE,sBACA,qBACA,UACA,mCACF;CACA,MACE,wBACA,yBACA;EACE,GAAG;EACH,aACE;CACJ,GACA,uFACF;CACA,MACE,uBACA,+BACA,UACA,8GACF;CACA,MACE,yBACA,wBACA,UACA,qFACF;CACA,MACE,sCACA,oCACA;EACE,GAAG;EACH,aACE;CACJ,GACA,+FACF;CACA,MACE,6BACA,iCACA;EACE,GAAG;EACH,aACE;CACJ,GACA,sFACF;CACA,MACE,4BACA,2BACA,UACA,6CACF;CACA,MACE,wCACA,kCACA;EACE,GAAG;EACH,aAAa;CACf,GACA,0DACF;CACA,MACE,uCACA,iCACA;EACE,GAAG;EACH,aAAa;CACf,GACA,0DACF;CACA,MACE,uBACA,qBACA,UACA,6CACF;CACA,MACE,iCACA,yBACA;EACE,GAAG;EACH,aAAa;CACf,GACA,6CACF;CACA,MACE,kCACA,0BACA;EACE,GAAG;EACH,aAAa;CACf,GACA,6CACF;CACA,MACE,mCACA,2BACA;EACE,GAAG;EACH,aAAa;CACf,GACA,+HACF;AACF;AAEA,SAAS,KACP,IACA,OACA,QACA,OACA;CACA,OAAO,MAAM,QAAQ,IAAI,OAAO,QAAQ,KAAK;AAC/C;AAEA,SAAS,OACP,IACA,OACA,QACA,OACA;CACA,OAAO,MAAM,UAAU,IAAI,OAAO,QAAQ,KAAK;AACjD;AAEA,SAAS,SACP,IACA,OACA,QACA,OACA;CACA,OAAO,MAAM,YAAY,IAAI,OAAO,QAAQ,KAAK;AACnD;AAEA,SAAS,MACP,IACA,OACA,QACA,OACA;CACA,OAAO,MAAM,SAAS,IAAI,OAAO,QAAQ,KAAK;AAChD;AAEA,SAAS,IACP,IACA,OACA,QACA,OACA;CACA,OAAO,MAAM,OAAO,IAAI,OAAO,QAAQ,KAAK;AAC9C;AAEA,SAAS,MACP,WACA,IACA,OACA,QACA,OACmB;CACnB,OAAO;EACL;EACA;EACA;EACA,OAAO,OAAO,SAAS;EACvB,YAAY,OAAO,cAAc;EACjC,sBAAsB,OAAO,wBAAwB;EACrD,SAAS,OAAO,WAAW;EAC3B,aAAa,OAAO,eAAe;EACnC;CACF;AACF;;;ACp9EA,SAAgB,iBACd,QAAsB,aAAa,GACrB;CACd,sBAAsB,KAAK;CAC3B,MAAM,YAAY,0BAChB,oBAAoB,MAAM,QAAQ,cAAc,CAClD;CACA,OAAO;EACL,IAAI;EACJ,QAAQ;EACR,SAAS;EACT,SAAS,iBAAiB,OAAO;EACjC,oBACE;EACF,qBAAqB,kEAAkE,UAAU,gBAAgB,KAAK,IAAI,EAAE;EAC5H,iBAAiB;GACf,gBAAgB,UAAU;GAC1B,iBAAiB,UAAU;GAC3B,mBAAmB,UAAU;GAC7B,cAAc,UAAU;GACxB,YAAY,UAAU;GACtB,yBAAyB,UAAU,oBAAoB;GACvD,oBAAoB,UAAU,SAAS;GACvC,eAAe,UAAU,SAAS;EACpC;EACA;EACA,4BAAW,IAAI,KAAK,EAAA,CAAE,YAAY;CACpC;AACF;AAEA,SAAgB,iBACd,OACyB;CACzB,OAAO;EACL,UAAU,MAAM,QAAQ,SAAS,KAAK,UAAU,WAAW,CAAC,CAAC;EAC7D,cAAc,MAAM,QAAQ,SAAS,KAAK,UAAU,eAAe,CAAC,CAAC;EACrE,qBAAqB,MAAM,QACxB,SAAS,KAAK,UAAU,sBAC3B,CAAC,CAAC;EACF,eAAe,MAAM,QAAQ,SAAS,KAAK,UAAU,gBAAgB,CAAC,CACnE;EACH,sBAAsB,MAAM,QAAQ,SAAS,KAAK,oBAAoB,CAAC,CACpE;EACH,mBAAmB,MAAM,QAAQ,SAAS,KAAK,UAAU,CAAC,CAAC;EAC3D,SAAS,MAAM,QAAQ,SAAS,KAAK,OAAO,CAAC,CAAC;CAChD;AACF;;;ACpDA,IAAa,yBAAyB,WAAW;CAC/C,MAAM;CACN,aACE;CACF,OAAO,EAAE,OAAO,CAAC,CAAC;CAClB,QAAQ;CACR,MAAM;EACJ,OAAO,iBAAiB;CAC1B;AACF,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { to as __exportAll } from "./autopilot-B8lfWyA1.js";
|
|
2
|
+
import { t as display_assistant_default } from "./display-assistant-CKU4YJlc.js";
|
|
3
|
+
import { defineWorkflow } from "@flue/runtime";
|
|
4
|
+
import * as v from "valibot";
|
|
5
|
+
//#region src/workflows/scheduled-agent-instruction.ts
|
|
6
|
+
var scheduled_agent_instruction_exports = /* @__PURE__ */ __exportAll({
|
|
7
|
+
default: () => scheduled_agent_instruction_default,
|
|
8
|
+
runs: () => runs
|
|
9
|
+
});
|
|
10
|
+
var runs = async (_c, next) => next();
|
|
11
|
+
var scheduled_agent_instruction_default = defineWorkflow({
|
|
12
|
+
agent: display_assistant_default,
|
|
13
|
+
input: v.object({ prompt: v.pipe(v.string(), v.minLength(1)) }),
|
|
14
|
+
output: v.object({ response: v.string() }),
|
|
15
|
+
async run({ harness, input }) {
|
|
16
|
+
return { response: (await (await harness.session()).prompt(input.prompt)).text };
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
//#endregion
|
|
20
|
+
export { scheduled_agent_instruction_default as n, scheduled_agent_instruction_exports as r, runs as t };
|
|
21
|
+
|
|
22
|
+
//# sourceMappingURL=scheduled-agent-instruction-C58itQyU.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scheduled-agent-instruction-C58itQyU.js","names":[],"sources":["../../src/workflows/scheduled-agent-instruction.ts"],"sourcesContent":["import { defineWorkflow, type WorkflowRunsHandler } from '@flue/runtime';\nimport * as v from 'valibot';\nimport displayAssistant from '../agents/display-assistant';\n\nexport const runs: WorkflowRunsHandler = async (_c, next) => next();\n\nexport default defineWorkflow({\n agent: displayAssistant,\n input: v.object({ prompt: v.pipe(v.string(), v.minLength(1)) }),\n output: v.object({ response: v.string() }),\n async run({ harness, input }) {\n const session = await harness.session();\n const response = await session.prompt(input.prompt);\n return { response: response.text };\n },\n});\n"],"mappings":";;;;;;;;;AAIA,IAAa,OAA4B,OAAO,IAAI,SAAS,KAAK;AAElE,IAAA,sCAAe,eAAe;CAC5B,OAAO;CACP,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,GAAG,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC;CAC9D,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC;CACzC,MAAM,IAAI,EAAE,SAAS,SAAS;EAG5B,OAAO,EAAE,WAAU,OADI,MADD,QAAQ,QAAQ,EAAA,CACP,OAAO,MAAM,MAAM,EAAA,CACtB,KAAK;CACnC;AACF,CAAC"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { B as conversationReviewInputSchema, F as preparePrBatchLearningReview, H as learningReviewOutputSchema, N as prepareConversationReflection, P as prepareMemoryCurationReview, R as completeLearningReviewFromModelOutput, U as learningReviewerOutputSchema, V as curationReviewInputSchema, W as prBatchReviewInputSchema, X as learningReviewCoordinator, to as __exportAll, z as failPreparedLearningReview } from "./autopilot-B8lfWyA1.js";
|
|
2
|
+
import { i as schedulerTickAction } from "./safety-BQC7exnI.js";
|
|
3
|
+
import { t as scheduler_workflow_default } from "./scheduler-workflow-CnI0tWbg.js";
|
|
4
|
+
import { defineWorkflow } from "@flue/runtime";
|
|
5
|
+
//#region src/workflows/curate_learning_store.ts
|
|
6
|
+
var curate_learning_store_exports = /* @__PURE__ */ __exportAll({
|
|
7
|
+
default: () => curate_learning_store_default,
|
|
8
|
+
runs: () => runs$3
|
|
9
|
+
});
|
|
10
|
+
var runs$3 = async (_c, next) => next();
|
|
11
|
+
var curate_learning_store_default = defineWorkflow({
|
|
12
|
+
agent: learningReviewCoordinator,
|
|
13
|
+
input: curationReviewInputSchema,
|
|
14
|
+
output: learningReviewOutputSchema,
|
|
15
|
+
async run({ harness, input }) {
|
|
16
|
+
const prepared = await prepareMemoryCurationReview(input);
|
|
17
|
+
if (!prepared.ok) return prepared;
|
|
18
|
+
try {
|
|
19
|
+
return await completeLearningReviewFromModelOutput(prepared, (await (await harness.session()).task(prepared.prompt, {
|
|
20
|
+
agent: "learning_reviewer",
|
|
21
|
+
result: learningReviewerOutputSchema
|
|
22
|
+
})).data);
|
|
23
|
+
} catch (error) {
|
|
24
|
+
return failPreparedLearningReview(prepared, error);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
//#endregion
|
|
29
|
+
//#region src/workflows/review_conversation_for_learning.ts
|
|
30
|
+
var review_conversation_for_learning_exports = /* @__PURE__ */ __exportAll({
|
|
31
|
+
default: () => review_conversation_for_learning_default,
|
|
32
|
+
runs: () => runs$2
|
|
33
|
+
});
|
|
34
|
+
var runs$2 = async (_c, next) => next();
|
|
35
|
+
var review_conversation_for_learning_default = defineWorkflow({
|
|
36
|
+
agent: learningReviewCoordinator,
|
|
37
|
+
input: conversationReviewInputSchema,
|
|
38
|
+
output: learningReviewOutputSchema,
|
|
39
|
+
async run({ harness, input }) {
|
|
40
|
+
const prepared = await prepareConversationReflection(input);
|
|
41
|
+
if (!prepared.ok) return prepared;
|
|
42
|
+
try {
|
|
43
|
+
return await completeLearningReviewFromModelOutput(prepared, (await (await harness.session()).task(prepared.prompt, {
|
|
44
|
+
agent: "learning_reviewer",
|
|
45
|
+
result: learningReviewerOutputSchema
|
|
46
|
+
})).data);
|
|
47
|
+
} catch (error) {
|
|
48
|
+
return failPreparedLearningReview(prepared, error);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
//#endregion
|
|
53
|
+
//#region src/workflows/review_pr_batch_for_learning.ts
|
|
54
|
+
var review_pr_batch_for_learning_exports = /* @__PURE__ */ __exportAll({
|
|
55
|
+
default: () => review_pr_batch_for_learning_default,
|
|
56
|
+
runs: () => runs$1
|
|
57
|
+
});
|
|
58
|
+
var runs$1 = async (_c, next) => next();
|
|
59
|
+
var review_pr_batch_for_learning_default = defineWorkflow({
|
|
60
|
+
agent: learningReviewCoordinator,
|
|
61
|
+
input: prBatchReviewInputSchema,
|
|
62
|
+
output: learningReviewOutputSchema,
|
|
63
|
+
async run({ harness, input }) {
|
|
64
|
+
const prepared = await preparePrBatchLearningReview(input);
|
|
65
|
+
if (!prepared.ok) return prepared;
|
|
66
|
+
try {
|
|
67
|
+
return await completeLearningReviewFromModelOutput(prepared, (await (await harness.session()).task(prepared.prompt, {
|
|
68
|
+
agent: "learning_reviewer",
|
|
69
|
+
result: learningReviewerOutputSchema
|
|
70
|
+
})).data);
|
|
71
|
+
} catch (error) {
|
|
72
|
+
return failPreparedLearningReview(prepared, error);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
//#endregion
|
|
77
|
+
//#region src/workflows/scheduler-tick.ts
|
|
78
|
+
var scheduler_tick_exports = /* @__PURE__ */ __exportAll({
|
|
79
|
+
default: () => scheduler_tick_default,
|
|
80
|
+
runs: () => runs
|
|
81
|
+
});
|
|
82
|
+
var runs = async (_c, next) => next();
|
|
83
|
+
var scheduler_tick_default = defineWorkflow({
|
|
84
|
+
agent: scheduler_workflow_default,
|
|
85
|
+
action: schedulerTickAction
|
|
86
|
+
});
|
|
87
|
+
//#endregion
|
|
88
|
+
export { review_conversation_for_learning_default as a, curate_learning_store_exports as c, review_pr_batch_for_learning_exports as i, scheduler_tick_exports as n, review_conversation_for_learning_exports as o, review_pr_batch_for_learning_default as r, curate_learning_store_default as s, scheduler_tick_default as t };
|
|
89
|
+
|
|
90
|
+
//# sourceMappingURL=scheduler-tick-B2S9jCYS.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scheduler-tick-B2S9jCYS.js","names":[],"sources":["../../src/workflows/curate_learning_store.ts","../../src/workflows/review_conversation_for_learning.ts","../../src/workflows/review_pr_batch_for_learning.ts","../../src/workflows/scheduler-tick.ts"],"sourcesContent":["import { defineWorkflow, type WorkflowRunsHandler } from '@flue/runtime';\nimport {\n completeLearningReviewFromModelOutput,\n curationReviewInputSchema,\n failPreparedLearningReview,\n learningReviewCoordinator,\n learningReviewerOutputSchema,\n learningReviewOutputSchema,\n prepareMemoryCurationReview,\n} from '../modules/learning/reviews';\n\nexport const runs: WorkflowRunsHandler = async (_c, next) => next();\n\nexport default defineWorkflow({\n agent: learningReviewCoordinator,\n input: curationReviewInputSchema,\n output: learningReviewOutputSchema,\n async run({ harness, input }) {\n const prepared = await prepareMemoryCurationReview(input);\n if (!prepared.ok) return prepared;\n\n try {\n const response = await (\n await harness.session()\n ).task(prepared.prompt, {\n agent: 'learning_reviewer',\n result: learningReviewerOutputSchema,\n });\n return await completeLearningReviewFromModelOutput(\n prepared,\n response.data,\n );\n } catch (error) {\n return failPreparedLearningReview(prepared, error);\n }\n },\n});\n","import { defineWorkflow, type WorkflowRunsHandler } from '@flue/runtime';\nimport {\n completeLearningReviewFromModelOutput,\n conversationReviewInputSchema,\n failPreparedLearningReview,\n learningReviewCoordinator,\n learningReviewerOutputSchema,\n learningReviewOutputSchema,\n prepareConversationReflection,\n} from '../modules/learning/reviews';\n\nexport const runs: WorkflowRunsHandler = async (_c, next) => next();\n\nexport default defineWorkflow({\n agent: learningReviewCoordinator,\n input: conversationReviewInputSchema,\n output: learningReviewOutputSchema,\n async run({ harness, input }) {\n const prepared = await prepareConversationReflection(input);\n if (!prepared.ok) return prepared;\n\n try {\n const response = await (\n await harness.session()\n ).task(prepared.prompt, {\n agent: 'learning_reviewer',\n result: learningReviewerOutputSchema,\n });\n return await completeLearningReviewFromModelOutput(\n prepared,\n response.data,\n );\n } catch (error) {\n return failPreparedLearningReview(prepared, error);\n }\n },\n});\n","import { defineWorkflow, type WorkflowRunsHandler } from '@flue/runtime';\nimport {\n completeLearningReviewFromModelOutput,\n failPreparedLearningReview,\n learningReviewCoordinator,\n learningReviewerOutputSchema,\n learningReviewOutputSchema,\n prBatchReviewInputSchema,\n preparePrBatchLearningReview,\n} from '../modules/learning/reviews';\n\nexport const runs: WorkflowRunsHandler = async (_c, next) => next();\n\nexport default defineWorkflow({\n agent: learningReviewCoordinator,\n input: prBatchReviewInputSchema,\n output: learningReviewOutputSchema,\n async run({ harness, input }) {\n const prepared = await preparePrBatchLearningReview(input);\n if (!prepared.ok) return prepared;\n\n try {\n const response = await (\n await harness.session()\n ).task(prepared.prompt, {\n agent: 'learning_reviewer',\n result: learningReviewerOutputSchema,\n });\n return await completeLearningReviewFromModelOutput(\n prepared,\n response.data,\n );\n } catch (error) {\n return failPreparedLearningReview(prepared, error);\n }\n },\n});\n","import { defineWorkflow, type WorkflowRunsHandler } from '@flue/runtime';\nimport schedulerWorkflowAgent from '../agents/scheduler-workflow';\nimport { schedulerTickAction } from '../modules/scheduler';\n\nexport const runs: WorkflowRunsHandler = async (_c, next) => next();\n\nexport default defineWorkflow({\n agent: schedulerWorkflowAgent,\n action: schedulerTickAction,\n});\n"],"mappings":";;;;;;;;;AAWA,IAAa,SAA4B,OAAO,IAAI,SAAS,KAAK;AAElE,IAAA,gCAAe,eAAe;CAC5B,OAAO;CACP,OAAO;CACP,QAAQ;CACR,MAAM,IAAI,EAAE,SAAS,SAAS;EAC5B,MAAM,WAAW,MAAM,4BAA4B,KAAK;EACxD,IAAI,CAAC,SAAS,IAAI,OAAO;EAEzB,IAAI;GAOF,OAAO,MAAM,sCACX,WACA,OAPA,MAAM,QAAQ,QAAQ,EAAA,CACtB,KAAK,SAAS,QAAQ;IACtB,OAAO;IACP,QAAQ;GACV,CAAC,EAAA,CAGU,IACX;EACF,SAAS,OAAO;GACd,OAAO,2BAA2B,UAAU,KAAK;EACnD;CACF;AACF,CAAC;;;;;;;ACzBD,IAAa,SAA4B,OAAO,IAAI,SAAS,KAAK;AAElE,IAAA,2CAAe,eAAe;CAC5B,OAAO;CACP,OAAO;CACP,QAAQ;CACR,MAAM,IAAI,EAAE,SAAS,SAAS;EAC5B,MAAM,WAAW,MAAM,8BAA8B,KAAK;EAC1D,IAAI,CAAC,SAAS,IAAI,OAAO;EAEzB,IAAI;GAOF,OAAO,MAAM,sCACX,WACA,OAPA,MAAM,QAAQ,QAAQ,EAAA,CACtB,KAAK,SAAS,QAAQ;IACtB,OAAO;IACP,QAAQ;GACV,CAAC,EAAA,CAGU,IACX;EACF,SAAS,OAAO;GACd,OAAO,2BAA2B,UAAU,KAAK;EACnD;CACF;AACF,CAAC;;;;;;;ACzBD,IAAa,SAA4B,OAAO,IAAI,SAAS,KAAK;AAElE,IAAA,uCAAe,eAAe;CAC5B,OAAO;CACP,OAAO;CACP,QAAQ;CACR,MAAM,IAAI,EAAE,SAAS,SAAS;EAC5B,MAAM,WAAW,MAAM,6BAA6B,KAAK;EACzD,IAAI,CAAC,SAAS,IAAI,OAAO;EAEzB,IAAI;GAOF,OAAO,MAAM,sCACX,WACA,OAPA,MAAM,QAAQ,QAAQ,EAAA,CACtB,KAAK,SAAS,QAAQ;IACtB,OAAO;IACP,QAAQ;GACV,CAAC,EAAA,CAGU,IACX;EACF,SAAS,OAAO;GACd,OAAO,2BAA2B,UAAU,KAAK;EACnD;CACF;AACF,CAAC;;;;;;;AChCD,IAAa,OAA4B,OAAO,IAAI,SAAS,KAAK;AAElE,IAAA,yBAAe,eAAe;CAC5B,OAAO;CACP,QAAQ;AACV,CAAC"}
|