panopticon-cli 0.6.7 → 0.6.9
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/dist/{agents-D_2oRFVf.js → agents-BQOqo27C.js} +1 -1
- package/dist/{agents-CfFDs52G.js → agents-DezveQ1x.js} +4 -4
- package/dist/{agents-CfFDs52G.js.map → agents-DezveQ1x.js.map} +1 -1
- package/dist/cli/index.js +34 -34
- package/dist/{config-yaml-DGbLSMCa.js → config-yaml-BHD2Qdd8.js} +22 -1
- package/dist/config-yaml-BHD2Qdd8.js.map +1 -0
- package/dist/{config-yaml-Dqt4FWQH.js → config-yaml-IlSnFzJQ.js} +1 -1
- package/dist/dashboard/{agent-enrichment-DdO7ZqjI.js → agent-enrichment-BKZjVvlL.js} +3 -3
- package/dist/dashboard/{agent-enrichment-DdO7ZqjI.js.map → agent-enrichment-BKZjVvlL.js.map} +1 -1
- package/dist/dashboard/{agent-enrichment-dLeGE1fX.js → agent-enrichment-iY3_PylI.js} +1 -1
- package/dist/dashboard/{agents-DCpQQ_W5.js → agents-BQWA-Vps.js} +4 -4
- package/dist/dashboard/{agents-DCpQQ_W5.js.map → agents-BQWA-Vps.js.map} +1 -1
- package/dist/dashboard/{agents-Dgh2TjSp.js → agents-Dinc9j_8.js} +1 -1
- package/dist/dashboard/{config-yaml-DkresmrS.js → config-yaml-CNNnB4Mu.js} +1 -1
- package/dist/dashboard/{config-yaml-DSfYpzN6.js → config-yaml-DUu0JI25.js} +22 -1
- package/dist/dashboard/{config-yaml-DSfYpzN6.js.map → config-yaml-DUu0JI25.js.map} +1 -1
- package/dist/dashboard/{factory-C8nhLGHB.js → factory-CBY0WWeE.js} +2 -2
- package/dist/dashboard/{factory-C8nhLGHB.js.map → factory-CBY0WWeE.js.map} +1 -1
- package/dist/dashboard/{inspect-agent-7eour7EA.js → inspect-agent-KKOeNR7E.js} +3 -3
- package/dist/dashboard/{inspect-agent-7eour7EA.js.map → inspect-agent-KKOeNR7E.js.map} +1 -1
- package/dist/dashboard/{issue-service-singleton-Wv4xBm3y.js → issue-service-singleton-BCZ62hLj.js} +3 -3
- package/dist/dashboard/{issue-service-singleton-Wv4xBm3y.js.map → issue-service-singleton-BCZ62hLj.js.map} +1 -1
- package/dist/dashboard/{issue-service-singleton-Co__-6kL.js → issue-service-singleton-BGKf0A95.js} +1 -1
- package/dist/dashboard/{lifecycle-BcUmtkR4.js → lifecycle-Dpgg-IeP.js} +1 -1
- package/dist/dashboard/{merge-agent-CGN3TT0a.js → merge-agent-CqvQu-n_.js} +1 -1
- package/dist/dashboard/{merge-agent-yudQOPZc.js → merge-agent-Dxxc4JEE.js} +5 -5
- package/dist/dashboard/{merge-agent-yudQOPZc.js.map → merge-agent-Dxxc4JEE.js.map} +1 -1
- package/dist/dashboard/public/assets/{dist-CXaO6nOE.js → dist-DS1gmhe1.js} +1 -1
- package/dist/dashboard/public/assets/index-DjGsaJLv.js +212 -0
- package/dist/dashboard/public/index.html +1 -1
- package/dist/dashboard/{review-status-BtXqWBhS.js → review-status-Dww2OKUX.js} +1 -1
- package/dist/dashboard/{review-status-Bymwzh2i.js → review-status-d_wOE-XQ.js} +3 -3
- package/dist/dashboard/{review-status-Bymwzh2i.js.map → review-status-d_wOE-XQ.js.map} +1 -1
- package/dist/dashboard/server.js +97 -97
- package/dist/dashboard/settings-BHlDG7TK.js.map +1 -1
- package/dist/dashboard/{spawn-planning-session-D5hrVdWM.js → spawn-planning-session-D5uEpHzf.js} +1 -1
- package/dist/dashboard/{spawn-planning-session-33Jf-d5T.js → spawn-planning-session-DtbNfA2Q.js} +3 -3
- package/dist/dashboard/{spawn-planning-session-33Jf-d5T.js.map → spawn-planning-session-DtbNfA2Q.js.map} +1 -1
- package/dist/dashboard/{specialist-context-DGukHSn8.js → specialist-context-CEKqWqyF.js} +4 -4
- package/dist/dashboard/{specialist-context-DGukHSn8.js.map → specialist-context-CEKqWqyF.js.map} +1 -1
- package/dist/dashboard/{specialist-logs-CIw4qfTy.js → specialist-logs-CBGVRoQF.js} +1 -1
- package/dist/dashboard/{specialists-Cp-PgspS.js → specialists-sIFlMd3s.js} +1 -1
- package/dist/dashboard/{specialists-B_zrayaP.js → specialists-saEYE0-z.js} +20 -20
- package/dist/dashboard/{specialists-B_zrayaP.js.map → specialists-saEYE0-z.js.map} +1 -1
- package/dist/dashboard/{test-agent-queue-ypF_ecHo.js → test-agent-queue-7jXB2KkN.js} +3 -3
- package/dist/dashboard/{test-agent-queue-ypF_ecHo.js.map → test-agent-queue-7jXB2KkN.js.map} +1 -1
- package/dist/dashboard/{tracker-config-BP59uH4V.js → tracker-config-BX6ijWOc.js} +1 -1
- package/dist/dashboard/{tracker-config-e7ph1QqT.js → tracker-config-tD22z5sv.js} +2 -2
- package/dist/dashboard/{tracker-config-e7ph1QqT.js.map → tracker-config-tD22z5sv.js.map} +1 -1
- package/dist/dashboard/{work-agent-prompt-fCg67nyo.js → work-agent-prompt-D3tPzPvb.js} +2 -2
- package/dist/dashboard/{work-agent-prompt-fCg67nyo.js.map → work-agent-prompt-D3tPzPvb.js.map} +1 -1
- package/dist/dashboard/{work-type-router-CWVW2Wk_.js → work-type-router-7kwLSwrP.js} +4 -2
- package/dist/dashboard/work-type-router-7kwLSwrP.js.map +1 -0
- package/dist/dashboard/{work-type-router-Di5gCQwh.js → work-type-router-ByOOudGz.js} +1 -1
- package/dist/dashboard/workflows-BDpPjK18.js +2 -0
- package/dist/dashboard/{workflows-BSMipN07.js → workflows-DcEeDkbS.js} +3 -3
- package/dist/dashboard/{workflows-BSMipN07.js.map → workflows-DcEeDkbS.js.map} +1 -1
- package/dist/{factory-BRBGw6OB.js → factory-BR48tuUR.js} +1 -1
- package/dist/{factory-DzsOiZVc.js → factory-D6LJaZ__.js} +2 -2
- package/dist/{factory-DzsOiZVc.js.map → factory-D6LJaZ__.js.map} +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +3 -3
- package/dist/{merge-agent-DlUiUanN.js → merge-agent-BBwHwpn2.js} +3 -3
- package/dist/{merge-agent-DlUiUanN.js.map → merge-agent-BBwHwpn2.js.map} +1 -1
- package/dist/{review-status-DEDvCKMP.js → review-status-Ba6llgCb.js} +3 -3
- package/dist/{review-status-DEDvCKMP.js.map → review-status-Ba6llgCb.js.map} +1 -1
- package/dist/{review-status-D6H2WOw8.js → review-status-Chxzuwn2.js} +1 -1
- package/dist/{settings-BcWPTrua.js → settings-A-CWz_ph.js} +6 -2
- package/dist/{settings-BcWPTrua.js.map → settings-A-CWz_ph.js.map} +1 -1
- package/dist/{specialist-context-BAUWL1Fl.js → specialist-context-B3lknlwi.js} +4 -4
- package/dist/{specialist-context-BAUWL1Fl.js.map → specialist-context-B3lknlwi.js.map} +1 -1
- package/dist/{specialist-logs-DQKKQV9B.js → specialist-logs-DDyY4xqo.js} +1 -1
- package/dist/{specialists-D7Kj5o6s.js → specialists-DvTYu1VZ.js} +20 -20
- package/dist/{specialists-D7Kj5o6s.js.map → specialists-DvTYu1VZ.js.map} +1 -1
- package/dist/{specialists-Bfb9ATzw.js → specialists-DyB4IRlM.js} +1 -1
- package/dist/sync-CLVqiGl4.js +2 -0
- package/dist/{sync-DMfgd389.js → sync-DTHFlEc-.js} +2 -2
- package/dist/{sync-DMfgd389.js.map → sync-DTHFlEc-.js.map} +1 -1
- package/dist/{tracker-BhYYvU3p.js → tracker-CYpb7oUa.js} +2 -2
- package/dist/{tracker-BhYYvU3p.js.map → tracker-CYpb7oUa.js.map} +1 -1
- package/dist/{work-type-router-CHjciPyS.js → work-type-router-oCgTPXsP.js} +4 -2
- package/dist/work-type-router-oCgTPXsP.js.map +1 -0
- package/package.json +1 -1
- package/dist/config-yaml-DGbLSMCa.js.map +0 -1
- package/dist/dashboard/public/assets/index-CzFZIb87.js +0 -212
- package/dist/dashboard/work-type-router-CWVW2Wk_.js.map +0 -1
- package/dist/dashboard/workflows-DaYWQIS2.js +0 -2
- package/dist/sync-TL6y-8K6.js +0 -2
- package/dist/work-type-router-CHjciPyS.js.map +0 -1
package/dist/dashboard/server.js
CHANGED
|
@@ -1,30 +1,30 @@
|
|
|
1
1
|
import { a as __toCommonJS, i as __require, o as __toESM, t as __commonJSMin } from "./chunk-DORXReHP.js";
|
|
2
2
|
import { _ as init_paths, d as PROJECT_PRDS_COMPLETED_SUBDIR, f as PROJECT_PRDS_PLANNED_SUBDIR, h as encodeClaudeProjectDir, l as PROJECT_DOCS_SUBDIR, p as PROJECT_PRDS_SUBDIR, s as PANOPTICON_HOME, t as AGENTS_DIR, u as PROJECT_PRDS_ACTIVE_SUBDIR } from "./paths-BDyJ7BiV.js";
|
|
3
3
|
import { i as initEventStore, n as getEventStore } from "./event-store-vSmAA3Zp.js";
|
|
4
|
-
import { a as MODEL_CAPABILITIES, c as init_model_capabilities, d as jsYaml, i as loadConfig$1, l as resolveModelId, o as MODEL_DEPRECATIONS, r as init_config_yaml, t as getGlobalConfigPath, u as init_js_yaml } from "./config-yaml-
|
|
4
|
+
import { a as MODEL_CAPABILITIES, c as init_model_capabilities, d as jsYaml, i as loadConfig$1, l as resolveModelId, o as MODEL_DEPRECATIONS, r as init_config_yaml, t as getGlobalConfigPath, u as init_js_yaml } from "./config-yaml-DUu0JI25.js";
|
|
5
5
|
import { t as require_dist } from "./dist-C667LLmq.js";
|
|
6
6
|
import { n as extractPrefix, r as init_issue_id, t as extractNumber } from "./issue-id-vwYJdsf8.js";
|
|
7
7
|
import { a as findProjectByTeam, h as listProjects, i as findProjectByPath, p as init_projects, r as extractTeamPrefix, s as getIssuePrefix, y as resolveProjectFromIssue } from "./projects-CFVl4oHn.js";
|
|
8
|
-
import { i as init_tracker_config, n as getLinearApiKey, r as getRallyConfig, t as getGitHubConfig } from "./tracker-config-
|
|
9
|
-
import { d as runQualityGates, f as emitDashboardLifecycle, l as syncMainIntoWorkspace, m as resolveTrackerType, p as resolveGitHubIssue, u as DEFAULT_GATES } from "./merge-agent-
|
|
10
|
-
import { i as startSharedIssueService, n as init_issue_service_singleton, r as issue_service_singleton_exports, t as getSharedIssueService } from "./issue-service-singleton-
|
|
8
|
+
import { i as init_tracker_config, n as getLinearApiKey, r as getRallyConfig, t as getGitHubConfig } from "./tracker-config-tD22z5sv.js";
|
|
9
|
+
import { d as runQualityGates, f as emitDashboardLifecycle, l as syncMainIntoWorkspace, m as resolveTrackerType, p as resolveGitHubIssue, u as DEFAULT_GATES } from "./merge-agent-Dxxc4JEE.js";
|
|
10
|
+
import { i as startSharedIssueService, n as init_issue_service_singleton, r as issue_service_singleton_exports, t as getSharedIssueService } from "./issue-service-singleton-BCZ62hLj.js";
|
|
11
11
|
import { r as setPipelineHandler, t as init_pipeline_notifier } from "./pipeline-notifier-CCSN-jar.js";
|
|
12
12
|
import { i as init_database, n as getDatabase, t as closeDatabase } from "./database-cxmQryoh.js";
|
|
13
|
-
import { a as loadReviewStatuses, i as init_review_status, n as clearStuckMergeStatuses, o as saveReviewStatuses, r as getReviewStatus, s as setReviewStatus$1, t as clearReviewStatus } from "./review-status-
|
|
14
|
-
import { At as getSessionFiles, Ct as getUnblockedItems, Dt as readSpecialistHandoffs, Et as init_specialist_handoff_logger, Ft as getPricing, It as init_cost, Mt as normalizeModelName, Nt as parseClaudeSession, O as getTmuxSessionName, Ot as getActiveSessionModel, Pt as calculateCost, Tt as getSpecialistHandoffStats, f as getAllProjectSpecialistStatuses, it as wakeSpecialistOrQueue, j as init_specialists, jt as init_jsonl_parser, kt as getProjectDirs, q as setSessionId, r as checkSpecialistQueue, w as getSessionId, wt as init_task_readiness } from "./specialists-
|
|
13
|
+
import { a as loadReviewStatuses, i as init_review_status, n as clearStuckMergeStatuses, o as saveReviewStatuses, r as getReviewStatus, s as setReviewStatus$1, t as clearReviewStatus } from "./review-status-d_wOE-XQ.js";
|
|
14
|
+
import { At as getSessionFiles, Ct as getUnblockedItems, Dt as readSpecialistHandoffs, Et as init_specialist_handoff_logger, Ft as getPricing, It as init_cost, Mt as normalizeModelName, Nt as parseClaudeSession, O as getTmuxSessionName, Ot as getActiveSessionModel, Pt as calculateCost, Tt as getSpecialistHandoffStats, f as getAllProjectSpecialistStatuses, it as wakeSpecialistOrQueue, j as init_specialists, jt as init_jsonl_parser, kt as getProjectDirs, q as setSessionId, r as checkSpecialistQueue, w as getSessionId, wt as init_task_readiness } from "./specialists-saEYE0-z.js";
|
|
15
15
|
import { t as getAgentCommand } from "./settings-BHlDG7TK.js";
|
|
16
16
|
import { a as init_providers, i as getProviderForModel, r as getProviderEnv } from "./providers-B5Y4H2Mg.js";
|
|
17
|
-
import { n as spawnPlanningSession } from "./spawn-planning-session-
|
|
17
|
+
import { n as spawnPlanningSession } from "./spawn-planning-session-DtbNfA2Q.js";
|
|
18
18
|
import { c as loadWorkspaceMetadata, r as isRemoteAvailable, t as createFlyProviderFromConfig } from "./remote-ObpNZ7hF.js";
|
|
19
19
|
import { d as sessionExistsAsync, i as createSession, l as sendKeysAsync, o as init_tmux, s as killSession, u as sessionExists } from "./tmux-LwG0tHhU.js";
|
|
20
20
|
import { a as init_config, o as loadConfig$2 } from "./config-CDkGjnwy.js";
|
|
21
|
-
import { A as saveCloisterConfig, C as stopAgent, D as getHealthThresholdsMs, O as init_config$1, S as spawnAgent, T as transitionIssueToInReview, a as getAgentDir, b as saveAgentState, c as getAgentState, d as getProviderExportsForModel, f as getProviderTmuxFlags, g as messageAgent, h as listRunningAgents, i as getActivity, j as shouldAutoStart, k as loadCloisterConfig, l as getLatestSessionId, m as init_agents, p as getSessionId$1, s as getAgentRuntimeState, u as getProviderEnvForModel, v as resumeAgent, w as transitionIssueToInProgress, x as saveSessionId, y as saveAgentRuntimeState } from "./agents-
|
|
21
|
+
import { A as saveCloisterConfig, C as stopAgent, D as getHealthThresholdsMs, O as init_config$1, S as spawnAgent, T as transitionIssueToInReview, a as getAgentDir, b as saveAgentState, c as getAgentState, d as getProviderExportsForModel, f as getProviderTmuxFlags, g as messageAgent, h as listRunningAgents, i as getActivity, j as shouldAutoStart, k as loadCloisterConfig, l as getLatestSessionId, m as init_agents, p as getSessionId$1, s as getAgentRuntimeState, u as getProviderEnvForModel, v as resumeAgent, w as transitionIssueToInProgress, x as saveSessionId, y as saveAgentRuntimeState } from "./agents-BQWA-Vps.js";
|
|
22
22
|
import { c as writeHealthEvent } from "./health-events-db-Do4NrOhC.js";
|
|
23
23
|
import { s as init_hooks, t as checkHook } from "./hooks-CjqXOlNb.js";
|
|
24
|
-
import { a as getModelId, s as init_work_type_router } from "./work-type-router-
|
|
24
|
+
import { a as getModelId, s as init_work_type_router } from "./work-type-router-7kwLSwrP.js";
|
|
25
25
|
import { i as readWorkspacePlan, n as init_io, r as readPlan, t as findPlan } from "./io-DKS6359z.js";
|
|
26
26
|
import { n as hasPRDDraft } from "./prd-draft-BD8oMkZ1.js";
|
|
27
|
-
import { a as getAgentPendingQuestions$1, r as getAgentJsonlMtime, t as computeAgentEnrichment } from "./agent-enrichment-
|
|
27
|
+
import { a as getAgentPendingQuestions$1, r as getAgentJsonlMtime, t as computeAgentEnrichment } from "./agent-enrichment-BKZjVvlL.js";
|
|
28
28
|
import { n as writeFeedbackFile, t as init_feedback_writer } from "./feedback-writer-CudSe1WK.js";
|
|
29
29
|
import { n as getVBriefACStatus, r as syncBeadStatusToVBrief } from "./beads-Bv-AdX7G.js";
|
|
30
30
|
import { n as getTldrDaemonService, r as init_tldr_daemon } from "./tldr-daemon-B_oLRD8z.js";
|
|
@@ -1406,10 +1406,10 @@ const ReadModelServiceLive = Layer.effect(ReadModelService, Effect.gen(function*
|
|
|
1406
1406
|
} catch {}
|
|
1407
1407
|
if (!usedProjectionCache) {
|
|
1408
1408
|
const [{ listRunningAgents, warnOnBareNumericIssueIds }, { getAllSpecialists, getSpecialistState }, { loadReviewStatuses, getReviewStatus }, { computeAgentEnrichment }] = yield* Effect.all([
|
|
1409
|
-
Effect.promise(() => import("./agents-
|
|
1410
|
-
Effect.promise(() => import("./specialists-
|
|
1411
|
-
Effect.promise(() => import("./review-status-
|
|
1412
|
-
Effect.promise(() => import("./agent-enrichment-
|
|
1409
|
+
Effect.promise(() => import("./agents-Dinc9j_8.js")),
|
|
1410
|
+
Effect.promise(() => import("./specialists-sIFlMd3s.js")),
|
|
1411
|
+
Effect.promise(() => import("./review-status-Dww2OKUX.js")),
|
|
1412
|
+
Effect.promise(() => import("./agent-enrichment-iY3_PylI.js"))
|
|
1413
1413
|
]);
|
|
1414
1414
|
warnOnBareNumericIssueIds();
|
|
1415
1415
|
const running = listRunningAgents();
|
|
@@ -1489,7 +1489,7 @@ const ReadModelServiceLive = Layer.effect(ReadModelService, Effect.gen(function*
|
|
|
1489
1489
|
console.log(`[ReadModel] Bootstrapped: ${Object.keys(agentsById).length} agents, ${Object.keys(specialistsByName).length} specialists, ${Object.keys(reviewStatusByIssueId).length} review statuses, seq=${sequence}`);
|
|
1490
1490
|
}
|
|
1491
1491
|
try {
|
|
1492
|
-
const { getSharedIssueService } = yield* Effect.promise(() => import("./issue-service-singleton-
|
|
1492
|
+
const { getSharedIssueService } = yield* Effect.promise(() => import("./issue-service-singleton-BGKf0A95.js"));
|
|
1493
1493
|
const issueService = getSharedIssueService();
|
|
1494
1494
|
const currentIssues = JSON.parse(JSON.stringify(issueService.getIssues()));
|
|
1495
1495
|
if (currentIssues.length > 0 || !usedProjectionCache) state = {
|
|
@@ -2527,7 +2527,7 @@ const IssueLifecycleLive = Layer.effect(IssueLifecycle, Effect.gen(function* ()
|
|
|
2527
2527
|
}));
|
|
2528
2528
|
IssueLifecycleLive.pipe(Layer.provide(LinearClientOptionalLive), Layer.provide(GitHubClientOptionalLive), Layer.provide(Layer.effect(RallyClient, Effect.gen(function* () {
|
|
2529
2529
|
return yield* Effect.gen(function* () {
|
|
2530
|
-
const { getRallyConfig } = yield* Effect.promise(() => import("./tracker-config-
|
|
2530
|
+
const { getRallyConfig } = yield* Effect.promise(() => import("./tracker-config-BX6ijWOc.js"));
|
|
2531
2531
|
if (!getRallyConfig()) {
|
|
2532
2532
|
const fail = Effect.fail(new TrackerNotConfigured({ tracker: "rally" }));
|
|
2533
2533
|
return {
|
|
@@ -2560,7 +2560,7 @@ const AgentSpawnerLive = Layer.effect(AgentSpawner, Effect.sync(() => ({
|
|
|
2560
2560
|
const beadsDir = join$1(workspacePath, ".beads");
|
|
2561
2561
|
const projectBeadsDir = join$1(workspacePath, "..", "..", ".beads");
|
|
2562
2562
|
if (!(existsSync$1(beadsDir) || existsSync$1(projectBeadsDir))) throw new BeadsNotInitialized({ workspace: workspacePath });
|
|
2563
|
-
const { getAgentState, spawnAgent, normalizeAgentId } = await import("./agents-
|
|
2563
|
+
const { getAgentState, spawnAgent, normalizeAgentId } = await import("./agents-Dinc9j_8.js");
|
|
2564
2564
|
const normalizedId = normalizeAgentId(issueId);
|
|
2565
2565
|
if (getAgentState(normalizedId)?.status === "running") throw new AgentAlreadyRunning({ id: issueId });
|
|
2566
2566
|
return {
|
|
@@ -2597,7 +2597,7 @@ const AgentSpawnerLive = Layer.effect(AgentSpawner, Effect.sync(() => ({
|
|
|
2597
2597
|
const { writeFile } = fsp;
|
|
2598
2598
|
await writeFile(planningPromptPath, opts.issue.description ?? "", "utf-8");
|
|
2599
2599
|
const sessionName = opts.sessionName ?? `planning-${issueId.toLowerCase()}`;
|
|
2600
|
-
const { spawnPlanningSession } = await import("./spawn-planning-session-
|
|
2600
|
+
const { spawnPlanningSession } = await import("./spawn-planning-session-D5uEpHzf.js");
|
|
2601
2601
|
const result = await spawnPlanningSession({
|
|
2602
2602
|
issue: {
|
|
2603
2603
|
id: issue.id,
|
|
@@ -2629,14 +2629,14 @@ const AgentSpawnerLive = Layer.effect(AgentSpawner, Effect.sync(() => ({
|
|
|
2629
2629
|
}),
|
|
2630
2630
|
kill: (agentId) => Effect.tryPromise({
|
|
2631
2631
|
try: async () => {
|
|
2632
|
-
const { stopAgent } = await import("./agents-
|
|
2632
|
+
const { stopAgent } = await import("./agents-Dinc9j_8.js");
|
|
2633
2633
|
stopAgent(agentId);
|
|
2634
2634
|
},
|
|
2635
2635
|
catch: () => void 0
|
|
2636
2636
|
}).pipe(Effect.ignore),
|
|
2637
2637
|
message: (agentId, msg) => Effect.tryPromise({
|
|
2638
2638
|
try: async () => {
|
|
2639
|
-
const { messageAgent } = await import("./agents-
|
|
2639
|
+
const { messageAgent } = await import("./agents-Dinc9j_8.js");
|
|
2640
2640
|
await messageAgent(agentId, msg);
|
|
2641
2641
|
},
|
|
2642
2642
|
catch: (err) => new AgentStartError({
|
|
@@ -2647,7 +2647,7 @@ const AgentSpawnerLive = Layer.effect(AgentSpawner, Effect.sync(() => ({
|
|
|
2647
2647
|
}),
|
|
2648
2648
|
deepWipe: (issueId, opts) => Effect.tryPromise({
|
|
2649
2649
|
try: async () => {
|
|
2650
|
-
const { deepWipe } = await import("./workflows-
|
|
2650
|
+
const { deepWipe } = await import("./workflows-BDpPjK18.js");
|
|
2651
2651
|
const { resolveProjectFromIssue } = await import("./projects-C5ozxjwP.js");
|
|
2652
2652
|
const project = resolveProjectFromIssue(issueId);
|
|
2653
2653
|
await deepWipe({
|
|
@@ -8854,7 +8854,7 @@ const postIssueCloseRoute = HttpRouter.add("POST", "/api/issues/:issueId/close",
|
|
|
8854
8854
|
const eventStore = yield* EventStoreService;
|
|
8855
8855
|
const { reason } = body;
|
|
8856
8856
|
const projectPath = getProjectPath$4(void 0, extractPrefix(issueId) ?? issueId.split("-")[0]);
|
|
8857
|
-
const { close: closeWorkflow } = yield* Effect.promise(() => import("./lifecycle-
|
|
8857
|
+
const { close: closeWorkflow } = yield* Effect.promise(() => import("./lifecycle-Dpgg-IeP.js"));
|
|
8858
8858
|
const githubCheck = isGitHubIssue$1(issueId);
|
|
8859
8859
|
const issueDataService = getIssueDataService$3();
|
|
8860
8860
|
const issueSource = issueDataService.getIssueSource(issueId);
|
|
@@ -9542,7 +9542,7 @@ const postIssueCancelRoute = HttpRouter.add("POST", "/api/issues/:id/cancel", ht
|
|
|
9542
9542
|
});
|
|
9543
9543
|
if (wipeWorkspace) yield* Effect.promise(async () => {
|
|
9544
9544
|
try {
|
|
9545
|
-
const { deepWipe } = await import("./lifecycle-
|
|
9545
|
+
const { deepWipe } = await import("./lifecycle-Dpgg-IeP.js");
|
|
9546
9546
|
const issuePrefix = extractTeamPrefix(id);
|
|
9547
9547
|
const projectPath = getProjectPath$4(void 0, issuePrefix);
|
|
9548
9548
|
const projectConfig = findProjectByTeam(issuePrefix);
|
|
@@ -9644,7 +9644,7 @@ const postIssueReopenRoute = HttpRouter.add("POST", "/api/issues/:id/reopen", ht
|
|
|
9644
9644
|
yield* Effect.promise(async () => {
|
|
9645
9645
|
try {
|
|
9646
9646
|
clearReviewStatus(id.toUpperCase());
|
|
9647
|
-
const { checkSpecialistQueue, completeSpecialistTask } = await import("./specialists-
|
|
9647
|
+
const { checkSpecialistQueue, completeSpecialistTask } = await import("./specialists-sIFlMd3s.js");
|
|
9648
9648
|
for (const specialist of [
|
|
9649
9649
|
"review-agent",
|
|
9650
9650
|
"test-agent",
|
|
@@ -9655,7 +9655,7 @@ const postIssueReopenRoute = HttpRouter.add("POST", "/api/issues/:id/reopen", ht
|
|
|
9655
9655
|
}
|
|
9656
9656
|
} catch {}
|
|
9657
9657
|
try {
|
|
9658
|
-
const { resetPostMergeState } = await import("./merge-agent-
|
|
9658
|
+
const { resetPostMergeState } = await import("./merge-agent-CqvQu-n_.js");
|
|
9659
9659
|
resetPostMergeState(id);
|
|
9660
9660
|
resetPostMergeState(id.toUpperCase());
|
|
9661
9661
|
} catch {}
|
|
@@ -9871,7 +9871,7 @@ const postIssueDeepWipeRoute = HttpRouter.add("POST", "/api/issues/:id/deep-wipe
|
|
|
9871
9871
|
const body = yield* readJsonBody$9;
|
|
9872
9872
|
const eventStore = yield* EventStoreService;
|
|
9873
9873
|
const { deleteWorkspace = false } = body || {};
|
|
9874
|
-
const { deepWipe } = yield* Effect.promise(() => import("./lifecycle-
|
|
9874
|
+
const { deepWipe } = yield* Effect.promise(() => import("./lifecycle-Dpgg-IeP.js"));
|
|
9875
9875
|
const githubCheck = isGitHubIssue$1(id);
|
|
9876
9876
|
let projectPath = "";
|
|
9877
9877
|
let projectName = "";
|
|
@@ -9972,7 +9972,7 @@ const postIssueDeepWipeRoute = HttpRouter.add("POST", "/api/issues/:id/deep-wipe
|
|
|
9972
9972
|
const postIssueCloseOutRoute = HttpRouter.add("POST", "/api/issues/:id/close-out", httpHandler(Effect.gen(function* () {
|
|
9973
9973
|
const id = (yield* HttpRouter.params)["id"] ?? "";
|
|
9974
9974
|
const eventStore = yield* EventStoreService;
|
|
9975
|
-
const { closeOut } = yield* Effect.promise(() => import("./lifecycle-
|
|
9975
|
+
const { closeOut } = yield* Effect.promise(() => import("./lifecycle-Dpgg-IeP.js"));
|
|
9976
9976
|
const githubCheck = isGitHubIssue$1(id);
|
|
9977
9977
|
let projectPath = "";
|
|
9978
9978
|
if (githubCheck.isGitHub && githubCheck.owner && githubCheck.repo) projectPath = getGitHubLocalPaths$1()[`${githubCheck.owner}/${githubCheck.repo}`] || "";
|
|
@@ -12285,7 +12285,7 @@ async function checkOrphanedReviewStatuses() {
|
|
|
12285
12285
|
const { resolveProjectFromIssue } = await import("./projects-C5ozxjwP.js");
|
|
12286
12286
|
const resolved = resolveProjectFromIssue(issueId);
|
|
12287
12287
|
if (resolved) {
|
|
12288
|
-
const { spawnEphemeralSpecialist } = await import("./specialists-
|
|
12288
|
+
const { spawnEphemeralSpecialist } = await import("./specialists-sIFlMd3s.js");
|
|
12289
12289
|
const result = await spawnEphemeralSpecialist(resolved.projectKey, "review-agent", {
|
|
12290
12290
|
issueId,
|
|
12291
12291
|
workspace,
|
|
@@ -12298,7 +12298,7 @@ async function checkOrphanedReviewStatuses() {
|
|
|
12298
12298
|
actions.push(`Re-dispatched pending review for ${issueId} via ${resolved.projectKey}/review-agent (deacon-orphan-recovery)`);
|
|
12299
12299
|
console.log(`[deacon] Re-dispatched review for ${issueId} after orphan/pending detection (project: ${resolved.projectKey})`);
|
|
12300
12300
|
} else if (result.error === "specialist_busy") {
|
|
12301
|
-
const { submitToSpecialistQueue } = await import("./specialists-
|
|
12301
|
+
const { submitToSpecialistQueue } = await import("./specialists-sIFlMd3s.js");
|
|
12302
12302
|
submitToSpecialistQueue("review-agent", {
|
|
12303
12303
|
priority: "high",
|
|
12304
12304
|
source: "deacon-orphan-recovery",
|
|
@@ -12339,7 +12339,7 @@ async function checkOrphanedReviewStatuses() {
|
|
|
12339
12339
|
const { resolveProjectFromIssue } = await import("./projects-C5ozxjwP.js");
|
|
12340
12340
|
const resolved = resolveProjectFromIssue(issueId);
|
|
12341
12341
|
if (resolved) {
|
|
12342
|
-
const { spawnEphemeralSpecialist } = await import("./specialists-
|
|
12342
|
+
const { spawnEphemeralSpecialist } = await import("./specialists-sIFlMd3s.js");
|
|
12343
12343
|
const result = await spawnEphemeralSpecialist(resolved.projectKey, "test-agent", {
|
|
12344
12344
|
issueId,
|
|
12345
12345
|
workspace,
|
|
@@ -12351,7 +12351,7 @@ async function checkOrphanedReviewStatuses() {
|
|
|
12351
12351
|
actions.push(`Re-dispatched orphaned test for ${issueId} via ${resolved.projectKey}/test-agent (deacon-orphan-recovery)`);
|
|
12352
12352
|
console.log(`[deacon] Re-dispatched test for ${issueId} after orphan detection (project: ${resolved.projectKey})`);
|
|
12353
12353
|
} else if (result.error === "specialist_busy") {
|
|
12354
|
-
const { submitToSpecialistQueue } = await import("./specialists-
|
|
12354
|
+
const { submitToSpecialistQueue } = await import("./specialists-sIFlMd3s.js");
|
|
12355
12355
|
submitToSpecialistQueue("test-agent", {
|
|
12356
12356
|
priority: "high",
|
|
12357
12357
|
source: "deacon-orphan-recovery",
|
|
@@ -12720,8 +12720,8 @@ async function patrolWorkAgentResolutions() {
|
|
|
12720
12720
|
async function checkSpecialistQueues() {
|
|
12721
12721
|
const actions = [];
|
|
12722
12722
|
try {
|
|
12723
|
-
const { checkSpecialistQueue, spawnEphemeralSpecialist, getTmuxSessionName, isRunning } = await import("./specialists-
|
|
12724
|
-
const { getAgentRuntimeState } = await import("./agents-
|
|
12723
|
+
const { checkSpecialistQueue, spawnEphemeralSpecialist, getTmuxSessionName, isRunning } = await import("./specialists-sIFlMd3s.js");
|
|
12724
|
+
const { getAgentRuntimeState } = await import("./agents-Dinc9j_8.js");
|
|
12725
12725
|
const { resolveProjectFromIssue } = await import("./projects-C5ozxjwP.js");
|
|
12726
12726
|
for (const specialistType of [
|
|
12727
12727
|
"review-agent",
|
|
@@ -12902,7 +12902,7 @@ async function runPatrol() {
|
|
|
12902
12902
|
statuses[issueId].mergeStatus = "merged";
|
|
12903
12903
|
statuses[issueId].readyForMerge = false;
|
|
12904
12904
|
writeFileSync(REVIEW_STATUS_FILE, JSON.stringify(statuses, null, 2), "utf-8");
|
|
12905
|
-
const { postMergeLifecycle } = await import("./merge-agent-
|
|
12905
|
+
const { postMergeLifecycle } = await import("./merge-agent-CqvQu-n_.js");
|
|
12906
12906
|
postMergeLifecycle(issueId, resolved.projectPath).catch((err) => console.warn(`[deacon] postMergeLifecycle failed for ${issueId}: ${err}`));
|
|
12907
12907
|
actions.push(`Auto-completed stale merge for ${issueId}`);
|
|
12908
12908
|
} else {
|
|
@@ -13160,7 +13160,7 @@ var CloisterService = class {
|
|
|
13160
13160
|
}
|
|
13161
13161
|
try {
|
|
13162
13162
|
if (existsSync(AGENTS_DIR)) {
|
|
13163
|
-
const { isRunning: isSpecialistRunning } = await import("./specialists-
|
|
13163
|
+
const { isRunning: isSpecialistRunning } = await import("./specialists-sIFlMd3s.js");
|
|
13164
13164
|
const specialistPattern = /^specialist-(.+)-(review-agent|test-agent|merge-agent)$/;
|
|
13165
13165
|
const entries = readdirSync(AGENTS_DIR, { withFileTypes: true });
|
|
13166
13166
|
for (const entry of entries) {
|
|
@@ -13192,7 +13192,7 @@ var CloisterService = class {
|
|
|
13192
13192
|
try {
|
|
13193
13193
|
const reviewStatuses = loadReviewStatuses();
|
|
13194
13194
|
const { resolveProjectFromIssue } = await import("./projects-C5ozxjwP.js");
|
|
13195
|
-
const { submitToSpecialistQueue, getTmuxSessionName, getAllProjectSpecialistStatuses } = await import("./specialists-
|
|
13195
|
+
const { submitToSpecialistQueue, getTmuxSessionName, getAllProjectSpecialistStatuses } = await import("./specialists-sIFlMd3s.js");
|
|
13196
13196
|
const activeReviewIssues = /* @__PURE__ */ new Set();
|
|
13197
13197
|
try {
|
|
13198
13198
|
const projSpecs = await getAllProjectSpecialistStatuses();
|
|
@@ -13416,7 +13416,7 @@ var CloisterService = class {
|
|
|
13416
13416
|
const retryCount = this.processedCompletions.get(dir.name) || 0;
|
|
13417
13417
|
if (retryCount >= 3) continue;
|
|
13418
13418
|
const issueId = dir.name.replace("agent-", "").toUpperCase();
|
|
13419
|
-
const { getReviewStatus } = await import("./review-status-
|
|
13419
|
+
const { getReviewStatus } = await import("./review-status-Dww2OKUX.js");
|
|
13420
13420
|
const existingReview = getReviewStatus(issueId);
|
|
13421
13421
|
if (existingReview && ["reviewing", "passed"].includes(existingReview.reviewStatus || "")) {
|
|
13422
13422
|
console.log(`🔔 Cloister: Completion marker for ${issueId} — review already ${existingReview.reviewStatus}, marking processed`);
|
|
@@ -14976,7 +14976,7 @@ const postAgentsRoute = HttpRouter.add("POST", "/api/agents", httpHandler(Effect
|
|
|
14976
14976
|
const { loadConfig: loadPanConfig } = yield* Effect.promise(() => import("./config-CTXkBATQ.js"));
|
|
14977
14977
|
const fly = createFlyProviderFromConfig(loadPanConfig().remote);
|
|
14978
14978
|
yield* Effect.promise(() => fly.syncAllCredentials(workspaceMetadata.vmName));
|
|
14979
|
-
const { buildWorkAgentPrompt, getTrackerContext } = yield* Effect.promise(() => import("./work-agent-prompt-
|
|
14979
|
+
const { buildWorkAgentPrompt, getTrackerContext } = yield* Effect.promise(() => import("./work-agent-prompt-D3tPzPvb.js"));
|
|
14980
14980
|
const agentPrompt = buildWorkAgentPrompt({
|
|
14981
14981
|
issueId,
|
|
14982
14982
|
env: "REMOTE",
|
|
@@ -15043,7 +15043,7 @@ const postAgentsRoute = HttpRouter.add("POST", "/api/agents", httpHandler(Effect
|
|
|
15043
15043
|
yield* Effect.promise(() => writeFile(resumePromptFile, resumePrompt));
|
|
15044
15044
|
let agentModel = existingAgentState.model || "claude-sonnet-4-6";
|
|
15045
15045
|
try {
|
|
15046
|
-
const { getModelId } = yield* Effect.promise(() => import("./work-type-router-
|
|
15046
|
+
const { getModelId } = yield* Effect.promise(() => import("./work-type-router-ByOOudGz.js"));
|
|
15047
15047
|
agentModel = getModelId(`issue-agent:${phase}`);
|
|
15048
15048
|
} catch {}
|
|
15049
15049
|
const resumeContent = `#!/bin/bash\n${getProviderExportsForModel(agentModel)}prompt=$(cat "${resumePromptFile}")\nexec claude --dangerously-skip-permissions --model ${agentModel} -p "$prompt"\n`;
|
|
@@ -17024,7 +17024,7 @@ const postWorkspaceReviewStatusRoute = HttpRouter.add("POST", "/api/workspaces/:
|
|
|
17024
17024
|
if (testNotes) update.testNotes = testNotes;
|
|
17025
17025
|
const status = setReviewStatus(issueId, update);
|
|
17026
17026
|
console.log(`[review-status] Updated ${issueId}:`, status);
|
|
17027
|
-
const { getTmuxSessionName, checkSpecialistQueue: cSQ, completeSpecialistTask } = yield* Effect.promise(() => import("./specialists-
|
|
17027
|
+
const { getTmuxSessionName, checkSpecialistQueue: cSQ, completeSpecialistTask } = yield* Effect.promise(() => import("./specialists-sIFlMd3s.js"));
|
|
17028
17028
|
const projectKey = resolveProjectFromIssue(issueId)?.projectKey;
|
|
17029
17029
|
if (reviewStatus && [
|
|
17030
17030
|
"passed",
|
|
@@ -17081,7 +17081,7 @@ const postWorkspaceReviewStatusRoute = HttpRouter.add("POST", "/api/workspaces/:
|
|
|
17081
17081
|
const projectPath = getProjectPath$2(void 0, extractPrefix(issueId) ?? issueId.split("-")[0]);
|
|
17082
17082
|
const testWorkspace = body.workspace || join$1(projectPath, "workspaces", `feature-${issueLower}`);
|
|
17083
17083
|
const testBranch = body.branch || `feature/${issueLower}`;
|
|
17084
|
-
const { autoQueueTestAgentAndNotify } = yield* Effect.promise(() => import("./test-agent-queue-
|
|
17084
|
+
const { autoQueueTestAgentAndNotify } = yield* Effect.promise(() => import("./test-agent-queue-7jXB2KkN.js"));
|
|
17085
17085
|
try {
|
|
17086
17086
|
yield* Effect.promise(() => autoQueueTestAgentAndNotify(issueId, testWorkspace, testBranch, messageAgent));
|
|
17087
17087
|
yield* Effect.promise(() => Effect.runPromise(eventStore.append({
|
|
@@ -17286,7 +17286,7 @@ const postWorkspaceReviewRoute = HttpRouter.add("POST", "/api/workspaces/:issueI
|
|
|
17286
17286
|
});
|
|
17287
17287
|
return;
|
|
17288
17288
|
}
|
|
17289
|
-
const { spawnEphemeralSpecialist: spawnEphemeral, isRunning, getTmuxSessionName, submitToSpecialistQueue } = await import("./specialists-
|
|
17289
|
+
const { spawnEphemeralSpecialist: spawnEphemeral, isRunning, getTmuxSessionName, submitToSpecialistQueue } = await import("./specialists-sIFlMd3s.js");
|
|
17290
17290
|
const reviewProjectKey = resolveProjectFromIssue(issueId)?.projectKey ?? null;
|
|
17291
17291
|
const reviewSession = getTmuxSessionName("review-agent", reviewProjectKey ?? void 0);
|
|
17292
17292
|
const reviewRunning = await isRunning("review-agent", reviewProjectKey ?? void 0);
|
|
@@ -17371,7 +17371,7 @@ ${workspaceAccessInstructions}
|
|
|
17371
17371
|
if (!reviewResult.success) {
|
|
17372
17372
|
if (reviewResult.error === "specialist_busy") {
|
|
17373
17373
|
console.log(`[review] review-agent busy for ${issueId} — queuing for deacon dispatch`);
|
|
17374
|
-
const { submitToSpecialistQueue } = await import("./specialists-
|
|
17374
|
+
const { submitToSpecialistQueue } = await import("./specialists-sIFlMd3s.js");
|
|
17375
17375
|
submitToSpecialistQueue("review-agent", {
|
|
17376
17376
|
priority: "high",
|
|
17377
17377
|
source: "review-pipeline",
|
|
@@ -17439,7 +17439,7 @@ const postWorkspaceRequestReviewRoute = HttpRouter.add("POST", "/api/workspaces/
|
|
|
17439
17439
|
const workspacePath = join$1(resolved.projectPath, "workspaces", `feature-${issueId.toLowerCase()}`);
|
|
17440
17440
|
const branchName = `feature/${issueId.toLowerCase()}`;
|
|
17441
17441
|
setReviewStatus(issueId, { testStatus: "testing" });
|
|
17442
|
-
const { spawnEphemeralSpecialist } = yield* Effect.promise(() => import("./specialists-
|
|
17442
|
+
const { spawnEphemeralSpecialist } = yield* Effect.promise(() => import("./specialists-sIFlMd3s.js"));
|
|
17443
17443
|
const testResult = yield* Effect.promise(() => spawnEphemeralSpecialist(resolved.projectKey, "test-agent", {
|
|
17444
17444
|
issueId,
|
|
17445
17445
|
workspace: workspacePath,
|
|
@@ -17520,7 +17520,7 @@ const postWorkspaceRequestReviewRoute = HttpRouter.add("POST", "/api/workspaces/
|
|
|
17520
17520
|
});
|
|
17521
17521
|
console.log(`[request-review] Agent requested re-review for ${issueId} (${newCount}/${MAX_AUTO_REQUEUE})${workspaceInfo.isRemote ? ` (remote: ${workspaceInfo.vmName})` : ""}`);
|
|
17522
17522
|
try {
|
|
17523
|
-
const { spawnEphemeralSpecialist } = yield* Effect.promise(() => import("./specialists-
|
|
17523
|
+
const { spawnEphemeralSpecialist } = yield* Effect.promise(() => import("./specialists-sIFlMd3s.js"));
|
|
17524
17524
|
const resolved = resolveProjectFromIssue(issueId);
|
|
17525
17525
|
if (!resolved) return jsonResponse({
|
|
17526
17526
|
success: false,
|
|
@@ -17549,7 +17549,7 @@ const postWorkspaceRequestReviewRoute = HttpRouter.add("POST", "/api/workspaces/
|
|
|
17549
17549
|
});
|
|
17550
17550
|
} else if (result.error === "specialist_busy") {
|
|
17551
17551
|
console.log(`[request-review] Review specialist busy for ${issueId} — queuing for deacon dispatch`);
|
|
17552
|
-
const { submitToSpecialistQueue } = yield* Effect.promise(async () => import("./specialists-
|
|
17552
|
+
const { submitToSpecialistQueue } = yield* Effect.promise(async () => import("./specialists-sIFlMd3s.js"));
|
|
17553
17553
|
submitToSpecialistQueue("review-agent", {
|
|
17554
17554
|
priority: "high",
|
|
17555
17555
|
source: "request-review",
|
|
@@ -17597,7 +17597,7 @@ const postWorkspaceResetReviewRoute = HttpRouter.add("POST", "/api/workspaces/:i
|
|
|
17597
17597
|
error: "Workspace does not exist"
|
|
17598
17598
|
}, { status: 400 });
|
|
17599
17599
|
console.log(`[reset-review] Human-initiated pipeline reset for ${issueId}`);
|
|
17600
|
-
const { checkSpecialistQueue: cSQ, completeSpecialistTask } = yield* Effect.promise(() => import("./specialists-
|
|
17600
|
+
const { checkSpecialistQueue: cSQ, completeSpecialistTask } = yield* Effect.promise(() => import("./specialists-sIFlMd3s.js"));
|
|
17601
17601
|
for (const specialist of [
|
|
17602
17602
|
"review-agent",
|
|
17603
17603
|
"test-agent",
|
|
@@ -17623,13 +17623,13 @@ const postWorkspaceResetReviewRoute = HttpRouter.add("POST", "/api/workspaces/:i
|
|
|
17623
17623
|
verificationCycleCount: 0
|
|
17624
17624
|
});
|
|
17625
17625
|
try {
|
|
17626
|
-
const { resetPostMergeState } = yield* Effect.promise(() => import("./merge-agent-
|
|
17626
|
+
const { resetPostMergeState } = yield* Effect.promise(() => import("./merge-agent-CqvQu-n_.js"));
|
|
17627
17627
|
resetPostMergeState(issueId);
|
|
17628
17628
|
} catch {}
|
|
17629
17629
|
console.log(`[reset-review] Pipeline state reset for ${issueId} — awaiting agent to request review`);
|
|
17630
17630
|
const rerun = body?.rerun === true;
|
|
17631
17631
|
if (rerun) try {
|
|
17632
|
-
const { dispatchToSpecialist } = yield* Effect.promise(() => import("./specialists-
|
|
17632
|
+
const { dispatchToSpecialist } = yield* Effect.promise(() => import("./specialists-sIFlMd3s.js"));
|
|
17633
17633
|
const resolved = resolveProjectFromIssue(issueId);
|
|
17634
17634
|
if (resolved) {
|
|
17635
17635
|
const wsInfo = getWorkspaceInfoForIssue(issueId);
|
|
@@ -17791,7 +17791,7 @@ async function triggerMerge(issueId) {
|
|
|
17791
17791
|
readyForMerge: false
|
|
17792
17792
|
});
|
|
17793
17793
|
completePendingOperation(issueId, null);
|
|
17794
|
-
const { postMergeLifecycle } = await import("./merge-agent-
|
|
17794
|
+
const { postMergeLifecycle } = await import("./merge-agent-CqvQu-n_.js");
|
|
17795
17795
|
await postMergeLifecycle(issueId, projectPath);
|
|
17796
17796
|
return {
|
|
17797
17797
|
success: true,
|
|
@@ -17865,7 +17865,7 @@ async function triggerMerge(issueId) {
|
|
|
17865
17865
|
console.log(`[merge] Push note for ${repo.name}: ${pushErr.message}`);
|
|
17866
17866
|
}
|
|
17867
17867
|
try {
|
|
17868
|
-
const { spawnMergeAgentForBranches } = await import("./merge-agent-
|
|
17868
|
+
const { spawnMergeAgentForBranches } = await import("./merge-agent-CqvQu-n_.js");
|
|
17869
17869
|
const mergeResult = await spawnMergeAgentForBranches(repoMainPath, branchName, defaultBranch, issueId, { skipDoneReport: true });
|
|
17870
17870
|
if (mergeResult.success) mergeResults.push({
|
|
17871
17871
|
repo: repo.name,
|
|
@@ -17906,7 +17906,7 @@ async function triggerMerge(issueId) {
|
|
|
17906
17906
|
readyForMerge: false
|
|
17907
17907
|
});
|
|
17908
17908
|
completePendingOperation(issueId, null);
|
|
17909
|
-
const { postMergeLifecycle } = await import("./merge-agent-
|
|
17909
|
+
const { postMergeLifecycle } = await import("./merge-agent-CqvQu-n_.js");
|
|
17910
17910
|
await postMergeLifecycle(issueId, projectPath);
|
|
17911
17911
|
return {
|
|
17912
17912
|
success: true,
|
|
@@ -17941,7 +17941,7 @@ async function triggerMerge(issueId) {
|
|
|
17941
17941
|
};
|
|
17942
17942
|
}
|
|
17943
17943
|
const prNumber = prMatch[1];
|
|
17944
|
-
const { spawnRebaseAgentForBranch, postMergeLifecycle } = await import("./merge-agent-
|
|
17944
|
+
const { spawnRebaseAgentForBranch, postMergeLifecycle } = await import("./merge-agent-CqvQu-n_.js");
|
|
17945
17945
|
console.log(`[merge] Rebasing ${branchName} onto main for ${issueId}...`);
|
|
17946
17946
|
const rebaseResult = await spawnRebaseAgentForBranch(workspacePath, branchName, "main", issueId);
|
|
17947
17947
|
if (!rebaseResult.success) {
|
|
@@ -18076,7 +18076,7 @@ const postWorkspaceApproveRoute = HttpRouter.add("POST", "/api/workspaces/:issue
|
|
|
18076
18076
|
completePendingOperation(issueId, error);
|
|
18077
18077
|
return jsonResponse({ error }, { status: 400 });
|
|
18078
18078
|
}
|
|
18079
|
-
const { wakeSpecialist, spawnEphemeralSpecialist: spawnApproveEphemeral } = await import("./specialists-
|
|
18079
|
+
const { wakeSpecialist, spawnEphemeralSpecialist: spawnApproveEphemeral } = await import("./specialists-sIFlMd3s.js");
|
|
18080
18080
|
const approveProjectKey = resolveProjectFromIssue(issueId)?.projectKey ?? null;
|
|
18081
18081
|
console.log(`[approve] Starting specialist pipeline for ${issueId}...`);
|
|
18082
18082
|
const pipelinePrompt = `STRICT REVIEW WORKFLOW for ${issueId}
|
|
@@ -18155,7 +18155,7 @@ curl -X POST http://localhost:${PORT}/api/specialists/test-agent/queue -H "Conte
|
|
|
18155
18155
|
}
|
|
18156
18156
|
console.log(`[approve] Step 3/3: Waking merge-agent for ${issueId}...`);
|
|
18157
18157
|
try {
|
|
18158
|
-
const { spawnMergeAgentForBranches } = await import("./merge-agent-
|
|
18158
|
+
const { spawnMergeAgentForBranches } = await import("./merge-agent-CqvQu-n_.js");
|
|
18159
18159
|
const mergeResult = await spawnMergeAgentForBranches(projectPath, branchName, "main", issueId);
|
|
18160
18160
|
if (mergeResult.success && mergeResult.testsStatus === "PASS") console.log(`merge-agent successfully merged ${issueId}`);
|
|
18161
18161
|
else if (mergeResult.success && mergeResult.testsStatus === "SKIP") console.log(`merge-agent merged ${issueId} (tests skipped)`);
|
|
@@ -18213,7 +18213,7 @@ curl -X POST http://localhost:${PORT}/api/specialists/test-agent/queue -H "Conte
|
|
|
18213
18213
|
completePendingOperation(issueId, error);
|
|
18214
18214
|
return jsonResponse({ error }, { status: 400 });
|
|
18215
18215
|
}
|
|
18216
|
-
const { approve: lifecycleApprove } = await import("./lifecycle-
|
|
18216
|
+
const { approve: lifecycleApprove } = await import("./lifecycle-Dpgg-IeP.js");
|
|
18217
18217
|
const ghResolved = resolveGitHubIssue(issueId);
|
|
18218
18218
|
const isGitHubIssueFlag = ghResolved.isGitHub;
|
|
18219
18219
|
const lifecycleResult = await lifecycleApprove({
|
|
@@ -18363,7 +18363,7 @@ function firePostMergeLifecycle(issueId) {
|
|
|
18363
18363
|
_postMergeInFlight.add(issueId);
|
|
18364
18364
|
(async () => {
|
|
18365
18365
|
try {
|
|
18366
|
-
const { postMergeLifecycle } = await import("./merge-agent-
|
|
18366
|
+
const { postMergeLifecycle } = await import("./merge-agent-CqvQu-n_.js");
|
|
18367
18367
|
await postMergeLifecycle(issueId, projectPath);
|
|
18368
18368
|
console.log(`[merge] post-merge lifecycle completed for ${issueId}`);
|
|
18369
18369
|
} catch (err) {
|
|
@@ -18379,14 +18379,14 @@ function getProjectPathForIssue(issuePrefix) {
|
|
|
18379
18379
|
return join$1(homedir(), "Projects");
|
|
18380
18380
|
}
|
|
18381
18381
|
const getSpecialistsRoute = HttpRouter.add("GET", "/api/specialists", httpHandler(Effect.gen(function* () {
|
|
18382
|
-
const { getAllSpecialistStatus, getAllProjectSpecialistStatuses } = yield* Effect.promise(() => import("./specialists-
|
|
18382
|
+
const { getAllSpecialistStatus, getAllProjectSpecialistStatuses } = yield* Effect.promise(() => import("./specialists-sIFlMd3s.js"));
|
|
18383
18383
|
return jsonResponse({
|
|
18384
18384
|
specialists: yield* Effect.promise(() => getAllSpecialistStatus()),
|
|
18385
18385
|
projects: yield* Effect.promise(() => getAllProjectSpecialistStatuses())
|
|
18386
18386
|
});
|
|
18387
18387
|
})));
|
|
18388
18388
|
const postSpecialistsResetAllRoute = HttpRouter.add("POST", "/api/specialists/reset-all", httpHandler(Effect.gen(function* () {
|
|
18389
|
-
const { getAllSpecialists, clearSessionId, isRunning, getTmuxSessionName } = yield* Effect.promise(() => import("./specialists-
|
|
18389
|
+
const { getAllSpecialists, clearSessionId, isRunning, getTmuxSessionName } = yield* Effect.promise(() => import("./specialists-sIFlMd3s.js"));
|
|
18390
18390
|
const { clearHook } = yield* Effect.promise(() => import("./hooks-CB4T47NC.js"));
|
|
18391
18391
|
const specialists = getAllSpecialists();
|
|
18392
18392
|
const results = [];
|
|
@@ -18478,7 +18478,7 @@ const postSpecialistsDoneRoute = HttpRouter.add("POST", "/api/specialists/done",
|
|
|
18478
18478
|
const updatedStatus = setReviewStatus$1(normalizedIssueId, update);
|
|
18479
18479
|
yield* Effect.promise(async () => {
|
|
18480
18480
|
try {
|
|
18481
|
-
const { getTmuxSessionName, checkSpecialistQueue, completeSpecialistTask } = await import("./specialists-
|
|
18481
|
+
const { getTmuxSessionName, checkSpecialistQueue, completeSpecialistTask } = await import("./specialists-sIFlMd3s.js");
|
|
18482
18482
|
saveAgentRuntimeState(getTmuxSessionName(`${specialist}-agent`), {
|
|
18483
18483
|
state: "idle",
|
|
18484
18484
|
lastActivity: (/* @__PURE__ */ new Date()).toISOString()
|
|
@@ -18511,7 +18511,7 @@ const postSpecialistsDoneRoute = HttpRouter.add("POST", "/api/specialists/done",
|
|
|
18511
18511
|
});
|
|
18512
18512
|
if (specialist === "inspect" && status === "passed") yield* Effect.promise(async () => {
|
|
18513
18513
|
try {
|
|
18514
|
-
const { onInspectComplete } = await import("./inspect-agent-
|
|
18514
|
+
const { onInspectComplete } = await import("./inspect-agent-KKOeNR7E.js");
|
|
18515
18515
|
const beadId = (notes?.match(/[Bb]ead\s+(\S+)/))?.[1] || "unknown";
|
|
18516
18516
|
const project = resolveProjectFromIssue(normalizedIssueId);
|
|
18517
18517
|
if (project) {
|
|
@@ -18579,12 +18579,12 @@ const postSpecialistsDoneRoute = HttpRouter.add("POST", "/api/specialists/done",
|
|
|
18579
18579
|
try {
|
|
18580
18580
|
const workAgentId = `agent-${normalizedIssueId.toLowerCase()}`;
|
|
18581
18581
|
const { sessionExists } = await import("./tmux-BzxdKItf.js");
|
|
18582
|
-
const { messageAgent } = await import("./agents-
|
|
18582
|
+
const { messageAgent } = await import("./agents-Dinc9j_8.js");
|
|
18583
18583
|
if (sessionExists(workAgentId)) {
|
|
18584
18584
|
await messageAgent(workAgentId, `MERGE CONFLICT: The merge-agent could not rebase your branch onto main due to conflicts. Please fix this now:\n\n1. git fetch origin main\n2. git rebase origin/main\n3. Resolve any conflicts (git add <file> && git rebase --continue)\n4. git push --force-with-lease\n5. Resubmit: curl -s -X POST http://localhost:3011/api/workspaces/${normalizedIssueId}/request-review -H "Content-Type: application/json" -d "{}"\n\nConflict details: ${notes}`);
|
|
18585
18585
|
console.log(`[specialists/done] Sent rebase instructions to ${workAgentId}`);
|
|
18586
18586
|
} else try {
|
|
18587
|
-
const { resumeAgent } = await import("./agents-
|
|
18587
|
+
const { resumeAgent } = await import("./agents-Dinc9j_8.js");
|
|
18588
18588
|
const result = await resumeAgent(workAgentId, `MERGE CONFLICT: Your branch has conflicts with main. Run: git fetch origin main && git rebase origin/main, resolve conflicts, push with --force-with-lease, then resubmit for review.`);
|
|
18589
18589
|
if (result.success) console.log(`[specialists/done] Resumed ${workAgentId} with rebase instructions`);
|
|
18590
18590
|
else console.log(`[specialists/done] Could not resume ${workAgentId}: ${result.error}`);
|
|
@@ -18599,7 +18599,7 @@ const postSpecialistsDoneRoute = HttpRouter.add("POST", "/api/specialists/done",
|
|
|
18599
18599
|
try {
|
|
18600
18600
|
const workAgentId = `agent-${normalizedIssueId.toLowerCase()}`;
|
|
18601
18601
|
const { sessionExists } = await import("./tmux-BzxdKItf.js");
|
|
18602
|
-
const { messageAgent } = await import("./agents-
|
|
18602
|
+
const { messageAgent } = await import("./agents-Dinc9j_8.js");
|
|
18603
18603
|
if (sessionExists(workAgentId)) {
|
|
18604
18604
|
await messageAgent(workAgentId, `REVIEW FEEDBACK: The review specialist found issues that must be fixed:\n\n${notes}\n\nPlease address all issues, push your changes, then resubmit: curl -s -X POST http://localhost:3011/api/workspaces/${normalizedIssueId}/request-review -H "Content-Type: application/json" -d "{}"`);
|
|
18605
18605
|
console.log(`[specialists/done] Sent review feedback to ${workAgentId}`);
|
|
@@ -18635,7 +18635,7 @@ const postSpecialistsDoneRoute = HttpRouter.add("POST", "/api/specialists/done",
|
|
|
18635
18635
|
});
|
|
18636
18636
|
})));
|
|
18637
18637
|
const postSpecialistsLogsCleanupAllRoute = HttpRouter.add("POST", "/api/specialists/logs/cleanup-all", httpHandler(Effect.gen(function* () {
|
|
18638
|
-
const { cleanupAllLogs } = yield* Effect.promise(() => import("./specialist-logs-
|
|
18638
|
+
const { cleanupAllLogs } = yield* Effect.promise(() => import("./specialist-logs-CBGVRoQF.js"));
|
|
18639
18639
|
const results = cleanupAllLogs();
|
|
18640
18640
|
return jsonResponse({
|
|
18641
18641
|
success: true,
|
|
@@ -18645,7 +18645,7 @@ const postSpecialistsLogsCleanupAllRoute = HttpRouter.add("POST", "/api/speciali
|
|
|
18645
18645
|
});
|
|
18646
18646
|
})));
|
|
18647
18647
|
const getSpecialistQueuesRoute = HttpRouter.add("GET", "/api/specialists/queues", httpHandler(Effect.gen(function* () {
|
|
18648
|
-
const { getAllSpecialists, checkSpecialistQueue } = yield* Effect.promise(() => import("./specialists-
|
|
18648
|
+
const { getAllSpecialists, checkSpecialistQueue } = yield* Effect.promise(() => import("./specialists-sIFlMd3s.js"));
|
|
18649
18649
|
return jsonResponse({ queues: getAllSpecialists().map((specialist) => {
|
|
18650
18650
|
const queue = checkSpecialistQueue(specialist.name);
|
|
18651
18651
|
return {
|
|
@@ -18658,14 +18658,14 @@ const getSpecialistQueuesRoute = HttpRouter.add("GET", "/api/specialists/queues"
|
|
|
18658
18658
|
}) });
|
|
18659
18659
|
})));
|
|
18660
18660
|
const getSpecialistsProjectsRoute = HttpRouter.add("GET", "/api/specialists/projects", httpHandler(Effect.gen(function* () {
|
|
18661
|
-
const { getAllProjectSpecialistStatuses } = yield* Effect.promise(() => import("./specialists-
|
|
18661
|
+
const { getAllProjectSpecialistStatuses } = yield* Effect.promise(() => import("./specialists-sIFlMd3s.js"));
|
|
18662
18662
|
return jsonResponse(yield* Effect.promise(() => getAllProjectSpecialistStatuses()));
|
|
18663
18663
|
})));
|
|
18664
18664
|
const postSpecialistWakeRoute = HttpRouter.add("POST", "/api/specialists/:name/wake", httpHandler(Effect.gen(function* () {
|
|
18665
18665
|
const name = (yield* HttpRouter.params)["name"];
|
|
18666
18666
|
const { sessionId } = yield* readJsonBody$6;
|
|
18667
18667
|
const eventStore = yield* EventStoreService;
|
|
18668
|
-
const { getTmuxSessionName, getSessionId, recordWake, isRunning } = yield* Effect.promise(() => import("./specialists-
|
|
18668
|
+
const { getTmuxSessionName, getSessionId, recordWake, isRunning } = yield* Effect.promise(() => import("./specialists-sIFlMd3s.js"));
|
|
18669
18669
|
if (yield* Effect.promise(() => isRunning(name))) return jsonResponse({ error: `Specialist ${name} is already running` }, { status: 400 });
|
|
18670
18670
|
const existingSessionId = getSessionId(name);
|
|
18671
18671
|
const tmuxSession = getTmuxSessionName(name);
|
|
@@ -18673,7 +18673,7 @@ const postSpecialistWakeRoute = HttpRouter.add("POST", "/api/specialists/:name/w
|
|
|
18673
18673
|
const useSessionId = sessionId || existingSessionId;
|
|
18674
18674
|
let specModel = "claude-sonnet-4-6";
|
|
18675
18675
|
try {
|
|
18676
|
-
const { getModelId } = yield* Effect.promise(() => import("./work-type-router-
|
|
18676
|
+
const { getModelId } = yield* Effect.promise(() => import("./work-type-router-ByOOudGz.js"));
|
|
18677
18677
|
specModel = getModelId(`specialist-${name}`);
|
|
18678
18678
|
} catch {}
|
|
18679
18679
|
const specCmd = getAgentCommand(specModel);
|
|
@@ -18701,7 +18701,7 @@ const postSpecialistWakeRoute = HttpRouter.add("POST", "/api/specialists/:name/w
|
|
|
18701
18701
|
const postSpecialistResetRoute = HttpRouter.add("POST", "/api/specialists/:name/reset", httpHandler(Effect.gen(function* () {
|
|
18702
18702
|
const name = (yield* HttpRouter.params)["name"];
|
|
18703
18703
|
const { reinitialize = false } = yield* readJsonBody$6;
|
|
18704
|
-
const { clearSessionId, isRunning, getTmuxSessionName } = yield* Effect.promise(() => import("./specialists-
|
|
18704
|
+
const { clearSessionId, isRunning, getTmuxSessionName } = yield* Effect.promise(() => import("./specialists-sIFlMd3s.js"));
|
|
18705
18705
|
if (yield* Effect.promise(() => isRunning(name))) return jsonResponse({ error: `Specialist ${name} is currently running. Stop it first (tmux kill-session -t ${getTmuxSessionName(name)})` }, { status: 400 });
|
|
18706
18706
|
const wasDeleted = clearSessionId(name);
|
|
18707
18707
|
if (reinitialize) {}
|
|
@@ -18713,7 +18713,7 @@ const postSpecialistResetRoute = HttpRouter.add("POST", "/api/specialists/:name/
|
|
|
18713
18713
|
})));
|
|
18714
18714
|
const postSpecialistInitRoute = HttpRouter.add("POST", "/api/specialists/:name/init", httpHandler(Effect.gen(function* () {
|
|
18715
18715
|
const name = (yield* HttpRouter.params)["name"];
|
|
18716
|
-
const { initializeSpecialist } = yield* Effect.promise(() => import("./specialists-
|
|
18716
|
+
const { initializeSpecialist } = yield* Effect.promise(() => import("./specialists-sIFlMd3s.js"));
|
|
18717
18717
|
const result = yield* Effect.promise(() => initializeSpecialist(name));
|
|
18718
18718
|
if (!result.success) return jsonResponse({ error: result.message }, { status: 400 });
|
|
18719
18719
|
return jsonResponse({
|
|
@@ -18752,7 +18752,7 @@ const postSpecialistReportStatusRoute = HttpRouter.add("POST", "/api/specialists
|
|
|
18752
18752
|
"blocked",
|
|
18753
18753
|
"failed"
|
|
18754
18754
|
].includes(status)) {
|
|
18755
|
-
const { getTmuxSessionName } = yield* Effect.promise(() => import("./specialists-
|
|
18755
|
+
const { getTmuxSessionName } = yield* Effect.promise(() => import("./specialists-sIFlMd3s.js"));
|
|
18756
18756
|
saveAgentRuntimeState(getTmuxSessionName(name), {
|
|
18757
18757
|
state: "idle",
|
|
18758
18758
|
lastActivity: (/* @__PURE__ */ new Date()).toISOString()
|
|
@@ -18779,7 +18779,7 @@ const postSpecialistReportStatusRoute = HttpRouter.add("POST", "/api/specialists
|
|
|
18779
18779
|
})));
|
|
18780
18780
|
const getSpecialistCostRoute = HttpRouter.add("GET", "/api/specialists/:name/cost", httpHandler(Effect.gen(function* () {
|
|
18781
18781
|
const name = (yield* HttpRouter.params)["name"];
|
|
18782
|
-
const { getSessionId } = yield* Effect.promise(() => import("./specialists-
|
|
18782
|
+
const { getSessionId } = yield* Effect.promise(() => import("./specialists-sIFlMd3s.js"));
|
|
18783
18783
|
const sessionId = getSessionId(name);
|
|
18784
18784
|
if (!sessionId) return jsonResponse({
|
|
18785
18785
|
cost: 0,
|
|
@@ -18834,7 +18834,7 @@ const getSpecialistCostRoute = HttpRouter.add("GET", "/api/specialists/:name/cos
|
|
|
18834
18834
|
const getSpecialistQueueRoute = HttpRouter.add("GET", "/api/specialists/:name/queue", httpHandler(Effect.gen(function* () {
|
|
18835
18835
|
const name = (yield* HttpRouter.params)["name"];
|
|
18836
18836
|
if (!VALID_SPECIALIST_NAMES.includes(name)) return jsonResponse({ error: `Invalid specialist name: ${name}` }, { status: 400 });
|
|
18837
|
-
const { checkSpecialistQueue } = yield* Effect.promise(() => import("./specialists-
|
|
18837
|
+
const { checkSpecialistQueue } = yield* Effect.promise(() => import("./specialists-sIFlMd3s.js"));
|
|
18838
18838
|
const queue = checkSpecialistQueue(name);
|
|
18839
18839
|
return jsonResponse({
|
|
18840
18840
|
specialistName: name,
|
|
@@ -18849,7 +18849,7 @@ const postSpecialistQueueRoute = HttpRouter.add("POST", "/api/specialists/:name/
|
|
|
18849
18849
|
const { issueId, workspace, branch, customPrompt, priority = "normal" } = yield* readJsonBody$6;
|
|
18850
18850
|
if (!VALID_SPECIALIST_NAMES.includes(name)) return jsonResponse({ error: `Invalid specialist name: ${name}` }, { status: 400 });
|
|
18851
18851
|
if (!issueId) return jsonResponse({ error: "issueId is required" }, { status: 400 });
|
|
18852
|
-
const { spawnEphemeralSpecialist, submitToSpecialistQueue } = yield* Effect.promise(() => import("./specialists-
|
|
18852
|
+
const { spawnEphemeralSpecialist, submitToSpecialistQueue } = yield* Effect.promise(() => import("./specialists-sIFlMd3s.js"));
|
|
18853
18853
|
const resolved = resolveProjectFromIssue(issueId);
|
|
18854
18854
|
if (!resolved) return jsonResponse({ error: `No project configured for ${issueId}. Add it to projects.yaml.` }, { status: 400 });
|
|
18855
18855
|
const result = yield* Effect.promise(() => spawnEphemeralSpecialist(resolved.projectKey, name, {
|
|
@@ -18883,7 +18883,7 @@ const deleteSpecialistQueueItemRoute = HttpRouter.add("DELETE", "/api/specialist
|
|
|
18883
18883
|
const name = params["name"];
|
|
18884
18884
|
const itemId = params["itemId"];
|
|
18885
18885
|
if (!VALID_SPECIALIST_NAMES.includes(name)) return jsonResponse({ error: `Invalid specialist name: ${name}` }, { status: 400 });
|
|
18886
|
-
const { completeSpecialistTask } = yield* Effect.promise(() => import("./specialists-
|
|
18886
|
+
const { completeSpecialistTask } = yield* Effect.promise(() => import("./specialists-sIFlMd3s.js"));
|
|
18887
18887
|
if (!completeSpecialistTask(name, itemId)) return jsonResponse({ error: `Item ${itemId} not found in queue for ${name}` }, { status: 404 });
|
|
18888
18888
|
return jsonResponse({
|
|
18889
18889
|
success: true,
|
|
@@ -18910,7 +18910,7 @@ const postSpecialistAutoCompleteRoute = HttpRouter.add("POST", "/api/specialists
|
|
|
18910
18910
|
if (!issueId || !status) return jsonResponse({ error: "issueId and status required" }, { status: 400 });
|
|
18911
18911
|
console.log(`[specialists] Auto-detected completion for ${name}: ${issueId} -> ${status}`);
|
|
18912
18912
|
if (!VALID_SPECIALIST_NAMES.includes(name)) return jsonResponse({ error: `Invalid specialist name: ${name}` }, { status: 400 });
|
|
18913
|
-
const { getTmuxSessionName, completeSpecialistTask, wakeSpecialistWithTask, checkSpecialistQueue, submitToSpecialistQueue } = yield* Effect.promise(() => import("./specialists-
|
|
18913
|
+
const { getTmuxSessionName, completeSpecialistTask, wakeSpecialistWithTask, checkSpecialistQueue, submitToSpecialistQueue } = yield* Effect.promise(() => import("./specialists-sIFlMd3s.js"));
|
|
18914
18914
|
saveAgentRuntimeState(getTmuxSessionName(name), {
|
|
18915
18915
|
state: "idle",
|
|
18916
18916
|
lastActivity: (/* @__PURE__ */ new Date()).toISOString(),
|
|
@@ -19010,7 +19010,7 @@ const getProjectSpecialistStatusRoute = HttpRouter.add("GET", "/api/specialists/
|
|
|
19010
19010
|
const project = params["project"];
|
|
19011
19011
|
const type = params["type"];
|
|
19012
19012
|
if (!validateSpecialistType(type)) return jsonResponse({ error: "Invalid specialist type. Must be review-agent, test-agent, or merge-agent" }, { status: 400 });
|
|
19013
|
-
const { getSpecialistStatus } = yield* Effect.promise(() => import("./specialists-
|
|
19013
|
+
const { getSpecialistStatus } = yield* Effect.promise(() => import("./specialists-sIFlMd3s.js"));
|
|
19014
19014
|
return jsonResponse(yield* Effect.promise(() => getSpecialistStatus(type, project)));
|
|
19015
19015
|
})));
|
|
19016
19016
|
const postProjectSpecialistKillRoute = HttpRouter.add("POST", "/api/specialists/:project/:type/kill", httpHandler(Effect.gen(function* () {
|
|
@@ -19018,7 +19018,7 @@ const postProjectSpecialistKillRoute = HttpRouter.add("POST", "/api/specialists/
|
|
|
19018
19018
|
const project = params["project"];
|
|
19019
19019
|
const type = params["type"];
|
|
19020
19020
|
if (!validateSpecialistType(type)) return jsonResponse({ error: "Invalid specialist type. Must be review-agent, test-agent, or merge-agent" }, { status: 400 });
|
|
19021
|
-
const { getTmuxSessionName } = yield* Effect.promise(() => import("./specialists-
|
|
19021
|
+
const { getTmuxSessionName } = yield* Effect.promise(() => import("./specialists-sIFlMd3s.js"));
|
|
19022
19022
|
const tmuxSession = getTmuxSessionName(type, project);
|
|
19023
19023
|
yield* Effect.promise(() => execAsync$8(`tmux kill-session -t "${tmuxSession}"`).catch(() => {}));
|
|
19024
19024
|
saveAgentRuntimeState(tmuxSession, {
|
|
@@ -19033,7 +19033,7 @@ const postProjectSpecialistKillRoute = HttpRouter.add("POST", "/api/specialists/
|
|
|
19033
19033
|
const getProjectSpecialistQueueRoute = HttpRouter.add("GET", "/api/specialists/:project/:type/queue", httpHandler(Effect.gen(function* () {
|
|
19034
19034
|
const type = (yield* HttpRouter.params)["type"];
|
|
19035
19035
|
if (!validateSpecialistType(type)) return jsonResponse({ error: "Invalid specialist type. Must be review-agent, test-agent, or merge-agent" }, { status: 400 });
|
|
19036
|
-
const { checkSpecialistQueue } = yield* Effect.promise(() => import("./specialists-
|
|
19036
|
+
const { checkSpecialistQueue } = yield* Effect.promise(() => import("./specialists-sIFlMd3s.js"));
|
|
19037
19037
|
return jsonResponse(checkSpecialistQueue(type));
|
|
19038
19038
|
})));
|
|
19039
19039
|
const postProjectSpecialistSpawnRoute = HttpRouter.add("POST", "/api/specialists/:project/:type/spawn", httpHandler(Effect.gen(function* () {
|
|
@@ -19043,7 +19043,7 @@ const postProjectSpecialistSpawnRoute = HttpRouter.add("POST", "/api/specialists
|
|
|
19043
19043
|
const { issueId, branch, workspace, prUrl, context } = yield* readJsonBody$6;
|
|
19044
19044
|
if (!issueId) return jsonResponse({ error: "issueId is required" }, { status: 400 });
|
|
19045
19045
|
if (!validateSpecialistType(type)) return jsonResponse({ error: "Invalid specialist type. Must be review-agent, test-agent, or merge-agent" }, { status: 400 });
|
|
19046
|
-
const { spawnEphemeralSpecialist } = yield* Effect.promise(() => import("./specialists-
|
|
19046
|
+
const { spawnEphemeralSpecialist } = yield* Effect.promise(() => import("./specialists-sIFlMd3s.js"));
|
|
19047
19047
|
const result = yield* Effect.promise(() => spawnEphemeralSpecialist(project, type, {
|
|
19048
19048
|
issueId,
|
|
19049
19049
|
branch,
|
|
@@ -19069,7 +19069,7 @@ const getProjectSpecialistRunsRoute = HttpRouter.add("GET", "/api/specialists/:p
|
|
|
19069
19069
|
if (limitParam) limit = parseInt(limitParam, 10);
|
|
19070
19070
|
if (offsetParam) offset = parseInt(offsetParam, 10);
|
|
19071
19071
|
}
|
|
19072
|
-
const { listRunLogs } = yield* Effect.promise(() => import("./specialist-logs-
|
|
19072
|
+
const { listRunLogs } = yield* Effect.promise(() => import("./specialist-logs-CBGVRoQF.js"));
|
|
19073
19073
|
return jsonResponse(listRunLogs(project, type, {
|
|
19074
19074
|
limit,
|
|
19075
19075
|
offset
|
|
@@ -19080,7 +19080,7 @@ const getProjectSpecialistRunStreamRoute = HttpRouter.add("GET", "/api/specialis
|
|
|
19080
19080
|
const project = params["project"];
|
|
19081
19081
|
const type = params["type"];
|
|
19082
19082
|
const runId = params["runId"];
|
|
19083
|
-
const { getRunLogPath, isRunLogActive } = yield* Effect.promise(() => import("./specialist-logs-
|
|
19083
|
+
const { getRunLogPath, isRunLogActive } = yield* Effect.promise(() => import("./specialist-logs-CBGVRoQF.js"));
|
|
19084
19084
|
const logPath = getRunLogPath(project, type, runId);
|
|
19085
19085
|
if (!existsSync$1(logPath)) return jsonResponse({ error: "Run log not found" }, { status: 404 });
|
|
19086
19086
|
const encoder = new TextEncoder();
|
|
@@ -19139,7 +19139,7 @@ const getProjectSpecialistRunRoute = HttpRouter.add("GET", "/api/specialists/:pr
|
|
|
19139
19139
|
const project = params["project"];
|
|
19140
19140
|
const type = params["type"];
|
|
19141
19141
|
const runId = params["runId"];
|
|
19142
|
-
const { getRunLog, parseLogMetadata } = yield* Effect.promise(() => import("./specialist-logs-
|
|
19142
|
+
const { getRunLog, parseLogMetadata } = yield* Effect.promise(() => import("./specialist-logs-CBGVRoQF.js"));
|
|
19143
19143
|
const content = getRunLog(project, type, runId);
|
|
19144
19144
|
if (!content) return jsonResponse({ error: "Run log not found" }, { status: 404 });
|
|
19145
19145
|
return jsonResponse({
|
|
@@ -19153,7 +19153,7 @@ const postProjectSpecialistRunTerminateRoute = HttpRouter.add("POST", "/api/spec
|
|
|
19153
19153
|
const project = params["project"];
|
|
19154
19154
|
const type = params["type"];
|
|
19155
19155
|
if (!validateSpecialistType(type)) return jsonResponse({ error: "Invalid specialist type. Must be review-agent, test-agent, or merge-agent" }, { status: 400 });
|
|
19156
|
-
const { terminateSpecialist } = yield* Effect.promise(() => import("./specialists-
|
|
19156
|
+
const { terminateSpecialist } = yield* Effect.promise(() => import("./specialists-sIFlMd3s.js"));
|
|
19157
19157
|
yield* Effect.promise(() => terminateSpecialist(project, type));
|
|
19158
19158
|
return jsonResponse({
|
|
19159
19159
|
success: true,
|
|
@@ -19165,7 +19165,7 @@ const postProjectSpecialistGracePauseRoute = HttpRouter.add("POST", "/api/specia
|
|
|
19165
19165
|
const project = params["project"];
|
|
19166
19166
|
const type = params["type"];
|
|
19167
19167
|
if (!validateSpecialistType(type)) return jsonResponse({ error: "Invalid specialist type. Must be review-agent, test-agent, or merge-agent" }, { status: 400 });
|
|
19168
|
-
const { pauseGracePeriod } = yield* Effect.promise(() => import("./specialists-
|
|
19168
|
+
const { pauseGracePeriod } = yield* Effect.promise(() => import("./specialists-sIFlMd3s.js"));
|
|
19169
19169
|
if (pauseGracePeriod(project, type)) return jsonResponse({
|
|
19170
19170
|
success: true,
|
|
19171
19171
|
message: "Grace period paused"
|
|
@@ -19177,7 +19177,7 @@ const postProjectSpecialistGraceResumeRoute = HttpRouter.add("POST", "/api/speci
|
|
|
19177
19177
|
const project = params["project"];
|
|
19178
19178
|
const type = params["type"];
|
|
19179
19179
|
if (!validateSpecialistType(type)) return jsonResponse({ error: "Invalid specialist type. Must be review-agent, test-agent, or merge-agent" }, { status: 400 });
|
|
19180
|
-
const { resumeGracePeriod } = yield* Effect.promise(() => import("./specialists-
|
|
19180
|
+
const { resumeGracePeriod } = yield* Effect.promise(() => import("./specialists-sIFlMd3s.js"));
|
|
19181
19181
|
if (resumeGracePeriod(project, type)) return jsonResponse({
|
|
19182
19182
|
success: true,
|
|
19183
19183
|
message: "Grace period resumed"
|
|
@@ -19189,7 +19189,7 @@ const postProjectSpecialistGraceExitRoute = HttpRouter.add("POST", "/api/special
|
|
|
19189
19189
|
const project = params["project"];
|
|
19190
19190
|
const type = params["type"];
|
|
19191
19191
|
if (!validateSpecialistType(type)) return jsonResponse({ error: "Invalid specialist type. Must be review-agent, test-agent, or merge-agent" }, { status: 400 });
|
|
19192
|
-
const { exitGracePeriod } = yield* Effect.promise(() => import("./specialists-
|
|
19192
|
+
const { exitGracePeriod } = yield* Effect.promise(() => import("./specialists-sIFlMd3s.js"));
|
|
19193
19193
|
exitGracePeriod(project, type);
|
|
19194
19194
|
return jsonResponse({
|
|
19195
19195
|
success: true,
|
|
@@ -19201,7 +19201,7 @@ const getProjectSpecialistGraceRoute = HttpRouter.add("GET", "/api/specialists/:
|
|
|
19201
19201
|
const project = params["project"];
|
|
19202
19202
|
const type = params["type"];
|
|
19203
19203
|
if (!validateSpecialistType(type)) return jsonResponse({ error: "Invalid specialist type. Must be review-agent, test-agent, or merge-agent" }, { status: 400 });
|
|
19204
|
-
const { getGracePeriodState } = yield* Effect.promise(() => import("./specialists-
|
|
19204
|
+
const { getGracePeriodState } = yield* Effect.promise(() => import("./specialists-sIFlMd3s.js"));
|
|
19205
19205
|
const state = getGracePeriodState(project, type);
|
|
19206
19206
|
if (state) return jsonResponse(state);
|
|
19207
19207
|
else return jsonResponse({ error: "No active grace period" }, { status: 404 });
|
|
@@ -19210,7 +19210,7 @@ const getProjectSpecialistContextRoute = HttpRouter.add("GET", "/api/specialists
|
|
|
19210
19210
|
const params = yield* HttpRouter.params;
|
|
19211
19211
|
const project = params["project"];
|
|
19212
19212
|
const type = params["type"];
|
|
19213
|
-
const { loadContextDigest } = yield* Effect.promise(() => import("./specialist-context-
|
|
19213
|
+
const { loadContextDigest } = yield* Effect.promise(() => import("./specialist-context-CEKqWqyF.js"));
|
|
19214
19214
|
const digest = loadContextDigest(project, type);
|
|
19215
19215
|
if (digest) return jsonResponse({ digest });
|
|
19216
19216
|
else return jsonResponse({ error: "No context digest found" }, { status: 404 });
|
|
@@ -19219,7 +19219,7 @@ const postProjectSpecialistContextRegenerateRoute = HttpRouter.add("POST", "/api
|
|
|
19219
19219
|
const params = yield* HttpRouter.params;
|
|
19220
19220
|
const project = params["project"];
|
|
19221
19221
|
const type = params["type"];
|
|
19222
|
-
const { regenerateContextDigest } = yield* Effect.promise(() => import("./specialist-context-
|
|
19222
|
+
const { regenerateContextDigest } = yield* Effect.promise(() => import("./specialist-context-CEKqWqyF.js"));
|
|
19223
19223
|
const digest = yield* Effect.promise(() => regenerateContextDigest(project, type));
|
|
19224
19224
|
if (digest) return jsonResponse({
|
|
19225
19225
|
digest,
|
|
@@ -19238,7 +19238,7 @@ const postProjectSpecialistCompleteRoute = HttpRouter.add("POST", "/api/speciali
|
|
|
19238
19238
|
"blocked"
|
|
19239
19239
|
].includes(status)) return jsonResponse({ error: "Valid status (passed/failed/blocked) is required" }, { status: 400 });
|
|
19240
19240
|
if (!validateSpecialistType(type)) return jsonResponse({ error: "Invalid specialist type. Must be review-agent, test-agent, or merge-agent" }, { status: 400 });
|
|
19241
|
-
const { signalSpecialistCompletion } = yield* Effect.promise(() => import("./specialists-
|
|
19241
|
+
const { signalSpecialistCompletion } = yield* Effect.promise(() => import("./specialists-sIFlMd3s.js"));
|
|
19242
19242
|
signalSpecialistCompletion(project, type, {
|
|
19243
19243
|
status,
|
|
19244
19244
|
notes
|
|
@@ -19272,7 +19272,7 @@ const postProjectSpecialistLogsCleanupRoute = HttpRouter.add("POST", "/api/speci
|
|
|
19272
19272
|
const params = yield* HttpRouter.params;
|
|
19273
19273
|
const project = params["project"];
|
|
19274
19274
|
const type = params["type"];
|
|
19275
|
-
const { cleanupOldLogs } = yield* Effect.promise(() => import("./specialist-logs-
|
|
19275
|
+
const { cleanupOldLogs } = yield* Effect.promise(() => import("./specialist-logs-CBGVRoQF.js"));
|
|
19276
19276
|
const { getSpecialistRetention } = yield* Effect.promise(() => import("./projects-C5ozxjwP.js"));
|
|
19277
19277
|
const deleted = cleanupOldLogs(project, type, getSpecialistRetention(project));
|
|
19278
19278
|
return jsonResponse({
|
|
@@ -19285,7 +19285,7 @@ const postProjectSpecialistResetSessionRoute = HttpRouter.add("POST", "/api/spec
|
|
|
19285
19285
|
const params = yield* HttpRouter.params;
|
|
19286
19286
|
const projectKey = params["project"] ?? "";
|
|
19287
19287
|
const name = params["name"] ?? "";
|
|
19288
|
-
const { bumpSessionGeneration } = yield* Effect.promise(() => import("./specialists-
|
|
19288
|
+
const { bumpSessionGeneration } = yield* Effect.promise(() => import("./specialists-sIFlMd3s.js"));
|
|
19289
19289
|
const newGen = bumpSessionGeneration(name, projectKey);
|
|
19290
19290
|
const tmuxSession = `specialist-${projectKey}-${name}`;
|
|
19291
19291
|
try {
|
|
@@ -20712,7 +20712,7 @@ Be specific: reference actual file names, function names, requirement text, disc
|
|
|
20712
20712
|
const modelFlag = cliArgs.length > 0 ? ` ${cliArgs.join(" ")}` : "";
|
|
20713
20713
|
const promptFile = join$1(planningDir, ".status-review-prompt.tmp");
|
|
20714
20714
|
const { getProviderForModel, getProviderEnv } = await import("./providers-csVZVPkE.js");
|
|
20715
|
-
const { loadConfig: loadYamlConfig } = await import("./config-yaml-
|
|
20715
|
+
const { loadConfig: loadYamlConfig } = await import("./config-yaml-CNNnB4Mu.js");
|
|
20716
20716
|
let providerEnvStr = "";
|
|
20717
20717
|
const statusProvider = getProviderForModel(statusModelId);
|
|
20718
20718
|
if (statusProvider.name !== "anthropic") {
|
|
@@ -23112,7 +23112,7 @@ Continue the PLANNING session. Do NOT implement anything.
|
|
|
23112
23112
|
const { getAgentCommand } = await import("./settings-XWvDcj-D.js");
|
|
23113
23113
|
let msgPlanningModel = "claude-sonnet-4-6";
|
|
23114
23114
|
try {
|
|
23115
|
-
const { getModelId } = await import("./work-type-router-
|
|
23115
|
+
const { getModelId } = await import("./work-type-router-ByOOudGz.js");
|
|
23116
23116
|
msgPlanningModel = getModelId("planning-agent");
|
|
23117
23117
|
} catch {}
|
|
23118
23118
|
const msgAgentCmd = getAgentCommand(msgPlanningModel);
|
|
@@ -24140,7 +24140,7 @@ const RESTART_MARKER = join(homedir$1(), ".panopticon", "dashboard-restarting.js
|
|
|
24140
24140
|
* loads new content-hashed chunk filenames (no ERR_MODULE_NOT_FOUND after rebuild).
|
|
24141
24141
|
*/
|
|
24142
24142
|
async function defaultLifecycleRunner(pending) {
|
|
24143
|
-
const { postMergeLifecycle, notifyTldrDaemon } = await import("./merge-agent-
|
|
24143
|
+
const { postMergeLifecycle, notifyTldrDaemon } = await import("./merge-agent-CqvQu-n_.js");
|
|
24144
24144
|
await postMergeLifecycle(pending.issueId, pending.projectPath, pending.sourceBranch, { skipDeploy: true });
|
|
24145
24145
|
if (pending.sourceBranch) await notifyTldrDaemon(pending.projectPath, pending.sourceBranch);
|
|
24146
24146
|
}
|