claude-code-session-manager 0.87.0 → 0.88.1
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 +26 -53
- package/dist/assets/{AgentLibrary-DyLWzZDf.js → AgentLibrary-kQF8_wAw.js} +1 -1
- package/dist/assets/{DataModel--mISIJ6h.js → DataModel-CY_mMnsr.js} +1 -1
- package/dist/assets/{History-C2ahUXTg.js → History-Sji2brb0.js} +1 -1
- package/dist/assets/{Hooks-BiC6oyR2.js → Hooks-CtqpO-p5.js} +1 -1
- package/dist/assets/{HostBilko-BPleEOld.js → HostBilko-DN0ydOCr.js} +1 -1
- package/dist/assets/{Library-Dc8Qst1R.js → Library-CoiLZTKh.js} +1 -1
- package/dist/assets/{ListDetail-DIXh-OLX.js → ListDetail-CmqiQ_io.js} +1 -1
- package/dist/assets/{MarkdownEditor-C90bkLXK.js → MarkdownEditor-HPoNeKhT.js} +1 -1
- package/dist/assets/{McpServers-DqcbLOLZ.js → McpServers-Bj1X3_NT.js} +1 -1
- package/dist/assets/{Memory-CW62MXlh.js → Memory-1PKjsM3b.js} +1 -1
- package/dist/assets/{Panel-Bw1FhRuF.js → Panel-I1s6ghPo.js} +1 -1
- package/dist/assets/{Permissions-BcUC-5y8.js → Permissions-BhiiZjHQ.js} +1 -1
- package/dist/assets/{Plugins-BnKx9flD.js → Plugins-gv3_fkPX.js} +2 -2
- package/dist/assets/{ProvenanceBadge-Bw5vNVPT.js → ProvenanceBadge-BGcgBd8V.js} +1 -1
- package/dist/assets/{SaveBar-CWr0O_w-.js → SaveBar-BGr9eZ4g.js} +1 -1
- package/dist/assets/{Scheduler-DYdLuUqq.js → Scheduler-Bdo_awPq.js} +7 -7
- package/dist/assets/{ScopeSwitcher-CrBLbg8s.js → ScopeSwitcher-ukl0qWaA.js} +1 -1
- package/dist/assets/{Settings-DluB-vN1.js → Settings-DJkFj22G.js} +1 -1
- package/dist/assets/{SkillReferenceGraph-CHLSseay.js → SkillReferenceGraph-0t1Qblp6.js} +1 -1
- package/dist/assets/{Skills-gNdo_HNK.js → Skills-CeVdBGE-.js} +1 -1
- package/dist/assets/{SystemPrompt-Cru05-Ia.js → SystemPrompt-CfKvNHi3.js} +1 -1
- package/dist/assets/{TagLibrary-DNHY0xou.js → TagLibrary-DAzNaUPd.js} +1 -1
- package/dist/assets/{TiptapBody-I4lmbCgP.js → TiptapBody--S_rGXoA.js} +1 -1
- package/dist/assets/{Toggle-bWMHjmRh.js → Toggle-Dszm0xnp.js} +1 -1
- package/dist/assets/{index-DV3PorRY.css → index-BHTX4OTc.css} +1 -1
- package/dist/assets/{index-fc_JjdxL.js → index-Dp4Rc--q.js} +356 -356
- package/dist/assets/{settingsSchema-BfhtZnGD.js → settingsSchema-BLbssMYo.js} +1 -1
- package/dist/assets/{whisperWorker-Dbia1OpC.js → whisperWorker-C7ZGQwKg.js} +7 -7
- package/dist/index.html +2 -2
- package/dist/vad/ort-wasm-simd-threaded.asyncify.mjs +106 -110
- package/dist/vad/ort-wasm-simd-threaded.asyncify.wasm +0 -0
- package/dist/vad/ort-wasm-simd-threaded.jsep.mjs +98 -98
- package/dist/vad/ort-wasm-simd-threaded.jsep.wasm +0 -0
- package/dist/vad/ort-wasm-simd-threaded.jspi.mjs +99 -102
- package/dist/vad/ort-wasm-simd-threaded.jspi.wasm +0 -0
- package/dist/vad/ort-wasm-simd-threaded.mjs +46 -46
- package/dist/vad/ort-wasm-simd-threaded.wasm +0 -0
- package/package.json +10 -13
- package/scripts/README.md +59 -0
- package/scripts/audit-ops-hygiene.cjs +350 -0
- package/scripts/hooks/guard-destructive-git.cjs +10 -34
- package/scripts/hooks/guard-inline-implementation.cjs +14 -8
- package/scripts/hooks/guard-prd-writes.cjs +7 -36
- package/scripts/hooks/guard-self-schedule.cjs +175 -0
- package/scripts/ops-sweep.cjs +355 -0
- package/scripts/scheduler-mcp-server.cjs +28 -71
- package/src/main/__tests__/bilkoHost-integration.test.cjs +3 -3
- package/src/main/__tests__/chat-cancel-terminal.test.cjs +6 -9
- package/src/main/__tests__/chat-exit-close-race.test.cjs +3 -3
- package/src/main/__tests__/chat-mcp-consent-notice.test.cjs +4 -5
- package/src/main/__tests__/chat-queue.test.cjs +2 -2
- package/src/main/__tests__/chat-stop-signal.test.cjs +2 -2
- package/src/main/__tests__/dep-orphan-archive-health.test.cjs +77 -0
- package/src/main/__tests__/dod-batchkey.test.cjs +2 -2
- package/src/main/__tests__/dod-drain-hook.test.cjs +2 -2
- package/src/main/__tests__/dod-report.test.cjs +2 -2
- package/src/main/__tests__/dod-reverify.test.cjs +2 -2
- package/src/main/__tests__/epicMint.test.cjs +2 -2
- package/src/main/__tests__/exchanges.test.cjs +2 -2
- package/src/main/__tests__/extractJson.test.cjs +2 -2
- package/src/main/__tests__/files-reject-credentials.test.cjs +1 -1
- package/src/main/__tests__/fixtures/1218-fo-01-move-scripts-lib-into-src-main-lib.log +556 -0
- package/src/main/__tests__/health-build-freshness.test.cjs +39 -0
- package/src/main/__tests__/health-delegation-chain.test.cjs +15 -1
- package/src/main/__tests__/health-queue-dispatch.test.cjs +58 -7
- package/src/main/__tests__/health-tick-liveness.test.cjs +27 -3
- package/src/main/__tests__/health-usage-poller.test.cjs +70 -23
- package/src/main/__tests__/historyRollup.test.cjs +2 -2
- package/src/main/__tests__/kg-augment.test.cjs +2 -2
- package/src/main/__tests__/mcpStatus.test.cjs +2 -2
- package/src/main/__tests__/memoryAggregate.test.cjs +1 -1
- package/src/main/__tests__/memoryStale.test.cjs +1 -1
- package/src/main/__tests__/opsErrorLogTelemetryTap.test.cjs +25 -1
- package/src/main/__tests__/pollLoop-dispatch-on-failure.test.cjs +33 -3
- package/src/main/__tests__/prd-group-allocator.test.cjs +2 -2
- package/src/main/__tests__/prdAdminRouteParity.test.cjs +2 -0
- package/src/main/__tests__/prdAdminRoutes.test.cjs +14 -2
- package/src/main/__tests__/prdAuthoringSeed.test.cjs +39 -0
- package/src/main/__tests__/prdLocationsArchived.test.cjs +20 -13
- package/src/main/__tests__/proc-role-env.test.cjs +125 -0
- package/src/main/__tests__/procname-claude-spawn-sites.test.cjs +304 -0
- package/src/main/__tests__/procname-sm-processes.test.cjs +127 -0
- package/src/main/__tests__/projectHomeAdminRoutes.test.cjs +81 -401
- package/src/main/__tests__/projectPages.test.cjs +63 -149
- package/src/main/__tests__/queue-health-verdict.test.cjs +9 -9
- package/src/main/__tests__/queue-starvation-dispatch-driver.test.cjs +117 -20
- package/src/main/__tests__/queueHistory.test.cjs +2 -2
- package/src/main/__tests__/rateLimitPollerStreak.test.cjs +38 -3
- package/src/main/__tests__/runVerify-landed-commit-outranks.test.cjs +181 -0
- package/src/main/__tests__/runVerify.test.cjs +5 -5
- package/src/main/__tests__/scheduleJobStatusDrift.test.cjs +3 -3
- package/src/main/__tests__/scheduleJobTransitions.test.cjs +2 -2
- package/src/main/__tests__/scheduler-adopted-run-supervision.test.cjs +143 -0
- package/src/main/__tests__/scheduler-autofix-select.test.cjs +2 -2
- package/src/main/__tests__/scheduler-autopromote.test.cjs +2 -2
- package/src/main/__tests__/scheduler-bash-timeout-env.test.cjs +3 -5
- package/src/main/__tests__/scheduler-boot-orphans.test.cjs +78 -97
- package/src/main/__tests__/scheduler-default-eligible-heal.test.cjs +161 -0
- package/src/main/__tests__/scheduler-dispatch-loop.test.cjs +58 -0
- package/src/main/__tests__/scheduler-epic-digest.test.cjs +3 -5
- package/src/main/__tests__/scheduler-force-tick-outcome.test.cjs +2 -2
- package/src/main/__tests__/scheduler-gate-shadow.test.cjs +119 -0
- package/src/main/__tests__/scheduler-guard-verdict-autoresolve.test.cjs +46 -0
- package/src/main/__tests__/scheduler-heartbeat-payload.test.cjs +80 -0
- package/src/main/__tests__/scheduler-inplace-salvage.test.cjs +25 -18
- package/src/main/__tests__/scheduler-investigation-prompt.test.cjs +4 -4
- package/src/main/__tests__/scheduler-launch-failure.test.cjs +3 -5
- package/src/main/__tests__/scheduler-looks-done.test.cjs +26 -7
- package/src/main/__tests__/scheduler-manual-pause.test.cjs +118 -0
- package/src/main/__tests__/scheduler-meta-code-sha.test.cjs +26 -3
- package/src/main/__tests__/scheduler-prd-missing-skip.test.cjs +17 -2
- package/src/main/__tests__/scheduler-prd-persona-spawn.test.cjs +3 -5
- package/src/main/__tests__/scheduler-quiet-machine-lease.test.cjs +41 -6
- package/src/main/__tests__/scheduler-rate-limit-pause.test.cjs +62 -6
- package/src/main/__tests__/scheduler-rate-limit-spin-guard.test.cjs +3 -5
- package/src/main/__tests__/scheduler-reap-dead-running-jobs.test.cjs +23 -4
- package/src/main/__tests__/scheduler-reconcile-cwd-preserve.test.cjs +100 -0
- package/src/main/__tests__/scheduler-reconcile-invalid-repair.test.cjs +3 -3
- package/src/main/__tests__/scheduler-reconcile-quarantine.test.cjs +4 -4
- package/src/main/__tests__/scheduler-shard-quarantine.test.cjs +110 -0
- package/src/main/__tests__/scheduler-shared-tree-guard.test.cjs +81 -1
- package/src/main/__tests__/scheduler-stall-per-project.test.cjs +14 -0
- package/src/main/__tests__/scheduler-starve-escalation.test.cjs +4 -4
- package/src/main/__tests__/scheduler-stranded-autofix-park.test.cjs +245 -0
- package/src/main/__tests__/scheduler-supervisor-record.test.cjs +81 -0
- package/src/main/__tests__/scheduler-tick-cancel-token.test.cjs +2 -2
- package/src/main/__tests__/scheduler-tick-wedge.test.cjs +172 -0
- package/src/main/__tests__/scheduler-transient-failure.test.cjs +2 -2
- package/src/main/__tests__/scheduler-worktree-cap-defer.test.cjs +37 -11
- package/src/main/__tests__/scheduler-worktree-exec-cwd.test.cjs +3 -5
- package/src/main/__tests__/usageSingleFlight.test.cjs +157 -0
- package/src/main/__tests__/workTypeLibrary.test.cjs +1 -1
- package/src/main/bilkoHost.cjs +16 -7
- package/src/main/build-info.json +8 -0
- package/src/main/chatRunner.cjs +4 -2
- package/src/main/config.cjs +2 -3
- package/src/main/docEdit.cjs +4 -2
- package/src/main/health.cjs +276 -52
- package/src/main/heapSnapshot.cjs +2 -2
- package/src/main/historyAggregator.cjs +1 -1
- package/src/main/index.cjs +61 -10
- package/src/main/ipcSchemas.cjs +6 -17
- package/src/main/lib/__tests__/auditLog.test.cjs +38 -0
- package/src/main/lib/__tests__/buildIdentity.test.cjs +121 -0
- package/src/main/lib/__tests__/cwdClassify.test.cjs +111 -0
- package/src/main/lib/__tests__/definitionOfDoneSequence.test.cjs +95 -0
- package/src/main/lib/__tests__/delegationReadiness.test.cjs +1 -1
- package/src/main/lib/__tests__/dispatchLoop.test.cjs +63 -0
- package/src/main/lib/__tests__/gateFixtures.json +20 -0
- package/src/main/lib/__tests__/gitWorktree.test.cjs +8 -1
- package/src/main/lib/__tests__/instanceLock.test.cjs +93 -7
- package/src/main/lib/__tests__/jobSupervisorRecord.test.cjs +78 -0
- package/src/main/lib/__tests__/jobWorktreeBootLive.test.cjs +11 -0
- package/src/main/lib/__tests__/localAdminHttp.test.cjs +1 -1
- package/src/main/lib/__tests__/mcpToolCatalog.test.cjs +6 -1
- package/src/main/lib/__tests__/procIdentity.test.cjs +119 -0
- package/src/main/lib/__tests__/procName.test.cjs +92 -0
- package/src/main/lib/__tests__/queueStoreMachineStateRecovery.test.cjs +67 -0
- package/src/main/lib/__tests__/schedulerMcpServerHelp.test.cjs +6 -7
- package/src/main/lib/__tests__/schedulerMcpServerProjectHome.test.cjs +37 -204
- package/src/main/lib/__tests__/schedulerPaths.test.cjs +226 -0
- package/src/main/lib/__tests__/schedulerPathsWorktree.test.cjs +94 -0
- package/src/main/lib/__tests__/schedulerRuntimeState.test.cjs +56 -0
- package/src/main/lib/__tests__/sessionSlots.test.cjs +45 -0
- package/src/main/lib/__tests__/telemetryBacklog.test.cjs +1 -1
- package/src/main/lib/__tests__/upgradeDrain.test.cjs +130 -0
- package/src/main/lib/__tests__/usageCircuit.test.cjs +61 -0
- package/src/main/lib/__tests__/watchdog-helpers.test.cjs +63 -0
- package/src/main/lib/__tests__/watchdog-relaunch.test.cjs +73 -0
- package/src/main/lib/activeIndexRebuild.cjs +1 -3
- package/src/main/lib/activeSessions.cjs +20 -88
- package/src/main/lib/adoptedRunSupervisor.cjs +136 -0
- package/src/main/lib/agentModelResolve.cjs +33 -1
- package/src/main/lib/agentPersonaSchema.cjs +2 -2
- package/src/main/lib/auditLog.cjs +30 -5
- package/src/main/lib/buildIdentity.cjs +113 -0
- package/src/main/lib/classifyPromptTicket.cjs +3 -2
- package/src/main/lib/claudeBin.cjs +37 -2
- package/src/main/lib/cleanEnv.cjs +27 -1
- package/src/main/lib/credentials.cjs +4 -2
- package/src/main/lib/cwdClassify.cjs +185 -0
- package/src/main/lib/definitionOfDone.cjs +296 -52
- package/src/main/lib/dispatchLoop.cjs +40 -0
- package/src/main/lib/effectiveModelInfo.cjs +9 -10
- package/src/main/lib/ephemeralCwd.cjs +7 -28
- package/src/main/lib/gitWorktree.cjs +95 -8
- package/src/main/lib/guardShims.cjs +3 -3
- package/src/main/lib/historyRollup.cjs +6 -7
- package/src/main/lib/instanceLock.cjs +32 -5
- package/src/main/lib/jobSupervisorRecord.cjs +147 -0
- package/src/main/lib/jobWorktreeBootLive.cjs +9 -5
- package/src/main/lib/localAdminHttp.cjs +9 -27
- package/src/main/lib/mcpToolCatalog.cjs +29 -77
- package/src/main/lib/opsOwnership.cjs +27 -19
- package/src/main/lib/prdAuthoringSeed.cjs +36 -0
- package/src/main/lib/prdLocations.cjs +48 -1
- package/src/main/lib/procIdentity.cjs +126 -0
- package/src/main/lib/procName.cjs +98 -0
- package/src/main/lib/projectHomeAdminRoutes.cjs +56 -327
- package/src/main/lib/queueHistory.cjs +8 -7
- package/src/main/lib/queueStore.cjs +57 -37
- package/src/main/lib/quietMachineLease.cjs +19 -2
- package/src/main/lib/reservationExpiry.cjs +30 -0
- package/src/main/lib/runClaudeP.cjs +4 -2
- package/src/main/lib/runLogRetention.cjs +3 -2
- package/src/main/lib/scheduleJobSchema.cjs +2 -2
- package/src/main/lib/scheduleJobTransitions.cjs +29 -2
- package/src/main/lib/schedulerBatch.cjs +27 -2
- package/src/main/lib/schedulerPaths.cjs +175 -0
- package/src/main/lib/schedulerRuntimeState.cjs +59 -0
- package/src/main/lib/sessionSlots.cjs +47 -9
- package/src/main/lib/smProcNames.cjs +51 -0
- package/src/main/lib/upgradeDrain.cjs +188 -0
- package/src/main/lib/usageCircuit.cjs +53 -6
- package/src/main/lib/watchdogHelpers.cjs +70 -37
- package/src/main/lib/withTimeout.cjs +33 -0
- package/src/main/mcpStatus.cjs +4 -2
- package/src/main/pluginInstall.cjs +6 -2
- package/src/main/projectPages.cjs +41 -145
- package/src/main/pty.cjs +8 -1
- package/src/main/queueOps.cjs +10 -10
- package/src/main/runVerify.cjs +69 -3
- package/src/main/scheduler.cjs +1607 -383
- package/src/main/seedAgentPersonas.cjs +1 -1
- package/src/main/seedDevPlugin.cjs +1 -1
- package/src/main/seedSchedulerMcp.cjs +7 -6
- package/src/main/seedStatus.cjs +1 -1
- package/src/main/supervisor.cjs +5 -3
- package/src/main/usage.cjs +126 -62
- package/src/preload/api.d.ts +18 -64
- package/src/preload/index.cjs +2 -4
- package/src/seed/agents/project-home-builder.md +31 -48
- package/screenshots/.gitkeep +0 -0
- package/screenshots/README-screenshots.md +0 -13
- package/src/main/lib/projectPageSummarySchema.cjs +0 -181
- package/src/main/teams.cjs +0 -95
- package/src/main/templates/project-pages-catalog.json +0 -741
- package/src/main/templates/project-pages-default-home.html +0 -123
- package/src/main/templates/project-pages-pipeline.md +0 -417
- package/src/seed/prompts/code-review/ac-coverage-check.md +0 -8
- package/src/seed/prompts/code-review/correctness-only.md +0 -8
- package/src/seed/prompts/code-review/full-spectrum-high.md +0 -8
- package/src/seed/prompts/code-review/hallucination-check.md +0 -8
- package/src/seed/prompts/code-review/public-api-compat.md +0 -8
- package/src/seed/prompts/code-review/readability-naming.md +0 -8
- package/src/seed/prompts/debugging/bug-as-failing-test.md +0 -8
- package/src/seed/prompts/debugging/git-bisect-regression.md +0 -8
- package/src/seed/prompts/debugging/instrument-intermittent-bug.md +0 -8
- package/src/seed/prompts/debugging/localize-pipeline-failure.md +0 -8
- package/src/seed/prompts/debugging/reproduce-then-diagnose.md +0 -8
- package/src/seed/prompts/documentation/adr-from-change.md +0 -8
- package/src/seed/prompts/documentation/module-readme.md +0 -8
- package/src/seed/prompts/documentation/onboarding-plan.md +0 -8
- package/src/seed/prompts/documentation/refresh-claude-md.md +0 -8
- package/src/seed/prompts/documentation/tsdoc-public-exports.md +0 -8
- package/src/seed/prompts/git-pr/conventional-commit.md +0 -8
- package/src/seed/prompts/git-pr/draft-pr-title-body.md +0 -8
- package/src/seed/prompts/git-pr/pre-commit-safety-sweep.md +0 -8
- package/src/seed/prompts/git-pr/release-notes-block.md +0 -8
- package/src/seed/prompts/git-pr/split-large-pr.md +0 -8
- package/src/seed/prompts/performance/bundle-startup-audit.md +0 -8
- package/src/seed/prompts/performance/complexity-audit.md +0 -8
- package/src/seed/prompts/performance/cpu-profile-hot-path.md +0 -8
- package/src/seed/prompts/performance/db-query-plan-review.md +0 -8
- package/src/seed/prompts/performance/memory-leak-hunt.md +0 -8
- package/src/seed/prompts/qa/api-contract-tests.md +0 -8
- package/src/seed/prompts/qa/e2e-critical-path.md +0 -8
- package/src/seed/prompts/qa/failing-test-for-bug.md +0 -8
- package/src/seed/prompts/qa/find-missing-test-coverage.md +0 -8
- package/src/seed/prompts/qa/stabilize-flaky-test.md +0 -8
- package/src/seed/prompts/qa/tdd-red-first.md +0 -8
- package/src/seed/prompts/qa/visual-regression-review.md +0 -8
- package/src/seed/prompts/qa/wcag-axe-scan.md +0 -8
- package/src/seed/prompts/refactoring/dead-code-sweep.md +0 -8
- package/src/seed/prompts/refactoring/extract-duplicated-pattern.md +0 -8
- package/src/seed/prompts/refactoring/modernize-legacy-file.md +0 -8
- package/src/seed/prompts/refactoring/reduce-cyclomatic-complexity.md +0 -8
- package/src/seed/prompts/refactoring/tighten-module-boundaries.md +0 -8
- package/src/seed/prompts/security/authz-audit.md +0 -8
- package/src/seed/prompts/security/crypto-correctness.md +0 -8
- package/src/seed/prompts/security/cwe-top-25-hunt.md +0 -8
- package/src/seed/prompts/security/dependency-audit.md +0 -8
- package/src/seed/prompts/security/ipc-boundary-hardening.md +0 -8
- package/src/seed/prompts/security/owasp-top-10-staged-diff.md +0 -8
- package/src/seed/prompts/security/secret-credential-scan.md +0 -8
- package/web/README.md +0 -41
- package/web/project-pages/logic/dist/logic.cjs +0 -4709
- package/web/project-pages/render.cjs +0 -70
- package/web/project-pages/renderer/dist/renderer.cjs +0 -18900
- package/web/project-pages/validate-summary.cjs +0 -62
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
# Screenshots needed
|
|
2
|
-
|
|
3
|
-
The repo README references these six screenshots. Each one is a TODO — the
|
|
4
|
-
images do not exist yet. PNG, target 1500×950, under 200 KB each (pngquant).
|
|
5
|
-
|
|
6
|
-
1. **`overview-cockpit.png`** — TODO: capture this view. Overview tab full window. Captures AppStatusBar pills at the top, CockpitStrip, the two-by-five instrument grid, TeamsCard (if enabled), system row, and the quick-actions footer.
|
|
7
|
-
2. **`agent-view.png`** — TODO: capture this view. Agent-View tab with the animated workshop scene visible: subagent dock, plan whiteboard, todo board, and the SchedulerDock with at least one mini-bot active.
|
|
8
|
-
3. **`command-palette.png`** — TODO: capture this view. CommandPalette open over any tab, ideally with the scheduler section expanded to show several scheduler commands (Run now / Force tick / Lint queue).
|
|
9
|
-
4. **`scheduler.png`** — TODO: capture this view. Plans tab → PRDs sub-view. PRD list with multi-select checkboxes on the left, structured editor in the centre, queue-health findings panel visible.
|
|
10
|
-
5. **`voice.png`** — TODO: capture this view. Voice subsystem — either the MicWizard first-run dialog with device picker and sample utterance UI, or the in-tab voice settings panel with a live VAD trace.
|
|
11
|
-
6. **`hooks-events.png`** — TODO: capture this view. Hooks tab with the sidebar listing all 29 events and one event hovered to show the inline description tooltip from `hookEventDocs.ts`.
|
|
12
|
-
|
|
13
|
-
Total image budget across all six: roughly 1 MB so the npm tarball does not bloat.
|
|
@@ -1,181 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* projectPageSummarySchema.cjs — hand-authored JSON Schema description of
|
|
5
|
-
* `ProjectPageSummary` (src/renderer/lib/projectPages/summaryType.ts), for
|
|
6
|
-
* the /admin/project-home/contract route (PRD: project-home-admin-routes).
|
|
7
|
-
*
|
|
8
|
-
* This schema is DESCRIPTIVE, not the enforcement mechanism — the actual
|
|
9
|
-
* gate a posted summary must pass is `validateProjectPageSummary` (shipped
|
|
10
|
-
* in web/project-pages/logic/dist/logic.cjs, called by
|
|
11
|
-
* /admin/project-home/validate-summary and /admin/project-home/render).
|
|
12
|
-
* Kept hand-written rather than derived at runtime so the contract route
|
|
13
|
-
* never needs to load the TypeScript source; if summaryType.ts's shape
|
|
14
|
-
* changes, update this alongside it (same discipline as any other
|
|
15
|
-
* TS-type-mirrored constant in this codebase).
|
|
16
|
-
*/
|
|
17
|
-
|
|
18
|
-
const PROJECT_PAGE_SUMMARY_JSON_SCHEMA = Object.freeze({
|
|
19
|
-
$schema: 'http://json-schema.org/draft-07/schema#',
|
|
20
|
-
title: 'ProjectPageSummary',
|
|
21
|
-
type: 'object',
|
|
22
|
-
required: ['identity', 'stats', 'pillars', 'feature', 'architecture', 'quotes'],
|
|
23
|
-
properties: {
|
|
24
|
-
identity: {
|
|
25
|
-
type: 'object',
|
|
26
|
-
required: ['name', 'tag', 'version', 'oneLine', 'claim', 'sub', 'audience', 'install'],
|
|
27
|
-
properties: {
|
|
28
|
-
name: { type: 'string' },
|
|
29
|
-
tag: { type: 'string' },
|
|
30
|
-
version: { type: 'string' },
|
|
31
|
-
oneLine: { type: 'string' },
|
|
32
|
-
claim: { type: 'string' },
|
|
33
|
-
sub: { type: 'string' },
|
|
34
|
-
audience: { type: 'string' },
|
|
35
|
-
install: { type: 'string' },
|
|
36
|
-
},
|
|
37
|
-
description: 'Every string field must be non-empty and must not be the literal "TODO".',
|
|
38
|
-
},
|
|
39
|
-
stats: {
|
|
40
|
-
type: 'array',
|
|
41
|
-
items: {
|
|
42
|
-
type: 'object',
|
|
43
|
-
required: ['v', 'k', 'n'],
|
|
44
|
-
properties: { v: { type: 'string' }, k: { type: 'string' }, n: { type: 'string' } },
|
|
45
|
-
},
|
|
46
|
-
},
|
|
47
|
-
pillars: {
|
|
48
|
-
type: 'array',
|
|
49
|
-
items: {
|
|
50
|
-
type: 'object',
|
|
51
|
-
required: ['t', 'd', 'k'],
|
|
52
|
-
properties: { t: { type: 'string' }, d: { type: 'string' }, k: { type: 'string' } },
|
|
53
|
-
},
|
|
54
|
-
},
|
|
55
|
-
quotes: {
|
|
56
|
-
type: 'array',
|
|
57
|
-
description: 'Never fabricate testimonials — omit entirely rather than invent a quote.',
|
|
58
|
-
items: {
|
|
59
|
-
type: 'object',
|
|
60
|
-
required: ['q', 'a', 'r'],
|
|
61
|
-
properties: { q: { type: 'string' }, a: { type: 'string' }, r: { type: 'string' } },
|
|
62
|
-
},
|
|
63
|
-
},
|
|
64
|
-
feature: {
|
|
65
|
-
type: 'object',
|
|
66
|
-
required: ['name', 'kicker', 'status', 'owner', 'oneLine', 'problem', 'solution', 'steps', 'rules', 'specs', 'faq', 'timeline'],
|
|
67
|
-
properties: {
|
|
68
|
-
name: { type: 'string' },
|
|
69
|
-
kicker: { type: 'string' },
|
|
70
|
-
status: { type: 'string' },
|
|
71
|
-
owner: { type: 'string' },
|
|
72
|
-
oneLine: { type: 'string' },
|
|
73
|
-
problem: { type: 'string' },
|
|
74
|
-
solution: { type: 'string' },
|
|
75
|
-
steps: { type: 'array', items: { type: 'object', required: ['t', 'd'], properties: { t: { type: 'string' }, d: { type: 'string' } } } },
|
|
76
|
-
rules: { type: 'array', items: { type: 'object', required: ['t', 'd'], properties: { t: { type: 'string' }, d: { type: 'string' } } } },
|
|
77
|
-
specs: { type: 'array', items: { type: 'array', description: '[label, value, note]', items: { type: 'string' }, minItems: 3, maxItems: 3 } },
|
|
78
|
-
faq: { type: 'array', items: { type: 'object', required: ['q', 'a'], properties: { q: { type: 'string' }, a: { type: 'string' } } } },
|
|
79
|
-
timeline: {
|
|
80
|
-
type: 'array',
|
|
81
|
-
items: {
|
|
82
|
-
type: 'object',
|
|
83
|
-
required: ['w', 't', 's'],
|
|
84
|
-
properties: { w: { type: 'string' }, t: { type: 'string' }, s: { type: 'string', enum: ['done', 'next', 'idea'] } },
|
|
85
|
-
},
|
|
86
|
-
},
|
|
87
|
-
},
|
|
88
|
-
},
|
|
89
|
-
architecture: {
|
|
90
|
-
type: 'object',
|
|
91
|
-
required: ['summary', 'principles', 'layers', 'modules', 'flow', 'decisions', 'risks'],
|
|
92
|
-
properties: {
|
|
93
|
-
summary: { type: 'string' },
|
|
94
|
-
principles: { type: 'array', items: { type: 'object', required: ['t', 'd'], properties: { t: { type: 'string' }, d: { type: 'string' } } } },
|
|
95
|
-
layers: {
|
|
96
|
-
type: 'array',
|
|
97
|
-
items: {
|
|
98
|
-
type: 'object',
|
|
99
|
-
required: ['n', 'd', 'f', 'tone'],
|
|
100
|
-
properties: { n: { type: 'string' }, d: { type: 'string' }, f: { type: 'string' }, tone: { type: 'string', enum: ['accent', 'butter', 'sage', 'mute'] } },
|
|
101
|
-
},
|
|
102
|
-
},
|
|
103
|
-
modules: {
|
|
104
|
-
type: 'array',
|
|
105
|
-
items: {
|
|
106
|
-
type: 'object',
|
|
107
|
-
required: ['n', 'd', 'f', 'dep', 'heat'],
|
|
108
|
-
properties: { n: { type: 'string' }, d: { type: 'string' }, f: { type: 'number' }, dep: { type: 'array', items: { type: 'string' } }, heat: { type: 'number' } },
|
|
109
|
-
},
|
|
110
|
-
},
|
|
111
|
-
flow: {
|
|
112
|
-
type: 'array',
|
|
113
|
-
items: {
|
|
114
|
-
type: 'object',
|
|
115
|
-
required: ['a', 'b', 't', 'n'],
|
|
116
|
-
properties: { a: { type: 'string' }, b: { type: 'string' }, t: { type: 'string' }, n: { type: 'string' } },
|
|
117
|
-
},
|
|
118
|
-
},
|
|
119
|
-
decisions: {
|
|
120
|
-
type: 'array',
|
|
121
|
-
items: {
|
|
122
|
-
type: 'object',
|
|
123
|
-
required: ['id', 't', 'w', 's'],
|
|
124
|
-
properties: { id: { type: 'string' }, t: { type: 'string' }, w: { type: 'string' }, s: { type: 'string', enum: ['accepted', 'proposed', 'superseded'] } },
|
|
125
|
-
},
|
|
126
|
-
},
|
|
127
|
-
risks: {
|
|
128
|
-
type: 'array',
|
|
129
|
-
description: 'No clean source in the Brief — leave empty rather than invent.',
|
|
130
|
-
items: {
|
|
131
|
-
type: 'object',
|
|
132
|
-
required: ['t', 'd', 's'],
|
|
133
|
-
properties: { t: { type: 'string' }, d: { type: 'string' }, s: { type: 'string', enum: ['open', 'watching', 'mitigated'] } },
|
|
134
|
-
},
|
|
135
|
-
},
|
|
136
|
-
},
|
|
137
|
-
},
|
|
138
|
-
brief: {
|
|
139
|
-
type: 'object',
|
|
140
|
-
description: 'OPTIONAL — omit entirely when this project has no generated brief.json yet.',
|
|
141
|
-
required: ['purpose', 'what', 'areas', 'scope', 'conventions'],
|
|
142
|
-
properties: {
|
|
143
|
-
purpose: { type: 'string' },
|
|
144
|
-
what: { type: 'array', items: { type: 'string' } },
|
|
145
|
-
areas: {
|
|
146
|
-
type: 'array',
|
|
147
|
-
items: {
|
|
148
|
-
type: 'object',
|
|
149
|
-
required: ['name', 'files', 'note', 'epic', 'heat'],
|
|
150
|
-
properties: { name: { type: 'string' }, files: { type: 'number' }, note: { type: 'string' }, epic: { type: ['string', 'null'] }, heat: { type: 'number' } },
|
|
151
|
-
},
|
|
152
|
-
},
|
|
153
|
-
scope: {
|
|
154
|
-
type: 'array',
|
|
155
|
-
items: {
|
|
156
|
-
type: 'object',
|
|
157
|
-
required: ['when', 'kind', 'text', 'src'],
|
|
158
|
-
properties: { when: { type: 'string' }, kind: { type: 'string', enum: ['added', 'narrowed', 'decided'] }, text: { type: 'string' }, src: { type: 'string' } },
|
|
159
|
-
},
|
|
160
|
-
},
|
|
161
|
-
conventions: { type: 'array', items: { type: 'string' } },
|
|
162
|
-
},
|
|
163
|
-
},
|
|
164
|
-
},
|
|
165
|
-
});
|
|
166
|
-
|
|
167
|
-
// ProjectPagePicks — Record<lensId, Record<slotId, variantId>>. Matched
|
|
168
|
-
// against each lens's own catalog.slots[].variants[].id at render time by
|
|
169
|
-
// the renderer bundle itself, so this schema only bounds the wire shape.
|
|
170
|
-
const PROJECT_PAGE_PICKS_JSON_SCHEMA = Object.freeze({
|
|
171
|
-
$schema: 'http://json-schema.org/draft-07/schema#',
|
|
172
|
-
title: 'ProjectPagePicks',
|
|
173
|
-
type: 'object',
|
|
174
|
-
additionalProperties: {
|
|
175
|
-
type: 'object',
|
|
176
|
-
additionalProperties: { type: 'string' },
|
|
177
|
-
},
|
|
178
|
-
description: 'lensId -> slotId -> variantId. Every lensId/slotId/variantId must match one from the catalog.',
|
|
179
|
-
});
|
|
180
|
-
|
|
181
|
-
module.exports = { PROJECT_PAGE_SUMMARY_JSON_SCHEMA, PROJECT_PAGE_PICKS_JSON_SCHEMA };
|
package/src/main/teams.cjs
DELETED
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Teams enumerator — surfaces ~/.claude/teams/<name>/ to the renderer.
|
|
3
|
-
*
|
|
4
|
-
* Each team is a directory containing:
|
|
5
|
-
* - config.json: { name, description?, members: [{ name, agentType, model, cwd?, ... }], ... }
|
|
6
|
-
* - inboxes/<thread>.json: one file per pending message thread (depth = file count)
|
|
7
|
-
*
|
|
8
|
-
* We treat teams as feature-flagged: enabled when env.CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS === "1"
|
|
9
|
-
* is set in merged Claude settings. The renderer does its own check; this
|
|
10
|
-
* handler always returns the on-disk roster so the UI can keep recovering
|
|
11
|
-
* gracefully even if settings are unparseable.
|
|
12
|
-
*
|
|
13
|
-
* All reads route through config.cjs (validatePath + atomic semantics).
|
|
14
|
-
* Complexity: O(T·M) where T = teams and M = members; both are small (< 20).
|
|
15
|
-
*/
|
|
16
|
-
|
|
17
|
-
const { ipcMain } = require('electron');
|
|
18
|
-
const os = require('node:os');
|
|
19
|
-
const path = require('node:path');
|
|
20
|
-
const configMgr = require('./config.cjs');
|
|
21
|
-
const logs = require('./logs.cjs');
|
|
22
|
-
|
|
23
|
-
const TEAMS_ROOT = path.join(os.homedir(), '.claude', 'teams');
|
|
24
|
-
|
|
25
|
-
/**
|
|
26
|
-
* Enumerate teams. Returns { teams: TeamInfo[] }.
|
|
27
|
-
* Failures per-team (unreadable config.json, missing inbox dir) are swallowed —
|
|
28
|
-
* the team is included with whatever data we could recover. The renderer
|
|
29
|
-
* decides how to render incomplete entries.
|
|
30
|
-
*/
|
|
31
|
-
async function listTeams() {
|
|
32
|
-
let dir;
|
|
33
|
-
try {
|
|
34
|
-
dir = await configMgr.listDir(TEAMS_ROOT, { dirsOnly: true });
|
|
35
|
-
} catch {
|
|
36
|
-
// listDir throws when path is outside allowed boundaries — should not
|
|
37
|
-
// happen for ~/.claude/teams, but guard anyway.
|
|
38
|
-
return { teams: [] };
|
|
39
|
-
}
|
|
40
|
-
if (!dir.ok) {
|
|
41
|
-
if (dir.error) logs.writeLine({ level: 'warn', scope: 'teams', message: 'listDir failed', meta: { error: dir.error } });
|
|
42
|
-
return { teams: [] };
|
|
43
|
-
}
|
|
44
|
-
if (dir.entries.length === 0) return { teams: [] };
|
|
45
|
-
|
|
46
|
-
const teams = [];
|
|
47
|
-
for (const entry of dir.entries) {
|
|
48
|
-
const teamName = entry.name;
|
|
49
|
-
const configPath = path.join(entry.path, 'config.json');
|
|
50
|
-
const inboxDir = path.join(entry.path, 'inboxes');
|
|
51
|
-
|
|
52
|
-
let config = null;
|
|
53
|
-
try {
|
|
54
|
-
const r = await configMgr.readJson(configPath);
|
|
55
|
-
if (r.exists && !r.parseError) config = r.data;
|
|
56
|
-
} catch { /* unreadable — leave config null */ }
|
|
57
|
-
|
|
58
|
-
let inboxDepth = 0;
|
|
59
|
-
try {
|
|
60
|
-
const inbox = await configMgr.listDir(inboxDir, { filesOnly: true });
|
|
61
|
-
if (inbox.ok) {
|
|
62
|
-
inboxDepth = inbox.entries.filter((f) => f.name.endsWith('.json')).length;
|
|
63
|
-
}
|
|
64
|
-
} catch { /* no inbox dir is fine */ }
|
|
65
|
-
|
|
66
|
-
const members = Array.isArray(config?.members)
|
|
67
|
-
? config.members.map((m) => ({
|
|
68
|
-
name: typeof m?.name === 'string' ? m.name : 'unnamed',
|
|
69
|
-
agentType: typeof m?.agentType === 'string' ? m.agentType : null,
|
|
70
|
-
model: typeof m?.model === 'string' ? m.model : null,
|
|
71
|
-
}))
|
|
72
|
-
: [];
|
|
73
|
-
|
|
74
|
-
teams.push({
|
|
75
|
-
name: teamName,
|
|
76
|
-
configPath,
|
|
77
|
-
description: typeof config?.description === 'string' ? config.description : null,
|
|
78
|
-
leadAgentId: typeof config?.leadAgentId === 'string' ? config.leadAgentId : null,
|
|
79
|
-
members,
|
|
80
|
-
memberCount: members.length,
|
|
81
|
-
inboxDepth,
|
|
82
|
-
});
|
|
83
|
-
}
|
|
84
|
-
return { teams };
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
function registerTeamsHandlers() {
|
|
88
|
-
ipcMain.handle('teams:list', () => listTeams());
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
module.exports = {
|
|
92
|
-
registerTeamsHandlers,
|
|
93
|
-
// exported for direct use / tests
|
|
94
|
-
listTeams,
|
|
95
|
-
};
|