panopticon-cli 0.5.8 → 0.5.10
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 +29 -83
- package/dist/{agents-I6RAEGL5.js → agents-MOMDECON.js} +8 -6
- package/dist/{archive-planning-U3AZAKWI.js → archive-planning-54J6EP6A.js} +3 -3
- package/dist/{chunk-UKSGE6RH.js → chunk-3KYTNMSE.js} +1 -2
- package/dist/{chunk-UKSGE6RH.js.map → chunk-3KYTNMSE.js.map} +1 -1
- package/dist/{chunk-M6ZVVKZ3.js → chunk-4OQ4SXQZ.js} +219 -107
- package/dist/chunk-4OQ4SXQZ.js.map +1 -0
- package/dist/{chunk-ZMJFEHGF.js → chunk-7ZB5D46Y.js} +2 -2
- package/dist/{chunk-ZMJFEHGF.js.map → chunk-7ZB5D46Y.js.map} +1 -1
- package/dist/{chunk-BYWVPPAZ.js → chunk-BHRMW7BY.js} +31 -4
- package/dist/chunk-BHRMW7BY.js.map +1 -0
- package/dist/{chunk-WEQW3EAT.js → chunk-F4XS2FQN.js} +3 -2
- package/dist/chunk-F4XS2FQN.js.map +1 -0
- package/dist/{chunk-OJF4QS3S.js → chunk-GIW2TUWI.js} +2 -2
- package/dist/{chunk-SUM2WVPF.js → chunk-H7T35QDO.js} +30 -12
- package/dist/chunk-H7T35QDO.js.map +1 -0
- package/dist/{chunk-MJXYTGK5.js → chunk-JZWCL5S5.js} +2 -2
- package/dist/{chunk-ZN5RHWGR.js → chunk-PFA5XE2V.js} +5 -41
- package/dist/chunk-PFA5XE2V.js.map +1 -0
- package/dist/{chunk-6OYUJ4AJ.js → chunk-R47UJWF6.js} +2 -2
- package/dist/{chunk-NYOGHGIW.js → chunk-RCYJK3ZC.js} +10 -9
- package/dist/chunk-RCYJK3ZC.js.map +1 -0
- package/dist/{chunk-R4KPLLRB.js → chunk-SFX3BG6N.js} +1 -1
- package/dist/chunk-SFX3BG6N.js.map +1 -0
- package/dist/{chunk-IZIXJYXZ.js → chunk-TA5X4QYQ.js} +6 -2
- package/dist/{chunk-IZIXJYXZ.js.map → chunk-TA5X4QYQ.js.map} +1 -1
- package/dist/{chunk-43F4LDZ4.js → chunk-VVTAPQOI.js} +2 -2
- package/dist/{chunk-YAAT66RT.js → chunk-WP6ZLWU3.js} +28 -3
- package/dist/chunk-WP6ZLWU3.js.map +1 -0
- package/dist/clean-planning-V4SSVU26.js +9 -0
- package/dist/cli/index.js +1654 -1056
- package/dist/cli/index.js.map +1 -1
- package/dist/close-issue-5OMOP2FU.js +9 -0
- package/dist/compact-beads-YQDVF6FQ.js +9 -0
- package/dist/dashboard/prompts/inspect-agent.md +157 -0
- package/dist/dashboard/prompts/merge-agent.md +11 -0
- package/dist/dashboard/prompts/review-agent.md +9 -0
- package/dist/dashboard/prompts/test-agent.md +9 -0
- package/dist/dashboard/prompts/uat-agent.md +215 -0
- package/dist/dashboard/prompts/work-agent.md +53 -5
- package/dist/dashboard/public/assets/index-5hYjhhGn.js +826 -0
- package/dist/dashboard/public/assets/index-DIFh3T1V.css +32 -0
- package/dist/dashboard/public/index.html +3 -6
- package/dist/dashboard/server.js +3338 -2033
- package/dist/factory-KKT7324R.js +20 -0
- package/dist/{feedback-writer-T2WCT6EZ.js → feedback-writer-IPPIUPDX.js} +2 -2
- package/dist/feedback-writer-IPPIUPDX.js.map +1 -0
- package/dist/index.d.ts +8 -3
- package/dist/index.js +19 -19
- package/dist/{label-cleanup-4HJVX6NP.js → label-cleanup-4IVZIPGK.js} +2 -2
- package/dist/{merge-agent-ZITLVF2B.js → merge-agent-6YOMGQMX.js} +16 -16
- package/dist/{projects-3CRF57ZU.js → projects-BPGM6IFB.js} +2 -2
- package/dist/{remote-workspace-M4IULGFZ.js → remote-workspace-LKRDGYEB.js} +2 -2
- package/dist/{review-status-J2YJGL3E.js → review-status-E77PZZWG.js} +2 -2
- package/dist/{specialist-context-W25PPWM4.js → specialist-context-GVF4DV3M.js} +5 -5
- package/dist/{specialist-logs-KPC45SZN.js → specialist-logs-W47SAAIU.js} +5 -5
- package/dist/{specialists-H4LGYR7R.js → specialists-SIXRWCZ3.js} +5 -5
- package/dist/{traefik-QXLZ4PO2.js → traefik-X2IWTUHO.js} +3 -3
- package/dist/{workspace-manager-G6TTBPC3.js → workspace-manager-Z57ROWBQ.js} +2 -2
- package/dist/workspace-manager-Z57ROWBQ.js.map +1 -0
- package/package.json +1 -1
- package/scripts/inspect-on-bead-close +73 -0
- package/scripts/stop-hook +17 -0
- package/skills/pan-new-project/SKILL.md +1 -1
- package/skills/pan-oversee/SKILL.md +45 -10
- package/skills/plan/SKILL.md +336 -0
- package/dist/chunk-BYWVPPAZ.js.map +0 -1
- package/dist/chunk-M6ZVVKZ3.js.map +0 -1
- package/dist/chunk-NYOGHGIW.js.map +0 -1
- package/dist/chunk-R4KPLLRB.js.map +0 -1
- package/dist/chunk-SUM2WVPF.js.map +0 -1
- package/dist/chunk-WEQW3EAT.js.map +0 -1
- package/dist/chunk-YAAT66RT.js.map +0 -1
- package/dist/chunk-ZN5RHWGR.js.map +0 -1
- package/dist/clean-planning-7Z5YY64X.js +0 -9
- package/dist/close-issue-CTZK777I.js +0 -9
- package/dist/compact-beads-72SHALOL.js +0 -9
- package/dist/dashboard/public/assets/index-Bx4NCn9A.css +0 -32
- package/dist/dashboard/public/assets/index-C7hJ5-o1.js +0 -756
- package/dist/feedback-writer-T2WCT6EZ.js.map +0 -1
- package/skills/opus-plan/SKILL.md +0 -400
- /package/dist/{agents-I6RAEGL5.js.map → agents-MOMDECON.js.map} +0 -0
- /package/dist/{archive-planning-U3AZAKWI.js.map → archive-planning-54J6EP6A.js.map} +0 -0
- /package/dist/{chunk-OJF4QS3S.js.map → chunk-GIW2TUWI.js.map} +0 -0
- /package/dist/{chunk-MJXYTGK5.js.map → chunk-JZWCL5S5.js.map} +0 -0
- /package/dist/{chunk-6OYUJ4AJ.js.map → chunk-R47UJWF6.js.map} +0 -0
- /package/dist/{chunk-43F4LDZ4.js.map → chunk-VVTAPQOI.js.map} +0 -0
- /package/dist/{clean-planning-7Z5YY64X.js.map → clean-planning-V4SSVU26.js.map} +0 -0
- /package/dist/{close-issue-CTZK777I.js.map → close-issue-5OMOP2FU.js.map} +0 -0
- /package/dist/{compact-beads-72SHALOL.js.map → compact-beads-YQDVF6FQ.js.map} +0 -0
- /package/dist/{projects-3CRF57ZU.js.map → factory-KKT7324R.js.map} +0 -0
- /package/dist/{label-cleanup-4HJVX6NP.js.map → label-cleanup-4IVZIPGK.js.map} +0 -0
- /package/dist/{merge-agent-ZITLVF2B.js.map → merge-agent-6YOMGQMX.js.map} +0 -0
- /package/dist/{review-status-J2YJGL3E.js.map → projects-BPGM6IFB.js.map} +0 -0
- /package/dist/{remote-workspace-M4IULGFZ.js.map → remote-workspace-LKRDGYEB.js.map} +0 -0
- /package/dist/{specialist-logs-KPC45SZN.js.map → review-status-E77PZZWG.js.map} +0 -0
- /package/dist/{specialist-context-W25PPWM4.js.map → specialist-context-GVF4DV3M.js.map} +0 -0
- /package/dist/{specialists-H4LGYR7R.js.map → specialist-logs-W47SAAIU.js.map} +0 -0
- /package/dist/{traefik-QXLZ4PO2.js.map → specialists-SIXRWCZ3.js.map} +0 -0
- /package/dist/{workspace-manager-G6TTBPC3.js.map → traefik-X2IWTUHO.js.map} +0 -0
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import {
|
|
2
|
+
createTracker,
|
|
3
|
+
createTrackerFromConfig,
|
|
4
|
+
getAllTrackers,
|
|
5
|
+
getPrimaryTracker,
|
|
6
|
+
getSecondaryTracker,
|
|
7
|
+
init_factory
|
|
8
|
+
} from "./chunk-3KYTNMSE.js";
|
|
9
|
+
import "./chunk-ZP6EWSZV.js";
|
|
10
|
+
import "./chunk-DMRTN432.js";
|
|
11
|
+
import "./chunk-ZHC57RCV.js";
|
|
12
|
+
init_factory();
|
|
13
|
+
export {
|
|
14
|
+
createTracker,
|
|
15
|
+
createTrackerFromConfig,
|
|
16
|
+
getAllTrackers,
|
|
17
|
+
getPrimaryTracker,
|
|
18
|
+
getSecondaryTracker
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=factory-KKT7324R.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
init_projects,
|
|
3
3
|
resolveProjectFromIssue
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-7ZB5D46Y.js";
|
|
5
5
|
import "./chunk-ZTFNYOC7.js";
|
|
6
6
|
import {
|
|
7
7
|
__esm,
|
|
@@ -112,4 +112,4 @@ init_feedback_writer();
|
|
|
112
112
|
export {
|
|
113
113
|
writeFeedbackFile
|
|
114
114
|
};
|
|
115
|
-
//# sourceMappingURL=feedback-writer-
|
|
115
|
+
//# sourceMappingURL=feedback-writer-IPPIUPDX.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/lib/cloister/feedback-writer.ts"],"sourcesContent":["/**\n * Feedback Writer — writes specialist feedback to workspace files.\n *\n * All specialist feedback (review, test, merge) is written to\n * .planning/feedback/ in the workspace, with a breadcrumb in STATE.md.\n * The work agent reads these on startup or after crash recovery.\n *\n * All I/O is async (fs/promises) — never execSync.\n */\n\nimport { writeFile, readFile, mkdir, readdir } from 'fs/promises';\nimport { existsSync } from 'fs';\nimport { join } from 'path';\nimport { resolveProjectFromIssue } from '../projects.js';\n\nexport interface WriteFeedbackOptions {\n issueId: string;\n workspacePath?: string;\n specialist: 'verification-gate' | 'review-agent' | 'test-agent' | 'inspect-agent' | 'uat-agent' | 'merge-agent';\n outcome: string;\n summary: string;\n markdownBody: string;\n}\n\nexport interface WriteFeedbackResult {\n success: boolean;\n /** Relative path from workspace root */\n relativePath?: string;\n /** Absolute path */\n filePath?: string;\n error?: string;\n}\n\n/**\n * Resolve workspace path from an issue ID.\n */\nfunction resolveWorkspacePath(issueId: string): string | null {\n const resolved = resolveProjectFromIssue(issueId);\n if (!resolved) return null;\n\n const wsPath = join(resolved.projectPath, 'workspaces', `feature-${issueId.toLowerCase()}`);\n return existsSync(wsPath) ? wsPath : null;\n}\n\n/**\n * Get the next sequence number from existing files in the feedback directory.\n */\nasync function getNextSequenceNumber(feedbackDir: string): Promise<number> {\n try {\n const files = await readdir(feedbackDir);\n let max = 0;\n for (const file of files) {\n const match = file.match(/^(\\d{3})-/);\n if (match) {\n const n = parseInt(match[1], 10);\n if (n > max) max = n;\n }\n }\n return max + 1;\n } catch {\n return 1;\n }\n}\n\n/**\n * Append a feedback entry to STATE.md's \"Specialist Feedback\" section.\n * Creates the section if it doesn't exist. Creates STATE.md if it doesn't exist.\n */\nasync function appendToStateMd(\n planningDir: string,\n entry: { timestamp: string; specialist: string; outcome: string; relativePath: string; issueId: string }\n): Promise<void> {\n const statePath = join(planningDir, 'STATE.md');\n const line = `- **[${entry.timestamp}] ${entry.specialist} → ${entry.outcome.toUpperCase()}** — \\`${entry.relativePath}\\``;\n\n let content: string;\n try {\n content = await readFile(statePath, 'utf-8');\n } catch {\n // STATE.md doesn't exist — create a minimal one\n content = `# Agent State: ${entry.issueId}\\n`;\n }\n\n const sectionHeader = '## Specialist Feedback';\n const sectionIndex = content.indexOf(sectionHeader);\n\n if (sectionIndex >= 0) {\n // Find the end of the section (next ## or EOF)\n const afterHeader = sectionIndex + sectionHeader.length;\n const nextSection = content.indexOf('\\n## ', afterHeader);\n const insertPos = nextSection >= 0 ? nextSection : content.length;\n content = content.slice(0, insertPos).trimEnd() + '\\n' + line + '\\n' + content.slice(insertPos);\n } else {\n // Append the section at the end\n content = content.trimEnd() + '\\n\\n' + sectionHeader + '\\n\\n' + line + '\\n';\n }\n\n await writeFile(statePath, content, 'utf-8');\n}\n\n/**\n * Write specialist feedback to a file in the workspace and update STATE.md.\n */\nexport async function writeFeedbackFile(opts: WriteFeedbackOptions): Promise<WriteFeedbackResult> {\n // Validate workspacePath — reject project roots (must contain /workspaces/ or have .planning dir)\n let providedPath = opts.workspacePath;\n if (providedPath && !existsSync(join(providedPath, '.planning')) && !providedPath.includes('/workspaces/')) {\n // Looks like a project root, not a workspace — fall back to resolution\n providedPath = undefined;\n }\n const workspacePath = providedPath || resolveWorkspacePath(opts.issueId);\n if (!workspacePath) {\n return { success: false, error: `Workspace not found for ${opts.issueId}` };\n }\n\n const planningDir = join(workspacePath, '.planning');\n const feedbackDir = join(planningDir, 'feedback');\n\n try {\n await mkdir(feedbackDir, { recursive: true });\n\n const seq = await getNextSequenceNumber(feedbackDir);\n const seqStr = String(seq).padStart(3, '0');\n const filename = `${seqStr}-${opts.specialist}-${opts.outcome}.md`;\n const filePath = join(feedbackDir, filename);\n const relativePath = `.planning/feedback/${filename}`;\n\n const timestamp = new Date().toISOString().replace(/\\.\\d+Z$/, 'Z');\n const shortTimestamp = timestamp.replace(/:\\d{2}Z$/, 'Z');\n\n const content = [\n '---',\n `specialist: ${opts.specialist}`,\n `issueId: ${opts.issueId}`,\n `outcome: ${opts.outcome}`,\n `timestamp: ${timestamp}`,\n '---',\n '',\n opts.markdownBody,\n '',\n ].join('\\n');\n\n await writeFile(filePath, content, 'utf-8');\n\n // Update STATE.md with breadcrumb\n await appendToStateMd(planningDir, {\n timestamp: shortTimestamp,\n specialist: opts.specialist,\n outcome: opts.outcome,\n relativePath,\n issueId: opts.issueId,\n });\n\n console.log(`[feedback-writer] Wrote ${relativePath} for ${opts.issueId}`);\n return { success: true, relativePath, filePath };\n } catch (error: any) {\n console.error(`[feedback-writer] Failed to write feedback for ${opts.issueId}:`, error);\n return { success: false, error: error.message };\n }\n}\n"],"mappings":"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","names":[]}
|
package/dist/index.d.ts
CHANGED
|
@@ -390,9 +390,14 @@ interface MigrationResult {
|
|
|
390
390
|
* .panopticon directories. Removes only those symlinks, preserving any
|
|
391
391
|
* user-created content (real files/directories).
|
|
392
392
|
*
|
|
393
|
-
* This is safe to run multiple times — it's a no-op if
|
|
393
|
+
* This is safe to run multiple times — it's a no-op if nothing remains to clean up.
|
|
394
|
+
*
|
|
395
|
+
* Removes two kinds of stale Panopticon content from ~/.claude/:
|
|
396
|
+
* 1. Symlinks pointing to .panopticon or panopticon-cli (legacy sync method)
|
|
397
|
+
* 2. Plain directories that also exist in the devroot (stale copies from before
|
|
398
|
+
* the devroot migration — these cause duplicate skill listings)
|
|
394
399
|
*/
|
|
395
|
-
declare function
|
|
400
|
+
declare function migrateStalePersonalContent(): MigrationResult;
|
|
396
401
|
interface RefreshCacheResult {
|
|
397
402
|
skills: {
|
|
398
403
|
copied: number;
|
|
@@ -849,4 +854,4 @@ declare function setupCredentialFileAuth(provider: ProviderConfig, workspacePath
|
|
|
849
854
|
*/
|
|
850
855
|
declare function clearCredentialFileAuth(workspacePath: string): void;
|
|
851
856
|
|
|
852
|
-
export { AGENTS_DIR, ARCHIVES_DIR, type AnthropicModel, type ApiKeysConfig, BACKUPS_DIR, BIN_DIR, type BackupInfo, CACHE_AGENTS_DIR, CACHE_MANIFEST, CACHE_RULES_DIR, CACHE_SKILLS_DIR, CERTS_DIR, CLAUDE_DIR, CLAUDE_MD_TEMPLATES, COMMANDS_DIR, CONFIG_DIR, CONFIG_FILE, COSTS_DIR, type Comment, type ComplexityLevel, type ComplexityModels, DOCS_DIR, type DevrootSyncItem, type GitHubConfig, GitHubTracker, type GitLabConfig, GitLabTracker, type GoogleModel, HEARTBEATS_DIR, type HookItem, INIT_DIRS, type Issue, type IssueFilters, IssueNotFoundError, type IssueState, type IssueTracker, type IssueUpdate, type KimiModel, LEGACY_RUNTIME_DIRS, type LinearConfig, LinearTracker, type LinkDirection, LinkManager, type MigrationResult, type ModelId, type ModelsConfig, type NewIssue, NotImplementedError, type OpenAIModel, PANOPTICON_HOME, PRDS_DIR, PRD_DRAFTS_DIR, PRD_PUBLISHED_DIR, PROJECT_DOCS_SUBDIR, PROJECT_PRDS_ACTIVE_SUBDIR, PROJECT_PRDS_COMPLETED_SUBDIR, PROJECT_PRDS_PLANNED_SUBDIR, PROJECT_PRDS_SUBDIR, PROVIDERS, type PanopticonConfig, type ProviderAuthType, type ProviderCompatibility, type ProviderConfig, type ProviderName, type RallyConfig, type RefreshCacheResult, type RemoteConfig, type RemoteFlyConfig, SETTINGS_FILE, SKILLS_DIR, SOURCE_AGENTS_DIR, SOURCE_DEV_SKILLS_DIR, SOURCE_RULES_DIR, SOURCE_SCRIPTS_DIR, SOURCE_SKILLS_DIR, SOURCE_TEMPLATES_DIR, SOURCE_TRAEFIK_TEMPLATES, SYNC_TARGET, type SettingsConfig, type ShadowConfig, type Shell, type SpecialistModels, type SyncItem, type SyncOptions, type SyncPlan, type SyncResult, TEMPLATES_DIR, TRAEFIK_CERTS_DIR, TRAEFIK_DIR, TRAEFIK_DYNAMIC_DIR, TrackerAuthError, type TrackerConfig, type TrackerConfigItem, type TrackerLink, type TrackerType, type TrackersConfig, type ZAIModel, addAlias, cleanOldBackups, clearCredentialFileAuth, createBackup, createBackupTimestamp, createTracker, createTrackerFromConfig, detectShell, executeSync, findDevrootForProject, formatIssueRef, getAgentCommand, getAliasInstructions, getAllTrackers, getAvailableModels, getClaudeModelFlag, getDashboardApiUrl, getDefaultConfig, getDefaultSettings, getDevrootPath, getDirectProviders, getLinkManager, getPanopticonHome, getPrimaryTracker, getProviderEnv, getProviderForModel, getRouterProviders, getSecondaryTracker, getShellRcFile, hasAlias, isAnthropicModel, isDevMode, isPanopticonSymlink, listBackups, loadConfig, loadSettings,
|
|
857
|
+
export { AGENTS_DIR, ARCHIVES_DIR, type AnthropicModel, type ApiKeysConfig, BACKUPS_DIR, BIN_DIR, type BackupInfo, CACHE_AGENTS_DIR, CACHE_MANIFEST, CACHE_RULES_DIR, CACHE_SKILLS_DIR, CERTS_DIR, CLAUDE_DIR, CLAUDE_MD_TEMPLATES, COMMANDS_DIR, CONFIG_DIR, CONFIG_FILE, COSTS_DIR, type Comment, type ComplexityLevel, type ComplexityModels, DOCS_DIR, type DevrootSyncItem, type GitHubConfig, GitHubTracker, type GitLabConfig, GitLabTracker, type GoogleModel, HEARTBEATS_DIR, type HookItem, INIT_DIRS, type Issue, type IssueFilters, IssueNotFoundError, type IssueState, type IssueTracker, type IssueUpdate, type KimiModel, LEGACY_RUNTIME_DIRS, type LinearConfig, LinearTracker, type LinkDirection, LinkManager, type MigrationResult, type ModelId, type ModelsConfig, type NewIssue, NotImplementedError, type OpenAIModel, PANOPTICON_HOME, PRDS_DIR, PRD_DRAFTS_DIR, PRD_PUBLISHED_DIR, PROJECT_DOCS_SUBDIR, PROJECT_PRDS_ACTIVE_SUBDIR, PROJECT_PRDS_COMPLETED_SUBDIR, PROJECT_PRDS_PLANNED_SUBDIR, PROJECT_PRDS_SUBDIR, PROVIDERS, type PanopticonConfig, type ProviderAuthType, type ProviderCompatibility, type ProviderConfig, type ProviderName, type RallyConfig, type RefreshCacheResult, type RemoteConfig, type RemoteFlyConfig, SETTINGS_FILE, SKILLS_DIR, SOURCE_AGENTS_DIR, SOURCE_DEV_SKILLS_DIR, SOURCE_RULES_DIR, SOURCE_SCRIPTS_DIR, SOURCE_SKILLS_DIR, SOURCE_TEMPLATES_DIR, SOURCE_TRAEFIK_TEMPLATES, SYNC_TARGET, type SettingsConfig, type ShadowConfig, type Shell, type SpecialistModels, type SyncItem, type SyncOptions, type SyncPlan, type SyncResult, TEMPLATES_DIR, TRAEFIK_CERTS_DIR, TRAEFIK_DIR, TRAEFIK_DYNAMIC_DIR, TrackerAuthError, type TrackerConfig, type TrackerConfigItem, type TrackerLink, type TrackerType, type TrackersConfig, type ZAIModel, addAlias, cleanOldBackups, clearCredentialFileAuth, createBackup, createBackupTimestamp, createTracker, createTrackerFromConfig, detectShell, executeSync, findDevrootForProject, formatIssueRef, getAgentCommand, getAliasInstructions, getAllTrackers, getAvailableModels, getClaudeModelFlag, getDashboardApiUrl, getDefaultConfig, getDefaultSettings, getDevrootPath, getDirectProviders, getLinkManager, getPanopticonHome, getPrimaryTracker, getProviderEnv, getProviderForModel, getRouterProviders, getSecondaryTracker, getShellRcFile, hasAlias, isAnthropicModel, isDevMode, isPanopticonSymlink, listBackups, loadConfig, loadSettings, migrateStalePersonalContent, needsRouter, parseIssueRef, planHooksSync, planSync, refreshCache, requiresRouter, restoreBackup, saveConfig, saveSettings, setupCredentialFileAuth, syncHooks, syncStatusline, validateSettings };
|
package/dist/index.js
CHANGED
|
@@ -13,7 +13,7 @@ import {
|
|
|
13
13
|
hasAlias,
|
|
14
14
|
isPanopticonSymlink,
|
|
15
15
|
listBackups,
|
|
16
|
-
|
|
16
|
+
migrateStalePersonalContent,
|
|
17
17
|
parseIssueRef,
|
|
18
18
|
planHooksSync,
|
|
19
19
|
planSync,
|
|
@@ -21,18 +21,8 @@ import {
|
|
|
21
21
|
restoreBackup,
|
|
22
22
|
syncHooks,
|
|
23
23
|
syncStatusline
|
|
24
|
-
} from "./chunk-
|
|
24
|
+
} from "./chunk-H7T35QDO.js";
|
|
25
25
|
import "./chunk-AQXETQHW.js";
|
|
26
|
-
import {
|
|
27
|
-
GitHubTracker,
|
|
28
|
-
GitLabTracker,
|
|
29
|
-
LinearTracker,
|
|
30
|
-
createTracker,
|
|
31
|
-
createTrackerFromConfig,
|
|
32
|
-
getAllTrackers,
|
|
33
|
-
getPrimaryTracker,
|
|
34
|
-
getSecondaryTracker
|
|
35
|
-
} from "./chunk-UKSGE6RH.js";
|
|
36
26
|
import {
|
|
37
27
|
PROVIDERS,
|
|
38
28
|
clearCredentialFileAuth,
|
|
@@ -63,12 +53,6 @@ import {
|
|
|
63
53
|
loadConfig,
|
|
64
54
|
saveConfig
|
|
65
55
|
} from "./chunk-QAJAJBFW.js";
|
|
66
|
-
import "./chunk-ZP6EWSZV.js";
|
|
67
|
-
import {
|
|
68
|
-
IssueNotFoundError,
|
|
69
|
-
NotImplementedError,
|
|
70
|
-
TrackerAuthError
|
|
71
|
-
} from "./chunk-DMRTN432.js";
|
|
72
56
|
import {
|
|
73
57
|
AGENTS_DIR,
|
|
74
58
|
ARCHIVES_DIR,
|
|
@@ -116,6 +100,22 @@ import {
|
|
|
116
100
|
init_paths,
|
|
117
101
|
isDevMode
|
|
118
102
|
} from "./chunk-ZTFNYOC7.js";
|
|
103
|
+
import {
|
|
104
|
+
GitHubTracker,
|
|
105
|
+
GitLabTracker,
|
|
106
|
+
LinearTracker,
|
|
107
|
+
createTracker,
|
|
108
|
+
createTrackerFromConfig,
|
|
109
|
+
getAllTrackers,
|
|
110
|
+
getPrimaryTracker,
|
|
111
|
+
getSecondaryTracker
|
|
112
|
+
} from "./chunk-3KYTNMSE.js";
|
|
113
|
+
import "./chunk-ZP6EWSZV.js";
|
|
114
|
+
import {
|
|
115
|
+
IssueNotFoundError,
|
|
116
|
+
NotImplementedError,
|
|
117
|
+
TrackerAuthError
|
|
118
|
+
} from "./chunk-DMRTN432.js";
|
|
119
119
|
import {
|
|
120
120
|
init_esm_shims
|
|
121
121
|
} from "./chunk-ZHC57RCV.js";
|
|
@@ -213,7 +213,7 @@ export {
|
|
|
213
213
|
listBackups,
|
|
214
214
|
loadConfig,
|
|
215
215
|
loadSettings,
|
|
216
|
-
|
|
216
|
+
migrateStalePersonalContent,
|
|
217
217
|
needsRouter,
|
|
218
218
|
parseIssueRef,
|
|
219
219
|
planHooksSync,
|
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
stepFailed,
|
|
4
4
|
stepOk,
|
|
5
5
|
stepSkipped
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-SFX3BG6N.js";
|
|
7
7
|
import {
|
|
8
8
|
init_esm_shims
|
|
9
9
|
} from "./chunk-ZHC57RCV.js";
|
|
@@ -100,4 +100,4 @@ async function cleanupLabelsLinear(ctx, apiKey) {
|
|
|
100
100
|
export {
|
|
101
101
|
cleanupMergedLabels
|
|
102
102
|
};
|
|
103
|
-
//# sourceMappingURL=label-cleanup-
|
|
103
|
+
//# sourceMappingURL=label-cleanup-4IVZIPGK.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
resolveGitHubIssue
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-WP6ZLWU3.js";
|
|
4
4
|
import {
|
|
5
5
|
getTmuxSessionName,
|
|
6
6
|
init_specialists,
|
|
@@ -8,13 +8,13 @@ import {
|
|
|
8
8
|
recordWake,
|
|
9
9
|
spawnEphemeralSpecialist,
|
|
10
10
|
wakeSpecialist
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-4OQ4SXQZ.js";
|
|
12
12
|
import "./chunk-JQBV3Q2W.js";
|
|
13
13
|
import {
|
|
14
14
|
init_workspace_config,
|
|
15
15
|
replacePlaceholders
|
|
16
16
|
} from "./chunk-AAP4G6U7.js";
|
|
17
|
-
import "./chunk-
|
|
17
|
+
import "./chunk-PFA5XE2V.js";
|
|
18
18
|
import "./chunk-USYP2SBE.js";
|
|
19
19
|
import {
|
|
20
20
|
init_config,
|
|
@@ -24,17 +24,17 @@ import {
|
|
|
24
24
|
init_projects,
|
|
25
25
|
loadProjectsConfig,
|
|
26
26
|
resolveProjectFromIssue
|
|
27
|
-
} from "./chunk-
|
|
27
|
+
} from "./chunk-7ZB5D46Y.js";
|
|
28
28
|
import {
|
|
29
29
|
init_tmux,
|
|
30
30
|
sendKeysAsync,
|
|
31
31
|
sessionExists
|
|
32
32
|
} from "./chunk-W2OTF6OS.js";
|
|
33
|
-
import "./chunk-ZP6EWSZV.js";
|
|
34
33
|
import {
|
|
35
34
|
PANOPTICON_HOME,
|
|
36
35
|
init_paths
|
|
37
36
|
} from "./chunk-ZTFNYOC7.js";
|
|
37
|
+
import "./chunk-ZP6EWSZV.js";
|
|
38
38
|
import {
|
|
39
39
|
init_esm_shims
|
|
40
40
|
} from "./chunk-ZHC57RCV.js";
|
|
@@ -534,7 +534,7 @@ async function postMergeLifecycle(issueId, projectPath) {
|
|
|
534
534
|
}
|
|
535
535
|
console.log(`[merge-agent] Running post-merge cleanup for ${issueId}`);
|
|
536
536
|
try {
|
|
537
|
-
const { movePrd } = await import("./archive-planning-
|
|
537
|
+
const { movePrd } = await import("./archive-planning-54J6EP6A.js");
|
|
538
538
|
const prdResult = await movePrd({ issueId, projectPath });
|
|
539
539
|
if (prdResult.success && !prdResult.skipped) {
|
|
540
540
|
console.log(`[merge-agent] \u2713 ${prdResult.details?.join("; ")}`);
|
|
@@ -548,7 +548,7 @@ async function postMergeLifecycle(issueId, projectPath) {
|
|
|
548
548
|
console.warn(`[merge-agent] Could not move PRD: ${err}`);
|
|
549
549
|
}
|
|
550
550
|
try {
|
|
551
|
-
const { cleanPlanningArtifacts } = await import("./clean-planning-
|
|
551
|
+
const { cleanPlanningArtifacts } = await import("./clean-planning-V4SSVU26.js");
|
|
552
552
|
const cleanResult = await cleanPlanningArtifacts({ issueId, projectPath });
|
|
553
553
|
if (cleanResult.success && !cleanResult.skipped) {
|
|
554
554
|
console.log(`[merge-agent] \u2713 ${cleanResult.details?.join("; ")}`);
|
|
@@ -563,7 +563,7 @@ async function postMergeLifecycle(issueId, projectPath) {
|
|
|
563
563
|
}
|
|
564
564
|
closeIssueWithCircuitBreaker(issueId, projectPath);
|
|
565
565
|
try {
|
|
566
|
-
const { cleanupMergedLabels } = await import("./label-cleanup-
|
|
566
|
+
const { cleanupMergedLabels } = await import("./label-cleanup-4IVZIPGK.js");
|
|
567
567
|
const ghResolved = resolveGitHubIssue(issueId);
|
|
568
568
|
const labelCtx = ghResolved.isGitHub ? { issueId, projectPath, github: { owner: ghResolved.owner, repo: ghResolved.repo, number: ghResolved.number } } : { issueId, projectPath };
|
|
569
569
|
const labelResult = await cleanupMergedLabels(labelCtx);
|
|
@@ -579,7 +579,7 @@ async function postMergeLifecycle(issueId, projectPath) {
|
|
|
579
579
|
console.warn(`[merge-agent] Could not clean labels: ${err}`);
|
|
580
580
|
}
|
|
581
581
|
try {
|
|
582
|
-
const { compactBeads } = await import("./compact-beads-
|
|
582
|
+
const { compactBeads } = await import("./compact-beads-YQDVF6FQ.js");
|
|
583
583
|
const beadsResult = await compactBeads({ issueId, projectPath });
|
|
584
584
|
if (beadsResult.success && !beadsResult.skipped) {
|
|
585
585
|
console.log(`[merge-agent] \u2713 ${beadsResult.details?.join("; ")}`);
|
|
@@ -589,7 +589,7 @@ async function postMergeLifecycle(issueId, projectPath) {
|
|
|
589
589
|
console.warn(`[merge-agent] Beads compaction failed: ${err}`);
|
|
590
590
|
}
|
|
591
591
|
try {
|
|
592
|
-
const { getAgentState, saveAgentState } = await import("./agents-
|
|
592
|
+
const { getAgentState, saveAgentState } = await import("./agents-MOMDECON.js");
|
|
593
593
|
const { killSession, sessionExists: sessionExists2 } = await import("./tmux-X2I5SAIJ.js");
|
|
594
594
|
const agentId = `agent-${issueId.toLowerCase()}`;
|
|
595
595
|
const agentState = getAgentState(agentId);
|
|
@@ -609,8 +609,8 @@ async function postMergeLifecycle(issueId, projectPath) {
|
|
|
609
609
|
console.warn(`[merge-agent] Could not kill agent sessions: ${err}`);
|
|
610
610
|
}
|
|
611
611
|
try {
|
|
612
|
-
const { findWorkspacePath } = await import("./archive-planning-
|
|
613
|
-
const { stopWorkspaceDocker } = await import("./workspace-manager-
|
|
612
|
+
const { findWorkspacePath } = await import("./archive-planning-54J6EP6A.js");
|
|
613
|
+
const { stopWorkspaceDocker } = await import("./workspace-manager-Z57ROWBQ.js");
|
|
614
614
|
const issueLower = issueId.toLowerCase();
|
|
615
615
|
const workspacePath = findWorkspacePath(projectPath, issueLower);
|
|
616
616
|
if (workspacePath) {
|
|
@@ -636,7 +636,7 @@ function closeIssueWithCircuitBreaker(issueId, projectPath) {
|
|
|
636
636
|
}
|
|
637
637
|
(async () => {
|
|
638
638
|
try {
|
|
639
|
-
const { closeIssue } = await import("./close-issue-
|
|
639
|
+
const { closeIssue } = await import("./close-issue-5OMOP2FU.js");
|
|
640
640
|
const ghResolved = resolveGitHubIssue(issueId);
|
|
641
641
|
const ctx = ghResolved.isGitHub ? { issueId, projectPath, github: { owner: ghResolved.owner, repo: ghResolved.repo, number: ghResolved.number } } : { issueId, projectPath };
|
|
642
642
|
const results = await closeIssue(ctx, { applyLabel: false, comment: "Merged to main via Panopticon merge-agent" });
|
|
@@ -1015,7 +1015,7 @@ async function spawnMergeAgentForBranches(projectPath, sourceBranch, targetBranc
|
|
|
1015
1015
|
const message = `Branch ${sourceBranch} is not pushed to remote.`;
|
|
1016
1016
|
console.error(`[merge-agent] ${message}`);
|
|
1017
1017
|
logActivity("merge_blocked", message);
|
|
1018
|
-
const { writeFeedbackFile } = await import("./feedback-writer-
|
|
1018
|
+
const { writeFeedbackFile } = await import("./feedback-writer-IPPIUPDX.js");
|
|
1019
1019
|
const blockMsg = `# Merge Blocked
|
|
1020
1020
|
|
|
1021
1021
|
Branch "${sourceBranch}" is not pushed to remote.
|
|
@@ -1210,7 +1210,7 @@ Report any issues or conflicts you encountered.`;
|
|
|
1210
1210
|
console.warn(`[merge-agent] Could not resolve project for ${issueId} \u2014 falling back to global specialist. Check projects.yaml configuration.`);
|
|
1211
1211
|
}
|
|
1212
1212
|
if (mergeProjectKey) {
|
|
1213
|
-
const { getAgentRuntimeState, saveAgentRuntimeState } = await import("./agents-
|
|
1213
|
+
const { getAgentRuntimeState, saveAgentRuntimeState } = await import("./agents-MOMDECON.js");
|
|
1214
1214
|
const IDLE_POLL_INTERVAL = 3e3;
|
|
1215
1215
|
const IDLE_MAX_WAIT = 36e4;
|
|
1216
1216
|
const idleStart = Date.now();
|
|
@@ -1722,4 +1722,4 @@ export {
|
|
|
1722
1722
|
spawnMergeAgentForBranches,
|
|
1723
1723
|
syncMainIntoWorkspace
|
|
1724
1724
|
};
|
|
1725
|
-
//# sourceMappingURL=merge-agent-
|
|
1725
|
+
//# sourceMappingURL=merge-agent-6YOMGQMX.js.map
|
|
@@ -19,7 +19,7 @@ import {
|
|
|
19
19
|
resolveProjectPath,
|
|
20
20
|
saveProjectsConfig,
|
|
21
21
|
unregisterProject
|
|
22
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-7ZB5D46Y.js";
|
|
23
23
|
import "./chunk-ZTFNYOC7.js";
|
|
24
24
|
import "./chunk-ZHC57RCV.js";
|
|
25
25
|
init_projects();
|
|
@@ -44,4 +44,4 @@ export {
|
|
|
44
44
|
saveProjectsConfig,
|
|
45
45
|
unregisterProject
|
|
46
46
|
};
|
|
47
|
-
//# sourceMappingURL=projects-
|
|
47
|
+
//# sourceMappingURL=projects-BPGM6IFB.js.map
|
|
@@ -11,7 +11,7 @@ import {
|
|
|
11
11
|
extractTeamPrefix,
|
|
12
12
|
findProjectByTeam,
|
|
13
13
|
init_projects
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-7ZB5D46Y.js";
|
|
15
15
|
import "./chunk-ZTFNYOC7.js";
|
|
16
16
|
import {
|
|
17
17
|
init_esm_shims
|
|
@@ -153,4 +153,4 @@ EOF`);
|
|
|
153
153
|
export {
|
|
154
154
|
createRemoteWorkspace
|
|
155
155
|
};
|
|
156
|
-
//# sourceMappingURL=remote-workspace-
|
|
156
|
+
//# sourceMappingURL=remote-workspace-LKRDGYEB.js.map
|
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
loadReviewStatuses,
|
|
6
6
|
saveReviewStatuses,
|
|
7
7
|
setReviewStatus
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-TA5X4QYQ.js";
|
|
9
9
|
import "./chunk-JQBV3Q2W.js";
|
|
10
10
|
import "./chunk-ZTFNYOC7.js";
|
|
11
11
|
import "./chunk-ZHC57RCV.js";
|
|
@@ -17,4 +17,4 @@ export {
|
|
|
17
17
|
saveReviewStatuses,
|
|
18
18
|
setReviewStatus
|
|
19
19
|
};
|
|
20
|
-
//# sourceMappingURL=review-status-
|
|
20
|
+
//# sourceMappingURL=review-status-E77PZZWG.js.map
|
|
@@ -1,24 +1,24 @@
|
|
|
1
1
|
import {
|
|
2
2
|
getRecentRunLogs,
|
|
3
3
|
init_specialist_logs
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-4OQ4SXQZ.js";
|
|
5
5
|
import "./chunk-JQBV3Q2W.js";
|
|
6
6
|
import {
|
|
7
7
|
getModelId,
|
|
8
8
|
init_work_type_router
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-PFA5XE2V.js";
|
|
10
10
|
import "./chunk-USYP2SBE.js";
|
|
11
11
|
import "./chunk-QAJAJBFW.js";
|
|
12
12
|
import {
|
|
13
13
|
getProject,
|
|
14
14
|
init_projects
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-7ZB5D46Y.js";
|
|
16
16
|
import "./chunk-W2OTF6OS.js";
|
|
17
|
-
import "./chunk-ZP6EWSZV.js";
|
|
18
17
|
import {
|
|
19
18
|
getPanopticonHome,
|
|
20
19
|
init_paths
|
|
21
20
|
} from "./chunk-ZTFNYOC7.js";
|
|
21
|
+
import "./chunk-ZP6EWSZV.js";
|
|
22
22
|
import {
|
|
23
23
|
__esm,
|
|
24
24
|
init_esm_shims
|
|
@@ -257,4 +257,4 @@ export {
|
|
|
257
257
|
regenerateContextDigest,
|
|
258
258
|
scheduleDigestGeneration
|
|
259
259
|
};
|
|
260
|
-
//# sourceMappingURL=specialist-context-
|
|
260
|
+
//# sourceMappingURL=specialist-context-GVF4DV3M.js.map
|
|
@@ -16,15 +16,15 @@ import {
|
|
|
16
16
|
isRunLogActive,
|
|
17
17
|
listRunLogs,
|
|
18
18
|
parseLogMetadata
|
|
19
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-4OQ4SXQZ.js";
|
|
20
20
|
import "./chunk-JQBV3Q2W.js";
|
|
21
|
-
import "./chunk-
|
|
21
|
+
import "./chunk-PFA5XE2V.js";
|
|
22
22
|
import "./chunk-USYP2SBE.js";
|
|
23
23
|
import "./chunk-QAJAJBFW.js";
|
|
24
|
-
import "./chunk-
|
|
24
|
+
import "./chunk-7ZB5D46Y.js";
|
|
25
25
|
import "./chunk-W2OTF6OS.js";
|
|
26
|
-
import "./chunk-ZP6EWSZV.js";
|
|
27
26
|
import "./chunk-ZTFNYOC7.js";
|
|
27
|
+
import "./chunk-ZP6EWSZV.js";
|
|
28
28
|
import "./chunk-ZHC57RCV.js";
|
|
29
29
|
init_specialist_logs();
|
|
30
30
|
export {
|
|
@@ -45,4 +45,4 @@ export {
|
|
|
45
45
|
listRunLogs,
|
|
46
46
|
parseLogMetadata
|
|
47
47
|
};
|
|
48
|
-
//# sourceMappingURL=specialist-logs-
|
|
48
|
+
//# sourceMappingURL=specialist-logs-W47SAAIU.js.map
|
|
@@ -55,15 +55,15 @@ import {
|
|
|
55
55
|
wakeSpecialist,
|
|
56
56
|
wakeSpecialistOrQueue,
|
|
57
57
|
wakeSpecialistWithTask
|
|
58
|
-
} from "./chunk-
|
|
58
|
+
} from "./chunk-4OQ4SXQZ.js";
|
|
59
59
|
import "./chunk-JQBV3Q2W.js";
|
|
60
|
-
import "./chunk-
|
|
60
|
+
import "./chunk-PFA5XE2V.js";
|
|
61
61
|
import "./chunk-USYP2SBE.js";
|
|
62
62
|
import "./chunk-QAJAJBFW.js";
|
|
63
|
-
import "./chunk-
|
|
63
|
+
import "./chunk-7ZB5D46Y.js";
|
|
64
64
|
import "./chunk-W2OTF6OS.js";
|
|
65
|
-
import "./chunk-ZP6EWSZV.js";
|
|
66
65
|
import "./chunk-ZTFNYOC7.js";
|
|
66
|
+
import "./chunk-ZP6EWSZV.js";
|
|
67
67
|
import "./chunk-ZHC57RCV.js";
|
|
68
68
|
init_specialists();
|
|
69
69
|
export {
|
|
@@ -123,4 +123,4 @@ export {
|
|
|
123
123
|
wakeSpecialistOrQueue,
|
|
124
124
|
wakeSpecialistWithTask
|
|
125
125
|
};
|
|
126
|
-
//# sourceMappingURL=specialists-
|
|
126
|
+
//# sourceMappingURL=specialists-SIXRWCZ3.js.map
|
|
@@ -4,9 +4,9 @@ import {
|
|
|
4
4
|
ensureProjectCerts,
|
|
5
5
|
generatePanopticonTraefikConfig,
|
|
6
6
|
generateTlsConfig
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-VVTAPQOI.js";
|
|
8
8
|
import "./chunk-QAJAJBFW.js";
|
|
9
|
-
import "./chunk-
|
|
9
|
+
import "./chunk-7ZB5D46Y.js";
|
|
10
10
|
import "./chunk-ZTFNYOC7.js";
|
|
11
11
|
import "./chunk-ZHC57RCV.js";
|
|
12
12
|
export {
|
|
@@ -16,4 +16,4 @@ export {
|
|
|
16
16
|
generatePanopticonTraefikConfig,
|
|
17
17
|
generateTlsConfig
|
|
18
18
|
};
|
|
19
|
-
//# sourceMappingURL=traefik-
|
|
19
|
+
//# sourceMappingURL=traefik-X2IWTUHO.js.map
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
preTrustDirectory,
|
|
5
5
|
removeWorkspace,
|
|
6
6
|
stopWorkspaceDocker
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-BHRMW7BY.js";
|
|
8
8
|
import "./chunk-JT4O4YVM.js";
|
|
9
9
|
import "./chunk-ZWZNEA26.js";
|
|
10
10
|
import "./chunk-DW3PKGIS.js";
|
|
@@ -19,4 +19,4 @@ export {
|
|
|
19
19
|
removeWorkspace,
|
|
20
20
|
stopWorkspaceDocker
|
|
21
21
|
};
|
|
22
|
-
//# sourceMappingURL=workspace-manager-
|
|
22
|
+
//# sourceMappingURL=workspace-manager-Z57ROWBQ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
package/package.json
CHANGED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# ~/.panopticon/bin/inspect-on-bead-close
|
|
3
|
+
# PostToolUse hook: auto-triggers pan inspect when agent closes a bead
|
|
4
|
+
#
|
|
5
|
+
# When a Bash command matches "bd close <beadId>", this hook:
|
|
6
|
+
# 1. Extracts the bead ID
|
|
7
|
+
# 2. Triggers pan inspect for the current issue
|
|
8
|
+
# 3. Outputs a message telling the agent to WAIT for inspection results
|
|
9
|
+
#
|
|
10
|
+
# This makes inspection mechanical — the agent doesn't need to remember
|
|
11
|
+
# to call pan inspect. The framework does it automatically.
|
|
12
|
+
|
|
13
|
+
# Don't use set -e - never break Claude Code execution
|
|
14
|
+
TOOL_INFO=$(cat 2>/dev/null || echo '{}')
|
|
15
|
+
|
|
16
|
+
# Only care about Bash tool
|
|
17
|
+
TOOL_NAME=$(echo "$TOOL_INFO" | jq -r '.tool_name // "unknown"' 2>/dev/null || echo "unknown")
|
|
18
|
+
if [ "$TOOL_NAME" != "Bash" ]; then
|
|
19
|
+
exit 0
|
|
20
|
+
fi
|
|
21
|
+
|
|
22
|
+
# Check if the command contains "bd close" (may be prefixed with "cd /path &&")
|
|
23
|
+
TOOL_INPUT=$(echo "$TOOL_INFO" | jq -r '.tool_input.command // ""' 2>/dev/null || echo "")
|
|
24
|
+
if ! echo "$TOOL_INPUT" | grep -qE "bd close "; then
|
|
25
|
+
exit 0
|
|
26
|
+
fi
|
|
27
|
+
|
|
28
|
+
# Extract bead ID(s) from the command — only the arguments after "bd close"
|
|
29
|
+
# Handles: "bd close myn-80 --reason=...", "cd /path && bd close MIN-796-14 --reason=..."
|
|
30
|
+
# Extract everything after "bd close " up to the first flag (--) or end of string
|
|
31
|
+
BD_CLOSE_ARGS=$(echo "$TOOL_INPUT" | sed 's/.*bd close //' | sed 's/ --.*//')
|
|
32
|
+
# Bead IDs are space-separated tokens (myn-80, MIN-796-14, panopticon-abc123)
|
|
33
|
+
BEAD_IDS=$(echo "$BD_CLOSE_ARGS" | tr ' ' '\n' | grep -E '^[a-zA-Z]' | head -5)
|
|
34
|
+
if [ -z "$BEAD_IDS" ]; then
|
|
35
|
+
exit 0
|
|
36
|
+
fi
|
|
37
|
+
|
|
38
|
+
# Get issue ID from env (set by pan work issue)
|
|
39
|
+
ISSUE_ID="${PANOPTICON_ISSUE_ID:-}"
|
|
40
|
+
if [ -z "$ISSUE_ID" ]; then
|
|
41
|
+
exit 0
|
|
42
|
+
fi
|
|
43
|
+
|
|
44
|
+
# Get first bead ID for inspection
|
|
45
|
+
FIRST_BEAD=$(echo "$BEAD_IDS" | head -1)
|
|
46
|
+
|
|
47
|
+
# Check if multiple beads were closed at once — this is a problem
|
|
48
|
+
BEAD_COUNT=$(echo "$BEAD_IDS" | wc -l)
|
|
49
|
+
if [ "$BEAD_COUNT" -gt 1 ]; then
|
|
50
|
+
echo ""
|
|
51
|
+
echo "⚠️ WARNING: You closed $BEAD_COUNT beads at once. The Inspect Specialist needs"
|
|
52
|
+
echo "one bead per commit to verify each change individually. Close beads ONE AT A TIME."
|
|
53
|
+
echo ""
|
|
54
|
+
fi
|
|
55
|
+
|
|
56
|
+
# Dispatch inspection (fire and forget — don't block the hook)
|
|
57
|
+
pan inspect "$ISSUE_ID" --bead "$FIRST_BEAD" > /dev/null 2>&1 &
|
|
58
|
+
|
|
59
|
+
# Output message that gets injected into the agent's conversation
|
|
60
|
+
echo ""
|
|
61
|
+
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
62
|
+
echo "🔍 INSPECTION DISPATCHED for bead $FIRST_BEAD"
|
|
63
|
+
echo ""
|
|
64
|
+
echo "The Inspect Specialist is now reviewing your changes against"
|
|
65
|
+
echo "the bead specification. It is working in YOUR workspace —"
|
|
66
|
+
echo "do NOT make changes or start the next bead until you receive:"
|
|
67
|
+
echo ""
|
|
68
|
+
echo " INSPECTION PASSED → proceed to next bead"
|
|
69
|
+
echo " INSPECTION BLOCKED → fix issues, commit fix, close bead again"
|
|
70
|
+
echo ""
|
|
71
|
+
echo "WAIT for the inspection result message."
|
|
72
|
+
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
73
|
+
echo ""
|
package/scripts/stop-hook
CHANGED
|
@@ -64,5 +64,22 @@ if [ -x "$WORK_AGENT_HOOK" ]; then
|
|
|
64
64
|
"$WORK_AGENT_HOOK" &
|
|
65
65
|
fi
|
|
66
66
|
|
|
67
|
+
# Auto-mark planning complete when a planning agent finishes.
|
|
68
|
+
# The planning agent creates STATE.md + beads but the .planning-complete marker
|
|
69
|
+
# is only written by the dashboard "Done" button. If the user doesn't click it
|
|
70
|
+
# (or the system crashes), the marker is never created and Panopticon shows
|
|
71
|
+
# "Plan" instead of "Start Agent". This hook fixes that by calling
|
|
72
|
+
# complete-planning automatically when a planning-* agent stops.
|
|
73
|
+
if [[ "$AGENT_ID" == planning-* ]]; then
|
|
74
|
+
# Extract issue ID from agent ID (planning-min-796 → MIN-796)
|
|
75
|
+
ISSUE_ID=$(echo "$AGENT_ID" | sed 's/^planning-//' | tr '[:lower:]' '[:upper:]')
|
|
76
|
+
if [ -n "$ISSUE_ID" ]; then
|
|
77
|
+
# Fire and forget — don't block the stop hook
|
|
78
|
+
curl -s -X POST "http://localhost:3011/api/issues/$ISSUE_ID/complete-planning" \
|
|
79
|
+
-H "Content-Type: application/json" \
|
|
80
|
+
-d '{}' > /dev/null 2>&1 &
|
|
81
|
+
fi
|
|
82
|
+
fi
|
|
83
|
+
|
|
67
84
|
# Always exit successfully
|
|
68
85
|
exit 0
|
|
@@ -266,7 +266,7 @@ Validation: 8/8 checks passed
|
|
|
266
266
|
|
|
267
267
|
Next steps:
|
|
268
268
|
1. Create issues on <tracker>
|
|
269
|
-
2. Run: pan
|
|
269
|
+
2. Run: pan plan <PREFIX>-<N> (plan with Opus)
|
|
270
270
|
3. Run: pan work issue <PREFIX>-<N> (spawn implementation agent)
|
|
271
271
|
```
|
|
272
272
|
|