claude-code-session-manager 0.111.0 → 0.113.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-wvrcLGGS.js} +2 -2
- package/dist/assets/{Button-DsEYRZg0.js → Button-B6h0F0XT.js} +1 -1
- package/dist/assets/{DataModel-D8sbvvBC.js → DataModel-C5pW9E3u.js} +1 -1
- package/dist/assets/{History-BEHLtxia.js → History-BV4e8YOM.js} +2 -2
- package/dist/assets/{Hooks-CKpvlXrg.js → Hooks-CrFSv4x1.js} +3 -3
- package/dist/assets/{Library-CeF4qh9d.js → Library-D-GIt3EY.js} +5 -5
- package/dist/assets/{ListDetail-DcfmxPFk.js → ListDetail-Bco_wfs6.js} +1 -1
- package/dist/assets/{MarkdownEditor-CvK1pyto.js → MarkdownEditor-C-yHSXNV.js} +1 -1
- package/dist/assets/{McpServers-D-h2ihzJ.js → McpServers-CfDekadG.js} +2 -2
- package/dist/assets/{Memory-BnF89x8v.js → Memory-CGGLexkR.js} +4 -4
- package/dist/assets/{Panel-CQY5zano.js → Panel-DGMEuYYG.js} +1 -1
- package/dist/assets/{Permissions-DLukmmsz.js → Permissions-Cx2zjtYZ.js} +3 -3
- package/dist/assets/{Plugins-0Pf0OZ4l.js → Plugins-Bc_W3IyR.js} +2 -2
- package/dist/assets/ProvenanceBadge-DiKAUR1u.js +1 -0
- package/dist/assets/RemoteMachines-8_77-WPD.js +3 -0
- package/dist/assets/{SaveBar-DjijiUb0.js → SaveBar-Blpzdq1R.js} +1 -1
- package/dist/assets/{Scheduler-Cm3EXZvE.js → Scheduler-Bd70AM4X.js} +9 -9
- package/dist/assets/{ScopeSwitcher-B-P-kSfq.js → ScopeSwitcher-wxN0h4YW.js} +1 -1
- package/dist/assets/Settings-CQ7DA3zW.js +4 -0
- package/dist/assets/{SkillReferenceGraph-Epv2GJmj.js → SkillReferenceGraph-DH1NLOiS.js} +1 -1
- package/dist/assets/Skills-CmyRyu4_.js +2 -0
- package/dist/assets/SystemPrompt-KAc3UMCd.js +1 -0
- package/dist/assets/TagLibrary-C8EvHnpg.js +1 -0
- package/dist/assets/{TiptapBody-DAMO3DhO.js → TiptapBody-d423mH6D.js} +1 -1
- package/dist/assets/{Toggle-Ba_f7q_m.js → Toggle-D1wsGE9S.js} +1 -1
- package/dist/assets/{ViewTabs-CGX6MAhc.js → ViewTabs-CjHw3kGY.js} +1 -1
- package/dist/assets/{historyTotals-vgfk8EOL.js → historyTotals-DFHzqLt7.js} +1 -1
- package/dist/assets/{index-CPieAFsl.js → index-Ci1u018F.js} +266 -266
- package/dist/assets/{settingsSchema-D0FxNrTy.js → settingsSchema-Ctf3pZVI.js} +1 -1
- package/dist/assets/{useAgentsDirWatch-DCu6BNYN.js → useAgentsDirWatch-B1NBmOAe.js} +1 -1
- package/dist/assets/{useRemotePeers-D4cdJDyh.js → useRemotePeers-BHjSJs9D.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/plugins/session-manager-dev/skills/send-feedback/SKILL.md +13 -0
- 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 +27 -9
- 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 +30 -13
- package/src/main/config.cjs +20 -3
- 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 +50 -132
- package/src/main/ipcSchemas.cjs +13 -10
- package/src/main/lib/CLAUDE.md +48 -0
- package/src/main/lib/activeSessions.cjs +14 -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/claude/rateLimitDetect.cjs +54 -0
- package/src/main/lib/{rateLimitWindow.cjs → claude/rateLimitWindow.cjs} +24 -12
- package/src/main/lib/{runClaudeP.cjs → claude/runClaudeP.cjs} +1 -1
- package/src/main/lib/credentials.cjs +18 -92
- 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} +114 -16
- 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/feedback-remote/humanPromptLedger.cjs +93 -0
- 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/mcpToolCatalog.cjs +9 -3
- 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/{depSlugResolve.cjs → prd/depSlugResolve.cjs} +16 -1
- 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/scheduler/finalizeReason.cjs +30 -0
- package/src/main/lib/{fixChainDepth.cjs → scheduler/fixChainDepth.cjs} +1 -1
- package/src/main/lib/scheduler/flatSweepThrottle.cjs +17 -0
- 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/{runLogRetention.cjs → scheduler/runLogRetention.cjs} +34 -13
- package/src/main/lib/{scheduleJobTransitions.cjs → scheduler/scheduleJobTransitions.cjs} +3 -3
- package/src/main/lib/{schedulerBatch.cjs → scheduler/schedulerBatch.cjs} +9 -13
- 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} +12 -8
- package/src/main/lib/{telemetrySettings.cjs → telemetry/telemetrySettings.cjs} +1 -1
- package/src/main/lib/{atomicFs.cjs → util/atomicFs.cjs} +42 -0
- package/src/main/lib/{loopDelay.cjs → util/loopDelay.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 +6 -3
- 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 +331 -3320
- 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 +50 -27
- 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 +22 -7
- package/src/preload/api.d.ts +14 -8
- package/src/preload/index.cjs +9 -3
- package/dist/assets/ProvenanceBadge-vC7Tj-JP.js +0 -1
- package/dist/assets/RemoteMachines-CWnKbFHc.js +0 -3
- package/dist/assets/Settings-DYDlp2m_.js +0 -4
- package/dist/assets/Skills-DHO0N0C2.js +0 -2
- package/dist/assets/SystemPrompt-DxeNofL9.js +0 -1
- package/dist/assets/TagLibrary-QOAs7ISO.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/rateLimitDetect.cjs +0 -35
- /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/{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/{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/{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/{lruCache.cjs → util/lruCache.cjs} +0 -0
- /package/src/main/lib/{withTimeout.cjs → util/withTimeout.cjs} +0 -0
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: blog-for-project-feature:review
|
|
3
|
-
description: Step 7 of blog-for-project-feature — check the composed HTML against feature.config.yaml's gate list before reporting it ready. Loops back to :compose for content issues, :capture for screenshot gaps, or :illustrate for a mislabeled companion image; never ships on a failed gate.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# blog-for-project-feature:review
|
|
7
|
-
|
|
8
|
-
## Input
|
|
9
|
-
Path to the composed HTML (or html+folder) + output mode + size, from `:compose`.
|
|
10
|
-
|
|
11
|
-
## Steps
|
|
12
|
-
|
|
13
|
-
Check every item in `feature.config.yaml`'s `gates` list against the actual file:
|
|
14
|
-
|
|
15
|
-
1. Open it (or inspect its markup directly) and confirm every image reference resolves — for
|
|
16
|
-
base64-embedded images this means the data URI is present and non-empty; for the folder mode,
|
|
17
|
-
confirm each referenced file actually exists on disk.
|
|
18
|
-
2. Confirm zero placeholder/mockup images slipped through — cross-check every `kind: screenshot`
|
|
19
|
-
image against `:capture`'s reported real captures; anything not in that list is a violation.
|
|
20
|
-
If a companion illustration is present, confirm it's placed only in the Feature Description
|
|
21
|
-
header (never inside the Click-Through Demo) and is visually distinguishable from a real
|
|
22
|
-
screenshot (no fake window chrome/UI text) — if it could pass as a captured screen, that's a
|
|
23
|
-
violation too.
|
|
24
|
-
3. Confirm all three required sections are present and non-empty (or explicitly gap-noted per
|
|
25
|
-
`:compose` step 5, which is an acceptable non-empty state). The companion illustration is
|
|
26
|
-
optional — its absence is never a gate failure.
|
|
27
|
-
4. Confirm the section order matches `feature.config.yaml`'s `content.sections_required` —
|
|
28
|
-
Click-Through Demo leads the page (above the fold, before the prose sections), each visible
|
|
29
|
-
step showing its real image on top and the caption directly below it.
|
|
30
|
-
5. Confirm the demo is genuinely click-through — the next/prev or tab controls exist and their
|
|
31
|
-
JS actually switches the visible step (not just a cosmetic active-class flip with all steps
|
|
32
|
-
rendered stacked underneath).
|
|
33
|
-
6. Confirm no external network calls (grep for `http://`/`https://` in `<script src>`,
|
|
34
|
-
`<link href>`, `fetch(`, `@import` — should be none).
|
|
35
|
-
7. Confirm the size ceiling was respected for the mode chosen.
|
|
36
|
-
8. Spot-check 2-3 sentences in the Mission/Feature sections against `:research`'s notes for
|
|
37
|
-
traceability — flag anything that reads like invented marketing language.
|
|
38
|
-
|
|
39
|
-
## On failure
|
|
40
|
-
|
|
41
|
-
- **Content/structure issue** (sections, theme, controls, external calls, size) → loop back to
|
|
42
|
-
`:compose` with the specific gate that failed.
|
|
43
|
-
- **Screenshot issue** (missing/broken image, a step that needs re-capturing) → loop back to
|
|
44
|
-
`:capture` for that step specifically, then re-run `:compose` for just the affected step.
|
|
45
|
-
- **Illustration issue** (looks like a mockup/screenshot, placed in the wrong section) → loop
|
|
46
|
-
back to `:illustrate` for one more attempt, or drop it entirely and re-run `:compose` without it.
|
|
47
|
-
- Never mark the page ready with a known-failing gate "to save time" — a shorter honest page
|
|
48
|
-
beats a complete one that fails its own checklist.
|
|
49
|
-
|
|
50
|
-
## Output
|
|
51
|
-
|
|
52
|
-
On all-pass: report the final path, output mode, size, and step count to the user. State clearly
|
|
53
|
-
that publishing/uploading/deploying happens **only if explicitly asked next** — this step's job
|
|
54
|
-
ends at "ready," not "shipped."
|
|
@@ -1,144 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: blog-for-project-feature
|
|
3
|
-
description: Produce a self-contained, interactive HTML "feature showcase" for one project + one feature — Project Mission & Description, Feature Description (with an optional generated companion illustration), and a Click-Through Demo built from REAL screenshots (never mockups) — one aspect revealed at a time. Output is a single portable HTML file uploadable anywhere (no server, no build step). Distinct from blog-from-git (which drafts narrative bilko.run changelog posts from git history) — this is an evergreen, per-feature product page, not a dated post. Orchestrates 8 nested sub-skills (blog-for-project-feature:select, :research, :storyboard, :capture, :draft-copy, :illustrate, :compose, :review) so each step is independently invokable and inspectable. Use for "make a feature page for X", "showcase this feature", "/blog-for-project-feature", "interactive demo of X", or turning a shipped feature in Session Manager / Social Signal Builder (or any project) into something you can hand someone a link to.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# blog-for-project-feature (orchestrator)
|
|
7
|
-
|
|
8
|
-
Project-agnostic. Runs against whatever project the current working directory (or a named
|
|
9
|
-
project path) points to — built first for **Session Manager** and **Social Signal Builder**,
|
|
10
|
-
but nothing here is hardcoded to either.
|
|
11
|
-
|
|
12
|
-
**Not `blog-from-git`.** That skill drafts a dated, narrative bilko.run post from git activity
|
|
13
|
-
("here's what shipped this week"). This skill produces an **evergreen, single-feature product
|
|
14
|
-
page** — no date, no changelog framing, not tied to a publishing cadence. One project, one
|
|
15
|
-
feature, three things: what the project is for, what this feature does, and a real click-through
|
|
16
|
-
demo of it working. The two skills never share output or ledger state.
|
|
17
|
-
|
|
18
|
-
**`feature.config.yaml` in this folder is the grounding authority** for output conventions
|
|
19
|
-
(where the HTML lands, image size/compression limits, single-file-vs-folder default, theme
|
|
20
|
-
tokens). Read it first, before any sub-skill file. If prose here ever disagrees with the config,
|
|
21
|
-
the config wins.
|
|
22
|
-
|
|
23
|
-
## Pipeline DAG
|
|
24
|
-
|
|
25
|
-
```
|
|
26
|
-
project (+ optional feature name)
|
|
27
|
-
│
|
|
28
|
-
▼
|
|
29
|
-
┌───────────────────────────────┐
|
|
30
|
-
│ 0. blog-for-project-feature:select │──▶ one confirmed project + one confirmed feature
|
|
31
|
-
└───────────────────────────────┘
|
|
32
|
-
│
|
|
33
|
-
▼
|
|
34
|
-
┌───────────────────────────────┐
|
|
35
|
-
│ 1. :research │──▶ mission, feature description, key files/entry points
|
|
36
|
-
└───────────────────────────────┘
|
|
37
|
-
│
|
|
38
|
-
▼
|
|
39
|
-
┌───────────────────────────────┐
|
|
40
|
-
│ 2. :storyboard │──▶ ordered demo steps (action, expected screen, caption)
|
|
41
|
-
└───────────────────────────────┘
|
|
42
|
-
│
|
|
43
|
-
▼
|
|
44
|
-
┌───────────────────────────────┐
|
|
45
|
-
│ 3. :capture │──▶ real screenshots per step (+ storyboard corrections)
|
|
46
|
-
└───────────────────────────────┘ │ no real screenshot obtainable for a step
|
|
47
|
-
│ all steps captured ▼
|
|
48
|
-
▼ STOP — report which step blocked, don't fabricate
|
|
49
|
-
┌───────────────────────────────┐
|
|
50
|
-
│ 4. :draft-copy │──▶ FINAL mission/feature text + one-sentence "essence" line
|
|
51
|
-
└───────────────────────────────┘
|
|
52
|
-
│
|
|
53
|
-
▼
|
|
54
|
-
┌───────────────────────────────┐
|
|
55
|
-
│ 5. :illustrate │──▶ one companion illustration from the essence line
|
|
56
|
-
└───────────────────────────────┘ (or a clean "omitted" note — never blocks the pipeline)
|
|
57
|
-
│
|
|
58
|
-
▼
|
|
59
|
-
┌───────────────────────────────┐
|
|
60
|
-
│ 6. :compose │──▶ one self-contained interactive HTML file
|
|
61
|
-
└───────────────────────────────┘
|
|
62
|
-
│
|
|
63
|
-
▼
|
|
64
|
-
┌───────────────────────────────┐
|
|
65
|
-
│ 7. :review │──── fails a check ────┐
|
|
66
|
-
└───────────────────────────────┘ │
|
|
67
|
-
│ passes │
|
|
68
|
-
▼ │
|
|
69
|
-
report path, wait for explicit │
|
|
70
|
-
"publish/upload" instruction loop back to :compose / :capture / :illustrate
|
|
71
|
-
```
|
|
72
|
-
|
|
73
|
-
| Step | Input | Output | On failure |
|
|
74
|
-
|---|---|---|---|
|
|
75
|
-
| 0. `:select` | project (cwd or named) + optional feature hint | one confirmed project + one confirmed feature name + why it's demo-worthy | **STOP** — report if no clear feature can be confirmed (don't guess) |
|
|
76
|
-
| 1. `:research` | confirmed project + feature | mission/description (project-level), feature description, key files, how it actually works | n/a — always produces notes, flags gaps explicitly rather than inventing claims |
|
|
77
|
-
| 2. `:storyboard` | mission + feature notes | ordered list of `{step, action, expected_screen, capture_scope, caption}`, 5-10 steps, a deliberate mix of full-page and component-scoped shots | n/a — storyboard is a draft, `:capture` is allowed to correct it |
|
|
78
|
-
| 3. `:capture` | storyboard | one real screenshot file per step + any corrected captions | **STOP** on that step — report what's missing; never substitute a placeholder/mockup image |
|
|
79
|
-
| 4. `:draft-copy` | research notes + captured captions | final Mission & Feature Description prose + one-sentence essence line | n/a — always produces final text, gaps stay explicit |
|
|
80
|
-
| 5. `:illustrate` | the essence line (text must exist first) | one companion illustration, tagged distinct from screenshots — or an explicit omission note | never blocks — skips cleanly if no image generator is configured, or after one off-brief retry |
|
|
81
|
-
| 6. `:compose` | final copy + captured steps + optional illustration | one self-contained HTML file (or html+images folder per config) | loop back to `:capture` if a required image is missing, else fix and retry |
|
|
82
|
-
| 7. `:review` | the composed HTML | pass/fail against the gate below | loop back to `:compose` (content), `:capture` (screenshot), or `:illustrate` (mislabeled companion image) — never ship on a failed gate |
|
|
83
|
-
|
|
84
|
-
## Golden rule: screenshots are real or the step doesn't exist
|
|
85
|
-
|
|
86
|
-
This skill exists specifically because "feature demo" content is worthless if the images are
|
|
87
|
-
invented, stale, or from the wrong build. `:capture` uses `mcp__playwright__*` (or the project's
|
|
88
|
-
own screenshot tooling if `run`/a project skill already drives it — check for one first) against
|
|
89
|
-
a running instance of the actual project. If a step can't be captured for real (app won't start,
|
|
90
|
-
feature is behind auth you don't have, flow requires data that doesn't exist locally), **that
|
|
91
|
-
step is dropped and reported, not faked.** A shorter, honest demo beats a complete, fabricated one.
|
|
92
|
-
|
|
93
|
-
## Output
|
|
94
|
-
|
|
95
|
-
Default: one self-contained `.html` file (inline CSS/JS, base64-embedded images) written to
|
|
96
|
-
`docs/feature-showcase/<project-slug>-<feature-slug>.html` inside **`~/Projects/Bilko`** —
|
|
97
|
-
never inside the showcased project's own repo, even when the feature being showcased belongs
|
|
98
|
-
to a different project entirely. Bilko is the author/publisher of every showcase (same as
|
|
99
|
-
`blog-from-git`'s posts), is guaranteed to be locally writable across sessions, and these pages
|
|
100
|
-
are destined to eventually post to bilko.run — so output collects in one place from the start.
|
|
101
|
-
See `feature.config.yaml` for the exact path convention, size ceiling, and the single-file vs.
|
|
102
|
-
folder fallback (used when embedded images would blow past the size ceiling). This is what
|
|
103
|
-
"uploadable anywhere" means: no server, no relative asset paths, no build step — open the file
|
|
104
|
-
or drop it on any static host and it works.
|
|
105
|
-
|
|
106
|
-
**Only push, deploy, or upload when explicitly asked.** Report the local path and a one-line
|
|
107
|
-
description of what the page shows, and wait — same convention as `blog-from-git`'s seed gate
|
|
108
|
-
and `issue-address`'s "only push when asked" rule.
|
|
109
|
-
|
|
110
|
-
## Why nested skills instead of one inline pass
|
|
111
|
-
|
|
112
|
-
Same reasoning as `issue-address` and `pr-review-sweep`: each phase is a real, independently
|
|
113
|
-
invokable `SKILL.md` so progress is visible step by step ("storyboard produced 5 steps, capture
|
|
114
|
-
got 4 real screenshots, 1 dropped") instead of one opaque generation pass, and a single phase
|
|
115
|
-
(e.g. swapping the screenshot tool, changing the HTML theme) can be edited without touching the
|
|
116
|
-
others. If a step is still doing too much once this ships, decompose it further the same way
|
|
117
|
-
`issue-address:select` was (nested sub-DAG) — continuously, wherever one file covers too much to
|
|
118
|
-
inspect as one unit.
|
|
119
|
-
|
|
120
|
-
## Folder map
|
|
121
|
-
|
|
122
|
-
```
|
|
123
|
-
blog-for-project-feature/
|
|
124
|
-
feature.config.yaml ← output path convention, size ceiling, theme tokens — read first
|
|
125
|
-
SKILL.md ← this file: pipeline, DAG, output contract
|
|
126
|
-
0-select/SKILL.md
|
|
127
|
-
1-research/SKILL.md
|
|
128
|
-
2-storyboard/SKILL.md
|
|
129
|
-
3-capture/SKILL.md
|
|
130
|
-
4-draft-copy/SKILL.md
|
|
131
|
-
5-illustrate/SKILL.md
|
|
132
|
-
6-compose/SKILL.md
|
|
133
|
-
7-review/SKILL.md
|
|
134
|
-
```
|
|
135
|
-
|
|
136
|
-
## What this skill is not
|
|
137
|
-
|
|
138
|
-
- Not `blog-from-git` — no dated post, no rotation ledger, no git-diff scan. This is
|
|
139
|
-
feature-scoped and evergreen; that skill is time-scoped and narrative.
|
|
140
|
-
- Not a marketing copy generator — every claim in `:research`'s output must trace to real code,
|
|
141
|
-
docs, or a live screenshot, same evidentiary bar as `blog-from-git`'s `ground.md`.
|
|
142
|
-
- Not a full site generator — one feature, one page, per run. A project with N features worth
|
|
143
|
-
showcasing gets N runs (and, if wanted later, a separate index/landing skill — not built yet,
|
|
144
|
-
don't invent one inline).
|
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
# Grounding authority for blog-for-project-feature. Read this before any sub-skill file.
|
|
2
|
-
# If prose in a SKILL.md ever disagrees with this file, this file wins.
|
|
3
|
-
|
|
4
|
-
output:
|
|
5
|
-
# Path is relative to ~/Projects/Bilko (the Bilko repo) — ALWAYS, regardless of which
|
|
6
|
-
# project the showcased feature lives in. Bilko is the author/publisher of every showcase
|
|
7
|
-
# (same reason blog-from-git's posts live in Bilko, not in the project they're about) and
|
|
8
|
-
# these pages are destined to eventually be posted on bilko.run — Bilko is the one repo
|
|
9
|
-
# guaranteed to be locally writable across every session this skill runs in, and keeping
|
|
10
|
-
# output there means all showcases accumulate in one place instead of scattering across
|
|
11
|
-
# sibling repos. Never write the HTML into the target project's own repo.
|
|
12
|
-
base_repo: "~/Projects/Bilko"
|
|
13
|
-
path_template: "docs/feature-showcase/{project-slug}-{feature-slug}.html"
|
|
14
|
-
project_slug_rule: "kebab-case, the showcased project's own repo/registry slug (e.g. session-manager, signal-builder) — always prefixed so multi-project output never collides"
|
|
15
|
-
feature_slug_rule: "kebab-case, derived from the confirmed feature name in :select"
|
|
16
|
-
# Prefer one self-contained file. Only fall back to a folder when the size ceiling
|
|
17
|
-
# below would be exceeded by inlining images.
|
|
18
|
-
default_mode: single_file # single_file | folder
|
|
19
|
-
folder_fallback_layout:
|
|
20
|
-
html: "docs/feature-showcase/{project-slug}-{feature-slug}/index.html"
|
|
21
|
-
images: "docs/feature-showcase/{project-slug}-{feature-slug}/screenshots/"
|
|
22
|
-
single_file_size_ceiling_mb: 8 # switch to folder_fallback_layout above this
|
|
23
|
-
never_upload_or_deploy_without_explicit_ask: true
|
|
24
|
-
|
|
25
|
-
images:
|
|
26
|
-
format: png
|
|
27
|
-
max_width_px: 1600 # downscale before embedding; demo clarity, not pixel-perfect
|
|
28
|
-
compression: "reasonable lossy ok for PNG->WebP if it keeps text legible; never so lossy captions become unreadable"
|
|
29
|
-
source_of_truth: "mcp__playwright__browser_take_screenshot against a real running instance"
|
|
30
|
-
placeholder_or_mockup_images: forbidden # a dropped step beats a fabricated one
|
|
31
|
-
capture_scope: "full_page | component, chosen per step in :storyboard and executed in :capture.
|
|
32
|
-
Full-page screenshots are not always the clearest way to show a feature — a control or state
|
|
33
|
-
change is often clearer cropped to just that component. Default to component-scoped shots for
|
|
34
|
-
mechanism/detail steps; reserve full_page for orientation (where the feature lives) and
|
|
35
|
-
outcome (the result landing back in the real product) steps. See :storyboard's composition
|
|
36
|
-
recipe for the authoritative mix."
|
|
37
|
-
|
|
38
|
-
illustration:
|
|
39
|
-
# The ONE companion image, generated by :illustrate — a distinct image class from the
|
|
40
|
-
# click-through screenshots above. Optional: omitted cleanly if no generator is configured.
|
|
41
|
-
runs_after: draft-copy # never generate from anything but finalized copy
|
|
42
|
-
generator: "project-local generator if the target project has one, else Gemini
|
|
43
|
-
(gemini-2.5-flash-image via google-genai — same provider/pattern as Burrow's
|
|
44
|
-
app/shared/image_gen.py) using GEMINI_API_KEY / GOOGLE_API_KEY from the environment"
|
|
45
|
-
count: 1
|
|
46
|
-
placement: "Feature Description section header only — never inside the Click-Through Demo"
|
|
47
|
-
format: png
|
|
48
|
-
max_width_px: 1200
|
|
49
|
-
style: "conceptual/editorial illustration — mood/palette should follow the project's own
|
|
50
|
-
theme tokens above if it has brand colors, otherwise a clean flat/geometric style"
|
|
51
|
-
must_not_resemble: "a UI mockup, screenshot, or contain invented interface text/window chrome
|
|
52
|
-
— must be visually distinguishable from a real captured screen at a glance"
|
|
53
|
-
max_regeneration_attempts: 1
|
|
54
|
-
on_no_generator_available: "skip silently, no page-visible note, report to the operator only"
|
|
55
|
-
|
|
56
|
-
content:
|
|
57
|
-
sections_required:
|
|
58
|
-
# Order matters: this IS the on-page order, top to bottom.
|
|
59
|
-
- "Click-Through Demo" # LEADS the page — the storyboard steps, one aspect
|
|
60
|
-
# revealed at a time; screenshot on top, caption below
|
|
61
|
-
- "Project Mission & Description" # 2-4 sentences, from :research, project-level not feature-level
|
|
62
|
-
- "Feature Description" # what it does, why it matters, 1-2 short paragraphs
|
|
63
|
-
demo_interaction: "one-step-at-a-time reveal (next/prev controls or numbered tabs) — never a single long scroll dump of every screenshot at once. Each step: real image on top, caption directly below it."
|
|
64
|
-
demo_step_count: "5-10 steps (a mix of full_page and component-scoped captures — see :storyboard's composition recipe), not a flat full-page-per-step dump"
|
|
65
|
-
tone: "same plain, non-salesy, show-don't-tell bar as blog-from-git/voice.md bot-tell blocklist — no 'excited to share', no grand-implication filler"
|
|
66
|
-
caption_rule: "every screenshot has a one-sentence caption naming what changed on screen, not what the code does internally"
|
|
67
|
-
|
|
68
|
-
theme:
|
|
69
|
-
# Minimal neutral tokens so every showcase looks consistent without importing a design system.
|
|
70
|
-
# Swap these per-project only if the project has its own documented brand tokens.
|
|
71
|
-
font_stack: "system-ui, -apple-system, 'Segoe UI', sans-serif"
|
|
72
|
-
bg: "#0b0d10"
|
|
73
|
-
surface: "#15181d"
|
|
74
|
-
text: "#e8eaed"
|
|
75
|
-
text_muted: "#9aa0a6"
|
|
76
|
-
accent: "#5b9dff"
|
|
77
|
-
radius_px: 10
|
|
78
|
-
max_width_px: 900
|
|
79
|
-
|
|
80
|
-
gates:
|
|
81
|
-
# Checked in step 7 (:review). All must pass before reporting the page ready.
|
|
82
|
-
- "every image referenced actually loads (no broken src, no 404 in a local file:// open)"
|
|
83
|
-
- "zero placeholder/mockup images — every screenshot traces to a real :capture run"
|
|
84
|
-
- "if present, the companion illustration sits only in the Feature Description header and is
|
|
85
|
-
visually distinguishable from a real screenshot (no UI chrome/invented interface text)"
|
|
86
|
-
- "all three required sections present and non-empty (illustration is optional, never gates)"
|
|
87
|
-
- "demo is click-through (has working next/prev or tab controls), not a flat scroll"
|
|
88
|
-
- "file opens correctly via file:// with no console errors (network calls, external CDN fonts/JS forbidden — must be fully offline-capable)"
|
|
89
|
-
- "single_file_size_ceiling_mb respected, or folder fallback used instead"
|
|
90
|
-
- "no invented claims — every sentence in Mission/Feature sections traces to :research notes"
|
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: discover-features
|
|
3
|
-
description: >-
|
|
4
|
-
Propose and prototype NEW features for the current project. Reads the project's issues, PRs,
|
|
5
|
-
`main`, and md/docs to learn its objectives, then runs THREE independent discovery sessions
|
|
6
|
-
(each may also web-search for ideas) that every one proposes 5 high-level feature ideas best
|
|
7
|
-
fitting the project's goals — 15 total. Synthesises and ranks them, picks the top 3, and runs a
|
|
8
|
-
high-quality `/develop` build for each. Delivers a deployed URL per feature plus a validation
|
|
9
|
-
checklist so the human can try them — and NEVER opens a PR or a GitHub issue from a proposed
|
|
10
|
-
feature (the human validates first, then decides). Use when the user says "/discover-features",
|
|
11
|
-
"propose features", "discover feature opportunities", "what should we build next", "prototype
|
|
12
|
-
some new features for me to try". Keywords: discover, propose, feature, opportunity, ideation,
|
|
13
|
-
prototype, what's next, roadmap.
|
|
14
|
-
---
|
|
15
|
-
|
|
16
|
-
# /discover-features — propose → prototype → hand over URLs (no PRs)
|
|
17
|
-
|
|
18
|
-
**Role:** the *generative* counterpart to `/find-opportunity`. `/find-opportunity` triages the
|
|
19
|
-
*existing* backlog to pick the next issue to resolve; `/discover-features` *invents* net-new
|
|
20
|
-
features the backlog doesn't contain yet, prototypes the best ones, and hands the human running
|
|
21
|
-
URLs to validate. It is for "what should we build next?", not "which open issue next?".
|
|
22
|
-
|
|
23
|
-
**Hard rules (do not violate):**
|
|
24
|
-
- **Never open a PR or a GitHub issue** from a proposed feature. The deliverable is a *running,
|
|
25
|
-
validatable prototype on a branch* + a URL + a validation checklist — the human decides what
|
|
26
|
-
(if anything) becomes a PR. (See the `solve-dont-open-issues` principle.)
|
|
27
|
-
- **No fabricated data.** Prototypes run on the project's real data layer / real queries. If a
|
|
28
|
-
feature needs data that doesn't exist, it shows an honest empty state — never seeded fakes.
|
|
29
|
-
- **Don't touch `main`.** Build on a fresh branch (or worktrees) off the latest `main`.
|
|
30
|
-
- **Respect the conflict-skip sense** (from `/find-opportunity`): don't prototype something an
|
|
31
|
-
open PR is already building.
|
|
32
|
-
|
|
33
|
-
## Phase 0 — Ground in the project's objectives
|
|
34
|
-
|
|
35
|
-
Before ideating, learn what the project is *for* (so ideas fit, not just dazzle):
|
|
36
|
-
```bash
|
|
37
|
-
gh issue list --state open --limit 100 --json number,title,labels
|
|
38
|
-
gh pr list --state all --limit 60 --json number,title,headRefName,state
|
|
39
|
-
ls docs/ README.md AGENTS.md CLAUDE.md 2>/dev/null
|
|
40
|
-
```
|
|
41
|
-
Read the design docs / README / AGENTS for the mission, the north-star, the explicit
|
|
42
|
-
non-goals/constraints, and the data model. Extract a short **objectives + constraints** brief —
|
|
43
|
-
this is the anchor every discovery session and the ranking use.
|
|
44
|
-
|
|
45
|
-
## Phase 1 — THREE independent discovery sessions (fan-out)
|
|
46
|
-
|
|
47
|
-
Spawn **3 independent agents in parallel**. Each gets the objectives brief and is told to think
|
|
48
|
-
differently from the others (assign distinct stances, e.g. *user-value first* / *data-leverage
|
|
49
|
-
first* / *differentiation-&-novelty first*). Each agent:
|
|
50
|
-
- Re-reads the issues / PRs / `main` / docs itself (independent grounding, not just your brief).
|
|
51
|
-
- **May web-search** for ideas — comparable products, domain best-practice, what peer
|
|
52
|
-
civic/▢-tech projects ship — and bring back what genuinely fits.
|
|
53
|
-
- Returns **exactly 5 high-level feature ideas**, each with: one-line pitch; which project
|
|
54
|
-
objective it advances; the data/infra it leans on (must already exist or be honestly stubbable);
|
|
55
|
-
rough surface (new route/page is preferred so it's independently deployable + validatable); a
|
|
56
|
-
novelty/effort/impact read. Be creative — no artificial limits.
|
|
57
|
-
|
|
58
|
-
15 ideas total. Keep each agent blind to the others (diversity > consensus).
|
|
59
|
-
|
|
60
|
-
## Phase 2 — Synthesise & rank → top 3
|
|
61
|
-
|
|
62
|
-
Merge the 15. De-dupe near-identicals (keep the sharpest framing). Drop anything that: an open PR
|
|
63
|
-
already builds, needs data the project doesn't have, or is a multi-week epic that can't reach a
|
|
64
|
-
*validatable* prototype in one build. Rank the survivors by **objective-fit × user-value ×
|
|
65
|
-
prototype-feasibility**. Pick the **top 3**. State *why* each won and what you dropped (no silent
|
|
66
|
-
cuts). Prefer 3 that are independently deployable (separate routes) so the human can validate each
|
|
67
|
-
in isolation.
|
|
68
|
-
|
|
69
|
-
## Phase 3 — High-quality build of each top-3 feature
|
|
70
|
-
|
|
71
|
-
For each of the 3, run a `/develop` `quality: high`-style build (deep-check → plan → implement →
|
|
72
|
-
tests → self-validate). Build all three on **one branch** (or worktrees) so a single running app
|
|
73
|
-
serves all three. Wire each as its own route/page where possible. Real data via real queries;
|
|
74
|
-
honest empty states. Typecheck + the project's tests must pass before you call a feature done.
|
|
75
|
-
|
|
76
|
-
## Phase 4 — Deploy locally & hand over (NO PR)
|
|
77
|
-
|
|
78
|
-
Launch the project's dev server (or preview) so the features are reachable. Deliver, per feature:
|
|
79
|
-
- **The URL** it's live at (e.g. `http://localhost:<port>/<route>`).
|
|
80
|
-
- **What it does** in two lines + which objective it serves.
|
|
81
|
-
- **A validation checklist** — concrete things for the human to click/observe to judge it
|
|
82
|
-
("filter to sector X, confirm the sparkline matches the table total", "open on mobile width",
|
|
83
|
-
"try an entity with no data → honest empty state").
|
|
84
|
-
- Note any assumptions or stubs.
|
|
85
|
-
|
|
86
|
-
End with: the branch name (un-pushed), the 3 URLs, and "say which to keep → I'll turn those into
|
|
87
|
-
PRs." **Do not push or PR anything yourself.**
|
|
88
|
-
|
|
89
|
-
## Notes
|
|
90
|
-
- This skill is token-intensive by design (3 discovery sessions + 3 builds). Run it when the user
|
|
91
|
-
has explicitly asked for a feature-ideation+prototype round, typically as an overnight batch.
|
|
92
|
-
- If the dev server can only serve one branch at a time, that's fine — all three features share
|
|
93
|
-
the one branch and one server; give three routes/URLs on it.
|
|
94
|
-
- Keep ideas anchored to the project's actual objectives — a brilliant idea that fights the
|
|
95
|
-
mission is noise. Creativity in service of the goal, not despite it.
|
|
@@ -1,205 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: explain-to-me
|
|
3
|
-
description: >-
|
|
4
|
-
Build and maintain session-manager-operations/HUMAN_LEARN/ — a human-readable,
|
|
5
|
-
visually-rich HTML knowledge base at the repo root that explains how this
|
|
6
|
-
project actually works. Deep-probes the codebase for a given topic/component
|
|
7
|
-
(real file:line refs, real constants, real on-disk state — never invented),
|
|
8
|
-
then writes or updates a clean, self-contained HTML — one combined component
|
|
9
|
-
page (session-manager-operations/HUMAN_LEARN/index.html) plus a separate
|
|
10
|
-
skill-chain map (session-manager-operations/HUMAN_LEARN/SKILL_MAP.html) for
|
|
11
|
-
the local-dev workflow — with advanced CSS, flow diagrams, sticky nav,
|
|
12
|
-
collapsible tables. Use whenever the user says "/explain-to-me X", "explain X
|
|
13
|
-
to me", "explain how X works", "document X for me", "add X to HUMAN_LEARN",
|
|
14
|
-
"make me a human-readable page for X", or "update the skill map". Keywords:
|
|
15
|
-
explain, explain-to-me, human-learn, HUMAN_LEARN, skill map, document,
|
|
16
|
-
one-pager, how does X work, visual explainer, knowledge base.
|
|
17
|
-
model: opus
|
|
18
|
-
---
|
|
19
|
-
|
|
20
|
-
# explain-to-me
|
|
21
|
-
|
|
22
|
-
Turn a question about this codebase ("explain how the scheduler works") into a
|
|
23
|
-
**clean, visually-rich HTML one-pager** in `session-manager-operations/HUMAN_LEARN/`
|
|
24
|
-
at the repo root, and keep that folder's index coherent as it grows. The output
|
|
25
|
-
is for a *human* catching up on the project — not for the model. It is the
|
|
26
|
-
human-facing complement to the Memory tab (which is Claude's own terse recall
|
|
27
|
-
store). All session-manager per-project operations live under
|
|
28
|
-
`session-manager-operations/`.
|
|
29
|
-
|
|
30
|
-
The bar: **clean, explanatory, visually rich, self-contained** (opens directly in
|
|
31
|
-
a browser — no build, no external network deps). Every claim grounded in the
|
|
32
|
-
actual code.
|
|
33
|
-
|
|
34
|
-
**Document the CURRENT state, present-tense — never the journey.** A reader wants
|
|
35
|
-
to know *what the project is and how it works right now*, not how it got there.
|
|
36
|
-
This is a snapshot of the system as it stands today, not a changelog. So:
|
|
37
|
-
|
|
38
|
-
- **No PRD numbers, ticket ids, or commit refs** ("added in PRD 66", "schema
|
|
39
|
-
bumped to v3"). State the field/behavior as it simply *is* — `panels.ticker_metrics`
|
|
40
|
-
*carries* an `as_of` freshness field; don't say when or why it was added.
|
|
41
|
-
- **No evolution or "was X → now Y"** ("grew from 2 to 5 tools", "migrated off the
|
|
42
|
-
local cache", "reborn processed"). Describe the 5 tools that exist; the prior
|
|
43
|
-
count is irrelevant to someone reading today.
|
|
44
|
-
- **No incident/history narrative** ("the 06-10 churn incident", "the outage that
|
|
45
|
-
shaped this", "the bug we fixed"). If a guard exists, describe *what it guards*
|
|
46
|
-
in the present, not the failure that motivated it.
|
|
47
|
-
- **No migration tiers / in-flight roadmap / "gated" future work.** Document what
|
|
48
|
-
is true now; a thing that's being retired is just "internal, not on the public
|
|
49
|
-
surface" today.
|
|
50
|
-
|
|
51
|
-
Present-tense **design rationale is fine and useful** — *why the system is shaped
|
|
52
|
-
this way as it stands* (a tradeoff, a complexity bound, a boundary rule). That is
|
|
53
|
-
not history. The line is: explain the *standing* reason, never the *chronology*.
|
|
54
|
-
If you can't state it in the present tense without a date or a PRD, cut it.
|
|
55
|
-
|
|
56
|
-
## Where things live
|
|
57
|
-
|
|
58
|
-
- Repo root: `git rev-parse --show-toplevel` (fall back to cwd if not a git repo).
|
|
59
|
-
- Knowledge base: `<root>/session-manager-operations/HUMAN_LEARN/`. Create it
|
|
60
|
-
(and `session-manager-operations/` if needed) if missing.
|
|
61
|
-
- **One combined page** — `session-manager-operations/HUMAN_LEARN/index.html`.
|
|
62
|
-
Every component explainer is a `<section>` in this single file, under a sticky
|
|
63
|
-
section-nav, ordered so the page reads top-to-bottom as one narrative. A new
|
|
64
|
-
topic becomes a **new `<section>`**, never a new file. One navigable page that
|
|
65
|
-
logically follows itself beats a folder of thin pages; do not re-introduce
|
|
66
|
-
per-topic `.html` files.
|
|
67
|
-
- **The Skill Map** — `session-manager-operations/HUMAN_LEARN/SKILL_MAP.html`, a
|
|
68
|
-
**separate, dedicated** page (NOT a section of index.html) that visualizes the
|
|
69
|
-
*local-development skill chain*: the two intakes (interactive human prompt;
|
|
70
|
-
human-opened Epics in the app) converging on `/develop`, which owns
|
|
71
|
-
PRD authoring + reads `standards.md`, queues onto the scheduler, and gates with
|
|
72
|
-
review/verify. It is the "how I build on this
|
|
73
|
-
project" companion to index.html's "how this project works." index.html links
|
|
74
|
-
to it from the nav; it links back.
|
|
75
|
-
|
|
76
|
-
## Workflow
|
|
77
|
-
|
|
78
|
-
0. **Self-migrate a legacy root-level folder first.** If `HUMAN_LEARN/` exists
|
|
79
|
-
at the repo root **and** `session-manager-operations/HUMAN_LEARN/` does not,
|
|
80
|
-
relocate it now — `mkdir -p session-manager-operations` (if needed), then
|
|
81
|
-
`git mv HUMAN_LEARN session-manager-operations/HUMAN_LEARN` when the repo is
|
|
82
|
-
git-tracked, else a plain `mv`. This converges any project this skill runs
|
|
83
|
-
in to the new layout even if its bulk-relocation PRD hasn't landed yet.
|
|
84
|
-
1. **Locate & survey.** Find the repo root + `session-manager-operations/HUMAN_LEARN/`.
|
|
85
|
-
If `index.html` exists, read it to see what's already documented — you are
|
|
86
|
-
*maintaining* a knowledge base, not starting fresh. If the topic already has
|
|
87
|
-
a page/section, you are updating it, not duplicating it.
|
|
88
|
-
2. **Deep-probe the topic.** Read the real code. Gather exact `file:line`
|
|
89
|
-
references, real constant names + values, and real on-disk state where it
|
|
90
|
-
matters (run `ls`/`cat`/`jq` to ground claims in what actually exists). For a
|
|
91
|
-
broad topic, fan out parallel `Explore` subagents over the relevant
|
|
92
|
-
subsystems and collect the conclusions. **Never invent** a path, constant, or
|
|
93
|
-
behavior — if you can't verify it, don't write it.
|
|
94
|
-
3. **Decide placement.** A component/subsystem topic → a new (or edited) `<section>`
|
|
95
|
-
in `index.html`, slotted into the narrative order. The dev skill chain → it's in
|
|
96
|
-
`SKILL_MAP.html`. Re-explaining an existing topic → edit that section in place,
|
|
97
|
-
refresh the "generated" date. Never spin up a new per-topic `.html`.
|
|
98
|
-
4. **Write the HTML.** Use the design system below — both pages share the same tokens
|
|
99
|
-
and components so they read as one product. A page must be self-contained (inline
|
|
100
|
-
`<style>`, no external fonts/scripts/CDNs). Lead with what the thing *is* and *when
|
|
101
|
-
it runs*, then the step-by-step flow with `file:line` tags, then the knobs (a
|
|
102
|
-
collapsible constants table), then the present-tense design rationale ("why
|
|
103
|
-
it's shaped this way" as it *stands* — a standing tradeoff/bound, never a dated
|
|
104
|
-
history or a PRD).
|
|
105
|
-
5. **Wire the navigation.** Add/refresh the topic's pill in `index.html`'s sticky
|
|
106
|
-
section-nav (and the footer's source-file list). Keep the nav and `SKILL_MAP.html`
|
|
107
|
-
cross-links intact: index.html's nav has a "⛓ Skill Map ↗" link, SKILL_MAP.html's
|
|
108
|
-
nav links back to "📖 HUMAN_LEARN".
|
|
109
|
-
6. **Maintain the Skill Map.** When the local-dev skills/commands change — a new skill
|
|
110
|
-
in `~/.claude/skills/`, a changed Role/Never contract, a re-routed step in the
|
|
111
|
-
chain — refresh `SKILL_MAP.html` (its chain diagram + the role-contract table +
|
|
112
|
-
the two walkthroughs) so it stays a faithful map of the actual files on disk.
|
|
113
|
-
7. **Tell the user the path** to open (`session-manager-operations/HUMAN_LEARN/index.html`
|
|
114
|
-
or `session-manager-operations/HUMAN_LEARN/SKILL_MAP.html`, optionally with a
|
|
115
|
-
`#anchor`). Do not commit unless asked.
|
|
116
|
-
|
|
117
|
-
## Grounding rules (non-negotiable)
|
|
118
|
-
|
|
119
|
-
- Every behavioral claim cites a real `file:line`. Spot-check by reading the
|
|
120
|
-
cited line before writing it.
|
|
121
|
-
- Constants show their real values from the source, not approximations.
|
|
122
|
-
- "On disk" claims are verified with a real command first.
|
|
123
|
-
- If two sources disagree (e.g. a stale CLAUDE.md vs the code), trust the code
|
|
124
|
-
and note the discrepancy.
|
|
125
|
-
|
|
126
|
-
## Maintenance
|
|
127
|
-
|
|
128
|
-
- Idempotent: re-running for the same topic updates that `<section>` (and its nav
|
|
129
|
-
pill) in place — it never appends a duplicate or spawns a new file.
|
|
130
|
-
- Never clobber unrelated sections. Edit the one section the topic owns.
|
|
131
|
-
- Refresh the footer "generated <date>" and the source-file list on each update.
|
|
132
|
-
- HUMAN_LEARN holds exactly two pages: `index.html` (components, one combined page)
|
|
133
|
-
and `SKILL_MAP.html` (the dev skill chain). They cross-link via their navs. Don't
|
|
134
|
-
add a third page.
|
|
135
|
-
|
|
136
|
-
## Design system
|
|
137
|
-
|
|
138
|
-
Reuse these tokens and patterns verbatim so every page looks like one product.
|
|
139
|
-
A complete, copy-ready exemplar lives at `assets/style-reference.html` next to
|
|
140
|
-
this file — **read it and mirror its structure/CSS** for any new page. The
|
|
141
|
-
essentials:
|
|
142
|
-
|
|
143
|
-
**Palette + base** (inline `<style>`, dark theme):
|
|
144
|
-
|
|
145
|
-
```css
|
|
146
|
-
:root{
|
|
147
|
-
--bg:#0d1117; --panel:#161b22; --panel2:#1c2330; --line:#2d333b;
|
|
148
|
-
--fg:#e6edf3; --dim:#9da7b3; --faint:#6e7681;
|
|
149
|
-
--blue:#60a5fa; --green:#34d399; --amber:#fbbf24; --violet:#a78bfa;
|
|
150
|
-
--pink:#f472b6; --red:#f87171; --cyan:#22d3ee;
|
|
151
|
-
--mono:ui-monospace,'SF Mono',Menlo,Consolas,monospace;
|
|
152
|
-
}
|
|
153
|
-
*{box-sizing:border-box;margin:0;padding:0}
|
|
154
|
-
html{scroll-behavior:smooth}
|
|
155
|
-
body{background:var(--bg);color:var(--fg);
|
|
156
|
-
font:15px/1.6 ui-sans-serif,system-ui,sans-serif;padding:0 20px 80px}
|
|
157
|
-
.wrap{max-width:980px;margin:0 auto}
|
|
158
|
-
code{font-family:var(--mono);font-size:12.5px;background:var(--panel2);
|
|
159
|
-
border:1px solid var(--line);border-radius:4px;padding:1px 5px}
|
|
160
|
-
pre{font-family:var(--mono);font-size:12px;background:var(--panel);
|
|
161
|
-
border:1px solid var(--line);border-radius:8px;padding:14px 16px;overflow-x:auto}
|
|
162
|
-
```
|
|
163
|
-
|
|
164
|
-
**Component patterns** (use the ones the topic needs — don't force all of them):
|
|
165
|
-
|
|
166
|
-
- **`.loc` chip** — a cyan monospace pill for every `file:line` reference. This is
|
|
167
|
-
the signature element: claims are traceable.
|
|
168
|
-
`font:11px var(--mono);color:var(--cyan);background:rgba(34,211,238,.08);
|
|
169
|
-
border:1px solid rgba(34,211,238,.25);border-radius:99px;padding:1px 9px`
|
|
170
|
-
- **`.proc` badge** — colored uppercase pill marking *where* a step runs
|
|
171
|
-
(e.g. shell hook / main process / subprocess / renderer / disk / network). One
|
|
172
|
-
color per layer; show a legend once near the top.
|
|
173
|
-
- **Sticky section nav** — for multi-section pages: a `position:sticky;top:0`
|
|
174
|
-
bar with `backdrop-filter:blur(6px)` and pill links to each `#section`.
|
|
175
|
-
- **Flow diagram** — a horizontal row of `.box` cards joined by `→` arrows for a
|
|
176
|
-
pipeline, OR a numbered vertical "stage" stack for a deeper step-by-step. Each
|
|
177
|
-
box: a title, a one-line what, and a `.where` `file:line`. Color the top border
|
|
178
|
-
by the layer it runs in.
|
|
179
|
-
- **Stat strip** — a row of big-number cards for the load-bearing figures
|
|
180
|
-
(counts, caps, sizes) pulled from real state.
|
|
181
|
-
- **Callout** — left-border tinted block for "the key insight" / "the caveat"
|
|
182
|
-
(`.ok` green, `.bad` red, default amber).
|
|
183
|
-
- **Collapsible constants table** — `<details><summary>` wrapping a table of
|
|
184
|
-
`constant · value · file:line · what it bounds`. Keeps the page scannable.
|
|
185
|
-
- **Two-column rationale** — a `grid-template-columns:1fr 1fr` "why it's shaped
|
|
186
|
-
this way" section, collapsing to one column under `@media(max-width:760px)`.
|
|
187
|
-
- **Footer** — muted, lists the exact source files the page was distilled from +
|
|
188
|
-
"generated <date>".
|
|
189
|
-
|
|
190
|
-
**Advanced techniques to deploy** (tasteful, not gratuitous): CSS grid layouts,
|
|
191
|
-
`position:sticky` nav, `scroll-behavior:smooth` + anchor links, `backdrop-filter`,
|
|
192
|
-
`<details>`/`<summary>` for progressive disclosure, responsive `@media`
|
|
193
|
-
breakpoints, CSS-only flow diagrams (borders + flex, no images), subtle
|
|
194
|
-
`transition`/`:hover` affordances on cards. **No** external fonts, scripts, CDNs,
|
|
195
|
-
or build step — every page is one self-contained `.html` file.
|
|
196
|
-
|
|
197
|
-
## What good looks like
|
|
198
|
-
|
|
199
|
-
Lead with the outcome (what the thing *is*, when it runs). Make the flow the
|
|
200
|
-
centerpiece. Tag everything with `file:line`. Surface the real numbers. Give the
|
|
201
|
-
present-tense design rationale where it helps (the *standing* tradeoff or
|
|
202
|
-
constraint that makes the shape make sense) — but **no chronology**: no PRD
|
|
203
|
-
numbers, no "was X → now Y", no incident/migration history, no roadmap. A reader
|
|
204
|
-
should learn what the project *is* today, not how it got here. Keep prose tight
|
|
205
|
-
and in complete sentences — visually rich, not noisy.
|