@minionry/minion 0.7.36
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/LICENSE +14 -0
- package/PRIVACY.md +357 -0
- package/README.md +57 -0
- package/THIRD_PARTY_NOTICES.md +245 -0
- package/bin/branding.js +4 -0
- package/bin/commands/browser-install.js +483 -0
- package/bin/commands/create-sandbox.js +542 -0
- package/bin/commands/fingerprint.js +101 -0
- package/bin/commands/login.js +400 -0
- package/bin/commands/logout.js +93 -0
- package/bin/commands/minions.js +211 -0
- package/bin/commands/sandboxes.js +309 -0
- package/bin/commands/status.js +298 -0
- package/bin/commands/whoami.js +153 -0
- package/bin/launch-env.js +35 -0
- package/bin/machine-identity.js +221 -0
- package/bin/machine-layout.js +200 -0
- package/bin/minion.js +839 -0
- package/bin/platform-endpoints.js +8 -0
- package/bin/postinstall.js +52 -0
- package/bin/pty-doctor.js +326 -0
- package/bin/pty-locator.js +110 -0
- package/bin/pty-provision.js +186 -0
- package/bin/sandbox/Dockerfile +78 -0
- package/bin/sandbox/entrypoint.sh +14 -0
- package/bin/sandbox/install-repo.sh +53 -0
- package/bin/sandbox/seccomp-userns.json +883 -0
- package/bin/sandbox-config.js +306 -0
- package/dist/bin/machine-identity.js +221 -0
- package/dist/bin/machine-layout.js +200 -0
- package/dist/electron-host/agent-lease.js +141 -0
- package/dist/electron-host/dom-driver.js +642 -0
- package/dist/electron-host/ipc-protocol.js +89 -0
- package/dist/electron-host/js-driver.js +216 -0
- package/dist/electron-host/view-manager.js +254 -0
- package/dist/server/cli/engine-resume.js +49 -0
- package/dist/server/cli/eta-estimator.js +278 -0
- package/dist/server/cli/headless/background-activity.js +109 -0
- package/dist/server/cli/headless/claude-invoker-process.js +614 -0
- package/dist/server/cli/headless/claude-invoker-stall.js +150 -0
- package/dist/server/cli/headless/claude-invoker-stream.js +555 -0
- package/dist/server/cli/headless/claude-invoker-tools.js +148 -0
- package/dist/server/cli/headless/claude-invoker.js +151 -0
- package/dist/server/cli/headless/engine-availability.js +92 -0
- package/dist/server/cli/headless/engine-notice.js +185 -0
- package/dist/server/cli/headless/haiku-assessments.js +293 -0
- package/dist/server/cli/headless/headless-logger.js +75 -0
- package/dist/server/cli/headless/index.js +9 -0
- package/dist/server/cli/headless/mcp-config.js +314 -0
- package/dist/server/cli/headless/native-timeout-detector.js +72 -0
- package/dist/server/cli/headless/output-utils.js +71 -0
- package/dist/server/cli/headless/prompt-utils.js +82 -0
- package/dist/server/cli/headless/resilient-runner.js +326 -0
- package/dist/server/cli/headless/retry-strategies.js +292 -0
- package/dist/server/cli/headless/runner.js +245 -0
- package/dist/server/cli/headless/stall-assessor.js +295 -0
- package/dist/server/cli/headless/tool-watchdog.js +447 -0
- package/dist/server/cli/headless/types.js +18 -0
- package/dist/server/cli/history-portability.js +85 -0
- package/dist/server/cli/improvisation-attachments.js +99 -0
- package/dist/server/cli/improvisation-history-store.js +121 -0
- package/dist/server/cli/improvisation-movements.js +137 -0
- package/dist/server/cli/improvisation-output-queue.js +34 -0
- package/dist/server/cli/improvisation-retry.js +8 -0
- package/dist/server/cli/improvisation-session-manager.js +1016 -0
- package/dist/server/cli/improvisation-types.js +31 -0
- package/dist/server/cli/plan-lifecycle.js +72 -0
- package/dist/server/cli/prompt-builders.js +371 -0
- package/dist/server/cli/retry/retry-best-result.js +28 -0
- package/dist/server/cli/retry/retry-context-loss.js +75 -0
- package/dist/server/cli/retry/retry-recovery-strategies.js +213 -0
- package/dist/server/cli/retry/retry-resume-strategy.js +20 -0
- package/dist/server/cli/retry/retry-runner-factory.js +92 -0
- package/dist/server/cli/retry/retry-tool-results.js +22 -0
- package/dist/server/cli/retry/retry-types.js +3 -0
- package/dist/server/engines/EngineEvent.js +57 -0
- package/dist/server/engines/claude/ClaudeCodeEngine.js +316 -0
- package/dist/server/engines/claude/claude-command.js +32 -0
- package/dist/server/engines/codex/CodexEngine.js +469 -0
- package/dist/server/engines/codex/codex-auth.js +203 -0
- package/dist/server/engines/codex/codex-invoker.js +205 -0
- package/dist/server/engines/codex/codex-provision.js +215 -0
- package/dist/server/engines/credentials/credential-probe.js +88 -0
- package/dist/server/engines/credentials/model-profiles.js +249 -0
- package/dist/server/engines/credentials/provider-credentials.js +146 -0
- package/dist/server/engines/engine-event-stream.js +52 -0
- package/dist/server/engines/execution/engine-session.js +380 -0
- package/dist/server/engines/factory.js +42 -0
- package/dist/server/engines/hermes/HermesEngine.js +628 -0
- package/dist/server/engines/hermes/hermes-auth.js +159 -0
- package/dist/server/engines/hermes/hermes-gateway-home.js +271 -0
- package/dist/server/engines/hermes/hermes-invoker.js +350 -0
- package/dist/server/engines/hermes/hermes-provision.js +318 -0
- package/dist/server/engines/read-only.js +20 -0
- package/dist/server/engines/types.js +27 -0
- package/dist/server/handlers/company-execution-registry.js +67 -0
- package/dist/server/handlers/company-handlers.js +514 -0
- package/dist/server/handlers/company-triggers.js +189 -0
- package/dist/server/handlers/company-types.js +3 -0
- package/dist/server/index.js +244 -0
- package/dist/server/mcp/app-tools-bridge.js +110 -0
- package/dist/server/mcp/app-tools-mcp-server.js +99 -0
- package/dist/server/mcp/bouncer-integration.js +744 -0
- package/dist/server/mcp/browser-mcp-server.js +915 -0
- package/dist/server/mcp/browser-redaction.js +103 -0
- package/dist/server/mcp/classifier/BouncerClassifier.js +3 -0
- package/dist/server/mcp/classifier/ClaudeBouncerClassifier.js +212 -0
- package/dist/server/mcp/classifier/factory.js +124 -0
- package/dist/server/mcp/classifier/health.js +54 -0
- package/dist/server/mcp/classifier/telemetry.js +0 -0
- package/dist/server/mcp/company-patterns.js +104 -0
- package/dist/server/mcp/department-profiles.js +133 -0
- package/dist/server/mcp/quality-bridge.js +153 -0
- package/dist/server/mcp/quality-mcp-server.js +105 -0
- package/dist/server/mcp/security-analysis.js +384 -0
- package/dist/server/mcp/security-audit.js +152 -0
- package/dist/server/mcp/security-patterns.js +314 -0
- package/dist/server/mcp/server.js +194 -0
- package/dist/server/mcp/test-utils/agent-simulator.js +301 -0
- package/dist/server/mcp/test-utils/e2e-agent.js +103 -0
- package/dist/server/mcp/test-utils/e2e-capture.js +92 -0
- package/dist/server/mcp/test-utils/e2e-client.js +116 -0
- package/dist/server/mcp/test-utils/e2e-fixtures.js +87 -0
- package/dist/server/mcp/test-utils/e2e-gating.js +8 -0
- package/dist/server/mcp/test-utils/e2e-harness.js +8 -0
- package/dist/server/mcp/test-utils/e2e-scenarios.js +105 -0
- package/dist/server/routes/files.js +18 -0
- package/dist/server/routes/improvise.js +64 -0
- package/dist/server/routes/index.js +7 -0
- package/dist/server/routes/instances.js +41 -0
- package/dist/server/routes/internal.js +900 -0
- package/dist/server/routes/notifications.js +110 -0
- package/dist/server/server-setup.js +282 -0
- package/dist/server/services/agent-push.js +148 -0
- package/dist/server/services/analytics.js +197 -0
- package/dist/server/services/apps/build.js +249 -0
- package/dist/server/services/apps/greenlight.js +199 -0
- package/dist/server/services/apps/install.js +101 -0
- package/dist/server/services/apps/layout.js +35 -0
- package/dist/server/services/apps/serve.js +665 -0
- package/dist/server/services/apps/space-apps.js +248 -0
- package/dist/server/services/auth.js +48 -0
- package/dist/server/services/browser/chrome-sandbox.js +245 -0
- package/dist/server/services/browser/chromium-launch-spec.js +51 -0
- package/dist/server/services/browser/claude-reasoner.js +669 -0
- package/dist/server/services/browser/debug-log.js +3 -0
- package/dist/server/services/browser/driver-state.js +546 -0
- package/dist/server/services/browser/electron-provision.js +256 -0
- package/dist/server/services/browser/host-internal.js +245 -0
- package/dist/server/services/browser/host-mock.js +334 -0
- package/dist/server/services/browser/host-types.js +3 -0
- package/dist/server/services/browser/host.js +1067 -0
- package/dist/server/services/browser/index.js +4 -0
- package/dist/server/services/browser/ipc-client.js +354 -0
- package/dist/server/services/browser/pipewire-sink.js +199 -0
- package/dist/server/services/browser/preflight.js +590 -0
- package/dist/server/services/browser/reasoning-agent.js +659 -0
- package/dist/server/services/browser/sandbox-policy.js +169 -0
- package/dist/server/services/browser/stderr-noise-filter.js +26 -0
- package/dist/server/services/browser/telemetry.js +107 -0
- package/dist/server/services/browser/xvfb-supervisor.js +139 -0
- package/dist/server/services/browser-frame-policy.js +56 -0
- package/dist/server/services/client-id.js +32 -0
- package/dist/server/services/collab/registry.js +408 -0
- package/dist/server/services/collab/session.js +489 -0
- package/dist/server/services/collab/text-diff.js +28 -0
- package/dist/server/services/collab/types.js +19 -0
- package/dist/server/services/e2ee-group-key.js +197 -0
- package/dist/server/services/e2ee-identity.js +203 -0
- package/dist/server/services/file-explorer-ops.js +328 -0
- package/dist/server/services/file-transfer-zip.js +188 -0
- package/dist/server/services/files.js +111 -0
- package/dist/server/services/git/branch-ops.js +62 -0
- package/dist/server/services/git/command.js +68 -0
- package/dist/server/services/git/commit-message.js +74 -0
- package/dist/server/services/git/diff-ops.js +56 -0
- package/dist/server/services/git/haiku.js +76 -0
- package/dist/server/services/git/head-watcher.js +226 -0
- package/dist/server/services/git/index.js +17 -0
- package/dist/server/services/git/log-ops.js +98 -0
- package/dist/server/services/git/merge-ops.js +314 -0
- package/dist/server/services/git/parsers.js +401 -0
- package/dist/server/services/git/remote-ops.js +192 -0
- package/dist/server/services/git/status-ops.js +105 -0
- package/dist/server/services/git/suggestion-ops.js +80 -0
- package/dist/server/services/git/tag-ops.js +36 -0
- package/dist/server/services/git/types.js +4 -0
- package/dist/server/services/git/worktree-ops.js +114 -0
- package/dist/server/services/instances.js +337 -0
- package/dist/server/services/model-catalog.js +247 -0
- package/dist/server/services/observability/posthog.js +153 -0
- package/dist/server/services/pathUtils.js +114 -0
- package/dist/server/services/plan/agent-loader.js +97 -0
- package/dist/server/services/plan/agent-manager.js +363 -0
- package/dist/server/services/plan/agent-resolver.js +74 -0
- package/dist/server/services/plan/agents/assess-stall.md +33 -0
- package/dist/server/services/plan/agents/browser-planner.md +53 -0
- package/dist/server/services/plan/agents/browser-reasoner.md +114 -0
- package/dist/server/services/plan/agents/check-injection.md +95 -0
- package/dist/server/services/plan/agents/classify-error.md +30 -0
- package/dist/server/services/plan/agents/code-review.md +142 -0
- package/dist/server/services/plan/agents/commit-message.md +28 -0
- package/dist/server/services/plan/agents/detect-context-loss.md +30 -0
- package/dist/server/services/plan/agents/execute-issue.md +58 -0
- package/dist/server/services/plan/agents/fix-quality.md +25 -0
- package/dist/server/services/plan/agents/plan-coordinator.md +72 -0
- package/dist/server/services/plan/agents/pr-description.md +29 -0
- package/dist/server/services/plan/agents/retry-task.md +27 -0
- package/dist/server/services/plan/agents/review-code.md +38 -0
- package/dist/server/services/plan/agents/review-quality.md +45 -0
- package/dist/server/services/plan/agents/triage-findings.md +78 -0
- package/dist/server/services/plan/agents/verify-review.md +57 -0
- package/dist/server/services/plan/approval-evaluator.js +143 -0
- package/dist/server/services/plan/board-archive.js +102 -0
- package/dist/server/services/plan/board-config.js +108 -0
- package/dist/server/services/plan/board-export.js +214 -0
- package/dist/server/services/plan/composer-prompt.js +115 -0
- package/dist/server/services/plan/composer.js +664 -0
- package/dist/server/services/plan/config-installer.js +103 -0
- package/dist/server/services/plan/dependency-resolver.js +137 -0
- package/dist/server/services/plan/executor.js +696 -0
- package/dist/server/services/plan/front-matter.js +43 -0
- package/dist/server/services/plan/issue-classification.js +10 -0
- package/dist/server/services/plan/issue-effort.js +182 -0
- package/dist/server/services/plan/issue-loader.js +35 -0
- package/dist/server/services/plan/issue-prompt-builder.js +152 -0
- package/dist/server/services/plan/issue-retry.js +42 -0
- package/dist/server/services/plan/issue-writer.js +102 -0
- package/dist/server/services/plan/metrics-collector.js +272 -0
- package/dist/server/services/plan/output-manager.js +77 -0
- package/dist/server/services/plan/parser-core.js +435 -0
- package/dist/server/services/plan/parser-migration.js +108 -0
- package/dist/server/services/plan/parser.js +258 -0
- package/dist/server/services/plan/plan-runner-factory.js +68 -0
- package/dist/server/services/plan/pm-timeline.js +320 -0
- package/dist/server/services/plan/progress-log.js +101 -0
- package/dist/server/services/plan/prompt-builder.js +142 -0
- package/dist/server/services/plan/quality-delta.js +274 -0
- package/dist/server/services/plan/readiness-planner.js +34 -0
- package/dist/server/services/plan/review-gate.js +409 -0
- package/dist/server/services/plan/review-report.js +134 -0
- package/dist/server/services/plan/review-verdict-stream.js +161 -0
- package/dist/server/services/plan/state-reconciler.js +238 -0
- package/dist/server/services/plan/template-diff.js +175 -0
- package/dist/server/services/plan/template-instantiator.js +516 -0
- package/dist/server/services/plan/template-manifest.js +56 -0
- package/dist/server/services/plan/template-types.js +3 -0
- package/dist/server/services/plan/trigger-evaluator.js +211 -0
- package/dist/server/services/plan/types.js +3 -0
- package/dist/server/services/plan/watcher.js +73 -0
- package/dist/server/services/platform-credentials.js +56 -0
- package/dist/server/services/platform-e2ee.js +421 -0
- package/dist/server/services/platform-envelope.js +102 -0
- package/dist/server/services/platform-heartbeat.js +88 -0
- package/dist/server/services/platform-reconnect.js +60 -0
- package/dist/server/services/platform-token-lifecycle.js +95 -0
- package/dist/server/services/platform-url.js +17 -0
- package/dist/server/services/platform.js +656 -0
- package/dist/server/services/runtime-info.js +9 -0
- package/dist/server/services/schedule/agent-schedule-store.js +232 -0
- package/dist/server/services/schedule/agent-scheduler.js +323 -0
- package/dist/server/services/schedule/daily-timing.js +105 -0
- package/dist/server/services/schedule/quality-schedule-launch.js +11 -0
- package/dist/server/services/schedule/quality-schedule-store.js +211 -0
- package/dist/server/services/schedule/quality-scheduler.js +215 -0
- package/dist/server/services/schedule/run-bootstrap.js +329 -0
- package/dist/server/services/schedule/schedule-store.js +238 -0
- package/dist/server/services/schedule/schedule-wire.js +77 -0
- package/dist/server/services/schedule/scheduler.js +310 -0
- package/dist/server/services/schedule/template-source.js +97 -0
- package/dist/server/services/sdk/agent-sessions.js +264 -0
- package/dist/server/services/sdk/agents.js +557 -0
- package/dist/server/services/sdk/app-endpoints.js +48 -0
- package/dist/server/services/sdk/app-tools.js +303 -0
- package/dist/server/services/sdk/audit.js +48 -0
- package/dist/server/services/sdk/browser-transport.js +188 -0
- package/dist/server/services/sdk/browser.js +605 -0
- package/dist/server/services/sdk/composer.js +129 -0
- package/dist/server/services/sdk/connect.js +273 -0
- package/dist/server/services/sdk/consent-cooldown.js +31 -0
- package/dist/server/services/sdk/endpoint-url.js +141 -0
- package/dist/server/services/sdk/endpoints.js +314 -0
- package/dist/server/services/sdk/file-change-notify.js +36 -0
- package/dist/server/services/sdk/files-app.js +163 -0
- package/dist/server/services/sdk/files-search.js +131 -0
- package/dist/server/services/sdk/files-transfer.js +279 -0
- package/dist/server/services/sdk/files-workspace.js +233 -0
- package/dist/server/services/sdk/git.js +520 -0
- package/dist/server/services/sdk/grant-store.js +318 -0
- package/dist/server/services/sdk/host-ops.js +84 -0
- package/dist/server/services/sdk/inference-claude.js +214 -0
- package/dist/server/services/sdk/inference.js +247 -0
- package/dist/server/services/sdk/live-registry.js +42 -0
- package/dist/server/services/sdk/local-app-bindings.js +71 -0
- package/dist/server/services/sdk/pipeline.js +190 -0
- package/dist/server/services/sdk/pm-execute.js +228 -0
- package/dist/server/services/sdk/pm-planning-tap.js +29 -0
- package/dist/server/services/sdk/pm-schedule.js +165 -0
- package/dist/server/services/sdk/pm.js +634 -0
- package/dist/server/services/sdk/quality-change-notify.js +20 -0
- package/dist/server/services/sdk/quality-schedule.js +165 -0
- package/dist/server/services/sdk/quality.js +602 -0
- package/dist/server/services/sdk/rate-limits.js +198 -0
- package/dist/server/services/sdk/registry.js +597 -0
- package/dist/server/services/sdk/revoke.js +86 -0
- package/dist/server/services/sdk/run-profile.js +41 -0
- package/dist/server/services/sdk/sandbox.js +89 -0
- package/dist/server/services/sdk/storage.js +110 -0
- package/dist/server/services/sdk/streams.js +147 -0
- package/dist/server/services/sdk/terminal.js +201 -0
- package/dist/server/services/sdk/test-utils/workshop-browser-app.js +466 -0
- package/dist/server/services/sentry.js +99 -0
- package/dist/server/services/settings.js +374 -0
- package/dist/server/services/snippets/expander.js +87 -0
- package/dist/server/services/snippets/index.js +6 -0
- package/dist/server/services/snippets/loader.js +119 -0
- package/dist/server/services/snippets/parser.js +52 -0
- package/dist/server/services/snippets/types.js +3 -0
- package/dist/server/services/snippets/watcher.js +60 -0
- package/dist/server/services/space-layout.js +80 -0
- package/dist/server/services/system-prompts.js +219 -0
- package/dist/server/services/terminal/pty-manager.js +206 -0
- package/dist/server/services/terminal/pty-utils.js +150 -0
- package/dist/server/services/timeline/assembler.js +890 -0
- package/dist/server/services/timeline/contract.js +196 -0
- package/dist/server/services/timeline/index.js +4 -0
- package/dist/server/services/websocket/agent-schedule-handlers.js +217 -0
- package/dist/server/services/websocket/apps-handlers.js +399 -0
- package/dist/server/services/websocket/ask-user-question-bridge.js +112 -0
- package/dist/server/services/websocket/autocomplete-index.js +415 -0
- package/dist/server/services/websocket/autocomplete-match.js +243 -0
- package/dist/server/services/websocket/autocomplete.js +407 -0
- package/dist/server/services/websocket/browser-agent-runtime.js +208 -0
- package/dist/server/services/websocket/browser-device-profile.js +46 -0
- package/dist/server/services/websocket/browser-handlers.js +377 -0
- package/dist/server/services/websocket/browser-host-broadcast.js +179 -0
- package/dist/server/services/websocket/browser-ice-config.js +121 -0
- package/dist/server/services/websocket/browser-payloads.js +222 -0
- package/dist/server/services/websocket/browser-viewer-lifecycle.js +84 -0
- package/dist/server/services/websocket/browser-viewer-registry.js +118 -0
- package/dist/server/services/websocket/collab-broadcast.js +11 -0
- package/dist/server/services/websocket/collab-handlers.js +116 -0
- package/dist/server/services/websocket/commit-suggestion-service.js +132 -0
- package/dist/server/services/websocket/debug-log.js +38 -0
- package/dist/server/services/websocket/dispatch-util.js +10 -0
- package/dist/server/services/websocket/engine-auth-handlers.js +323 -0
- package/dist/server/services/websocket/engine-credential-watcher.js +83 -0
- package/dist/server/services/websocket/engine-profile-handlers.js +92 -0
- package/dist/server/services/websocket/file-definition-handlers.js +180 -0
- package/dist/server/services/websocket/file-download-handler.js +291 -0
- package/dist/server/services/websocket/file-explorer-handlers.js +291 -0
- package/dist/server/services/websocket/file-search-handlers.js +267 -0
- package/dist/server/services/websocket/file-share-handlers.js +328 -0
- package/dist/server/services/websocket/file-transfer-http.js +361 -0
- package/dist/server/services/websocket/file-upload-handler.js +267 -0
- package/dist/server/services/websocket/file-utils.js +346 -0
- package/dist/server/services/websocket/git-branch-handlers.js +90 -0
- package/dist/server/services/websocket/git-diff-handlers.js +59 -0
- package/dist/server/services/websocket/git-handlers.js +212 -0
- package/dist/server/services/websocket/git-head-watcher.js +85 -0
- package/dist/server/services/websocket/git-log-handlers.js +104 -0
- package/dist/server/services/websocket/git-pr-handlers.js +56 -0
- package/dist/server/services/websocket/git-tag-handlers.js +53 -0
- package/dist/server/services/websocket/git-utils.js +11 -0
- package/dist/server/services/websocket/git-worktree-handlers.js +521 -0
- package/dist/server/services/websocket/handler-context.js +113 -0
- package/dist/server/services/websocket/handler.js +1197 -0
- package/dist/server/services/websocket/index.js +5 -0
- package/dist/server/services/websocket/movement-written-files.js +26 -0
- package/dist/server/services/websocket/msg-id-tracker.js +48 -0
- package/dist/server/services/websocket/plan-board-handlers.js +410 -0
- package/dist/server/services/websocket/plan-execution-handlers.js +244 -0
- package/dist/server/services/websocket/plan-handlers.js +67 -0
- package/dist/server/services/websocket/plan-helpers.js +161 -0
- package/dist/server/services/websocket/plan-issue-handlers.js +168 -0
- package/dist/server/services/websocket/plan-sprint-handlers.js +190 -0
- package/dist/server/services/websocket/plan-transfer-handlers.js +310 -0
- package/dist/server/services/websocket/pm-timeline-broadcast.js +28 -0
- package/dist/server/services/websocket/post-session-scan.js +132 -0
- package/dist/server/services/websocket/prompt-queue-handlers.js +96 -0
- package/dist/server/services/websocket/quality-agent-cost.js +229 -0
- package/dist/server/services/websocket/quality-agent-notes.js +113 -0
- package/dist/server/services/websocket/quality-change-activity.js +187 -0
- package/dist/server/services/websocket/quality-complexity.js +345 -0
- package/dist/server/services/websocket/quality-dependencies.js +445 -0
- package/dist/server/services/websocket/quality-duplication.js +162 -0
- package/dist/server/services/websocket/quality-eta.js +65 -0
- package/dist/server/services/websocket/quality-fingerprint.js +104 -0
- package/dist/server/services/websocket/quality-grading.js +575 -0
- package/dist/server/services/websocket/quality-handlers.js +48 -0
- package/dist/server/services/websocket/quality-linting.js +270 -0
- package/dist/server/services/websocket/quality-operations.js +54 -0
- package/dist/server/services/websocket/quality-persistence.js +410 -0
- package/dist/server/services/websocket/quality-review-agent.js +526 -0
- package/dist/server/services/websocket/quality-run.js +220 -0
- package/dist/server/services/websocket/quality-secrets.js +0 -0
- package/dist/server/services/websocket/quality-service.js +775 -0
- package/dist/server/services/websocket/quality-tools.js +383 -0
- package/dist/server/services/websocket/quality-triage-agent.js +101 -0
- package/dist/server/services/websocket/quality-types.js +149 -0
- package/dist/server/services/websocket/recommended-answers.js +28 -0
- package/dist/server/services/websocket/schedule-handlers.js +197 -0
- package/dist/server/services/websocket/sdk-agent-host.js +569 -0
- package/dist/server/services/websocket/sdk-browser-host.js +459 -0
- package/dist/server/services/websocket/sdk-composer-host.js +10 -0
- package/dist/server/services/websocket/sdk-git-host.js +115 -0
- package/dist/server/services/websocket/sdk-handlers.js +242 -0
- package/dist/server/services/websocket/sdk-pm-execution-host.js +63 -0
- package/dist/server/services/websocket/sdk-pm-schedule-host.js +21 -0
- package/dist/server/services/websocket/sdk-quality-schedule-host.js +34 -0
- package/dist/server/services/websocket/sdk-terminal-host.js +140 -0
- package/dist/server/services/websocket/session-handlers.js +565 -0
- package/dist/server/services/websocket/session-history.js +335 -0
- package/dist/server/services/websocket/session-initialization.js +315 -0
- package/dist/server/services/websocket/session-registry.js +340 -0
- package/dist/server/services/websocket/session-role-directory.js +39 -0
- package/dist/server/services/websocket/settings-handlers.js +276 -0
- package/dist/server/services/websocket/skill-handlers.js +324 -0
- package/dist/server/services/websocket/skill-watcher.js +83 -0
- package/dist/server/services/websocket/snippet-handlers.js +261 -0
- package/dist/server/services/websocket/tab-broadcast.js +35 -0
- package/dist/server/services/websocket/tab-event-buffer.js +110 -0
- package/dist/server/services/websocket/tab-event-replay.js +47 -0
- package/dist/server/services/websocket/tab-handlers.js +211 -0
- package/dist/server/services/websocket/terminal-handlers.js +268 -0
- package/dist/server/services/websocket/types.js +96 -0
- package/dist/server/types/company-messages.js +102 -0
- package/dist/server/utils/agent-manager.js +202 -0
- package/dist/server/utils/console-timestamps.js +24 -0
- package/dist/server/utils/file-store.js +112 -0
- package/dist/server/utils/paths.js +28 -0
- package/dist/server/utils/port-manager.js +43 -0
- package/dist/server/utils/port.js +204 -0
- package/electron-host/dist/agent-lease.js +141 -0
- package/electron-host/dist/capture-recovery.js +77 -0
- package/electron-host/dist/codec-policy.js +37 -0
- package/electron-host/dist/controller-channel.js +60 -0
- package/electron-host/dist/controller-handlers.js +153 -0
- package/electron-host/dist/device-emulator.js +106 -0
- package/electron-host/dist/dom-driver.js +642 -0
- package/electron-host/dist/domain-registry.js +159 -0
- package/electron-host/dist/domain-validators.js +308 -0
- package/electron-host/dist/editable-focus-reporter.js +143 -0
- package/electron-host/dist/fake-peer.test-util.js +105 -0
- package/electron-host/dist/host-log.js +31 -0
- package/electron-host/dist/host-wire.js +11 -0
- package/electron-host/dist/input-router.js +421 -0
- package/electron-host/dist/ipc-protocol.js +89 -0
- package/electron-host/dist/ipc-server.js +193 -0
- package/electron-host/dist/js-driver.js +216 -0
- package/electron-host/dist/main-guards.js +70 -0
- package/electron-host/dist/main.js +716 -0
- package/electron-host/dist/roster-sync.js +87 -0
- package/electron-host/dist/rpc-context.js +1 -0
- package/electron-host/dist/rpc-tab-methods.js +138 -0
- package/electron-host/dist/rpc-webrtc-methods.js +121 -0
- package/electron-host/dist/screen-capture-cache.js +147 -0
- package/electron-host/dist/sdk-injector.js +166 -0
- package/electron-host/dist/sdp.js +102 -0
- package/electron-host/dist/session-surface.js +78 -0
- package/electron-host/dist/surface-sizing.js +59 -0
- package/electron-host/dist/view-manager.js +254 -0
- package/electron-host/dist/viewer-registry.js +46 -0
- package/electron-host/dist/viewer-session.js +288 -0
- package/electron-host/dist/webrtc-channels.js +14 -0
- package/electron-host/dist/webrtc-controller.js +57 -0
- package/electron-host/dist/webrtc-ice-filter.js +13 -0
- package/electron-host/dist/webrtc-peer.js +45 -0
- package/electron-host/package.json +12 -0
- package/electron-host/tsconfig.json +23 -0
- package/electron-host/webrtc-controller-preload.cjs +3 -0
- package/electron-host/webrtc-controller.html +14 -0
- package/package.json +85 -0
- package/vendor/e2ee/LICENSE +14 -0
- package/vendor/e2ee/package.json +14 -0
- package/vendor/e2ee/src/index.js +310 -0
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
// Copyright (c) 2025-present Minionry, Inc.
|
|
2
|
+
// SPDX-License-Identifier: LicenseRef-Minionry-Software
|
|
3
|
+
import { existsSync, mkdirSync, readdirSync, readFileSync, rmSync, writeFileSync } from 'node:fs';
|
|
4
|
+
import { homedir } from 'node:os';
|
|
5
|
+
import { join, relative } from 'node:path';
|
|
6
|
+
import { SPACE_DIRNAME, SPACE_LAYOUT } from '../space-layout.js';
|
|
7
|
+
import { NO_SPECS_DIR_ERROR, parseBoardDirectory, resolvePmDir } from './parser.js';
|
|
8
|
+
import { validateTemplate } from './template-instantiator.js';
|
|
9
|
+
const REDACTED = '[REDACTED]';
|
|
10
|
+
const REDACTED_EMAIL = '[redacted-email]';
|
|
11
|
+
const SECRET_PATTERNS = [
|
|
12
|
+
/-----BEGIN [A-Z ]*PRIVATE KEY-----[\s\S]*?-----END [A-Z ]*PRIVATE KEY-----/g,
|
|
13
|
+
/\bsk-ant-[A-Za-z0-9_-]{8,}/g,
|
|
14
|
+
/\bsk-[A-Za-z0-9_-]{20,}/g,
|
|
15
|
+
/\bgh[pousr]_[A-Za-z0-9]{20,}/g,
|
|
16
|
+
/\bgithub_pat_[A-Za-z0-9_]{20,}/g,
|
|
17
|
+
/\bAKIA[0-9A-Z]{16}\b/g,
|
|
18
|
+
/\bxox[baprs]-[A-Za-z0-9-]{8,}/g,
|
|
19
|
+
/\beyJ[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{4,}/g,
|
|
20
|
+
/\bBearer\s+[A-Za-z0-9._~+/=-]{16,}/g,
|
|
21
|
+
];
|
|
22
|
+
const SECRET_ASSIGNMENT = /\b((?:api[_-]?key|apikey|secret|token|password|passwd|access[_-]?key|auth[_-]?token|client[_-]?secret)s?)(\s*[:=]\s*)(["']?)[^\s"'`,;]{6,}\3/gi;
|
|
23
|
+
const EMAIL_PATTERN = /[\w.+-]+@[\w-]+(?:\.[\w-]+)+/g;
|
|
24
|
+
function escapeRegExp(s) {
|
|
25
|
+
return s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
26
|
+
}
|
|
27
|
+
export function sanitizeExportText(text, ctx) {
|
|
28
|
+
if (!text)
|
|
29
|
+
return text;
|
|
30
|
+
let out = text;
|
|
31
|
+
const home = ctx.home ?? homedir();
|
|
32
|
+
const wd = ctx.workingDir.replace(/\/+$/, '');
|
|
33
|
+
if (wd) {
|
|
34
|
+
out = out.replace(new RegExp(`${escapeRegExp(wd)}/`, 'g'), '');
|
|
35
|
+
out = out.replace(new RegExp(escapeRegExp(wd), 'g'), '.');
|
|
36
|
+
}
|
|
37
|
+
if (home && home !== '/') {
|
|
38
|
+
out = out.replace(new RegExp(escapeRegExp(home), 'g'), '~');
|
|
39
|
+
}
|
|
40
|
+
out = out.replace(/(?:\/home|\/Users)\/[A-Za-z0-9._-]+/g, '~');
|
|
41
|
+
out = out.replace(/[A-Za-z]:\\Users\\[A-Za-z0-9._-]+/g, '~');
|
|
42
|
+
for (const pattern of SECRET_PATTERNS) {
|
|
43
|
+
out = out.replace(pattern, REDACTED);
|
|
44
|
+
}
|
|
45
|
+
out = out.replace(SECRET_ASSIGNMENT, (_m, key, sep) => `${key}${sep}${REDACTED}`);
|
|
46
|
+
out = out.replace(EMAIL_PATTERN, REDACTED_EMAIL);
|
|
47
|
+
return out;
|
|
48
|
+
}
|
|
49
|
+
function refPathToId(refPath) {
|
|
50
|
+
const base = refPath.split('/').pop() ?? refPath;
|
|
51
|
+
return base.replace(/\.md$/, '');
|
|
52
|
+
}
|
|
53
|
+
function toIdList(paths, known) {
|
|
54
|
+
const ids = paths.map(refPathToId).filter(id => known.has(id));
|
|
55
|
+
return ids.length > 0 ? ids : undefined;
|
|
56
|
+
}
|
|
57
|
+
const EXPORT_PRIORITIES = new Set(['P0', 'P1', 'P2', 'P3']);
|
|
58
|
+
export function boardTemplateId(boardId, title) {
|
|
59
|
+
const slug = title.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-+|-+$/g, '');
|
|
60
|
+
return slug || boardId.toLowerCase();
|
|
61
|
+
}
|
|
62
|
+
function applyTemplateRefs(out, issue, known) {
|
|
63
|
+
const epicId = issue.epic ? refPathToId(issue.epic) : null;
|
|
64
|
+
if (epicId && known.has(epicId))
|
|
65
|
+
out.epic = epicId;
|
|
66
|
+
const children = toIdList(issue.children, known);
|
|
67
|
+
if (children)
|
|
68
|
+
out.children = children;
|
|
69
|
+
const blockedBy = toIdList(issue.blockedBy, known);
|
|
70
|
+
if (blockedBy)
|
|
71
|
+
out.blocked_by = blockedBy;
|
|
72
|
+
const blocks = toIdList(issue.blocks, known);
|
|
73
|
+
if (blocks)
|
|
74
|
+
out.blocks = blocks;
|
|
75
|
+
}
|
|
76
|
+
function toTemplateIssue(issue, known, ctx) {
|
|
77
|
+
const clean = (s) => sanitizeExportText(s, ctx);
|
|
78
|
+
const out = {
|
|
79
|
+
id: issue.id,
|
|
80
|
+
type: issue.type,
|
|
81
|
+
title: clean(issue.title),
|
|
82
|
+
};
|
|
83
|
+
if (EXPORT_PRIORITIES.has(issue.priority))
|
|
84
|
+
out.priority = issue.priority;
|
|
85
|
+
if (issue.estimate != null)
|
|
86
|
+
out.estimate = issue.estimate;
|
|
87
|
+
if (issue.labels.length > 0)
|
|
88
|
+
out.labels = issue.labels.map(clean);
|
|
89
|
+
applyTemplateRefs(out, issue, known);
|
|
90
|
+
if (issue.description)
|
|
91
|
+
out.description = clean(issue.description);
|
|
92
|
+
if (issue.acceptanceCriteria.length > 0) {
|
|
93
|
+
out.acceptance_criteria = issue.acceptanceCriteria.map(c => clean(c.text));
|
|
94
|
+
}
|
|
95
|
+
if (issue.technicalNotes)
|
|
96
|
+
out.technical_notes = clean(issue.technicalNotes);
|
|
97
|
+
if (issue.filesToModify.length > 0)
|
|
98
|
+
out.files_to_modify = issue.filesToModify.map(clean);
|
|
99
|
+
out.review_gate = issue.reviewGate;
|
|
100
|
+
out.output_type = issue.outputType;
|
|
101
|
+
if (issue.outputFile)
|
|
102
|
+
out.output_file = clean(issue.outputFile);
|
|
103
|
+
if (issue.model)
|
|
104
|
+
out.model = issue.model;
|
|
105
|
+
if (issue.effortLevel)
|
|
106
|
+
out.effort_level = issue.effortLevel;
|
|
107
|
+
if (issue.fastMode != null)
|
|
108
|
+
out.fast_mode = issue.fastMode;
|
|
109
|
+
return out;
|
|
110
|
+
}
|
|
111
|
+
export function buildBoardTemplate(boardState, ctx, options = {}) {
|
|
112
|
+
const clean = (s) => sanitizeExportText(s, ctx);
|
|
113
|
+
const { board } = boardState;
|
|
114
|
+
const issues = [...boardState.issues].sort((a, b) => a.id.localeCompare(b.id));
|
|
115
|
+
const known = new Set(issues.map(i => i.id));
|
|
116
|
+
const template = {
|
|
117
|
+
template_id: boardTemplateId(board.id, board.title),
|
|
118
|
+
name: clean(board.title),
|
|
119
|
+
description: clean(board.goal),
|
|
120
|
+
version: '1.0.0',
|
|
121
|
+
board: {
|
|
122
|
+
title: clean(board.title),
|
|
123
|
+
goal: clean(board.goal),
|
|
124
|
+
status: 'draft',
|
|
125
|
+
max_parallel_agents: board.maxParallelAgents,
|
|
126
|
+
quality_gate: board.qualityGate,
|
|
127
|
+
},
|
|
128
|
+
issues: issues.map(i => toTemplateIssue(i, known, ctx)),
|
|
129
|
+
};
|
|
130
|
+
if (options.author)
|
|
131
|
+
template.author = clean(options.author);
|
|
132
|
+
const validation = validateTemplate(template);
|
|
133
|
+
if (!validation.valid) {
|
|
134
|
+
const summary = validation.errors.map(e => `${e.pointer ?? '<root>'}: ${e.message}`).join('; ');
|
|
135
|
+
throw new Error(`Exported template failed validation: ${summary}`);
|
|
136
|
+
}
|
|
137
|
+
return template;
|
|
138
|
+
}
|
|
139
|
+
const SNAPSHOT_DROPPED_FM_KEYS = /^(assigned):/;
|
|
140
|
+
export function sanitizeSnapshotFile(content, ctx) {
|
|
141
|
+
const fmMatch = content.match(/^---\n([\s\S]*?)\n---\n?([\s\S]*)$/);
|
|
142
|
+
if (fmMatch) {
|
|
143
|
+
const fmLines = fmMatch[1].split('\n').filter(l => !SNAPSHOT_DROPPED_FM_KEYS.test(l.trim()));
|
|
144
|
+
content = `---\n${fmLines.join('\n')}\n---\n${fmMatch[2]}`;
|
|
145
|
+
}
|
|
146
|
+
return sanitizeExportText(content, ctx);
|
|
147
|
+
}
|
|
148
|
+
const STATUS_DONE = new Set(['done', 'completed', 'shipped']);
|
|
149
|
+
function renderReadme(boardState, template, ctx) {
|
|
150
|
+
const { board } = boardState;
|
|
151
|
+
const issues = [...boardState.issues].sort((a, b) => a.id.localeCompare(b.id));
|
|
152
|
+
const done = issues.filter(i => STATUS_DONE.has(i.status.toLowerCase())).length;
|
|
153
|
+
const cell = (s) => sanitizeExportText(s, ctx).replace(/\|/g, '\\|');
|
|
154
|
+
const rows = issues.map(i => `| [${i.id}](snapshot/backlog/${i.id}.md) | ${cell(i.title)} | ${i.type} | ${cell(i.status)} | ${cell(i.priority)} |`);
|
|
155
|
+
return [
|
|
156
|
+
`# ${template.board.title}`,
|
|
157
|
+
'',
|
|
158
|
+
'> The board that built this project — exported from Minionry Specs.',
|
|
159
|
+
'> Remix it: copy [template.json](template.json) into `.minionry/specs/templates/` in your own Space and instantiate it from the Specs app.',
|
|
160
|
+
'',
|
|
161
|
+
'## Goal',
|
|
162
|
+
'',
|
|
163
|
+
template.board.goal || '_(no goal recorded)_',
|
|
164
|
+
'',
|
|
165
|
+
'## Issues',
|
|
166
|
+
'',
|
|
167
|
+
`${issues.length} issues — ${done} done.`,
|
|
168
|
+
'',
|
|
169
|
+
'| ID | Title | Type | Status | Priority |',
|
|
170
|
+
'|---|---|---|---|---|',
|
|
171
|
+
...rows,
|
|
172
|
+
'',
|
|
173
|
+
`Snapshot of \`${board.id}\` — read-only. Regenerate with a fresh export; do not edit by hand.`,
|
|
174
|
+
'',
|
|
175
|
+
].join('\n');
|
|
176
|
+
}
|
|
177
|
+
export const BOARD_EXPORT_DIRNAME = join(SPACE_DIRNAME, SPACE_LAYOUT.boardExport);
|
|
178
|
+
export function exportBoardToRepo(workingDir, boardId, options = {}) {
|
|
179
|
+
const pmDir = resolvePmDir(workingDir);
|
|
180
|
+
if (!pmDir)
|
|
181
|
+
throw new Error(NO_SPECS_DIR_ERROR);
|
|
182
|
+
const boardState = parseBoardDirectory(pmDir, boardId);
|
|
183
|
+
if (!boardState)
|
|
184
|
+
throw new Error(`Board not found: ${boardId}`);
|
|
185
|
+
const ctx = { workingDir };
|
|
186
|
+
const template = buildBoardTemplate(boardState, ctx, { author: options.author });
|
|
187
|
+
const exportDir = join(workingDir, BOARD_EXPORT_DIRNAME);
|
|
188
|
+
rmSync(exportDir, { recursive: true, force: true });
|
|
189
|
+
mkdirSync(join(exportDir, 'snapshot', 'backlog'), { recursive: true });
|
|
190
|
+
const files = [];
|
|
191
|
+
const write = (absPath, content) => {
|
|
192
|
+
writeFileSync(absPath, content, 'utf-8');
|
|
193
|
+
files.push(relative(workingDir, absPath));
|
|
194
|
+
};
|
|
195
|
+
write(join(exportDir, 'template.json'), `${JSON.stringify(template, null, 2)}\n`);
|
|
196
|
+
write(join(exportDir, 'README.md'), renderReadme(boardState, template, ctx));
|
|
197
|
+
const boardDir = join(pmDir, 'boards', boardId);
|
|
198
|
+
for (const name of ['board.md', 'progress.md']) {
|
|
199
|
+
const src = join(boardDir, name);
|
|
200
|
+
if (!existsSync(src))
|
|
201
|
+
continue;
|
|
202
|
+
write(join(exportDir, 'snapshot', name), sanitizeSnapshotFile(readFileSync(src, 'utf-8'), ctx));
|
|
203
|
+
}
|
|
204
|
+
const backlogDir = join(boardDir, 'backlog');
|
|
205
|
+
const backlogFiles = existsSync(backlogDir)
|
|
206
|
+
? readdirSync(backlogDir).filter(f => f.endsWith('.md')).sort()
|
|
207
|
+
: [];
|
|
208
|
+
for (const name of backlogFiles) {
|
|
209
|
+
const content = readFileSync(join(backlogDir, name), 'utf-8');
|
|
210
|
+
write(join(exportDir, 'snapshot', 'backlog', name), sanitizeSnapshotFile(content, ctx));
|
|
211
|
+
}
|
|
212
|
+
files.sort();
|
|
213
|
+
return { boardId, exportDir, files, template };
|
|
214
|
+
}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
// Copyright (c) 2025-present Minionry, Inc.
|
|
2
|
+
// SPDX-License-Identifier: LicenseRef-Minionry-Software
|
|
3
|
+
export const ISSUE_FORMAT_SPEC = `## Issue format
|
|
4
|
+
|
|
5
|
+
Each issue file must have this structure:
|
|
6
|
+
\`\`\`markdown
|
|
7
|
+
---
|
|
8
|
+
id: IS-NNN
|
|
9
|
+
title: "Short descriptive title"
|
|
10
|
+
type: issue
|
|
11
|
+
status: todo
|
|
12
|
+
priority: P0|P1|P2|P3
|
|
13
|
+
estimate: 1-5
|
|
14
|
+
labels: []
|
|
15
|
+
epic: backlog/EP-NNN.md # if part of an epic
|
|
16
|
+
created: "YYYY-MM-DD"
|
|
17
|
+
blocked_by: [] # Use backlog-relative paths: backlog/IS-NNN.md
|
|
18
|
+
blocks: [] # Use backlog-relative paths: backlog/IS-NNN.md
|
|
19
|
+
review_gate: auto
|
|
20
|
+
review_model: fable # model that runs the AI review gate — see "review_model rules" below
|
|
21
|
+
output_type: auto # code = modify source files, document = produce written artifact, auto = infer
|
|
22
|
+
output_file: null
|
|
23
|
+
agents: [] # Agent hints — see "agents field rules" below
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
# IS-NNN: Title
|
|
27
|
+
|
|
28
|
+
## Description
|
|
29
|
+
What needs to be done and why. For bugs: the observed behavior, how to
|
|
30
|
+
reproduce it, and the expected behavior — stated as verified facts.
|
|
31
|
+
|
|
32
|
+
## Acceptance Criteria
|
|
33
|
+
- [ ] Criterion 1 (testable — phrased so a reviewer can verify it objectively)
|
|
34
|
+
- [ ] Criterion 2
|
|
35
|
+
|
|
36
|
+
## Technical Notes
|
|
37
|
+
Verified pointers, constraints & design intent, out-of-scope boundaries,
|
|
38
|
+
test expectations — see "issue detail rules" below.
|
|
39
|
+
|
|
40
|
+
## Files to Modify
|
|
41
|
+
- path/to/file.ts
|
|
42
|
+
\`\`\`
|
|
43
|
+
|
|
44
|
+
## Issue detail rules (critical — issues are executed by cheaper models than you)
|
|
45
|
+
|
|
46
|
+
Each issue is the executing agent's entire mission briefing, and that agent is
|
|
47
|
+
usually a smaller model than you. The bar: given your issue, the executor
|
|
48
|
+
should produce the same result you would have produced yourself. Verified
|
|
49
|
+
detail transfers your judgment; speculation transfers your mistakes.
|
|
50
|
+
|
|
51
|
+
- State only what you have VERIFIED by reading the code during this planning
|
|
52
|
+
run. Every file path, symbol name, and behavioral claim in an issue must
|
|
53
|
+
come from files you actually read — cite paths precisely.
|
|
54
|
+
- Pointers, not diagnoses. For bug issues: describe the symptom, the repro,
|
|
55
|
+
and WHERE to look (files, flows) — and leave root-causing to the executor.
|
|
56
|
+
Do NOT include suspected root causes or ranked hypotheses: an unverified
|
|
57
|
+
hypothesis anchors the executor on the wrong fix — worse than no hypothesis
|
|
58
|
+
at all. Only state a root cause when you definitively confirmed it by
|
|
59
|
+
reading the code, and then state it as fact with file evidence, never as a
|
|
60
|
+
guess.
|
|
61
|
+
- Technical Notes must record decisions and boundaries:
|
|
62
|
+
- Constraints & design intent: decisions already made that the executor must
|
|
63
|
+
not relitigate (existing architecture choices, conventions to follow,
|
|
64
|
+
contracts that must not change — e.g. WebSocket message shapes).
|
|
65
|
+
- Out of scope: adjacent code or behaviors the executor must leave alone.
|
|
66
|
+
- Test expectations: which suites to run and where new coverage belongs.
|
|
67
|
+
- Be concise. Short, self-contained issues outperform long ones — include only
|
|
68
|
+
details that change what the executor would do next.
|
|
69
|
+
- Acceptance criteria must be objectively checkable — a review agent verifies
|
|
70
|
+
each one against the actual output.
|
|
71
|
+
|
|
72
|
+
## review_model rules
|
|
73
|
+
|
|
74
|
+
\`review_model\` names the model that runs the AI review gate after the
|
|
75
|
+
issue's implementation completes. ALWAYS set \`review_model: fable\` on every
|
|
76
|
+
issue, regardless of the issue's execution \`model\` — the review gate is the
|
|
77
|
+
quality equalizer that lets cheaper execution models deliver frontier-quality
|
|
78
|
+
results, so it must run on the strongest model. The gate itself is pinned to
|
|
79
|
+
fable at max effort and overrides any other value, so never write a different
|
|
80
|
+
one.
|
|
81
|
+
|
|
82
|
+
## Issue scoping rules (critical for execution quality)
|
|
83
|
+
|
|
84
|
+
- Each issue is executed by a single AI agent with its own context window
|
|
85
|
+
- Issues estimated at 1-3 story points execute well (focused, single concern)
|
|
86
|
+
- Issues at 5 story points are viable if scoped to one subsystem
|
|
87
|
+
- Issues at 8+ story points MUST be decomposed into smaller sub-issues
|
|
88
|
+
- Issues at 13+ story points MUST become an epic with child issues
|
|
89
|
+
- Each issue should touch one logical concern (one component, one service, one data flow)
|
|
90
|
+
- If an issue requires work across multiple subsystems, split it into one issue per subsystem with blocked_by edges between them
|
|
91
|
+
- Research/investigation issues should be separate from implementation issues
|
|
92
|
+
|
|
93
|
+
## output_type rules (critical — determines how the AI executes and reviews each issue)
|
|
94
|
+
|
|
95
|
+
- Set \`output_type: document\` for research, design, analysis, writing, planning, learning, or educational issues — anything that produces a written artifact rather than code changes
|
|
96
|
+
- Set \`output_type: code\` for issues that MUST modify source code files (implementation, bug fixes, refactoring)
|
|
97
|
+
- Set \`output_type: auto\` when unsure — the system will infer from "Files to Modify" (if the section lists real source paths it's treated as code, otherwise as document)
|
|
98
|
+
- When output_type is \`document\`, "Files to Modify" entries are treated as references, not files to edit. The AI produces a document artifact and is reviewed on document quality.
|
|
99
|
+
- When output_type is \`code\`, "Files to Modify" lists actual source files the AI must edit. The review gate verifies source files were changed.
|
|
100
|
+
|
|
101
|
+
## agents field rules
|
|
102
|
+
|
|
103
|
+
The \`agents\` field is a list of agent hints for the executing Claude Code session. The executor uses Claude Code's Task tool to delegate work to matching subagents in the user's \`.claude/agents/\` directory (project / global / bundled), with a fallback to the general-purpose agent when no match is found.
|
|
104
|
+
|
|
105
|
+
- ALWAYS populate \`agents\` with the most relevant 1–4 agents for the work the issue describes. Empty arrays mean "no hints" — only use \`[]\` when no agent type plausibly applies (rare).
|
|
106
|
+
- Entries can be specific agent file names (e.g. \`backend-architect\`, \`frontend-developer\`, \`code-reviewer\`, \`security-auditor\`) OR general role pointers the user's system can match (e.g. \`backend engineer\`, \`product designer\`, \`marketing\`). Prefer specific names — they resolve more reliably.
|
|
107
|
+
- Match agents to the actual work, not the issue's surface topic. A "fix login button" issue is frontend work (\`frontend-developer\`); a "design login flow" issue is product/design (\`product-designer\`, \`ux-writer\`).
|
|
108
|
+
- Common pairings:
|
|
109
|
+
- Code implementation: pick from \`frontend-developer\`, \`backend-architect\`, \`typescript-pro\`, \`python-pro\`, \`golang-pro\`, etc., based on stack
|
|
110
|
+
- UI/design work: \`ui-designer\`, \`product-designer\`, \`design-system-architect\`, \`ux-writer\`
|
|
111
|
+
- Data/DB: \`database-architect\`, \`database-optimizer\`, \`data-engineer\`, \`sql-pro\`
|
|
112
|
+
- Quality: pair an implementation agent with \`code-reviewer\`, \`test-automator\`, or \`security-auditor\` for sensitive issues
|
|
113
|
+
- Product/strategy: \`product-manager\`, \`product-marketing\`, \`business-analyst\`
|
|
114
|
+
- YAML format: inline \`agents: [backend-architect, code-reviewer]\` or block list with \`-\` items both work.
|
|
115
|
+
`;
|