@straiffi/archon 1.10.12 → 1.11.0
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/README.md +9 -2
- package/dist/client/assets/{ActivityView-BFn_Nhj4.js → ActivityView-BvXSn9Jw.js} +1 -1
- package/dist/client/assets/{GitHubActionsDialog-iZD86Yju.js → GitHubActionsDialog-BPZg_Wy3.js} +1 -1
- package/dist/client/assets/{VerificationDialog-CqKE8t1d.js → VerificationDialog-D3mOY3z9.js} +1 -1
- package/dist/client/assets/{architectureDiagram-3BPJPVTR-C8KefY67.js → architectureDiagram-3BPJPVTR-Bj7m5nzx.js} +1 -1
- package/dist/client/assets/{blockDiagram-GPEHLZMM-BO2Q_Osr.js → blockDiagram-GPEHLZMM-Dv4SrhZg.js} +1 -1
- package/dist/client/assets/{c4Diagram-AAUBKEIU-DGPkhbrK.js → c4Diagram-AAUBKEIU-BKGsMo_n.js} +1 -1
- package/dist/client/assets/channel-DmiHuOD2.js +1 -0
- package/dist/client/assets/{chunk-2J33WTMH-Dtb7Xu8C.js → chunk-2J33WTMH-oppoEflV.js} +1 -1
- package/dist/client/assets/{chunk-3OPIFGDE-Bnf4GbOF.js → chunk-3OPIFGDE-FoeHxEDL.js} +1 -1
- package/dist/client/assets/{chunk-5ZQYHXKU-BWGid3g7.js → chunk-5ZQYHXKU-DFo7Hn8f.js} +1 -1
- package/dist/client/assets/{chunk-727SXJPM-ScA8IRGP.js → chunk-727SXJPM-BbM0ijwZ.js} +1 -1
- package/dist/client/assets/{chunk-AQP2D5EJ-Bygg04Ip.js → chunk-AQP2D5EJ-hGswj21x.js} +1 -1
- package/dist/client/assets/{chunk-CSCIHK7Q-CxdDDtfN.js → chunk-CSCIHK7Q-k3Y3HBPl.js} +1 -1
- package/dist/client/assets/{chunk-KSCS5N6A-BgpZFsB5.js → chunk-KSCS5N6A-D-fMWFHX.js} +1 -1
- package/dist/client/assets/{chunk-L5ZTLDWV-CKSew0OL.js → chunk-L5ZTLDWV-Cp8034Xo.js} +1 -1
- package/dist/client/assets/{chunk-LZXEDZCA-DVG9Rx0K.js → chunk-LZXEDZCA-DCmWwuZY.js} +2 -2
- package/dist/client/assets/{chunk-ND2GUHAM-CHBqNmuF.js → chunk-ND2GUHAM-CPxoYLrb.js} +1 -1
- package/dist/client/assets/{chunk-NZK2D7GU-DvZYWn7V.js → chunk-NZK2D7GU-B1xsQ-Ge.js} +1 -1
- package/dist/client/assets/{chunk-O5CBEL6O-BL7lRTSe.js → chunk-O5CBEL6O-CP_QLulv.js} +1 -1
- package/dist/client/assets/{chunk-WU5MYG2G-C-il2wHZ.js → chunk-WU5MYG2G-CqDmmASz.js} +1 -1
- package/dist/client/assets/classDiagram-4FO5ZUOK-GuChK9KD.js +1 -0
- package/dist/client/assets/classDiagram-v2-Q7XG4LA2-ezsQe4jc.js +1 -0
- package/dist/client/assets/{dagre-BM42HDAG-B00l5tLi.js → dagre-BM42HDAG-I60HgRr5.js} +1 -1
- package/dist/client/assets/{diagram-2AECGRRQ-Tum6g1_5.js → diagram-2AECGRRQ-DH7489lu.js} +1 -1
- package/dist/client/assets/{diagram-5GNKFQAL-BK1GX5jc.js → diagram-5GNKFQAL-UG5kJveS.js} +1 -1
- package/dist/client/assets/{diagram-KO2AKTUF-BrzmD5NB.js → diagram-KO2AKTUF-DLPd9cl-.js} +1 -1
- package/dist/client/assets/{diagram-LMA3HP47-BhrlgXiJ.js → diagram-LMA3HP47-gfoMHIE-.js} +1 -1
- package/dist/client/assets/{diagram-OG6HWLK6-K-fWsJ3a.js → diagram-OG6HWLK6-D7zejHzo.js} +1 -1
- package/dist/client/assets/{erDiagram-TEJ5UH35-Der6PjHE.js → erDiagram-TEJ5UH35-DB1R9rUd.js} +1 -1
- package/dist/client/assets/{flowDiagram-I6XJVG4X-BVWgGhXe.js → flowDiagram-I6XJVG4X-rSasRun9.js} +1 -1
- package/dist/client/assets/{ganttDiagram-6RSMTGT7-DcoZ5ggj.js → ganttDiagram-6RSMTGT7-ickt48MT.js} +1 -1
- package/dist/client/assets/{gitGraphDiagram-PVQCEYII-BhhbMTBu.js → gitGraphDiagram-PVQCEYII-B2MWuej-.js} +1 -1
- package/dist/client/assets/index-4RQBXPuO.css +2 -0
- package/dist/client/assets/index-BN2UMUYo.js +276 -0
- package/dist/client/assets/{infoDiagram-5YYISTIA-Lwc-agyc.js → infoDiagram-5YYISTIA-ClB9-yBC.js} +1 -1
- package/dist/client/assets/{ishikawaDiagram-YF4QCWOH-B95U1Xcl.js → ishikawaDiagram-YF4QCWOH-CyUX0IyE.js} +1 -1
- package/dist/client/assets/{journeyDiagram-JHISSGLW-xFpigy5D.js → journeyDiagram-JHISSGLW-CvZv1SZ7.js} +1 -1
- package/dist/client/assets/{kanban-definition-UN3LZRKU-D3mudQnR.js → kanban-definition-UN3LZRKU-C3MgzQMY.js} +1 -1
- package/dist/client/assets/{line-DtTL3ZI2.js → line-Dpj7mkeR.js} +1 -1
- package/dist/client/assets/{mermaid-parser.core-Dau7K6zV.js → mermaid-parser.core-Ezn4UHHp.js} +1 -1
- package/dist/client/assets/{mermaid.core-B8qtvATu.js → mermaid.core-GVI7XZqR.js} +3 -3
- package/dist/client/assets/{mindmap-definition-RKZ34NQL-Cus04Yq3.js → mindmap-definition-RKZ34NQL-Bu2cgOo4.js} +1 -1
- package/dist/client/assets/{pieDiagram-4H26LBE5-BCMGpBnn.js → pieDiagram-4H26LBE5-_WS41t2_.js} +1 -1
- package/dist/client/assets/{quadrantDiagram-W4KKPZXB-CAmOr-PJ.js → quadrantDiagram-W4KKPZXB-Urvq-XqI.js} +1 -1
- package/dist/client/assets/{requirementDiagram-4Y6WPE33-kisD3jc4.js → requirementDiagram-4Y6WPE33-bkmWG0rM.js} +1 -1
- package/dist/client/assets/{sankeyDiagram-5OEKKPKP-CsCedmM0.js → sankeyDiagram-5OEKKPKP-DI0SArVz.js} +1 -1
- package/dist/client/assets/{sequenceDiagram-3UESZ5HK-B-dAi954.js → sequenceDiagram-3UESZ5HK-n7PKrHd3.js} +1 -1
- package/dist/client/assets/{stateDiagram-AJRCARHV-X0BnedIW.js → stateDiagram-AJRCARHV-CxnEzrQA.js} +1 -1
- package/dist/client/assets/stateDiagram-v2-BHNVJYJU-DXTMu4iJ.js +1 -0
- package/dist/client/assets/{timeline-definition-PNZ67QCA-DfFoSjhr.js → timeline-definition-PNZ67QCA-BFr88_A9.js} +1 -1
- package/dist/client/assets/{vennDiagram-CIIHVFJN-CKSCBwhG.js → vennDiagram-CIIHVFJN-BNYs6tfr.js} +1 -1
- package/dist/client/assets/{wardleyDiagram-YWT4CUSO-DNIBQmHO.js → wardleyDiagram-YWT4CUSO-CaGZd3fe.js} +1 -1
- package/dist/client/assets/{xychartDiagram-2RQKCTM6-FvB55TQN.js → xychartDiagram-2RQKCTM6-CMyDrx2a.js} +1 -1
- package/dist/client/index.html +2 -2
- package/dist/server/db.js +153 -26
- package/dist/server/db.js.map +1 -1
- package/dist/server/index.js +93 -36
- package/dist/server/index.js.map +1 -1
- package/dist/server/lib/activeTool.js +23 -0
- package/dist/server/lib/activeTool.js.map +1 -0
- package/dist/server/lib/agent.js +291 -67
- package/dist/server/lib/agent.js.map +1 -1
- package/dist/server/lib/agentCatalog.js +92 -4
- package/dist/server/lib/agentCatalog.js.map +1 -1
- package/dist/server/lib/agentProvider.js +8 -11
- package/dist/server/lib/agentProvider.js.map +1 -1
- package/dist/server/lib/agentRuns.js +26 -2
- package/dist/server/lib/agentRuns.js.map +1 -1
- package/dist/server/lib/automationCheckGate.js +6 -0
- package/dist/server/lib/automationCheckGate.js.map +1 -1
- package/dist/server/lib/buildExecutionEnvironment.js +82 -29
- package/dist/server/lib/buildExecutionEnvironment.js.map +1 -1
- package/dist/server/lib/buildFlow.js +5 -4
- package/dist/server/lib/buildFlow.js.map +1 -1
- package/dist/server/lib/buildSequences.js +7 -29
- package/dist/server/lib/buildSequences.js.map +1 -1
- package/dist/server/lib/buildTicketCommit.js +82 -11
- package/dist/server/lib/buildTicketCommit.js.map +1 -1
- package/dist/server/lib/bundleReviewOperations.js +6 -0
- package/dist/server/lib/bundleReviewOperations.js.map +1 -1
- package/dist/server/lib/chatOperations.js +109 -93
- package/dist/server/lib/chatOperations.js.map +1 -1
- package/dist/server/lib/chatSessionTitle.js +66 -0
- package/dist/server/lib/chatSessionTitle.js.map +1 -0
- package/dist/server/lib/chats.js +20 -4
- package/dist/server/lib/chats.js.map +1 -1
- package/dist/server/lib/checkAutoFix.js +65 -61
- package/dist/server/lib/checkAutoFix.js.map +1 -1
- package/dist/server/lib/codexAgentProvider.js +320 -0
- package/dist/server/lib/codexAgentProvider.js.map +1 -0
- package/dist/server/lib/codexAppServer.js +678 -0
- package/dist/server/lib/codexAppServer.js.map +1 -0
- package/dist/server/lib/codexCatalogDiscoveryExecutionEnvironment.js +302 -0
- package/dist/server/lib/codexCatalogDiscoveryExecutionEnvironment.js.map +1 -0
- package/dist/server/lib/codexDiscovery.js +137 -0
- package/dist/server/lib/codexDiscovery.js.map +1 -0
- package/dist/server/lib/config.js.map +1 -1
- package/dist/server/lib/dockerSandboxEnvironmentOperations.js +2 -2
- package/dist/server/lib/dockerSandboxEnvironmentOperations.js.map +1 -1
- package/dist/server/lib/dockerSandboxExecutionEnvironment.js +39 -10
- package/dist/server/lib/dockerSandboxExecutionEnvironment.js.map +1 -1
- package/dist/server/lib/dockerSandboxExecutionProvider.js +3 -1
- package/dist/server/lib/dockerSandboxExecutionProvider.js.map +1 -1
- package/dist/server/lib/dockerSandboxReleaseProfiles.js +8 -0
- package/dist/server/lib/dockerSandboxReleaseProfiles.js.map +1 -1
- package/dist/server/lib/executionCredentialCapabilities.js +39 -14
- package/dist/server/lib/executionCredentialCapabilities.js.map +1 -1
- package/dist/server/lib/executionEnvironment.js.map +1 -1
- package/dist/server/lib/executionEnvironmentContexts.js +1 -1
- package/dist/server/lib/executionEnvironmentContexts.js.map +1 -1
- package/dist/server/lib/executionEnvironmentLifecycle.js +1 -1
- package/dist/server/lib/executionEnvironmentLifecycle.js.map +1 -1
- package/dist/server/lib/executionEnvironmentReconciliation.js +7 -7
- package/dist/server/lib/executionEnvironmentReconciliation.js.map +1 -1
- package/dist/server/lib/executionEnvironmentRoutes.js +29 -25
- package/dist/server/lib/executionEnvironmentRoutes.js.map +1 -1
- package/dist/server/lib/executionEnvironmentValidation.js +205 -20
- package/dist/server/lib/executionEnvironmentValidation.js.map +1 -1
- package/dist/server/lib/executionEnvironmentValidationOperations.js +34 -29
- package/dist/server/lib/executionEnvironmentValidationOperations.js.map +1 -1
- package/dist/server/lib/executionEnvironments.js +59 -1
- package/dist/server/lib/executionEnvironments.js.map +1 -1
- package/dist/server/lib/executionProfiles.js +6 -3
- package/dist/server/lib/executionProfiles.js.map +1 -1
- package/dist/server/lib/executionRetryPredicates.js +2 -1
- package/dist/server/lib/executionRetryPredicates.js.map +1 -1
- package/dist/server/lib/executionRunAuthority.js +6 -1
- package/dist/server/lib/executionRunAuthority.js.map +1 -1
- package/dist/server/lib/genericToolCall.js +131 -9
- package/dist/server/lib/genericToolCall.js.map +1 -1
- package/dist/server/lib/hostExecutionEnvironment.js +5 -0
- package/dist/server/lib/hostExecutionEnvironment.js.map +1 -1
- package/dist/server/lib/lightweightPrompt.js +258 -18
- package/dist/server/lib/lightweightPrompt.js.map +1 -1
- package/dist/server/lib/mobileAccess.js +21 -13
- package/dist/server/lib/mobileAccess.js.map +1 -1
- package/dist/server/lib/modelResolutionErrors.js +4 -2
- package/dist/server/lib/modelResolutionErrors.js.map +1 -1
- package/dist/server/lib/models.js +15 -2
- package/dist/server/lib/models.js.map +1 -1
- package/dist/server/lib/oneShotAgent.js +11 -0
- package/dist/server/lib/oneShotAgent.js.map +1 -0
- package/dist/server/lib/projectAutoConfig.js +11 -5
- package/dist/server/lib/projectAutoConfig.js.map +1 -1
- package/dist/server/lib/projectMemory.js +3 -1
- package/dist/server/lib/projectMemory.js.map +1 -1
- package/dist/server/lib/projectMemoryScan.js +13 -3
- package/dist/server/lib/projectMemoryScan.js.map +1 -1
- package/dist/server/lib/projectMemoryTransfer.js +5 -2
- package/dist/server/lib/projectMemoryTransfer.js.map +1 -1
- package/dist/server/lib/promptSkills.js +1 -1
- package/dist/server/lib/promptSkills.js.map +1 -1
- package/dist/server/lib/run.js +2 -0
- package/dist/server/lib/run.js.map +1 -1
- package/dist/server/lib/skills.js +21 -4
- package/dist/server/lib/skills.js.map +1 -1
- package/dist/server/lib/specOperations.js +14 -10
- package/dist/server/lib/specOperations.js.map +1 -1
- package/dist/server/lib/specReviewOperations.js +20 -11
- package/dist/server/lib/specReviewOperations.js.map +1 -1
- package/dist/server/lib/specs.js +14 -4
- package/dist/server/lib/specs.js.map +1 -1
- package/dist/server/lib/ticketAutomationCommit.js +23 -7
- package/dist/server/lib/ticketAutomationCommit.js.map +1 -1
- package/dist/server/lib/ticketFollowUpOperations.js +7 -0
- package/dist/server/lib/ticketFollowUpOperations.js.map +1 -1
- package/dist/server/lib/ticketRunOperations.js +11 -1
- package/dist/server/lib/ticketRunOperations.js.map +1 -1
- package/dist/server/lib/ticketSettingsOperations.js +4 -1
- package/dist/server/lib/ticketSettingsOperations.js.map +1 -1
- package/dist/server/lib/toolUpgrade.js +1 -0
- package/dist/server/lib/toolUpgrade.js.map +1 -1
- package/dist/server/lib/transcriptRuns.js +4 -1
- package/dist/server/lib/transcriptRuns.js.map +1 -1
- package/dist/server/lib/types.js.map +1 -1
- package/dist/server/workers/build.js +9 -4
- package/dist/server/workers/build.js.map +1 -1
- package/dist/server/workers/chat.js +55 -11
- package/dist/server/workers/chat.js.map +1 -1
- package/dist/server/workers/followUp.js +6 -1
- package/dist/server/workers/followUp.js.map +1 -1
- package/dist/server/workers/plan.js +235 -68
- package/dist/server/workers/plan.js.map +1 -1
- package/dist/server/workers/planFollowUp.js +11 -4
- package/dist/server/workers/planFollowUp.js.map +1 -1
- package/dist/server/workers/review.js +15 -18
- package/dist/server/workers/review.js.map +1 -1
- package/dist/server/workers/specReview.js +7 -7
- package/dist/server/workers/specReview.js.map +1 -1
- package/dist/server/workers/specSession.js +8 -12
- package/dist/server/workers/specSession.js.map +1 -1
- package/package.json +1 -1
- package/dist/client/assets/channel-DXKn3TOv.js +0 -1
- package/dist/client/assets/classDiagram-4FO5ZUOK-U0fU20hT.js +0 -1
- package/dist/client/assets/classDiagram-v2-Q7XG4LA2-C6bQNSxL.js +0 -1
- package/dist/client/assets/index-B6BltHSr.css +0 -2
- package/dist/client/assets/index-CFOYm3j9.js +0 -276
- package/dist/client/assets/stateDiagram-v2-BHNVJYJU-6B8YH8Y2.js +0 -1
package/dist/server/index.js
CHANGED
|
@@ -34,6 +34,7 @@ import { attachChatTicketProposalsToMessageContent } from './lib/chatTicketPropo
|
|
|
34
34
|
import { createCorsOriginResolver, parseCorsOrigins } from './lib/cors.js';
|
|
35
35
|
import { abortGitOperation, branchExistsLocally, commitGitChanges, createWorktreeAsync, deleteLocalBranch, deleteWorktree, getBundleReviewDiffForCwd, getGitDiffDataAsync, getGitDiffFiles, getGitDiffFilesAsync, getGitStatus, getGitStatusAsync, getGitUnifiedDiff, getGitUnifiedDiffAsync, getLocalProjectBranch, getProjectBranch, getProjectBranchAsync, getProjectBranchSuggestions, getReviewDiffDataAsync, getSelectedGitUnifiedDiff, getUnpushedCommitDiffForCwd, getUnpushedCommitSummaryForCwd, getUnpushedCommitSummaryForCwdAsync, hasKnownBranchRef, listUnpushedCommitsForCwd, pullGitBranch, pushCurrentBranch, rebaseGitBranchOntoBase, resolveExistingWorktreePath, resolveWorktreePath, squashUnpushedCommitsForCwd, summarizeTicketDiffFiles, switchProjectBranch, syncWorktreeFilesAsync, undoLatestUnpushedCommitForCwd, UnpushedCommitDiffSelectionError } from './lib/git.js';
|
|
36
36
|
import config from './lib/config.js';
|
|
37
|
+
import { getActiveTool, initializeActiveTool, setActiveTool } from './lib/activeTool.js';
|
|
37
38
|
import { autoConfigProject, ProjectAutoConfigError } from './lib/projectAutoConfig.js';
|
|
38
39
|
import { analyzeRepoPath, createInitialCommit, ensureInitialCommitForWorktrees, initializeGitRepo, isInitialCommitRequiredError, } from './lib/projectRepos.js';
|
|
39
40
|
import { browseRepoPath } from './lib/directoryPicker.js';
|
|
@@ -41,14 +42,14 @@ import { resolveDesktopServerHost } from './lib/desktopServerHost.js';
|
|
|
41
42
|
import { emitMobileRealtime, getMobileAccessStatus, regenerateMobilePairingChallenge, revokeMobileSession, setMobileAccessStatusChangeListener, startMobileAccess, stopMobileAccess, } from './lib/mobileAccess.js';
|
|
42
43
|
import { validateDesktopMobileAccessRequest } from './lib/mobileAccessSecurity.js';
|
|
43
44
|
import { refreshChatSessionUsageSnapshot, refreshSpecSessionUsageSnapshot, stopAllBuildAgents, stopAllReviewAgents, stopBuildAgent, stopReviewAgent } from './lib/agent.js';
|
|
44
|
-
import {
|
|
45
|
+
import { runTrackedLightweightPrompt } from './lib/lightweightPrompt.js';
|
|
45
46
|
import { advanceBuildChain, startBuildChain, stopBuildChain } from './lib/buildChains.js';
|
|
46
47
|
import { activateQueuedBuildSequenceTicket, bindBuildSequenceTicketExecutionRun, compensateBuildSequenceAcceptance, enqueueBundledBuild, getDependencyOrderedBundleTicketIds, getBuildSequenceIdForTicket, getBuildSequenceTicketExecutionProfileSelection, hasActiveSequenceForBundle, releaseQueuedBuildSequenceTicketExecutionRunForRetry, removeTicketFromBuildSequence, stopBuildSequence, } from './lib/buildSequences.js';
|
|
47
48
|
import { createExecutionProfileSelection, createServiceExecutionProfileSelection, executionProfileSelectionMetadata, validateExecutionProfileSelection } from './lib/executionRunAuthority.js';
|
|
48
49
|
import { prepareTicketForBuild } from './lib/buildFlow.js';
|
|
49
50
|
import { getActiveBundleRepairBlocker, getBundlePlanMutationBlockerById, shouldBlockPlanForBundleMutationById, } from './lib/bundleActivity.js';
|
|
50
|
-
import {
|
|
51
|
-
import { getSupportedAgentCatalog, normalizeAgentModelId } from './lib/agentCatalog.js';
|
|
51
|
+
import { getModelDiscoveryResult, normalizeModelId, normalizeTicketModelId } from './lib/models.js';
|
|
52
|
+
import { agentSupportsVariants, getSupportedAgentCatalog, isAgentExecutable, isSupportedAgent, normalizeAgentModelId } from './lib/agentCatalog.js';
|
|
52
53
|
import { parseStoredAgentModelConfig, resolveHelperModelConfig, serializeAgentModelConfig, validateAgentModelConfigUpdate, validateDiscoveredAgentModelConfig, } from './lib/agentModelConfig.js';
|
|
53
54
|
import { upgradeTool, UpgradeInProgressError } from './lib/toolUpgrade.js';
|
|
54
55
|
import { acceptProjectMemorySuggestion, applyProjectMemorySuggestionToDecision, applyProjectMemorySuggestionToConvention, archiveProjectConvention, archiveProjectDecision, createProjectConvention, createProjectDecision, dismissProjectMemorySuggestion, getProjectMemoryById, getProjectMemorySuggestionById, isProjectMemoryEnabled, listProjectConventions, listLatestSuccessfulProjectContextArtifacts, listProjectDecisions, listProjectMemories, listProjectMemorySuggestions, restoreProjectConvention, restoreProjectDecision, serializeProjectMemoryFromConventionValue, serializeProjectMemoryFromDecisionValue, serializeProjectMemoryFromSuggestionValue, supersedeProjectDecision, supersedeProjectDecisionFromSuggestion, updateProjectConvention, updateProjectDecision, validateProjectConventionPayload, validateProjectDecisionPayload, } from './lib/projectMemory.js';
|
|
@@ -77,7 +78,7 @@ import { buildAutomationFixInstruction, clearAutomationPause, countBlockingFindi
|
|
|
77
78
|
import { resolveAutomationCheckGateResume, runAutomationCommitChain, runAutomationCommitOperation } from './lib/ticketAutomationCommit.js';
|
|
78
79
|
import { resolveBuildTicketCommitCheckpointLineage, canMutateBuildTicketCommitCheckpoint } from './lib/buildTicketCommit.js';
|
|
79
80
|
import { continueAfterBuildCheckpoint } from './lib/automationBuildContinuation.js';
|
|
80
|
-
import {
|
|
81
|
+
import { getSkillDiscoveryResult, normalizeSkillNames } from './lib/skills.js';
|
|
81
82
|
import { clearAllPreviewProxies } from './lib/previewProxy.js';
|
|
82
83
|
import { createExecutionRun, addExecutionRunLink, addExecutionRunLinks, getExecutionRun, getLifecycleEvent, hasActiveBuildExecutionRunForTicket, getGitHubActionsExecutionDetails, getTestExecutionDetails, GitHubActionsDispatchConflictError, listExecutionRunLinks, listExecutionRuns, listLifecycleEvents, listProjectLifecycleEvents, toCanonicalLifecycleEvent, transitionExecutionRun, withExecutionRunTransaction, } from './lib/executionRuns.js';
|
|
83
84
|
import { appendReviewRepairIterationDecisionInTransaction, attachReviewRepairActionEnvelopeInTransaction, attachReviewRepairActionInTransaction, claimReviewRepairIterationInTransaction, assertReviewRepairIterationDeletionEligible, deleteTerminalReviewRepairIterationsForTicketInTransaction, getActiveReviewRepairIteration, getReviewRepairIteration, pauseReviewRepairIteration, rewindStaleReviewRepairVerification, replaceReviewRepairActionEnvelopeRetryInTransaction, replaceReviewRepairActionRetryInTransaction, replaceReviewRepairVerificationRetryInTransaction, resetReviewRepairGateForRetry, resumePausedReviewRepairIteration, terminalizeReviewRepairIteration, terminalizeReviewRepairIterationInTransaction, } from './lib/reviewRepairIterations.js';
|
|
@@ -769,6 +770,7 @@ const scheduleBuildAfterTicketDeletion = (result) => {
|
|
|
769
770
|
};
|
|
770
771
|
const CORS_ORIGINS = parseCorsOrigins(process.env.CORS_ORIGIN);
|
|
771
772
|
const CORS_ORIGIN_RESOLVER = createCorsOriginResolver(CORS_ORIGINS);
|
|
773
|
+
initializeActiveTool();
|
|
772
774
|
const app = express();
|
|
773
775
|
const API_TIMING_ENABLED = process.env.ARCHON_API_TIMING === '1';
|
|
774
776
|
const createApiTiming = (route, details = {}) => {
|
|
@@ -1993,6 +1995,7 @@ const serializeBundleDetails = (project, bundle, extras = {}) => {
|
|
|
1993
1995
|
execution_order_ticket_ids: tickets.map(ticket => ticket.id),
|
|
1994
1996
|
latest_session_ticket_id: latestSessionTicket?.id ?? null,
|
|
1995
1997
|
latest_session_id: latestSessionTicket?.session_id ?? null,
|
|
1998
|
+
latest_session_tool: latestSessionTicket?.tool ?? null,
|
|
1996
1999
|
review_owner_ticket_id: extras.review_owner_ticket_id ?? null,
|
|
1997
2000
|
target_ticket_id: resolvedTargetTicket?.id ?? null,
|
|
1998
2001
|
has_completed_review: bundleReviewState.has_completed_review,
|
|
@@ -2027,6 +2030,7 @@ const serializeBundleConversationDetails = (project, bundle, extras = {}) => {
|
|
|
2027
2030
|
execution_order_ticket_ids: tickets.map(ticket => ticket.id),
|
|
2028
2031
|
latest_session_ticket_id: latestSessionTicket?.id ?? null,
|
|
2029
2032
|
latest_session_id: latestSessionTicket?.session_id ?? null,
|
|
2033
|
+
latest_session_tool: latestSessionTicket?.tool ?? null,
|
|
2030
2034
|
review_owner_ticket_id: reviewOwnerTicketId,
|
|
2031
2035
|
target_ticket_id: resolvedTargetTicket?.id ?? null,
|
|
2032
2036
|
};
|
|
@@ -3877,6 +3881,9 @@ app.post('/bundles/:id/pull-request-description', async (req, res) => {
|
|
|
3877
3881
|
return res.status(409).json({ error: 'Pull request descriptions are not available for the project root bundle.' });
|
|
3878
3882
|
}
|
|
3879
3883
|
const helperTool = config.tool ?? 'opencode';
|
|
3884
|
+
if (!isAgentExecutable(helperTool)) {
|
|
3885
|
+
return res.status(409).json({ error: `${helperTool} execution is not available` });
|
|
3886
|
+
}
|
|
3880
3887
|
const helperConfig = resolveHelperModelConfig({
|
|
3881
3888
|
helperModelsJson: result.project.helper_models_json,
|
|
3882
3889
|
agent: helperTool,
|
|
@@ -3896,16 +3903,15 @@ app.post('/bundles/:id/pull-request-description', async (req, res) => {
|
|
|
3896
3903
|
.map(ticket => ticket.title.trim())
|
|
3897
3904
|
.filter(Boolean);
|
|
3898
3905
|
try {
|
|
3899
|
-
const
|
|
3900
|
-
|
|
3901
|
-
tool: helperTool,
|
|
3902
|
-
|
|
3903
|
-
variant: helperConfig.variant,
|
|
3906
|
+
const rawDescription = await runTrackedLightweightPrompt({
|
|
3907
|
+
project: result.project,
|
|
3908
|
+
execution: { tool: helperTool, model: helperConfig.model, variant: helperConfig.variant },
|
|
3909
|
+
target: { kind: 'bundle-worktree', bundleId: bundle.id, branch: bundle.branch },
|
|
3904
3910
|
}, buildPullRequestDescriptionPrompt({
|
|
3905
3911
|
title,
|
|
3906
3912
|
ticketTitles,
|
|
3907
3913
|
commitSubjects,
|
|
3908
|
-
})
|
|
3914
|
+
}));
|
|
3909
3915
|
const description = normalizeGeneratedPullRequestDescription(rawDescription);
|
|
3910
3916
|
if (!description) {
|
|
3911
3917
|
return res.status(500).json({ error: 'Unable to generate a pull request description right now.' });
|
|
@@ -5688,22 +5694,25 @@ app.post('/bundles/:id/dismiss-automation-pause', async (req, res) => {
|
|
|
5688
5694
|
return res.json(serializeBundleDetails(result.project, bundle));
|
|
5689
5695
|
});
|
|
5690
5696
|
app.get('/tool', (_req, res) => {
|
|
5691
|
-
res.json({ tool:
|
|
5697
|
+
res.json({ tool: getActiveTool() });
|
|
5692
5698
|
});
|
|
5693
5699
|
app.post('/tool', (req, res) => {
|
|
5694
5700
|
const { tool } = req.body;
|
|
5695
|
-
if (tool
|
|
5701
|
+
if (!isSupportedAgent(tool)) {
|
|
5696
5702
|
return res.status(400).json({ error: 'Invalid tool' });
|
|
5697
5703
|
}
|
|
5698
|
-
|
|
5704
|
+
setActiveTool(tool);
|
|
5699
5705
|
io.emit('tool:updated', { tool });
|
|
5700
5706
|
res.json({ tool });
|
|
5701
5707
|
});
|
|
5702
5708
|
app.post('/tools/upgrade', async (req, res) => {
|
|
5703
5709
|
const { tool } = req.body ?? {};
|
|
5704
|
-
if (tool
|
|
5710
|
+
if (!isSupportedAgent(tool)) {
|
|
5705
5711
|
return res.status(400).json({ error: 'Invalid tool' });
|
|
5706
5712
|
}
|
|
5713
|
+
if (!isAgentExecutable(tool)) {
|
|
5714
|
+
return res.status(409).json({ error: `${tool} execution is not available` });
|
|
5715
|
+
}
|
|
5707
5716
|
try {
|
|
5708
5717
|
const result = await upgradeTool(tool);
|
|
5709
5718
|
return res.json(result);
|
|
@@ -5725,13 +5734,16 @@ app.post('/projects/auto-config', async (req, res) => {
|
|
|
5725
5734
|
}
|
|
5726
5735
|
try {
|
|
5727
5736
|
const requestedTool = req.body?.tool;
|
|
5728
|
-
if (requestedTool !== undefined && requestedTool
|
|
5737
|
+
if (requestedTool !== undefined && !isSupportedAgent(requestedTool)) {
|
|
5729
5738
|
return res.status(400).json({ error: 'tool must be a supported agent' });
|
|
5730
5739
|
}
|
|
5731
5740
|
const tool = requestedTool
|
|
5732
5741
|
?? (hasOwn(req.body ?? {}, 'helper_model') && validation.values.helper_model ? 'opencode' : null)
|
|
5733
5742
|
?? config.tool
|
|
5734
5743
|
?? 'opencode';
|
|
5744
|
+
if (!isAgentExecutable(tool)) {
|
|
5745
|
+
return res.status(409).json({ error: `${tool} execution is not available` });
|
|
5746
|
+
}
|
|
5735
5747
|
const helperConfig = resolveHelperModelConfig({
|
|
5736
5748
|
helperModelsJson: validation.values.helper_models_json,
|
|
5737
5749
|
agent: tool,
|
|
@@ -5808,30 +5820,37 @@ app.post('/projects/browse-repo-path', (_req, res) => {
|
|
|
5808
5820
|
});
|
|
5809
5821
|
app.get('/models', async (req, res) => {
|
|
5810
5822
|
const tool = typeof req.query.tool === 'string' ? req.query.tool : '';
|
|
5811
|
-
if (tool
|
|
5812
|
-
return res.status(400).json({ error: 'Model discovery is only available for
|
|
5823
|
+
if (!isSupportedAgent(tool)) {
|
|
5824
|
+
return res.status(400).json({ error: 'Model discovery is only available for supported agents' });
|
|
5813
5825
|
}
|
|
5814
5826
|
const timing = createApiTiming('/models', { tool });
|
|
5815
5827
|
res.set('Cache-Control', 'no-store');
|
|
5816
|
-
const
|
|
5828
|
+
const result = await getModelDiscoveryResult(tool);
|
|
5817
5829
|
timing.mark('get_discovered_models');
|
|
5818
|
-
timing.end({ count: models.length });
|
|
5819
|
-
return res.json(
|
|
5830
|
+
timing.end({ count: result.models.length, status: result.status });
|
|
5831
|
+
return res.json(result);
|
|
5820
5832
|
});
|
|
5821
5833
|
app.get('/agents', async (_req, res) => {
|
|
5822
5834
|
res.set('Cache-Control', 'no-store');
|
|
5823
|
-
|
|
5835
|
+
const projectId = typeof _req.query.project_id === 'string' ? _req.query.project_id : null;
|
|
5836
|
+
const project = projectId ? getProjectById(projectId) : null;
|
|
5837
|
+
return res.json(await getSupportedAgentCatalog({
|
|
5838
|
+
probeHostAvailability: project?.build_execution_provider === 'host',
|
|
5839
|
+
}));
|
|
5824
5840
|
});
|
|
5825
5841
|
app.get('/skills', async (req, res) => {
|
|
5826
5842
|
const tool = typeof req.query.tool === 'string' ? req.query.tool : '';
|
|
5827
5843
|
const projectId = typeof req.query.project_id === 'string' ? req.query.project_id : null;
|
|
5828
|
-
if (tool !== 'opencode') {
|
|
5829
|
-
return res.status(400).json({ error: 'Skill discovery is only available for
|
|
5844
|
+
if (tool !== 'opencode' && tool !== 'codex') {
|
|
5845
|
+
return res.status(400).json({ error: 'Skill discovery is only available for agents with skill support' });
|
|
5830
5846
|
}
|
|
5831
5847
|
res.set('Cache-Control', 'no-store');
|
|
5832
5848
|
const project = projectId ? getProjectById(projectId) : null;
|
|
5833
|
-
const
|
|
5834
|
-
|
|
5849
|
+
const result = await getSkillDiscoveryResult(tool, {
|
|
5850
|
+
projectId: project?.id ?? null,
|
|
5851
|
+
projectPath: project?.repo_path ?? null,
|
|
5852
|
+
});
|
|
5853
|
+
return res.json(result);
|
|
5835
5854
|
});
|
|
5836
5855
|
app.get('/integrations', (req, res) => {
|
|
5837
5856
|
const result = getRequiredProject(req);
|
|
@@ -6607,6 +6626,12 @@ app.post('/plan', async (req, res) => {
|
|
|
6607
6626
|
app.post('/planning-agent', async (req, res) => {
|
|
6608
6627
|
const { description, model, variant, project_id } = req.body;
|
|
6609
6628
|
const tool = resolveChatTool(req.body.tool);
|
|
6629
|
+
if (!tool) {
|
|
6630
|
+
return res.status(400).json({ error: 'tool must be a supported agent' });
|
|
6631
|
+
}
|
|
6632
|
+
if (!isAgentExecutable(tool)) {
|
|
6633
|
+
return res.status(409).json({ error: `${tool} execution is not available` });
|
|
6634
|
+
}
|
|
6610
6635
|
if (typeof description !== 'string' || !description.trim()) {
|
|
6611
6636
|
return res.status(400).json({ error: 'Description is required' });
|
|
6612
6637
|
}
|
|
@@ -6694,8 +6719,8 @@ app.post('/planning-agent', async (req, res) => {
|
|
|
6694
6719
|
draft,
|
|
6695
6720
|
initiativePrompt: resolvedDescription,
|
|
6696
6721
|
projectId: project.id,
|
|
6697
|
-
model:
|
|
6698
|
-
variant: tool === 'opencode' && typeof variant === 'string' && variant.trim() ? variant.trim() : null,
|
|
6722
|
+
model: typeof model === 'string' ? normalizeAgentModelId(tool, model) || null : null,
|
|
6723
|
+
variant: (tool === 'opencode' || tool === 'codex') && typeof variant === 'string' && variant.trim() ? variant.trim() : null,
|
|
6699
6724
|
skills: resolveRequestedSkills(req.body?.skills),
|
|
6700
6725
|
worktreeBundleId: bundleSelection.bundleId,
|
|
6701
6726
|
});
|
|
@@ -7841,11 +7866,20 @@ app.post('/projects/:id/git-commit-message', async (req, res) => {
|
|
|
7841
7866
|
});
|
|
7842
7867
|
try {
|
|
7843
7868
|
const helperTool = config.tool ?? 'opencode';
|
|
7869
|
+
if (!isAgentExecutable(helperTool)) {
|
|
7870
|
+
return res.status(409).json({ error: `${helperTool} execution is not available` });
|
|
7871
|
+
}
|
|
7844
7872
|
const helperConfig = resolveHelperModelConfig({
|
|
7845
7873
|
helperModelsJson: workspace.project.helper_models_json,
|
|
7846
7874
|
agent: helperTool,
|
|
7847
7875
|
});
|
|
7848
|
-
const rawMessage = await
|
|
7876
|
+
const rawMessage = await runTrackedLightweightPrompt({
|
|
7877
|
+
project: workspace.project,
|
|
7878
|
+
execution: { tool: helperTool, ...helperConfig },
|
|
7879
|
+
target: workspace.target_kind === 'bundle'
|
|
7880
|
+
? { kind: 'bundle-worktree', bundleId: workspace.target_bundle_id, branch: workspace.branch }
|
|
7881
|
+
: { kind: 'project-root', bundleId: null, branch: workspace.branch },
|
|
7882
|
+
}, prompt);
|
|
7849
7883
|
const message = normalizeGeneratedCommitMessage(rawMessage);
|
|
7850
7884
|
if (!message) {
|
|
7851
7885
|
return res.status(500).json({ error: 'Unable to generate a commit message right now.' });
|
|
@@ -7869,6 +7903,9 @@ app.post('/projects/:id/pull-request-description', async (req, res) => {
|
|
|
7869
7903
|
return res.status(409).json({ error: 'Pull request descriptions for bundle targets should use the bundle route.' });
|
|
7870
7904
|
}
|
|
7871
7905
|
const helperTool = config.tool ?? 'opencode';
|
|
7906
|
+
if (!isAgentExecutable(helperTool)) {
|
|
7907
|
+
return res.status(409).json({ error: `${helperTool} execution is not available` });
|
|
7908
|
+
}
|
|
7872
7909
|
const helperConfig = resolveHelperModelConfig({
|
|
7873
7910
|
helperModelsJson: project.helper_models_json,
|
|
7874
7911
|
agent: helperTool,
|
|
@@ -7884,15 +7921,15 @@ app.post('/projects/:id/pull-request-description', async (req, res) => {
|
|
|
7884
7921
|
.filter(Boolean)
|
|
7885
7922
|
: [];
|
|
7886
7923
|
try {
|
|
7887
|
-
const rawDescription = await
|
|
7888
|
-
|
|
7889
|
-
model: helperConfig.model,
|
|
7890
|
-
|
|
7924
|
+
const rawDescription = await runTrackedLightweightPrompt({
|
|
7925
|
+
project,
|
|
7926
|
+
execution: { tool: helperTool, model: helperConfig.model, variant: helperConfig.variant },
|
|
7927
|
+
target: { kind: 'project-root', bundleId: null, branch: workspace.branch },
|
|
7891
7928
|
}, buildPullRequestDescriptionPrompt({
|
|
7892
7929
|
title,
|
|
7893
7930
|
ticketTitles: [],
|
|
7894
7931
|
commitSubjects,
|
|
7895
|
-
})
|
|
7932
|
+
}));
|
|
7896
7933
|
const description = normalizeGeneratedPullRequestDescription(rawDescription);
|
|
7897
7934
|
if (!description) {
|
|
7898
7935
|
return res.status(500).json({ error: 'Unable to generate a pull request description right now.' });
|
|
@@ -8386,8 +8423,11 @@ app.post('/tickets', (req, res) => {
|
|
|
8386
8423
|
return res.status(400).json({ error: 'project_id must reference an existing project' });
|
|
8387
8424
|
}
|
|
8388
8425
|
const requestTool = resolveChatTool(req.body.tool ?? config.tool);
|
|
8426
|
+
if (!requestTool) {
|
|
8427
|
+
return res.status(400).json({ error: 'tool must be a supported agent' });
|
|
8428
|
+
}
|
|
8389
8429
|
const model = req.body.model != null ? normalizeAgentModelId(requestTool, req.body.model) || null : null;
|
|
8390
|
-
const variant = requestTool
|
|
8430
|
+
const variant = agentSupportsVariants(requestTool) && typeof req.body.variant === 'string' && req.body.variant.trim()
|
|
8391
8431
|
? req.body.variant.trim()
|
|
8392
8432
|
: null;
|
|
8393
8433
|
const skills = resolveRequestedSkills(req.body.skills);
|
|
@@ -8504,7 +8544,9 @@ app.patch('/tickets/:id', async (req, res) => {
|
|
|
8504
8544
|
resolvedModel = null;
|
|
8505
8545
|
}
|
|
8506
8546
|
else {
|
|
8507
|
-
const normalizedModel =
|
|
8547
|
+
const normalizedModel = ticket.tool
|
|
8548
|
+
? normalizeAgentModelId(ticket.tool, req.body.model)
|
|
8549
|
+
: normalizeTicketModelId(req.body.model);
|
|
8508
8550
|
if (normalizedModel) {
|
|
8509
8551
|
resolvedModel = normalizedModel;
|
|
8510
8552
|
}
|
|
@@ -9151,11 +9193,22 @@ app.post('/tickets/:id/git-commit-message', async (req, res) => {
|
|
|
9151
9193
|
});
|
|
9152
9194
|
try {
|
|
9153
9195
|
const helperTool = resolveTicketTool(ticket, config.tool ?? 'opencode');
|
|
9196
|
+
if (!isAgentExecutable(helperTool)) {
|
|
9197
|
+
return res.status(409).json({ error: `${helperTool} execution is not available` });
|
|
9198
|
+
}
|
|
9154
9199
|
const helperConfig = resolveHelperModelConfig({
|
|
9155
9200
|
helperModelsJson: workspace.project.helper_models_json,
|
|
9156
9201
|
agent: helperTool,
|
|
9157
9202
|
});
|
|
9158
|
-
const rawMessage = await
|
|
9203
|
+
const rawMessage = await runTrackedLightweightPrompt({
|
|
9204
|
+
project: workspace.project,
|
|
9205
|
+
execution: { tool: helperTool, ...helperConfig },
|
|
9206
|
+
target: workspace.kind === 'project_root'
|
|
9207
|
+
? { kind: 'project-root', bundleId: null, branch: workspace.branch }
|
|
9208
|
+
: ticket.worktree_bundle_id
|
|
9209
|
+
? { kind: 'bundle-worktree', bundleId: ticket.worktree_bundle_id, branch: workspace.branch }
|
|
9210
|
+
: { kind: 'branch-worktree', bundleId: null, branch: workspace.branch },
|
|
9211
|
+
}, prompt);
|
|
9159
9212
|
const message = normalizeGeneratedCommitMessage(rawMessage);
|
|
9160
9213
|
if (!message) {
|
|
9161
9214
|
return res.status(500).json({ error: 'Unable to generate a commit message right now.' });
|
|
@@ -10195,6 +10248,10 @@ app.post('/tickets/:id/plan', (req, res) => {
|
|
|
10195
10248
|
});
|
|
10196
10249
|
}
|
|
10197
10250
|
}
|
|
10251
|
+
const planTool = resolveTicketTool(ticket, config.tool ?? 'opencode');
|
|
10252
|
+
if (!isAgentExecutable(planTool)) {
|
|
10253
|
+
return res.status(409).json({ error: `${planTool} execution is not available` });
|
|
10254
|
+
}
|
|
10198
10255
|
const scheduling = startPlan(ticket, io, {
|
|
10199
10256
|
branch,
|
|
10200
10257
|
targetBundleId,
|