claude-code-session-manager 0.111.0 → 0.112.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/.claude-plugin/marketplace.json +2 -2
- package/dist/assets/{AgentLibrary-rBO1daqM.js → AgentLibrary-RwPvEgqm.js} +2 -2
- package/dist/assets/{Button-DsEYRZg0.js → Button-36j3PzYv.js} +1 -1
- package/dist/assets/{DataModel-D8sbvvBC.js → DataModel-DUhANo4l.js} +1 -1
- package/dist/assets/{History-BEHLtxia.js → History-BeZzNjmv.js} +2 -2
- package/dist/assets/{Hooks-CKpvlXrg.js → Hooks-iQ8845Hp.js} +3 -3
- package/dist/assets/{Library-CeF4qh9d.js → Library-DPE1h-1L.js} +6 -6
- package/dist/assets/{ListDetail-DcfmxPFk.js → ListDetail-PStOuQAo.js} +1 -1
- package/dist/assets/{MarkdownEditor-CvK1pyto.js → MarkdownEditor-DPw-N2-m.js} +1 -1
- package/dist/assets/{McpServers-D-h2ihzJ.js → McpServers-CUyRTNep.js} +2 -2
- package/dist/assets/{Memory-BnF89x8v.js → Memory-bZ2xjBGy.js} +3 -3
- package/dist/assets/{Panel-CQY5zano.js → Panel-_VZ_uXNg.js} +1 -1
- package/dist/assets/{Permissions-DLukmmsz.js → Permissions-PPRmfNbK.js} +3 -3
- package/dist/assets/{Plugins-0Pf0OZ4l.js → Plugins-BFcvfvlx.js} +2 -2
- package/dist/assets/{ProvenanceBadge-vC7Tj-JP.js → ProvenanceBadge-B1WUknak.js} +1 -1
- package/dist/assets/RemoteMachines-D5V0lzgW.js +3 -0
- package/dist/assets/{SaveBar-DjijiUb0.js → SaveBar-Dw64FVdM.js} +1 -1
- package/dist/assets/{Scheduler-Cm3EXZvE.js → Scheduler-C8s_pJ3I.js} +9 -9
- package/dist/assets/{ScopeSwitcher-B-P-kSfq.js → ScopeSwitcher-D-nKDMAE.js} +1 -1
- package/dist/assets/{Settings-DYDlp2m_.js → Settings-CQSrR4mO.js} +4 -4
- package/dist/assets/{SkillReferenceGraph-Epv2GJmj.js → SkillReferenceGraph-BbZFMHim.js} +1 -1
- package/dist/assets/{Skills-DHO0N0C2.js → Skills-Bzyrh6EQ.js} +1 -1
- package/dist/assets/SystemPrompt-DP6i3Dx0.js +1 -0
- package/dist/assets/TagLibrary-iip0C6Bl.js +1 -0
- package/dist/assets/{TiptapBody-DAMO3DhO.js → TiptapBody-Cr-hxX8L.js} +1 -1
- package/dist/assets/Toggle-7WpPzcZH.js +1 -0
- package/dist/assets/{ViewTabs-CGX6MAhc.js → ViewTabs-9lQCRwWJ.js} +1 -1
- package/dist/assets/{historyTotals-vgfk8EOL.js → historyTotals-BrFxw5J1.js} +1 -1
- package/dist/assets/{index-CPieAFsl.js → index-CTBpf-26.js} +250 -250
- package/dist/assets/{settingsSchema-D0FxNrTy.js → settingsSchema-Dh5Kl7VO.js} +1 -1
- package/dist/assets/{useAgentsDirWatch-DCu6BNYN.js → useAgentsDirWatch-CMpx0d04.js} +1 -1
- package/dist/assets/{useRemotePeers-D4cdJDyh.js → useRemotePeers-CI2axd-L.js} +1 -1
- package/dist/index.html +1 -1
- package/package.json +3 -2
- package/plugins/CLAUDE.md +5 -8
- package/plugins/session-manager-dev/.claude-plugin/plugin.json +3 -6
- package/plugins/session-manager-dev/skills/builder/1-classify-and-bump/SKILL.md +2 -2
- package/plugins/session-manager-dev/skills/builder/SKILL.md +2 -3
- package/plugins/session-manager-dev/skills/develop/SKILL.md +1 -1
- package/plugins/session-manager-dev/skills/develop/standards.md +3 -3
- package/scripts/README.md +3 -3
- package/scripts/audit-ops-hygiene.cjs +4 -4
- package/scripts/hooks/guard-destructive-git.cjs +4 -4
- package/scripts/hooks/guard-inline-implementation.cjs +1 -1
- package/scripts/hooks/guard-prd-writes.cjs +2 -2
- package/scripts/hooks/lib/guard-destructive-git-policy.cjs +1 -1
- package/scripts/mint-epic.cjs +2 -2
- package/scripts/scheduler-mcp-server.cjs +4 -4
- package/src/main/agentLibrary.cjs +5 -5
- package/src/main/agentsIpc.cjs +76 -0
- package/src/main/build-info.json +4 -4
- package/src/main/chatRunner.cjs +12 -12
- package/src/main/config.cjs +2 -2
- package/src/main/crashDiagnostics.cjs +2 -2
- package/src/main/docEdit.cjs +5 -5
- package/src/main/files.cjs +2 -2
- package/src/main/git.cjs +1 -1
- package/src/main/health.cjs +20 -18
- package/src/main/heapSnapshot.cjs +1 -1
- package/src/main/historyAggregator.cjs +2 -2
- package/src/main/index.cjs +44 -132
- package/src/main/ipcSchemas.cjs +10 -10
- package/src/main/lib/CLAUDE.md +48 -0
- package/src/main/lib/activeSessions.cjs +1 -1
- package/src/main/lib/classifyPromptTicket.cjs +2 -2
- package/src/main/lib/{agentModelResolve.cjs → claude/agentModelResolve.cjs} +7 -7
- package/src/main/lib/{claudeBin.cjs → claude/claudeBin.cjs} +4 -4
- package/src/main/lib/{effectiveModelInfo.cjs → claude/effectiveModelInfo.cjs} +9 -9
- package/src/main/lib/{modelCatalog.cjs → claude/modelCatalog.cjs} +3 -3
- package/src/main/lib/{rateLimitDetect.cjs → claude/rateLimitDetect.cjs} +1 -1
- package/src/main/lib/{rateLimitWindow.cjs → claude/rateLimitWindow.cjs} +1 -1
- package/src/main/lib/{runClaudeP.cjs → claude/runClaudeP.cjs} +1 -1
- package/src/main/lib/credentials.cjs +3 -3
- package/src/main/lib/cwdClassify.cjs +1 -1
- package/src/main/lib/{activeIndexMerge.cjs → epic/activeIndexMerge.cjs} +3 -3
- package/src/main/lib/{activeIndexRebuild.cjs → epic/activeIndexRebuild.cjs} +1 -1
- package/src/main/lib/{delegationReadiness.cjs → epic/delegationReadiness.cjs} +21 -29
- package/src/main/lib/{epicContextDigest.cjs → epic/epicContextDigest.cjs} +1 -1
- package/src/main/lib/{epicDelegationStats.cjs → epic/epicDelegationStats.cjs} +2 -2
- package/src/main/lib/{epicMint.cjs → epic/epicMint.cjs} +11 -11
- package/src/main/lib/{epicSpawnPlan.cjs → epic/epicSpawnPlan.cjs} +3 -3
- package/src/main/lib/{epicStatusMirror.cjs → epic/epicStatusMirror.cjs} +2 -2
- package/src/main/lib/{epicTranscriptDiagnostic.cjs → epic/epicTranscriptDiagnostic.cjs} +2 -2
- package/src/main/lib/{epicTranscriptPath.cjs → epic/epicTranscriptPath.cjs} +2 -2
- package/src/main/lib/{epicValidationHook.cjs → epic/epicValidationHook.cjs} +3 -3
- package/src/main/lib/{epicWorktreeBoot.cjs → epic/epicWorktreeBoot.cjs} +1 -1
- package/src/main/lib/{epicWorktreeMerge.cjs → epic/epicWorktreeMerge.cjs} +3 -3
- package/src/main/lib/{epicWorktreeMint.cjs → epic/epicWorktreeMint.cjs} +3 -3
- package/src/main/lib/{epicWorktreeProjectConfig.cjs → epic/epicWorktreeProjectConfig.cjs} +4 -4
- package/src/main/lib/{promptSessionsCreateEpic.cjs → epic/promptSessionsCreateEpic.cjs} +4 -4
- package/src/main/lib/{crossProjectFeedback.cjs → feedback-remote/crossProjectFeedback.cjs} +7 -7
- package/src/main/lib/{customerFeedbackClient.cjs → feedback-remote/customerFeedbackClient.cjs} +3 -3
- package/src/main/lib/{customerFeedbackInbox.cjs → feedback-remote/customerFeedbackInbox.cjs} +2 -2
- package/src/main/lib/{customerFeedbackIpc.cjs → feedback-remote/customerFeedbackIpc.cjs} +1 -1
- package/src/main/lib/{localAdminHttp.cjs → feedback-remote/localAdminHttp.cjs} +2 -2
- package/src/main/lib/{macroAdminRoutes.cjs → feedback-remote/macroAdminRoutes.cjs} +1 -1
- package/src/main/lib/{projectHomeAdminRoutes.cjs → feedback-remote/projectHomeAdminRoutes.cjs} +4 -4
- package/src/main/lib/{relayClientAuth.cjs → feedback-remote/relayClientAuth.cjs} +2 -2
- package/src/main/lib/{remoteClientSessions.cjs → feedback-remote/remoteClientSessions.cjs} +1 -1
- package/src/main/lib/{gitWorktree.cjs → git/gitWorktree.cjs} +7 -7
- package/src/main/lib/historyRollup.cjs +1 -1
- package/src/main/lib/importReferences.cjs +1 -1
- package/src/main/lib/machineProfile.cjs +1 -1
- package/src/main/lib/openExternalApp.cjs +1 -1
- package/src/main/lib/opsOwnership.cjs +3 -3
- package/src/main/lib/{agentPersonaSchema.cjs → persona-macro/agentPersonaSchema.cjs} +2 -2
- package/src/main/lib/{macroLibrary.cjs → persona-macro/macroLibrary.cjs} +5 -5
- package/src/main/lib/{personaMerge.cjs → persona-macro/personaMerge.cjs} +4 -4
- package/src/main/lib/{prdAdminRoutes.cjs → prd/prdAdminRoutes.cjs} +7 -7
- package/src/main/lib/{prdAgentType.cjs → prd/prdAgentType.cjs} +3 -3
- package/src/main/lib/{prdCreate.cjs → prd/prdCreate.cjs} +12 -12
- package/src/main/lib/{prdDeclaredPaths.cjs → prd/prdDeclaredPaths.cjs} +1 -1
- package/src/main/lib/{prdGateFiles.cjs → prd/prdGateFiles.cjs} +1 -1
- package/src/main/lib/{prdLocations.cjs → prd/prdLocations.cjs} +2 -2
- package/src/main/lib/{prdMigration.cjs → prd/prdMigration.cjs} +3 -3
- package/src/main/lib/prereqs.cjs +2 -2
- package/src/main/lib/{instanceLock.cjs → process/instanceLock.cjs} +4 -11
- package/src/main/lib/{pidAlive.cjs → process/pidAlive.cjs} +1 -1
- package/src/main/lib/{procName.cjs → process/procName.cjs} +2 -2
- package/src/main/lib/{timeoutShim.cjs → process/timeoutShim.cjs} +1 -1
- package/src/main/lib/projectRootResolve.cjs +1 -1
- package/src/main/lib/promptSessionSchema.cjs +1 -1
- package/src/main/lib/{definitionOfDone.cjs → scheduler/definitionOfDone.cjs} +6 -12
- package/src/main/lib/{fixChainDepth.cjs → scheduler/fixChainDepth.cjs} +1 -1
- package/src/main/lib/{jobDirtFilter.cjs → scheduler/jobDirtFilter.cjs} +1 -1
- package/src/main/lib/{jobSupervisorRecord.cjs → scheduler/jobSupervisorRecord.cjs} +1 -1
- package/src/main/lib/{launchFailure.cjs → scheduler/launchFailure.cjs} +2 -2
- package/src/main/lib/{queueStore.cjs → scheduler/queueStore.cjs} +6 -6
- package/src/main/lib/{quietMachineLease.cjs → scheduler/quietMachineLease.cjs} +1 -1
- package/src/main/lib/{rcaReport.cjs → scheduler/rcaReport.cjs} +4 -4
- package/src/main/lib/{reaperHelpers.cjs → scheduler/reaperHelpers.cjs} +3 -3
- package/src/main/lib/{reservationExpiry.cjs → scheduler/reservationExpiry.cjs} +4 -11
- package/src/main/lib/{reviewNotice.cjs → scheduler/reviewNotice.cjs} +1 -1
- package/src/main/lib/{scheduleJobTransitions.cjs → scheduler/scheduleJobTransitions.cjs} +3 -3
- package/src/main/lib/{schedulerBatch.cjs → scheduler/schedulerBatch.cjs} +2 -2
- package/src/main/lib/{schedulerConfig.cjs → scheduler/schedulerConfig.cjs} +1 -1
- package/src/main/lib/{schedulerRuntimeState.cjs → scheduler/schedulerRuntimeState.cjs} +1 -1
- package/src/main/lib/{sessionSlots.cjs → scheduler/sessionSlots.cjs} +2 -2
- package/src/main/lib/{upgradeDrain.cjs → scheduler/upgradeDrain.cjs} +8 -11
- package/src/main/lib/{watchdogHelpers.cjs → scheduler/watchdogHelpers.cjs} +5 -19
- package/src/main/lib/{auditLog.cjs → telemetry/auditLog.cjs} +1 -1
- package/src/main/lib/{opsErrorLog.cjs → telemetry/opsErrorLog.cjs} +4 -4
- package/src/main/lib/{telemetryBacklog.cjs → telemetry/telemetryBacklog.cjs} +4 -4
- package/src/main/lib/{telemetryBoot.cjs → telemetry/telemetryBoot.cjs} +1 -1
- package/src/main/lib/{telemetryClient.cjs → telemetry/telemetryClient.cjs} +4 -4
- package/src/main/lib/{telemetrySettings.cjs → telemetry/telemetrySettings.cjs} +1 -1
- package/src/main/logs.cjs +1 -1
- package/src/main/mcpStatus.cjs +2 -2
- package/src/main/memoryAggregate.cjs +3 -3
- package/src/main/memoryTool.cjs +1 -1
- package/src/main/otel.cjs +2 -2
- package/src/main/pluginInstall.cjs +29 -3
- package/src/main/projectBrief.cjs +6 -6
- package/src/main/projectPages.cjs +1 -1
- package/src/main/promptSessionEvents.cjs +2 -2
- package/src/main/pty.cjs +7 -7
- package/src/main/queueOps.cjs +6 -6
- package/src/main/remoteClient.cjs +4 -4
- package/src/main/remoteClientIpc.cjs +1 -1
- package/src/main/runVerify.cjs +1 -1
- package/src/main/scheduler/CLAUDE.md +26 -0
- package/src/main/scheduler/budget.cjs +576 -0
- package/src/main/scheduler/gitTreeGuard.cjs +672 -0
- package/src/main/scheduler/prdParser.cjs +4 -4
- package/src/main/scheduler/prdPaths.cjs +487 -0
- package/src/main/scheduler/reviewLadder.cjs +1011 -0
- package/src/main/scheduler/starvation.cjs +390 -0
- package/src/main/scheduler.cjs +289 -3311
- package/src/main/seedAgentPersonas.cjs +5 -5
- package/src/main/seedDevPlugin.cjs +70 -3
- package/src/main/seedSchedulerMcp.cjs +2 -2
- package/src/main/supervisor.cjs +5 -5
- package/src/main/telemetryIpc.cjs +51 -0
- package/src/main/transcripts.cjs +3 -3
- package/src/main/updaterIpc.cjs +1 -1
- package/src/main/usage.cjs +1 -1
- package/src/main/watchers.cjs +1 -1
- package/src/main/webRemote.cjs +7 -7
- package/src/preload/api.d.ts +8 -8
- package/src/preload/index.cjs +3 -3
- package/dist/assets/RemoteMachines-CWnKbFHc.js +0 -3
- package/dist/assets/SystemPrompt-DxeNofL9.js +0 -1
- package/dist/assets/TagLibrary-QOAs7ISO.js +0 -1
- package/dist/assets/Toggle-Ba_f7q_m.js +0 -1
- package/plugins/session-manager-dev/skills/blog-for-project-feature/0-select/SKILL.md +0 -39
- package/plugins/session-manager-dev/skills/blog-for-project-feature/1-research/SKILL.md +0 -37
- package/plugins/session-manager-dev/skills/blog-for-project-feature/2-storyboard/SKILL.md +0 -64
- package/plugins/session-manager-dev/skills/blog-for-project-feature/3-capture/SKILL.md +0 -52
- package/plugins/session-manager-dev/skills/blog-for-project-feature/4-draft-copy/SKILL.md +0 -37
- package/plugins/session-manager-dev/skills/blog-for-project-feature/5-illustrate/SKILL.md +0 -50
- package/plugins/session-manager-dev/skills/blog-for-project-feature/6-compose/SKILL.md +0 -51
- package/plugins/session-manager-dev/skills/blog-for-project-feature/7-review/SKILL.md +0 -54
- package/plugins/session-manager-dev/skills/blog-for-project-feature/SKILL.md +0 -144
- package/plugins/session-manager-dev/skills/blog-for-project-feature/feature.config.yaml +0 -90
- package/plugins/session-manager-dev/skills/discover-features/SKILL.md +0 -95
- package/plugins/session-manager-dev/skills/explain-to-me/SKILL.md +0 -205
- package/plugins/session-manager-dev/skills/explain-to-me/assets/style-reference.html +0 -163
- package/plugins/session-manager-dev/skills/find-opportunity/SKILL.md +0 -83
- package/plugins/session-manager-dev/skills/issue-address/0-select/0-fetch-pool/SKILL.md +0 -38
- package/plugins/session-manager-dev/skills/issue-address/0-select/1-reject-fixed/SKILL.md +0 -64
- package/plugins/session-manager-dev/skills/issue-address/0-select/2-reject-claimed/SKILL.md +0 -71
- package/plugins/session-manager-dev/skills/issue-address/0-select/3-rank-impact/SKILL.md +0 -39
- package/plugins/session-manager-dev/skills/issue-address/0-select/SKILL.md +0 -75
- package/plugins/session-manager-dev/skills/issue-address/1-confirm-open/SKILL.md +0 -39
- package/plugins/session-manager-dev/skills/issue-address/2-claim/SKILL.md +0 -57
- package/plugins/session-manager-dev/skills/issue-address/3-reproduce/SKILL.md +0 -40
- package/plugins/session-manager-dev/skills/issue-address/4-fix/SKILL.md +0 -33
- package/plugins/session-manager-dev/skills/issue-address/5-verify/SKILL.md +0 -40
- package/plugins/session-manager-dev/skills/issue-address/SKILL.md +0 -120
- package/plugins/session-manager-dev/skills/local-project-health/SKILL.md +0 -58
- package/plugins/session-manager-dev/skills/memory-sanitation/SKILL.md +0 -147
- package/plugins/session-manager-dev/skills/ops-sweep/SKILL.md +0 -137
- package/plugins/session-manager-dev/skills/pr-review-sweep/0-fetch/SKILL.md +0 -41
- package/plugins/session-manager-dev/skills/pr-review-sweep/1-classify/SKILL.md +0 -56
- package/plugins/session-manager-dev/skills/pr-review-sweep/2-check-fixed/SKILL.md +0 -49
- package/plugins/session-manager-dev/skills/pr-review-sweep/3-queue/SKILL.md +0 -57
- package/plugins/session-manager-dev/skills/pr-review-sweep/4-land-and-resolve/SKILL.md +0 -60
- package/plugins/session-manager-dev/skills/pr-review-sweep/SKILL.md +0 -124
- package/plugins/session-manager-dev/skills/pr-signal/SKILL.md +0 -67
- package/plugins/session-manager-dev/skills/project-status/SKILL.md +0 -243
- package/plugins/session-manager-dev/skills/requesting-code-review/SKILL.md +0 -98
- package/plugins/session-manager-dev/skills/requesting-code-review/code-reviewer.md +0 -146
- /package/src/main/lib/{agentEffortResolve.cjs → claude/agentEffortResolve.cjs} +0 -0
- /package/src/main/lib/{claudeCliCaps.cjs → claude/claudeCliCaps.cjs} +0 -0
- /package/src/main/lib/{usageCircuit.cjs → claude/usageCircuit.cjs} +0 -0
- /package/src/main/lib/{epicSpawnCwd.cjs → epic/epicSpawnCwd.cjs} +0 -0
- /package/src/main/lib/{customerFeedbackAdminRoutes.cjs → feedback-remote/customerFeedbackAdminRoutes.cjs} +0 -0
- /package/src/main/lib/{remoteE2eCrypto.cjs → feedback-remote/remoteE2eCrypto.cjs} +0 -0
- /package/src/main/lib/{branchSweep.cjs → git/branchSweep.cjs} +0 -0
- /package/src/main/lib/{gitExec.cjs → git/gitExec.cjs} +0 -0
- /package/src/main/lib/{jobWorktree.cjs → git/jobWorktree.cjs} +0 -0
- /package/src/main/lib/{jobWorktreeBootLive.cjs → git/jobWorktreeBootLive.cjs} +0 -0
- /package/src/main/lib/{jobWorktreeTerminalOrphanLive.cjs → git/jobWorktreeTerminalOrphanLive.cjs} +0 -0
- /package/src/main/lib/{builtinMacros.cjs → persona-macro/builtinMacros.cjs} +0 -0
- /package/src/main/lib/{personaImportHealth.cjs → persona-macro/personaImportHealth.cjs} +0 -0
- /package/src/main/lib/{shippedPersonaSeeds.cjs → persona-macro/shippedPersonaSeeds.cjs} +0 -0
- /package/src/main/lib/{depSlugResolve.cjs → prd/depSlugResolve.cjs} +0 -0
- /package/src/main/lib/{planValidator.cjs → prd/planValidator.cjs} +0 -0
- /package/src/main/lib/{prdAuthoringSeed.cjs → prd/prdAuthoringSeed.cjs} +0 -0
- /package/src/main/lib/{prdDisposition.cjs → prd/prdDisposition.cjs} +0 -0
- /package/src/main/lib/{prdFrontmatter.cjs → prd/prdFrontmatter.cjs} +0 -0
- /package/src/main/lib/{prdSizing.cjs → prd/prdSizing.cjs} +0 -0
- /package/src/main/lib/{workTypeLibrary.cjs → prd/workTypeLibrary.cjs} +0 -0
- /package/src/main/lib/{childWithLog.cjs → process/childWithLog.cjs} +0 -0
- /package/src/main/lib/{cleanEnv.cjs → process/cleanEnv.cjs} +0 -0
- /package/src/main/lib/{defaultShell.cjs → process/defaultShell.cjs} +0 -0
- /package/src/main/lib/{killTree.cjs → process/killTree.cjs} +0 -0
- /package/src/main/lib/{loginShellPath.cjs → process/loginShellPath.cjs} +0 -0
- /package/src/main/lib/{procIdentity.cjs → process/procIdentity.cjs} +0 -0
- /package/src/main/lib/{singleInstanceGuard.cjs → process/singleInstanceGuard.cjs} +0 -0
- /package/src/main/lib/{smProcNames.cjs → process/smProcNames.cjs} +0 -0
- /package/src/main/lib/{timeoutShimScript.cjs → process/timeoutShimScript.cjs} +0 -0
- /package/src/main/lib/{winSpawn.cjs → process/winSpawn.cjs} +0 -0
- /package/src/main/lib/{adoptedRunSupervisor.cjs → scheduler/adoptedRunSupervisor.cjs} +0 -0
- /package/src/main/lib/{dispatchLoop.cjs → scheduler/dispatchLoop.cjs} +0 -0
- /package/src/main/lib/{dodDrainHook.cjs → scheduler/dodDrainHook.cjs} +0 -0
- /package/src/main/lib/{fixPlanSlug.cjs → scheduler/fixPlanSlug.cjs} +0 -0
- /package/src/main/lib/{gateAuthority.cjs → scheduler/gateAuthority.cjs} +0 -0
- /package/src/main/lib/{landedSinceRun.cjs → scheduler/landedSinceRun.cjs} +0 -0
- /package/src/main/lib/{loadGate.cjs → scheduler/loadGate.cjs} +0 -0
- /package/src/main/lib/{needsReviewLedger.cjs → scheduler/needsReviewLedger.cjs} +0 -0
- /package/src/main/lib/{queueHealth.cjs → scheduler/queueHealth.cjs} +0 -0
- /package/src/main/lib/{queueHistory.cjs → scheduler/queueHistory.cjs} +0 -0
- /package/src/main/lib/{runLogRetention.cjs → scheduler/runLogRetention.cjs} +0 -0
- /package/src/main/lib/{scheduleJobSchema.cjs → scheduler/scheduleJobSchema.cjs} +0 -0
- /package/src/main/lib/{schedulerPaths.cjs → scheduler/schedulerPaths.cjs} +0 -0
- /package/src/main/lib/{terminalRunOutcome.cjs → scheduler/terminalRunOutcome.cjs} +0 -0
- /package/src/main/lib/{validationSentinels.cjs → scheduler/validationSentinels.cjs} +0 -0
- /package/src/main/lib/{crashTelemetry.cjs → telemetry/crashTelemetry.cjs} +0 -0
- /package/src/main/lib/{otlpTraceExporter.cjs → telemetry/otlpTraceExporter.cjs} +0 -0
- /package/src/main/lib/{telemetryConsent.cjs → telemetry/telemetryConsent.cjs} +0 -0
- /package/src/main/lib/{telemetryCounters.cjs → telemetry/telemetryCounters.cjs} +0 -0
- /package/src/main/lib/{atomicFs.cjs → util/atomicFs.cjs} +0 -0
- /package/src/main/lib/{encodeCwd.cjs → util/encodeCwd.cjs} +0 -0
- /package/src/main/lib/{expandHome.cjs → util/expandHome.cjs} +0 -0
- /package/src/main/lib/{extractJson.cjs → util/extractJson.cjs} +0 -0
- /package/src/main/lib/{fileTail.cjs → util/fileTail.cjs} +0 -0
- /package/src/main/lib/{headTailBuffer.cjs → util/headTailBuffer.cjs} +0 -0
- /package/src/main/lib/{kebabCase.cjs → util/kebabCase.cjs} +0 -0
- /package/src/main/lib/{loopDelay.cjs → util/loopDelay.cjs} +0 -0
- /package/src/main/lib/{lruCache.cjs → util/lruCache.cjs} +0 -0
- /package/src/main/lib/{withTimeout.cjs → util/withTimeout.cjs} +0 -0
package/src/main/chatRunner.cjs
CHANGED
|
@@ -44,20 +44,20 @@
|
|
|
44
44
|
|
|
45
45
|
const { spawn } = require('node:child_process');
|
|
46
46
|
const { ipcMain } = require('electron');
|
|
47
|
-
const { resolveClaudeBin, claudeSpawnTarget } = require('./lib/claudeBin.cjs');
|
|
48
|
-
const { cleanChildEnv, pathWithUserBins } = require('./lib/cleanEnv.cjs');
|
|
47
|
+
const { resolveClaudeBin, claudeSpawnTarget } = require('./lib/claude/claudeBin.cjs');
|
|
48
|
+
const { cleanChildEnv, pathWithUserBins } = require('./lib/process/cleanEnv.cjs');
|
|
49
49
|
const { recordExchange } = require('./exchanges.cjs');
|
|
50
50
|
const { classifyToolUse } = require('./lib/toolUseClassify.cjs');
|
|
51
|
-
const { extractJson } = require('./lib/extractJson.cjs');
|
|
51
|
+
const { extractJson } = require('./lib/util/extractJson.cjs');
|
|
52
52
|
const { classifyPromptTicket } = require('./lib/classifyPromptTicket.cjs');
|
|
53
|
-
const sessionSlots = require('./lib/sessionSlots.cjs');
|
|
54
|
-
const opsErrorLog = require('./lib/opsErrorLog.cjs');
|
|
55
|
-
const { killTree, detachedSpawnOpts } = require('./lib/killTree.cjs');
|
|
56
|
-
const agentModelResolve = require('./lib/agentModelResolve.cjs');
|
|
57
|
-
const { resolveEpicEffort, effortArgs } = require('./lib/agentEffortResolve.cjs');
|
|
58
|
-
const { planEpicSpawn } = require('./lib/epicSpawnPlan.cjs');
|
|
53
|
+
const sessionSlots = require('./lib/scheduler/sessionSlots.cjs');
|
|
54
|
+
const opsErrorLog = require('./lib/telemetry/opsErrorLog.cjs');
|
|
55
|
+
const { killTree, detachedSpawnOpts } = require('./lib/process/killTree.cjs');
|
|
56
|
+
const agentModelResolve = require('./lib/claude/agentModelResolve.cjs');
|
|
57
|
+
const { resolveEpicEffort, effortArgs } = require('./lib/claude/agentEffortResolve.cjs');
|
|
58
|
+
const { planEpicSpawn } = require('./lib/epic/epicSpawnPlan.cjs');
|
|
59
59
|
const logs = require('./logs.cjs');
|
|
60
|
-
const { createHeadTailBuffer } = require('./lib/headTailBuffer.cjs');
|
|
60
|
+
const { createHeadTailBuffer } = require('./lib/util/headTailBuffer.cjs');
|
|
61
61
|
|
|
62
62
|
// Caps on per-run stream buffers (a run can last hours).
|
|
63
63
|
const STDERR_TAIL_MAX = 64 * 1024;
|
|
@@ -424,7 +424,7 @@ function pump() {
|
|
|
424
424
|
if (idx === -1) break;
|
|
425
425
|
// The chat lane cap is a POLICY bound; actual capacity comes from the
|
|
426
426
|
// Session-Manager-wide slot pool shared with the scheduler
|
|
427
|
-
// (lib/sessionSlots.cjs). No slot → everyone keeps waiting; the next
|
|
427
|
+
// (lib/scheduler/sessionSlots.cjs). No slot → everyone keeps waiting; the next
|
|
428
428
|
// settle() in either subsystem re-pumps.
|
|
429
429
|
const slotToken = sessionSlots.acquire(`chat:${waiting[idx].tabId}`);
|
|
430
430
|
if (!slotToken) break;
|
|
@@ -982,7 +982,7 @@ function requestExternalNewSession(payload) {
|
|
|
982
982
|
* job; this only owns route logic + body parsing).
|
|
983
983
|
*/
|
|
984
984
|
function registerAdminRoute(adminHttp) {
|
|
985
|
-
const { readBody, sendJson } = require('./lib/localAdminHttp.cjs');
|
|
985
|
+
const { readBody, sendJson } = require('./lib/feedback-remote/localAdminHttp.cjs');
|
|
986
986
|
const { schemas } = require('./ipcSchemas.cjs');
|
|
987
987
|
|
|
988
988
|
adminHttp.registerRoute('POST', '/admin/chat/send-prompt', async (req, res) => {
|
package/src/main/config.cjs
CHANGED
|
@@ -23,9 +23,9 @@ const { assertOpsWrite, opsPath, OWNERS } = require('./lib/opsOwnership.cjs');
|
|
|
23
23
|
const chokidar = require('chokidar');
|
|
24
24
|
const logs = require('./logs.cjs');
|
|
25
25
|
const { sendIfAlive } = require('./lib/sendToRenderer.cjs');
|
|
26
|
-
const { expandHome } = require('./lib/expandHome.cjs');
|
|
26
|
+
const { expandHome } = require('./lib/util/expandHome.cjs');
|
|
27
27
|
const { listReferencedFiles } = require('./lib/importReferences.cjs');
|
|
28
|
-
const atomicFs = require('./lib/atomicFs.cjs');
|
|
28
|
+
const atomicFs = require('./lib/util/atomicFs.cjs');
|
|
29
29
|
|
|
30
30
|
/** Map<watchKey, {watcher, refCount}> — one chokidar watcher per path (+ depth, see watchKeyOf). */
|
|
31
31
|
const watchers = new Map();
|
|
@@ -26,8 +26,8 @@
|
|
|
26
26
|
const { app, powerSaveBlocker, powerMonitor, crashReporter } = require('electron');
|
|
27
27
|
const fs = require('node:fs');
|
|
28
28
|
const path = require('node:path');
|
|
29
|
-
const { reportCrash } = require('./lib/crashTelemetry.cjs');
|
|
30
|
-
const { createLoopDelayMonitor, stallVerdict } = require('./lib/loopDelay.cjs');
|
|
29
|
+
const { reportCrash } = require('./lib/telemetry/crashTelemetry.cjs');
|
|
30
|
+
const { createLoopDelayMonitor, stallVerdict } = require('./lib/util/loopDelay.cjs');
|
|
31
31
|
|
|
32
32
|
let logs = null;
|
|
33
33
|
let getPowerBlockerId = () => -1;
|
package/src/main/docEdit.cjs
CHANGED
|
@@ -17,12 +17,12 @@
|
|
|
17
17
|
const { ipcMain } = require('electron');
|
|
18
18
|
const { spawn } = require('node:child_process');
|
|
19
19
|
const crypto = require('node:crypto');
|
|
20
|
-
const { resolveClaudeBin, claudeSpawnTarget } = require('./lib/claudeBin.cjs');
|
|
21
|
-
const { headlessPermissionArgs, ensureCliCapsProbed } = require('./lib/claudeCliCaps.cjs');
|
|
22
|
-
const { withProcRole } = require('./lib/cleanEnv.cjs');
|
|
23
|
-
const { extractJson } = require('./lib/extractJson.cjs');
|
|
20
|
+
const { resolveClaudeBin, claudeSpawnTarget } = require('./lib/claude/claudeBin.cjs');
|
|
21
|
+
const { headlessPermissionArgs, ensureCliCapsProbed } = require('./lib/claude/claudeCliCaps.cjs');
|
|
22
|
+
const { withProcRole } = require('./lib/process/cleanEnv.cjs');
|
|
23
|
+
const { extractJson } = require('./lib/util/extractJson.cjs');
|
|
24
24
|
const { assertInsideHome } = require('./lib/insideHome.cjs');
|
|
25
|
-
const { expandHome } = require('./lib/expandHome.cjs');
|
|
25
|
+
const { expandHome } = require('./lib/util/expandHome.cjs');
|
|
26
26
|
const chatRunner = require('./chatRunner.cjs');
|
|
27
27
|
|
|
28
28
|
// System prompt sets the role server-side so the selection is treated as
|
package/src/main/files.cjs
CHANGED
|
@@ -21,8 +21,8 @@ const os = require('node:os');
|
|
|
21
21
|
|
|
22
22
|
const { z } = require('zod');
|
|
23
23
|
const { assertInsideHome } = require('./lib/insideHome.cjs');
|
|
24
|
-
const { expandHome } = require('./lib/expandHome.cjs');
|
|
25
|
-
const atomicFs = require('./lib/atomicFs.cjs');
|
|
24
|
+
const { expandHome } = require('./lib/util/expandHome.cjs');
|
|
25
|
+
const atomicFs = require('./lib/util/atomicFs.cjs');
|
|
26
26
|
const { schemas } = require('./ipcSchemas.cjs');
|
|
27
27
|
|
|
28
28
|
/**
|
package/src/main/git.cjs
CHANGED
|
@@ -23,7 +23,7 @@ const { spawn } = require('node:child_process');
|
|
|
23
23
|
const path = require('node:path');
|
|
24
24
|
const { schemas } = require('./ipcSchemas.cjs');
|
|
25
25
|
const { validatePath } = require('./config.cjs');
|
|
26
|
-
const { LRUCache } = require('./lib/lruCache.cjs');
|
|
26
|
+
const { LRUCache } = require('./lib/util/lruCache.cjs');
|
|
27
27
|
|
|
28
28
|
const GIT_TIMEOUT_MS = 5_000;
|
|
29
29
|
const CACHE_TTL_MS = 5_000;
|
package/src/main/health.cjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* health.cjs — health check for session-manager Electron app.
|
|
3
3
|
* Verifies: app startup, IPC responsiveness, scheduler health, watchers active.
|
|
4
|
-
* Exported as check()
|
|
4
|
+
* Exported as check(); run via `npm run health`.
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
7
|
const fs = require('node:fs');
|
|
@@ -9,23 +9,25 @@ const fsp = require('node:fs/promises');
|
|
|
9
9
|
const path = require('node:path');
|
|
10
10
|
const os = require('node:os');
|
|
11
11
|
const { execFileSync } = require('node:child_process');
|
|
12
|
-
const { POLL_INTERVAL_MS, loadGateThreshold } = require('./lib/schedulerConfig.cjs');
|
|
12
|
+
const { POLL_INTERVAL_MS, loadGateThreshold } = require('./lib/scheduler/schedulerConfig.cjs');
|
|
13
13
|
const { opsPath } = require('./lib/opsOwnership.cjs');
|
|
14
|
-
const { effectivePaused } = require('./lib/upgradeDrain.cjs');
|
|
15
|
-
const { checkPersonaImports } = require('./lib/personaImportHealth.cjs');
|
|
16
|
-
const { checkDelegationReadiness } = require('./lib/delegationReadiness.cjs');
|
|
17
|
-
const { resolvePrdsDirs } = require('./lib/prdLocations.cjs');
|
|
18
|
-
const { migratePrds } = require('./lib/prdMigration.cjs');
|
|
19
|
-
const queueStore = require('./lib/queueStore.cjs');
|
|
20
|
-
const schedulerPaths = require('./lib/schedulerPaths.cjs');
|
|
21
|
-
const { evaluateDispatchLiveness } = require('./lib/watchdogHelpers.cjs');
|
|
22
|
-
const { computeStallSummary, computeDepHistorySatisfaction, FAILURE_STREAK_ESCALATION_MS
|
|
23
|
-
const {
|
|
24
|
-
const {
|
|
14
|
+
const { effectivePaused } = require('./lib/scheduler/upgradeDrain.cjs');
|
|
15
|
+
const { checkPersonaImports } = require('./lib/persona-macro/personaImportHealth.cjs');
|
|
16
|
+
const { checkDelegationReadiness } = require('./lib/epic/delegationReadiness.cjs');
|
|
17
|
+
const { resolvePrdsDirs } = require('./lib/prd/prdLocations.cjs');
|
|
18
|
+
const { migratePrds } = require('./lib/prd/prdMigration.cjs');
|
|
19
|
+
const queueStore = require('./lib/scheduler/queueStore.cjs');
|
|
20
|
+
const schedulerPaths = require('./lib/scheduler/schedulerPaths.cjs');
|
|
21
|
+
const { evaluateDispatchLiveness } = require('./lib/scheduler/watchdogHelpers.cjs');
|
|
22
|
+
const { computeStallSummary, computeDepHistorySatisfaction, FAILURE_STREAK_ESCALATION_MS } = require('./scheduler/budget.cjs');
|
|
23
|
+
const { classifyQueueStarvation, launchBlockedSlugs, STARVE_ESCALATION_MS } = require('./scheduler/starvation.cjs');
|
|
24
|
+
const { REVERIFY_INTERVAL_MS } = require('./scheduler/reviewLadder.cjs');
|
|
25
|
+
const { findStarvedProjects, findUnresolvableDepRoots, DEFAULT_PROJECT_CWD, DEP_HISTORY_FAIL_OPEN } = require('./lib/scheduler/schedulerBatch.cjs');
|
|
26
|
+
const { auditLogPath, readTail } = require('./lib/telemetry/auditLog.cjs');
|
|
25
27
|
const { resolveBuildIdentity } = require('./lib/buildIdentity.cjs');
|
|
26
|
-
const { computeReport, isRetentionEnabled, liveKeysFromJobs } = require('./lib/runLogRetention.cjs');
|
|
28
|
+
const { computeReport, isRetentionEnabled, liveKeysFromJobs } = require('./lib/scheduler/runLogRetention.cjs');
|
|
27
29
|
const { allProjectCwds } = require('./lib/activeSessions.cjs');
|
|
28
|
-
const { scanEpicTranscripts } = require('./lib/epicTranscriptDiagnostic.cjs');
|
|
30
|
+
const { scanEpicTranscripts } = require('./lib/epic/epicTranscriptDiagnostic.cjs');
|
|
29
31
|
|
|
30
32
|
const MAX_LOG_AGE_MS = 5 * 60_000; // 5 min — warn if no logs this old
|
|
31
33
|
const PROJECT_ROOT = path.resolve(__dirname, '../..');
|
|
@@ -106,7 +108,7 @@ function evaluateTickLiveness(queueState, heartbeat, now, runningCount) {
|
|
|
106
108
|
// sessionSlots pool is the only limit. Read it lazily so this stays a pure
|
|
107
109
|
// function of its args when a caller supplies slotCap explicitly.
|
|
108
110
|
const concurrencyCap = queueState.slotCap
|
|
109
|
-
?? (() => { try { return require('./lib/sessionSlots.cjs').totalSlots(); } catch { return Infinity; } })();
|
|
111
|
+
?? (() => { try { return require('./lib/scheduler/sessionSlots.cjs').totalSlots(); } catch { return Infinity; } })();
|
|
110
112
|
|
|
111
113
|
if (pending.length === 0) return { stalled: false, reason: 'no-pending-jobs' };
|
|
112
114
|
if (effectivePaused(queueState)) return { stalled: false, reason: queueState.paused ? 'paused' : 'draining' };
|
|
@@ -641,7 +643,7 @@ function evaluateBuildFreshness({ running = null, installedOnDisk = null, repoHe
|
|
|
641
643
|
* names the cause and the fix (`claude login`).
|
|
642
644
|
*
|
|
643
645
|
* NON-CRITICAL by design: reported in components.credentials + issues so
|
|
644
|
-
*
|
|
646
|
+
* `npm run health` shows it, but it does not flip status.ok — health must
|
|
645
647
|
* not hard-fail a repo checkout just because THIS machine's token lapsed, and
|
|
646
648
|
* an expired token is an operator action (re-login), not a code defect. Maps:
|
|
647
649
|
* kind 'auth' → not ok, actionable `claude login` message (the real block)
|
|
@@ -897,7 +899,7 @@ async function check(opts = {}) {
|
|
|
897
899
|
path: queuePath,
|
|
898
900
|
jobs: Object.keys(queueState.jobs || {}).length,
|
|
899
901
|
running: runningCount,
|
|
900
|
-
// Deliberate restart drain (lib/upgradeDrain.cjs) — reported so it is never read as a stall.
|
|
902
|
+
// Deliberate restart drain (lib/scheduler/upgradeDrain.cjs) — reported so it is never read as a stall.
|
|
901
903
|
drain: queueState.drain?.active ? { since: queueState.drain.since ?? null, requestedAt: queueState.drain.requestedAt ?? null } : null,
|
|
902
904
|
failed: failedCount,
|
|
903
905
|
needsReview: needsReviewCount,
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
|
|
25
25
|
const path = require('node:path');
|
|
26
26
|
const fsp = require('node:fs/promises');
|
|
27
|
-
const { heapSnapshotDir } = require('./lib/schedulerPaths.cjs');
|
|
27
|
+
const { heapSnapshotDir } = require('./lib/scheduler/schedulerPaths.cjs');
|
|
28
28
|
|
|
29
29
|
const CHANNEL = 'diagnostics:heap-snapshot';
|
|
30
30
|
const DEFAULT_TIMEOUT_MS = 3 * 60 * 1000; // 3 min — snapshots can be multi-hundred-MB
|
|
@@ -50,8 +50,8 @@ function resolvePricingKey(modelId) {
|
|
|
50
50
|
}
|
|
51
51
|
|
|
52
52
|
// ── LRU cache ─────────────────────────────────────────────────────────────────
|
|
53
|
-
// Shared implementation: lib/lruCache.cjs (re-exported below for existing callers).
|
|
54
|
-
const { LRUCache } = require('./lib/lruCache.cjs');
|
|
53
|
+
// Shared implementation: lib/util/lruCache.cjs (re-exported below for existing callers).
|
|
54
|
+
const { LRUCache } = require('./lib/util/lruCache.cjs');
|
|
55
55
|
|
|
56
56
|
// ── history:updated broadcast ─────────────────────────────────────────────────
|
|
57
57
|
// Open History pages re-fetch on this event. Throttled leading+trailing so a
|
package/src/main/index.cjs
CHANGED
|
@@ -10,7 +10,7 @@ if (process.env.SM_BOOT_DIAG === '1') {
|
|
|
10
10
|
process.stderr.write(`[boot-diag] failed: ${err && err.message}\n`);
|
|
11
11
|
}
|
|
12
12
|
}
|
|
13
|
-
const { PROC_NAMES, setProcessTitle, inhibitHolderShell } = require('./lib/smProcNames.cjs');
|
|
13
|
+
const { PROC_NAMES, setProcessTitle, inhibitHolderShell } = require('./lib/process/smProcNames.cjs');
|
|
14
14
|
// Self-describing `comm` in System Monitor (pn-03). process.argv is a JS copy
|
|
15
15
|
// made at startup, so the argv-memory overwrite below never affects the
|
|
16
16
|
// `process.argv.includes('--simple')` read further down.
|
|
@@ -23,10 +23,10 @@ const fsp = require('node:fs/promises');
|
|
|
23
23
|
const os = require('node:os');
|
|
24
24
|
const { schemas, validated } = require('./ipcSchemas.cjs');
|
|
25
25
|
const { createProjectFolder } = require('./lib/projectFolder.cjs');
|
|
26
|
-
const { cleanChildEnv } = require('./lib/cleanEnv.cjs');
|
|
27
|
-
const { applyLoginShellPath } = require('./lib/loginShellPath.cjs');
|
|
28
|
-
const { terminateLosingInstance } = require('./lib/singleInstanceGuard.cjs');
|
|
29
|
-
const { acquireSchedulerOwnership, releaseSchedulerOwnership } = require('./lib/instanceLock.cjs');
|
|
26
|
+
const { cleanChildEnv } = require('./lib/process/cleanEnv.cjs');
|
|
27
|
+
const { applyLoginShellPath } = require('./lib/process/loginShellPath.cjs');
|
|
28
|
+
const { terminateLosingInstance } = require('./lib/process/singleInstanceGuard.cjs');
|
|
29
|
+
const { acquireSchedulerOwnership, releaseSchedulerOwnership } = require('./lib/process/instanceLock.cjs');
|
|
30
30
|
const { manager: ptyManager, registerPtyHandlers } = require('./pty.cjs');
|
|
31
31
|
const configMgr = require('./config.cjs');
|
|
32
32
|
const transcripts = require('./transcripts.cjs');
|
|
@@ -57,34 +57,30 @@ crashDiagnostics.startCrashReporter();
|
|
|
57
57
|
const voiceHotkey = require('./voiceHotkey.cjs');
|
|
58
58
|
const voiceWizard = require('./voiceWizard.cjs');
|
|
59
59
|
const scheduler = require('./scheduler.cjs');
|
|
60
|
-
const { createAdminHttp } = require('./lib/localAdminHttp.cjs');
|
|
61
|
-
const prdCreate = require('./lib/prdCreate.cjs');
|
|
62
|
-
const prdAdminRoutes = require('./lib/prdAdminRoutes.cjs');
|
|
63
|
-
const projectHomeAdminRoutes = require('./lib/projectHomeAdminRoutes.cjs');
|
|
64
|
-
const macroAdminRoutes = require('./lib/macroAdminRoutes.cjs');
|
|
60
|
+
const { createAdminHttp } = require('./lib/feedback-remote/localAdminHttp.cjs');
|
|
61
|
+
const prdCreate = require('./lib/prd/prdCreate.cjs');
|
|
62
|
+
const prdAdminRoutes = require('./lib/prd/prdAdminRoutes.cjs');
|
|
63
|
+
const projectHomeAdminRoutes = require('./lib/feedback-remote/projectHomeAdminRoutes.cjs');
|
|
64
|
+
const macroAdminRoutes = require('./lib/feedback-remote/macroAdminRoutes.cjs');
|
|
65
65
|
const { smfileResponseHeaders, shouldBlockFrameNavigation } = require('./lib/smfileHeaders.cjs');
|
|
66
|
-
const { appendAuditEvent } = require('./lib/auditLog.cjs');
|
|
66
|
+
const { appendAuditEvent } = require('./lib/telemetry/auditLog.cjs');
|
|
67
67
|
const chatRunner = require('./chatRunner.cjs');
|
|
68
68
|
const promptSessionEvents = require('./promptSessionEvents.cjs');
|
|
69
|
-
const activeIndexMerge = require('./lib/activeIndexMerge.cjs');
|
|
70
|
-
const promptSessionsCreateEpic = require('./lib/promptSessionsCreateEpic.cjs');
|
|
71
|
-
const customerFeedbackIpc = require('./lib/customerFeedbackIpc.cjs');
|
|
72
|
-
const epicWorktreeMint = require('./lib/epicWorktreeMint.cjs');
|
|
73
|
-
const epicWorktreeMerge = require('./lib/epicWorktreeMerge.cjs');
|
|
74
|
-
const epicWorktreeProjectConfig = require('./lib/epicWorktreeProjectConfig.cjs');
|
|
75
|
-
const
|
|
76
|
-
const
|
|
77
|
-
const
|
|
78
|
-
const agentEffortResolve = require('./lib/agentEffortResolve.cjs');
|
|
79
|
-
const { resolveEffectiveModelInfo } = require('./lib/effectiveModelInfo.cjs');
|
|
80
|
-
const { resolveModelCatalog } = require('./lib/modelCatalog.cjs');
|
|
81
|
-
const { checkDelegationReadiness, ensureGuardsInstalled, installPrdWriteGuard, installDestructiveGitGuard, installInlineImplementationGuard, installSelfScheduleGuard } = require('./lib/delegationReadiness.cjs');
|
|
69
|
+
const activeIndexMerge = require('./lib/epic/activeIndexMerge.cjs');
|
|
70
|
+
const promptSessionsCreateEpic = require('./lib/epic/promptSessionsCreateEpic.cjs');
|
|
71
|
+
const customerFeedbackIpc = require('./lib/feedback-remote/customerFeedbackIpc.cjs');
|
|
72
|
+
const epicWorktreeMint = require('./lib/epic/epicWorktreeMint.cjs');
|
|
73
|
+
const epicWorktreeMerge = require('./lib/epic/epicWorktreeMerge.cjs');
|
|
74
|
+
const epicWorktreeProjectConfig = require('./lib/epic/epicWorktreeProjectConfig.cjs');
|
|
75
|
+
const macroLibrary = require('./lib/persona-macro/macroLibrary.cjs');
|
|
76
|
+
const { resolveModelCatalog } = require('./lib/claude/modelCatalog.cjs');
|
|
77
|
+
const { checkDelegationReadiness, ensureGuardsInstalled, installPrdWriteGuard, installDestructiveGitGuard, installInlineImplementationGuard, installSelfScheduleGuard } = require('./lib/epic/delegationReadiness.cjs');
|
|
82
78
|
const { resolveProjectContext } = require('./lib/projectRootResolve.cjs');
|
|
83
|
-
const upgradeDrain = require('./lib/upgradeDrain.cjs');
|
|
79
|
+
const upgradeDrain = require('./lib/scheduler/upgradeDrain.cjs');
|
|
84
80
|
const { writeGuardShims } = require('./lib/guardShims.cjs');
|
|
85
81
|
const { MCP_TOOL_CATALOG, MCP_RECIPES } = require('./lib/mcpToolCatalog.cjs');
|
|
86
82
|
const { sendIfAlive } = require('./lib/sendToRenderer.cjs');
|
|
87
|
-
const crossProjectFeedback = require('./lib/crossProjectFeedback.cjs');
|
|
83
|
+
const crossProjectFeedback = require('./lib/feedback-remote/crossProjectFeedback.cjs');
|
|
88
84
|
const adminHttp = createAdminHttp();
|
|
89
85
|
scheduler.registerAdminRoutes(adminHttp);
|
|
90
86
|
prdCreate.registerAdminRoute(adminHttp, scheduler.remote);
|
|
@@ -94,9 +90,9 @@ macroAdminRoutes.registerAdminRoute(adminHttp, { onChanged: () => broadcastMacro
|
|
|
94
90
|
chatRunner.registerAdminRoute(adminHttp);
|
|
95
91
|
// Project-to-project feedback conduit — the app is the only process holding
|
|
96
92
|
// several projects' operations roots open, so it performs the cross-folder
|
|
97
|
-
// write (lib/crossProjectFeedback.cjs).
|
|
93
|
+
// write (lib/feedback-remote/crossProjectFeedback.cjs).
|
|
98
94
|
crossProjectFeedback.registerAdminRoute(adminHttp);
|
|
99
|
-
require('./lib/customerFeedbackAdminRoutes.cjs').registerAdminRoute(adminHttp);
|
|
95
|
+
require('./lib/feedback-remote/customerFeedbackAdminRoutes.cjs').registerAdminRoute(adminHttp);
|
|
100
96
|
const supervisor = require('./supervisor.cjs');
|
|
101
97
|
const watchers = require('./watchers.cjs');
|
|
102
98
|
const queueOps = require('./queueOps.cjs');
|
|
@@ -107,22 +103,18 @@ const { seedSchedulerMcp } = require('./seedSchedulerMcp.cjs');
|
|
|
107
103
|
const { getSeedStatus } = require('./seedStatus.cjs');
|
|
108
104
|
const otel = require('./otel.cjs');
|
|
109
105
|
const otelSettings = require('./otelSettings.cjs');
|
|
110
|
-
const telemetrySettings = require('./lib/telemetrySettings.cjs');
|
|
111
|
-
const telemetryClient = require('./lib/telemetryClient.cjs');
|
|
112
|
-
const telemetryBacklog = require('./lib/telemetryBacklog.cjs');
|
|
113
|
-
const telemetryConsent = require('./lib/telemetryConsent.cjs');
|
|
114
106
|
const { registerHistoryAggregatorHandlers, finalizeClosedDays, refreshIntradayToday } = require('./historyAggregator.cjs');
|
|
115
|
-
const runLogRetention = require('./lib/runLogRetention.cjs');
|
|
107
|
+
const runLogRetention = require('./lib/scheduler/runLogRetention.cjs');
|
|
116
108
|
const { registerHistoryDashboardHandlers } = require('./historyDashboard.cjs');
|
|
117
|
-
const { tryAcquireLock, releaseLock, DEFAULT_LOCK_PATH } = require('./lib/watchdogHelpers.cjs');
|
|
109
|
+
const { tryAcquireLock, releaseLock, DEFAULT_LOCK_PATH } = require('./lib/scheduler/watchdogHelpers.cjs');
|
|
118
110
|
const { createIntradayRefresh } = require('./lib/intradayRefresh.cjs');
|
|
119
|
-
const schedulerConfig = require('./lib/schedulerConfig.cjs');
|
|
111
|
+
const schedulerConfig = require('./lib/scheduler/schedulerConfig.cjs');
|
|
120
112
|
const memoryTool = require('./memoryTool.cjs');
|
|
121
113
|
const { registerMemoryAggregateIpc } = require('./memoryAggregate.cjs');
|
|
122
114
|
const { registerProjectBriefIpc } = require('./projectBrief.cjs');
|
|
123
115
|
const { registerProjectPagesIpc, attachWindow: attachProjectPagesWindow, closeAllOutputWatchers: closeAllProjectPagesWatchers } = require('./projectPages.cjs');
|
|
124
116
|
const promptSessionTranscript = require('./promptSessionTranscript.cjs');
|
|
125
|
-
const { computeEpicDelegationStats } = require('./lib/epicDelegationStats.cjs');
|
|
117
|
+
const { computeEpicDelegationStats } = require('./lib/epic/epicDelegationStats.cjs');
|
|
126
118
|
const agentMemory = require('./agentMemory.cjs');
|
|
127
119
|
const git = require('./git.cjs');
|
|
128
120
|
const heapSnapshot = require('./heapSnapshot.cjs');
|
|
@@ -130,14 +122,16 @@ const filesIpc = require('./files.cjs');
|
|
|
130
122
|
const { registerDocEditHandlers, attachWindow: attachDocEditWindow } = require('./docEdit.cjs');
|
|
131
123
|
const webRemote = require('./webRemote.cjs');
|
|
132
124
|
const { registerRemoteClientHandlers } = require('./remoteClientIpc.cjs');
|
|
125
|
+
const { registerAgentsHandlers } = require('./agentsIpc.cjs');
|
|
126
|
+
const { registerTelemetryHandlers } = require('./telemetryIpc.cjs');
|
|
133
127
|
const { registerUpdaterIpc } = require('./updaterIpc.cjs');
|
|
134
128
|
const { listExchanges } = require('./exchanges.cjs');
|
|
135
|
-
const { resolveClaudeBin } = require('./lib/claudeBin.cjs');
|
|
129
|
+
const { resolveClaudeBin } = require('./lib/claude/claudeBin.cjs');
|
|
136
130
|
const { checkInsideHome, assertInsideHome } = require('./lib/insideHome.cjs');
|
|
137
131
|
const { openInEditor, openFileInEditor, openInFinder, openInTerminal, runInTerminal } = require('./lib/openExternalApp.cjs');
|
|
138
132
|
const { checkPrereqs } = require('./lib/prereqs.cjs');
|
|
139
|
-
const { rebuildActiveIndex } = require('./lib/activeIndexRebuild.cjs');
|
|
140
|
-
const { activeIndexPath: promptSessionsActiveIndexPath } = require('./lib/epicMint.cjs');
|
|
133
|
+
const { rebuildActiveIndex } = require('./lib/epic/activeIndexRebuild.cjs');
|
|
134
|
+
const { activeIndexPath: promptSessionsActiveIndexPath } = require('./lib/epic/epicMint.cjs');
|
|
141
135
|
const { allProjectCwds } = require('./lib/activeSessions.cjs');
|
|
142
136
|
const { scheduleBootSelfHeal } = require('./lib/bootSelfHeal.cjs');
|
|
143
137
|
|
|
@@ -354,7 +348,7 @@ function relaunchViaNpx() {
|
|
|
354
348
|
|
|
355
349
|
/**
|
|
356
350
|
* rebootApp({force}) — restart is a REQUEST that drains first and never kills
|
|
357
|
-
* (lib/upgradeDrain.cjs): dispatch pauses, running jobs finish, then the
|
|
351
|
+
* (lib/scheduler/upgradeDrain.cjs): dispatch pauses, running jobs finish, then the
|
|
358
352
|
* scheduler's heartbeat-driven drain calls performReboot(). `force: true`
|
|
359
353
|
* keeps the old immediate behaviour (kills running executors) for humans who
|
|
360
354
|
* accept the cost.
|
|
@@ -480,7 +474,7 @@ function createWindow() {
|
|
|
480
474
|
// known project has already accumulated, marking exactly what's
|
|
481
475
|
// CONFIRMED delivered. Fired after the window is shown (never blocks
|
|
482
476
|
// startup) and yields between files internally. See telemetryBacklog.cjs.
|
|
483
|
-
require('./lib/telemetryBacklog.cjs')
|
|
477
|
+
require('./lib/telemetry/telemetryBacklog.cjs')
|
|
484
478
|
.bootDrain({ appVersion: app.getVersion() })
|
|
485
479
|
.catch((e) => {
|
|
486
480
|
logs.writeLine({ scope: 'telemetry', level: 'warn', message: 'telemetryBacklog.bootDrain failed', meta: { error: e?.message } });
|
|
@@ -583,36 +577,6 @@ ipcMain.handle('mcp:status', () => probeMcpStatus());
|
|
|
583
577
|
// the renderer never makes a direct HTTP call. Static data, no cwd needed.
|
|
584
578
|
ipcMain.handle('mcp:catalog', () => ({ ok: true, tools: MCP_TOOL_CATALOG, recipes: MCP_RECIPES }));
|
|
585
579
|
|
|
586
|
-
// Agent Library nav page (Home face only): global `~/.claude/agents/*.md`
|
|
587
|
-
// personas plus, per currently-open project tab, whether that project
|
|
588
|
-
// overlays the same agent name at `<cwd>/.claude/agents/<name>.md`. Read-only.
|
|
589
|
-
ipcMain.handle('agents:list-personas', () => agentLibrary.listPersonas());
|
|
590
|
-
// Agent Library CRUD — global personas only (`~/.claude/agents/*.md`); a
|
|
591
|
-
// project's local overlay can only be removed here (removeOverride), never
|
|
592
|
-
// created, since Agent Library is a Home-face, machine-wide surface with no
|
|
593
|
-
// per-tab cwd context of its own. Each mutation broadcasts `agents:changed`
|
|
594
|
-
// so Agent Library and Tag Library — two independently-mounted dockview
|
|
595
|
-
// panels, each with its own component-local `listPersonas()` snapshot —
|
|
596
|
-
// both refresh off the one file on disk instead of one panel going stale
|
|
597
|
-
// after the other edits the agent<->tag relationship.
|
|
598
|
-
function broadcastAgentsChanged() {
|
|
599
|
-
sendIfAlive(mainWindow, 'agents:changed', {});
|
|
600
|
-
}
|
|
601
|
-
ipcMain.handle('agents:save-persona', validated(schemas.agentsSavePersona, async (payload) => {
|
|
602
|
-
const result = await agentLibrary.savePersona(payload);
|
|
603
|
-
broadcastAgentsChanged();
|
|
604
|
-
return result;
|
|
605
|
-
}));
|
|
606
|
-
ipcMain.handle('agents:delete-persona', async (_e, payload) => {
|
|
607
|
-
const result = await agentLibrary.deletePersona(payload);
|
|
608
|
-
broadcastAgentsChanged();
|
|
609
|
-
return result;
|
|
610
|
-
});
|
|
611
|
-
ipcMain.handle('agents:remove-override', async (_e, payload) => {
|
|
612
|
-
const result = await agentLibrary.removeOverride(payload);
|
|
613
|
-
broadcastAgentsChanged();
|
|
614
|
-
return result;
|
|
615
|
-
});
|
|
616
580
|
// Macro library (macroLibrary.cjs): global machine-local one-click sidebar
|
|
617
581
|
// macros (agent + tag + prompt). Store path is fixed in-module; the renderer
|
|
618
582
|
// never supplies it. Mutations broadcast `macros:changed`.
|
|
@@ -635,31 +599,6 @@ ipcMain.handle('macros:set-project', validated(schemas.macrosSetProject, async (
|
|
|
635
599
|
if (result.ok) broadcastMacrosChanged();
|
|
636
600
|
return result;
|
|
637
601
|
}));
|
|
638
|
-
// New Epic AIM composer (epicIntake.ts's `agentBody`/`agentPath`): unlike
|
|
639
|
-
// list-personas above (global dir only), this honors the project-overlay-
|
|
640
|
-
// then-global precedence so an Epic's opening prompt carries the persona
|
|
641
|
-
// body that actually applies to its cwd. Read-only.
|
|
642
|
-
ipcMain.handle('agents:get-persona-body', validated(schemas.agentsGetPersonaBody, (payload) =>
|
|
643
|
-
agentLibrary.getPersonaBody(payload)));
|
|
644
|
-
|
|
645
|
-
// "What will this Epic's launch actually use for --model?" — the SAME
|
|
646
|
-
// resolver chatRunner.cjs's Chat-view launch calls in-process
|
|
647
|
-
// (agentModelResolve.cjs's resolveEpicModel), reached here so Terminal's
|
|
648
|
-
// launch (EpicTerminalPane.tsx, a renderer module with no fs access) agrees
|
|
649
|
-
// with Chat by calling the identical function rather than a second one that
|
|
650
|
-
// is merely supposed to. Never throws (resolveEpicModel's own contract).
|
|
651
|
-
ipcMain.handle('agents:resolve-epic-model', validated(schemas.agentsResolveEpicModel, (payload) =>
|
|
652
|
-
agentModelResolve.resolveEpicModel(payload)));
|
|
653
|
-
// Effort twin of the above (agentEffortResolve.cjs): Terminal appends
|
|
654
|
-
// `--effort <level>` only when `effort` is non-null. Never throws.
|
|
655
|
-
ipcMain.handle('agents:resolve-epic-effort', validated(schemas.agentsResolveEpicEffort, (payload) =>
|
|
656
|
-
agentEffortResolve.resolveEpicEffort(payload)));
|
|
657
|
-
|
|
658
|
-
// "What will this Epic actually run as?" (PRD: effective-model-resolver) —
|
|
659
|
-
// persona alias + evidence-based concrete model id + provenance, for a given
|
|
660
|
-
// (cwd, agentType). Read-only observer; never affects what a launch resolves.
|
|
661
|
-
ipcMain.handle('agents:resolve-model-info', validated(schemas.agentsResolveModelInfo, (payload) =>
|
|
662
|
-
resolveEffectiveModelInfo(payload)));
|
|
663
602
|
|
|
664
603
|
// Live model/effort catalog (modelCatalog.cjs) — never throws; `force` bypasses its cache.
|
|
665
604
|
ipcMain.handle('models:catalog', validated(schemas.modelsCatalog, (payload) =>
|
|
@@ -700,7 +639,7 @@ ipcMain.handle('app:delegation-readiness', validated(schemas.delegationReadiness
|
|
|
700
639
|
// session-manager-operations/logs/errors-<date>.jsonl, same shape as every
|
|
701
640
|
// other structured error line.
|
|
702
641
|
function logGuardInstallAttempt(guard, cwd, outcome) {
|
|
703
|
-
const opsErrorLog = require('./lib/opsErrorLog.cjs');
|
|
642
|
+
const opsErrorLog = require('./lib/telemetry/opsErrorLog.cjs');
|
|
704
643
|
opsErrorLog.appendError({
|
|
705
644
|
cwd,
|
|
706
645
|
scope: 'delegationReadinessGuardInstall',
|
|
@@ -1101,6 +1040,7 @@ filesIpc.registerFilesHandlers();
|
|
|
1101
1040
|
registerDocEditHandlers();
|
|
1102
1041
|
webRemote.registerRemoteHandlers();
|
|
1103
1042
|
registerRemoteClientHandlers(() => mainWindow);
|
|
1043
|
+
registerAgentsHandlers({ ipcMain, getWindow: () => mainWindow });
|
|
1104
1044
|
try {
|
|
1105
1045
|
registerUpdaterIpc({ ipcMain, getWindow: () => mainWindow, ptyManager });
|
|
1106
1046
|
} catch (e) {
|
|
@@ -1126,35 +1066,7 @@ ipcMain.handle('exchanges:list', validated(schemas.exchangesList, async (payload
|
|
|
1126
1066
|
}
|
|
1127
1067
|
}));
|
|
1128
1068
|
|
|
1129
|
-
|
|
1130
|
-
ipcMain.handle('otel:get-config', async () => otelSettings.load());
|
|
1131
|
-
ipcMain.handle('otel:set-config', async (_e, cfg) => {
|
|
1132
|
-
if (!otelSettings.isValid(cfg)) {
|
|
1133
|
-
return { ok: false, error: 'invalid config' };
|
|
1134
|
-
}
|
|
1135
|
-
const saved = await otelSettings.save(cfg);
|
|
1136
|
-
const result = await otel.applyConfig(saved);
|
|
1137
|
-
return { ok: !!result?.ok, error: result?.error ?? null, config: saved, status: otel.status() };
|
|
1138
|
-
});
|
|
1139
|
-
ipcMain.handle('otel:status', () => otel.status());
|
|
1140
|
-
ipcMain.handle('otel:config-path', () => otelSettings.storePath());
|
|
1141
|
-
|
|
1142
|
-
// Product telemetry (bilko.run) — anonymous, on-by-default, opt-out consent
|
|
1143
|
-
// UX + inspector over the client PRDs above wired. Settings > Telemetry's
|
|
1144
|
-
// "Product telemetry" section is the sole UI surface for this; see
|
|
1145
|
-
// session-manager-operations/architecture/telemetry.md for the data model.
|
|
1146
|
-
ipcMain.handle('telemetry:get-config', async () => telemetrySettings.load());
|
|
1147
|
-
ipcMain.handle('telemetry:set-config', validated(schemas.telemetrySetConfig, async (cfg) => {
|
|
1148
|
-
const saved = await telemetryConsent.applyConsentUpdate(cfg, { telemetrySettings, telemetryClient });
|
|
1149
|
-
return { ok: true, config: saved, status: telemetryClient.status() };
|
|
1150
|
-
}));
|
|
1151
|
-
ipcMain.handle('telemetry:status', () => ({
|
|
1152
|
-
...telemetryClient.status(),
|
|
1153
|
-
backlog: telemetryBacklog.lastRunSummary(),
|
|
1154
|
-
}));
|
|
1155
|
-
ipcMain.handle('telemetry:config-path', () => telemetrySettings.storePath());
|
|
1156
|
-
ipcMain.handle('telemetry:recent-records', () => telemetryClient.recentRecords());
|
|
1157
|
-
ipcMain.handle('telemetry:flush-now', () => telemetryClient.flush('manual'));
|
|
1069
|
+
registerTelemetryHandlers({ ipcMain });
|
|
1158
1070
|
|
|
1159
1071
|
// Diagnostic-only renderer heap snapshot. No-op unless SM_HEAP_SNAPSHOT=1 —
|
|
1160
1072
|
// see heapSnapshot.cjs for why this stays off by default.
|
|
@@ -1292,14 +1204,14 @@ app.whenReady().then(async () => {
|
|
|
1292
1204
|
|
|
1293
1205
|
process.on('uncaughtException', (err) => {
|
|
1294
1206
|
try {
|
|
1295
|
-
require('./lib/telemetryClient.cjs').reportError({ name: 'uncaughtException', msg: err?.message, stack: err?.stack });
|
|
1207
|
+
require('./lib/telemetry/telemetryClient.cjs').reportError({ name: 'uncaughtException', msg: err?.message, stack: err?.stack });
|
|
1296
1208
|
} catch { /* telemetry must never break the existing handling below */ }
|
|
1297
1209
|
logs.writeLine({ scope: 'main', level: 'error', message: 'uncaughtException', meta: { error: err?.message, stack: err?.stack } });
|
|
1298
1210
|
});
|
|
1299
1211
|
process.on('unhandledRejection', (reason) => {
|
|
1300
1212
|
const r = reason instanceof Error ? { error: reason.message, stack: reason.stack } : { reason: String(reason) };
|
|
1301
1213
|
try {
|
|
1302
|
-
require('./lib/telemetryClient.cjs').reportError({ name: 'unhandledRejection', msg: r.error || r.reason, stack: r.stack });
|
|
1214
|
+
require('./lib/telemetry/telemetryClient.cjs').reportError({ name: 'unhandledRejection', msg: r.error || r.reason, stack: r.stack });
|
|
1303
1215
|
} catch { /* telemetry must never break the existing handling below */ }
|
|
1304
1216
|
logs.writeLine({ scope: 'main', level: 'error', message: 'unhandledRejection', meta: r });
|
|
1305
1217
|
});
|
|
@@ -1307,7 +1219,7 @@ app.whenReady().then(async () => {
|
|
|
1307
1219
|
// Telemetry boot sequence: flush('boot') always, flush('version-change')
|
|
1308
1220
|
// when detected, and the once-per-machine install upsert (app_installs) when
|
|
1309
1221
|
// due (version bump or 30-day liveness heartbeat). See telemetryBoot.cjs.
|
|
1310
|
-
require('./lib/telemetryBoot.cjs')
|
|
1222
|
+
require('./lib/telemetry/telemetryBoot.cjs')
|
|
1311
1223
|
.bootSequence({
|
|
1312
1224
|
appVersion: app.getVersion(),
|
|
1313
1225
|
installChannel: require('./lib/machineProfile.cjs').resolveInstallChannel({ appPath: app.getAppPath() }),
|
|
@@ -1490,7 +1402,7 @@ app.whenReady().then(async () => {
|
|
|
1490
1402
|
console.log(`[main] scheduler ownership held by pid ${ownership.holderPid} — running scheduler-passive (no reconciliation, no admin server)`);
|
|
1491
1403
|
logs.writeLine({ scope: 'scheduler', level: 'info', message: 'scheduler-passive: ownership held by another instance', meta: { holderPid: ownership.holderPid } });
|
|
1492
1404
|
}
|
|
1493
|
-
// First-boot default: install the bundled session-manager-dev plugin (its
|
|
1405
|
+
// First-boot default: install the bundled session-manager-dev plugin (its 3
|
|
1494
1406
|
// dev skills) from the app's own marketplace. One-shot + idempotent; never
|
|
1495
1407
|
// throws. SM_SEED_DEV_PLUGIN_DISABLE=1 to opt out.
|
|
1496
1408
|
seedDevPlugin({ logger: console, writeLog: logs.writeLine }).catch((e) => {
|
|
@@ -1560,7 +1472,7 @@ app.whenReady().then(async () => {
|
|
|
1560
1472
|
}, 30_000);
|
|
1561
1473
|
// Keep TODAY's rollup line current so the History dashboard never needs to
|
|
1562
1474
|
// fall back to a live transcript scan. Shares the same O_EXCL lock file as
|
|
1563
|
-
// the external watchdog's finalize pass (src/main/lib/watchdogHelpers.cjs)
|
|
1475
|
+
// the external watchdog's finalize pass (src/main/lib/scheduler/watchdogHelpers.cjs)
|
|
1564
1476
|
// so the two never interleave writes to the rollup; a contended lock just
|
|
1565
1477
|
// means this tick's refresh is skipped (harmless — the next tick retries).
|
|
1566
1478
|
const intradayTimer = setInterval(runIntradayRefresh, schedulerConfig.HISTORY_INTRADAY_REFRESH_MS);
|
|
@@ -1663,5 +1575,5 @@ app.on('before-quit', () => {
|
|
|
1663
1575
|
// Best-effort delivery attempt for whatever telemetry accumulated this run.
|
|
1664
1576
|
// flush() only removes records it actually delivered — an interrupted or
|
|
1665
1577
|
// failed attempt leaves the queue file intact for the next boot's flush.
|
|
1666
|
-
require('./lib/telemetryClient.cjs').flush('quit').catch(() => {});
|
|
1578
|
+
require('./lib/telemetry/telemetryClient.cjs').flush('quit').catch(() => {});
|
|
1667
1579
|
});
|
package/src/main/ipcSchemas.cjs
CHANGED
|
@@ -10,10 +10,10 @@ const { z } = require('zod');
|
|
|
10
10
|
const os = require('node:os');
|
|
11
11
|
const path = require('node:path');
|
|
12
12
|
const { PromptSessionSchema, EpicTagSchema, EpicSourceSchema, EpicIntakeSectionSchema } = require('./lib/promptSessionSchema.cjs');
|
|
13
|
-
const { PrdWorkTypeSchema } = require('./lib/workTypeLibrary.cjs');
|
|
13
|
+
const { PrdWorkTypeSchema } = require('./lib/prd/workTypeLibrary.cjs');
|
|
14
14
|
const { PERSONA_NAME_RE } = require('./agentLibrary.cjs');
|
|
15
|
-
const { AgentPersonaSaveSchema } = require('./lib/agentPersonaSchema.cjs');
|
|
16
|
-
const { MacroSaveSchema, MacroDeleteSchema, MacroSetProjectSchema } = require('./lib/macroLibrary.cjs');
|
|
15
|
+
const { AgentPersonaSaveSchema } = require('./lib/persona-macro/agentPersonaSchema.cjs');
|
|
16
|
+
const { MacroSaveSchema, MacroDeleteSchema, MacroSetProjectSchema } = require('./lib/persona-macro/macroLibrary.cjs');
|
|
17
17
|
|
|
18
18
|
// ──────────────────────────────────────────── PTY
|
|
19
19
|
const ptySpawn = z.object({
|
|
@@ -144,7 +144,7 @@ const configWatchOpts = z.object({ depth: z.number().int().min(0).max(2) }).stri
|
|
|
144
144
|
const configParseImports = z.object({ path: z.string().min(1).max(4096) });
|
|
145
145
|
|
|
146
146
|
// ──────────────────────────────────────────── PromptSessions (Epics) active-index merge
|
|
147
|
-
// lib/activeIndexMerge.cjs's read-merge-write, invoked over IPC by the
|
|
147
|
+
// lib/epic/activeIndexMerge.cjs's read-merge-write, invoked over IPC by the
|
|
148
148
|
// renderer's persistActiveIndex (state/promptSessions.ts) instead of that
|
|
149
149
|
// module doing its own config:read-json/config:write-json round trip. Payload
|
|
150
150
|
// carries only the CALLING renderer's in-memory contribution for this cwd —
|
|
@@ -204,7 +204,7 @@ const promptSessionsMergeActiveIndex = z.object({
|
|
|
204
204
|
source: z.literal('epics'),
|
|
205
205
|
});
|
|
206
206
|
|
|
207
|
-
// Renderer entry point for main's ensureEpic() (lib/promptSessionsCreateEpic.cjs)
|
|
207
|
+
// Renderer entry point for main's ensureEpic() (lib/epic/promptSessionsCreateEpic.cjs)
|
|
208
208
|
// — additive step 1 of a two-PRD chain; unused by the app until the next PRD
|
|
209
209
|
// routes state/promptSessions.ts's createPromptSession through it. `tag`/
|
|
210
210
|
// `source` reuse promptSessionSchema.cjs's own enums rather than retyping
|
|
@@ -226,14 +226,14 @@ const promptSessionsCreateEpic = z.object({
|
|
|
226
226
|
});
|
|
227
227
|
|
|
228
228
|
// Renderer entry point for creating an Epic's isolated git worktree
|
|
229
|
-
// (lib/epicWorktreeMint.cjs) at the proposed->active transition — PRD 1033.
|
|
229
|
+
// (lib/epic/epicWorktreeMint.cjs) at the proposed->active transition — PRD 1033.
|
|
230
230
|
const promptSessionsCreateWorktree = z.object({
|
|
231
231
|
cwd: z.string().min(1).max(4096),
|
|
232
232
|
epicId: z.string().regex(PROMPT_SESSION_ID_RE),
|
|
233
233
|
});
|
|
234
234
|
|
|
235
235
|
// Renderer entry point for folding an Epic's isolated git worktree branch
|
|
236
|
-
// back into its owning project's main tree (lib/epicWorktreeMerge.cjs) — PRD
|
|
236
|
+
// back into its owning project's main tree (lib/epic/epicWorktreeMerge.cjs) — PRD
|
|
237
237
|
// 1034, the ONLY point where the per-Epic isolation PRD 1033 wires resolves.
|
|
238
238
|
// `branch`/`dir` are supplied by the caller (the renderer's own in-memory
|
|
239
239
|
// `session.worktree`) rather than re-derived from active-index.json, since
|
|
@@ -253,7 +253,7 @@ const promptSessionsMergeToMain = z.object({
|
|
|
253
253
|
});
|
|
254
254
|
|
|
255
255
|
// Renderer entry points for the per-project "disable Epic worktree
|
|
256
|
-
// isolation" UI toggle (lib/epicWorktreeProjectConfig.cjs) — PRD 1035.
|
|
256
|
+
// isolation" UI toggle (lib/epic/epicWorktreeProjectConfig.cjs) — PRD 1035.
|
|
257
257
|
const promptSessionsGetWorktreeDisabled = z.object({
|
|
258
258
|
cwd: z.string().min(1).max(4096),
|
|
259
259
|
});
|
|
@@ -415,7 +415,7 @@ const schedulerCreatePrd = z.object({
|
|
|
415
415
|
// User-selected work-type tag (PRD 774; independence from the parent
|
|
416
416
|
// Epic's own tag confirmed PRD 1041) — deterministic, never LLM-classified.
|
|
417
417
|
// Epic tag and PRD tag draw on the same WorkType vocabulary
|
|
418
|
-
// (lib/workTypeLibrary.cjs) but are independent values; 'discussion' is
|
|
418
|
+
// (lib/prd/workTypeLibrary.cjs) but are independent values; 'discussion' is
|
|
419
419
|
// excluded here for the same reason adminPrdFrontmatterPatch excludes it
|
|
420
420
|
// below — a discussion-tagged Epic never reaches PRD authoring.
|
|
421
421
|
tag: PrdWorkTypeSchema.optional(),
|
|
@@ -618,7 +618,7 @@ const setSessionSlotsSchema = z.object({
|
|
|
618
618
|
// agents:save-persona — the Agent entity (Agent/WorkType/Epic/PRD/Job ERD)
|
|
619
619
|
// had no boundary validation until this schema; Epic and Job each got theirs
|
|
620
620
|
// only after a production incident (see scheduleJobSchema.cjs's header).
|
|
621
|
-
// Full field-level rules live in lib/agentPersonaSchema.cjs, mirroring
|
|
621
|
+
// Full field-level rules live in lib/persona-macro/agentPersonaSchema.cjs, mirroring
|
|
622
622
|
// AgentPersonaSaveInput (src/preload/api.d.ts) field-for-field.
|
|
623
623
|
const agentsSavePersona = AgentPersonaSaveSchema;
|
|
624
624
|
const macrosSave = MacroSaveSchema;
|