panopticon-cli 0.4.0 → 0.4.4
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 +442 -109
- package/dist/{agents-RCAPFJG7.js → agents-B5NRTVHK.js} +3 -4
- package/dist/chunk-7HHDVXBM.js +349 -0
- package/dist/chunk-7HHDVXBM.js.map +1 -0
- package/dist/chunk-H45CLB7E.js +2044 -0
- package/dist/chunk-H45CLB7E.js.map +1 -0
- package/dist/{chunk-7BGFIAWQ.js → chunk-ITI4IC5A.js} +2 -2
- package/dist/cli/index.js +1525 -432
- package/dist/cli/index.js.map +1 -1
- package/dist/dashboard/public/assets/index-BDd8hGYb.css +32 -0
- package/dist/dashboard/public/assets/index-sFwLPko-.js +556 -0
- package/dist/dashboard/public/index.html +3 -2
- package/dist/dashboard/server.js +21702 -14954
- package/dist/index.d.ts +125 -1
- package/dist/index.js +30 -5
- package/package.json +9 -2
- package/templates/claude-md/sections/warnings.md +27 -2
- package/templates/context/CLAUDE.md.template +22 -0
- package/templates/context/REOPEN_PROMPT.md.template +75 -0
- package/dist/chunk-4BIZ4OVN.js +0 -827
- package/dist/chunk-4BIZ4OVN.js.map +0 -1
- package/dist/chunk-DGUM43GV.js +0 -11
- package/dist/chunk-DGUM43GV.js.map +0 -1
- package/dist/chunk-U4LCHEVU.js +0 -116
- package/dist/chunk-U4LCHEVU.js.map +0 -1
- package/dist/dashboard/public/assets/index-BZXQno9X.js +0 -540
- package/dist/dashboard/public/assets/index-BtAxF_yl.css +0 -32
- package/dist/js-yaml-DLUPUHNL.js +0 -2648
- package/dist/js-yaml-DLUPUHNL.js.map +0 -1
- /package/dist/{agents-RCAPFJG7.js.map → agents-B5NRTVHK.js.map} +0 -0
- /package/dist/{chunk-7BGFIAWQ.js.map → chunk-ITI4IC5A.js.map} +0 -0
package/dist/index.d.ts
CHANGED
|
@@ -12,6 +12,7 @@ declare const TRAEFIK_DYNAMIC_DIR: string;
|
|
|
12
12
|
declare const TRAEFIK_CERTS_DIR: string;
|
|
13
13
|
declare const CERTS_DIR: string;
|
|
14
14
|
declare const CONFIG_FILE: string;
|
|
15
|
+
declare const SETTINGS_FILE: string;
|
|
15
16
|
declare const CLAUDE_DIR: string;
|
|
16
17
|
declare const CODEX_DIR: string;
|
|
17
18
|
declare const CURSOR_DIR: string;
|
|
@@ -518,4 +519,127 @@ declare class LinkManager {
|
|
|
518
519
|
}
|
|
519
520
|
declare function getLinkManager(): LinkManager;
|
|
520
521
|
|
|
521
|
-
|
|
522
|
+
type AnthropicModel = 'claude-opus-4-5' | 'claude-sonnet-4-5' | 'claude-haiku-4-5';
|
|
523
|
+
type OpenAIModel = 'gpt-5.2-codex' | 'o3-deep-research' | 'gpt-4o' | 'gpt-4o-mini';
|
|
524
|
+
type GoogleModel = 'gemini-3-pro-preview' | 'gemini-3-flash-preview' | 'gemini-2.5-pro' | 'gemini-2.5-flash';
|
|
525
|
+
type ZAIModel = 'glm-4.7' | 'glm-4.7-flash';
|
|
526
|
+
type KimiModel = 'kimi-k2' | 'kimi-k2.5';
|
|
527
|
+
type ModelId = AnthropicModel | OpenAIModel | GoogleModel | ZAIModel | KimiModel;
|
|
528
|
+
type ComplexityLevel = 'trivial' | 'simple' | 'medium' | 'complex' | 'expert';
|
|
529
|
+
interface SpecialistModels {
|
|
530
|
+
review_agent: ModelId;
|
|
531
|
+
test_agent: ModelId;
|
|
532
|
+
merge_agent: ModelId;
|
|
533
|
+
}
|
|
534
|
+
type ComplexityModels = {
|
|
535
|
+
[K in ComplexityLevel]: ModelId;
|
|
536
|
+
};
|
|
537
|
+
interface ModelsConfig {
|
|
538
|
+
specialists: SpecialistModels;
|
|
539
|
+
planning_agent: ModelId;
|
|
540
|
+
complexity: ComplexityModels;
|
|
541
|
+
}
|
|
542
|
+
interface ApiKeysConfig {
|
|
543
|
+
openai?: string;
|
|
544
|
+
google?: string;
|
|
545
|
+
zai?: string;
|
|
546
|
+
kimi?: string;
|
|
547
|
+
}
|
|
548
|
+
interface SettingsConfig {
|
|
549
|
+
models: ModelsConfig;
|
|
550
|
+
api_keys: ApiKeysConfig;
|
|
551
|
+
}
|
|
552
|
+
/**
|
|
553
|
+
* Load settings from ~/.panopticon/settings.json
|
|
554
|
+
* Returns default settings if file doesn't exist or is invalid
|
|
555
|
+
* Also loads API keys from environment variables as fallback
|
|
556
|
+
*/
|
|
557
|
+
declare function loadSettings(): SettingsConfig;
|
|
558
|
+
/**
|
|
559
|
+
* Save settings to ~/.panopticon/settings.json
|
|
560
|
+
* Writes with pretty formatting (2-space indent)
|
|
561
|
+
*/
|
|
562
|
+
declare function saveSettings(settings: SettingsConfig): void;
|
|
563
|
+
/**
|
|
564
|
+
* Validate settings structure and model IDs
|
|
565
|
+
* Returns error message if invalid, null if valid
|
|
566
|
+
*/
|
|
567
|
+
declare function validateSettings(settings: SettingsConfig): string | null;
|
|
568
|
+
/**
|
|
569
|
+
* Get a deep copy of the default settings
|
|
570
|
+
*/
|
|
571
|
+
declare function getDefaultSettings(): SettingsConfig;
|
|
572
|
+
/**
|
|
573
|
+
* Get available models for a provider based on configured API keys
|
|
574
|
+
* Returns empty array if provider API key is not configured
|
|
575
|
+
*/
|
|
576
|
+
declare function getAvailableModels(settings: SettingsConfig): {
|
|
577
|
+
anthropic: AnthropicModel[];
|
|
578
|
+
openai: OpenAIModel[];
|
|
579
|
+
google: GoogleModel[];
|
|
580
|
+
zai: ZAIModel[];
|
|
581
|
+
kimi: KimiModel[];
|
|
582
|
+
};
|
|
583
|
+
|
|
584
|
+
/**
|
|
585
|
+
* Provider Configuration and Compatibility
|
|
586
|
+
*
|
|
587
|
+
* Defines which LLM providers are compatible with Claude Code's API format.
|
|
588
|
+
* - Direct providers: Implement Anthropic-compatible API (no router needed)
|
|
589
|
+
* - Router providers: Require claude-code-router for API translation
|
|
590
|
+
*/
|
|
591
|
+
|
|
592
|
+
type ProviderName = 'anthropic' | 'kimi' | 'openai' | 'google' | 'zai';
|
|
593
|
+
/**
|
|
594
|
+
* Provider compatibility types
|
|
595
|
+
* - direct: Anthropic-compatible API, use ANTHROPIC_BASE_URL directly
|
|
596
|
+
* - router: Incompatible API, requires claude-code-router for translation
|
|
597
|
+
*/
|
|
598
|
+
type ProviderCompatibility = 'direct' | 'router';
|
|
599
|
+
/**
|
|
600
|
+
* Provider configuration
|
|
601
|
+
*/
|
|
602
|
+
interface ProviderConfig {
|
|
603
|
+
name: ProviderName;
|
|
604
|
+
displayName: string;
|
|
605
|
+
compatibility: ProviderCompatibility;
|
|
606
|
+
baseUrl?: string;
|
|
607
|
+
models: ModelId[];
|
|
608
|
+
tested: boolean;
|
|
609
|
+
description: string;
|
|
610
|
+
}
|
|
611
|
+
/**
|
|
612
|
+
* All provider configurations
|
|
613
|
+
*/
|
|
614
|
+
declare const PROVIDERS: Record<ProviderName, ProviderConfig>;
|
|
615
|
+
/**
|
|
616
|
+
* Get provider for a given model ID
|
|
617
|
+
*/
|
|
618
|
+
declare function getProviderForModel(modelId: ModelId): ProviderConfig;
|
|
619
|
+
/**
|
|
620
|
+
* Check if a provider requires claude-code-router
|
|
621
|
+
*/
|
|
622
|
+
declare function requiresRouter(provider: ProviderName): boolean;
|
|
623
|
+
/**
|
|
624
|
+
* Get all providers that require router (have router compatibility)
|
|
625
|
+
*/
|
|
626
|
+
declare function getRouterProviders(): ProviderConfig[];
|
|
627
|
+
/**
|
|
628
|
+
* Get all direct-compatible providers
|
|
629
|
+
*/
|
|
630
|
+
declare function getDirectProviders(): ProviderConfig[];
|
|
631
|
+
/**
|
|
632
|
+
* Check if any configured providers require router
|
|
633
|
+
* Used to determine if router installation is needed
|
|
634
|
+
*/
|
|
635
|
+
declare function needsRouter(apiKeys: {
|
|
636
|
+
openai?: string;
|
|
637
|
+
google?: string;
|
|
638
|
+
zai?: string;
|
|
639
|
+
}): boolean;
|
|
640
|
+
/**
|
|
641
|
+
* Get environment variables for spawning agent with specific provider
|
|
642
|
+
*/
|
|
643
|
+
declare function getProviderEnv(provider: ProviderConfig, apiKey: string): Record<string, string>;
|
|
644
|
+
|
|
645
|
+
export { AGENTS_DIR, type AnthropicModel, type ApiKeysConfig, BACKUPS_DIR, BIN_DIR, type BackupInfo, CERTS_DIR, CLAUDE_DIR, CLAUDE_MD_TEMPLATES, CODEX_DIR, COMMANDS_DIR, CONFIG_DIR, CONFIG_FILE, COSTS_DIR, CURSOR_DIR, type Comment, type ComplexityLevel, type ComplexityModels, GEMINI_DIR, 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, type LinearConfig, LinearTracker, type LinkDirection, LinkManager, type ModelId, type ModelsConfig, type NewIssue, NotImplementedError, type OpenAIModel, PANOPTICON_HOME, PROVIDERS, type PanopticonConfig, type ProviderCompatibility, type ProviderConfig, type ProviderName, type RallyConfig, type Runtime, SETTINGS_FILE, SKILLS_DIR, SOURCE_DEV_SKILLS_DIR, SOURCE_SCRIPTS_DIR, SOURCE_SKILLS_DIR, SOURCE_TEMPLATES_DIR, SOURCE_TRAEFIK_TEMPLATES, SYNC_TARGETS, type SettingsConfig, 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, createBackup, createBackupTimestamp, createTracker, createTrackerFromConfig, detectShell, executeSync, formatIssueRef, getAliasInstructions, getAllTrackers, getAvailableModels, getDefaultConfig, getDefaultSettings, getDirectProviders, getLinkManager, getPrimaryTracker, getProviderEnv, getProviderForModel, getRouterProviders, getSecondaryTracker, getShellRcFile, hasAlias, isDevMode, isPanopticonSymlink, listBackups, loadConfig, loadSettings, needsRouter, parseIssueRef, planHooksSync, planSync, requiresRouter, restoreBackup, saveConfig, saveSettings, syncHooks, validateSettings };
|
package/dist/index.js
CHANGED
|
@@ -32,7 +32,7 @@ import {
|
|
|
32
32
|
restoreBackup,
|
|
33
33
|
saveConfig,
|
|
34
34
|
syncHooks
|
|
35
|
-
} from "./chunk-
|
|
35
|
+
} from "./chunk-ITI4IC5A.js";
|
|
36
36
|
import {
|
|
37
37
|
AGENTS_DIR,
|
|
38
38
|
BACKUPS_DIR,
|
|
@@ -50,6 +50,8 @@ import {
|
|
|
50
50
|
HEARTBEATS_DIR,
|
|
51
51
|
INIT_DIRS,
|
|
52
52
|
PANOPTICON_HOME,
|
|
53
|
+
PROVIDERS,
|
|
54
|
+
SETTINGS_FILE,
|
|
53
55
|
SKILLS_DIR,
|
|
54
56
|
SOURCE_DEV_SKILLS_DIR,
|
|
55
57
|
SOURCE_SCRIPTS_DIR,
|
|
@@ -61,9 +63,19 @@ import {
|
|
|
61
63
|
TRAEFIK_CERTS_DIR,
|
|
62
64
|
TRAEFIK_DIR,
|
|
63
65
|
TRAEFIK_DYNAMIC_DIR,
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
66
|
+
getAvailableModels,
|
|
67
|
+
getDefaultSettings,
|
|
68
|
+
getDirectProviders,
|
|
69
|
+
getProviderEnv,
|
|
70
|
+
getProviderForModel,
|
|
71
|
+
getRouterProviders,
|
|
72
|
+
isDevMode,
|
|
73
|
+
loadSettings,
|
|
74
|
+
needsRouter,
|
|
75
|
+
requiresRouter,
|
|
76
|
+
saveSettings,
|
|
77
|
+
validateSettings
|
|
78
|
+
} from "./chunk-7HHDVXBM.js";
|
|
67
79
|
export {
|
|
68
80
|
AGENTS_DIR,
|
|
69
81
|
BACKUPS_DIR,
|
|
@@ -87,6 +99,8 @@ export {
|
|
|
87
99
|
LinkManager,
|
|
88
100
|
NotImplementedError,
|
|
89
101
|
PANOPTICON_HOME,
|
|
102
|
+
PROVIDERS,
|
|
103
|
+
SETTINGS_FILE,
|
|
90
104
|
SKILLS_DIR,
|
|
91
105
|
SOURCE_DEV_SKILLS_DIR,
|
|
92
106
|
SOURCE_SCRIPTS_DIR,
|
|
@@ -110,9 +124,15 @@ export {
|
|
|
110
124
|
formatIssueRef,
|
|
111
125
|
getAliasInstructions,
|
|
112
126
|
getAllTrackers,
|
|
127
|
+
getAvailableModels,
|
|
113
128
|
getDefaultConfig,
|
|
129
|
+
getDefaultSettings,
|
|
130
|
+
getDirectProviders,
|
|
114
131
|
getLinkManager,
|
|
115
132
|
getPrimaryTracker,
|
|
133
|
+
getProviderEnv,
|
|
134
|
+
getProviderForModel,
|
|
135
|
+
getRouterProviders,
|
|
116
136
|
getSecondaryTracker,
|
|
117
137
|
getShellRcFile,
|
|
118
138
|
hasAlias,
|
|
@@ -120,11 +140,16 @@ export {
|
|
|
120
140
|
isPanopticonSymlink,
|
|
121
141
|
listBackups,
|
|
122
142
|
loadConfig,
|
|
143
|
+
loadSettings,
|
|
144
|
+
needsRouter,
|
|
123
145
|
parseIssueRef,
|
|
124
146
|
planHooksSync,
|
|
125
147
|
planSync,
|
|
148
|
+
requiresRouter,
|
|
126
149
|
restoreBackup,
|
|
127
150
|
saveConfig,
|
|
128
|
-
|
|
151
|
+
saveSettings,
|
|
152
|
+
syncHooks,
|
|
153
|
+
validateSettings
|
|
129
154
|
};
|
|
130
155
|
//# sourceMappingURL=index.js.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "panopticon-cli",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.4",
|
|
4
4
|
"description": "Multi-agent orchestration for AI coding assistants (Claude Code, Codex, Cursor, Gemini CLI)",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"ai-agents",
|
|
@@ -24,6 +24,11 @@
|
|
|
24
24
|
"url": "https://github.com/eltmon/panopticon-cli/issues"
|
|
25
25
|
},
|
|
26
26
|
"type": "module",
|
|
27
|
+
"workspaces": [
|
|
28
|
+
"packages/shared",
|
|
29
|
+
"src/dashboard/server",
|
|
30
|
+
"src/dashboard/frontend"
|
|
31
|
+
],
|
|
27
32
|
"bin": {
|
|
28
33
|
"pan": "./dist/cli/index.js",
|
|
29
34
|
"panopticon": "./dist/cli/index.js"
|
|
@@ -49,7 +54,7 @@
|
|
|
49
54
|
"build:dashboard:server": "cd src/dashboard/server && npm run build",
|
|
50
55
|
"typecheck": "tsc --noEmit",
|
|
51
56
|
"lint": "eslint src/",
|
|
52
|
-
"test": "vitest --run --no-file-parallelism",
|
|
57
|
+
"test": "vitest --run --no-file-parallelism && cd src/dashboard/frontend && npm test",
|
|
53
58
|
"test:unit": "vitest run tests/unit",
|
|
54
59
|
"test:integration": "vitest run tests/integration",
|
|
55
60
|
"test:e2e": "vitest run tests/e2e",
|
|
@@ -70,12 +75,14 @@
|
|
|
70
75
|
"conf": "^12.0.0",
|
|
71
76
|
"execa": "^8.0.1",
|
|
72
77
|
"inquirer": "^9.3.8",
|
|
78
|
+
"js-yaml": "^4.1.1",
|
|
73
79
|
"ora": "^8.2.0",
|
|
74
80
|
"yaml": "^2.8.2"
|
|
75
81
|
},
|
|
76
82
|
"devDependencies": {
|
|
77
83
|
"@types/better-sqlite3": "^7.6.13",
|
|
78
84
|
"@types/inquirer": "^9.0.9",
|
|
85
|
+
"@types/js-yaml": "^4.0.9",
|
|
79
86
|
"@types/node": "^20.10.0",
|
|
80
87
|
"@vitest/coverage-v8": "^1.0.4",
|
|
81
88
|
"eslint": "^8.55.0",
|
|
@@ -4,6 +4,22 @@
|
|
|
4
4
|
- **DO NOT** push to main/master branch directly
|
|
5
5
|
- **ALWAYS** check for existing patterns before introducing new ones
|
|
6
6
|
|
|
7
|
+
## CRITICAL: Workspace Isolation
|
|
8
|
+
|
|
9
|
+
**You are working in an ISOLATED WORKSPACE. Your working directory MUST be:**
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
{{WORKSPACE_PATH}}
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
**Before making ANY file changes:**
|
|
16
|
+
1. Run `pwd` to verify you're in the workspace
|
|
17
|
+
2. All file paths should be relative to the workspace OR absolute paths within the workspace
|
|
18
|
+
3. NEVER use paths like `/home/.../projects/panopticon/src/...` (main project)
|
|
19
|
+
4. ALWAYS use paths like `./src/...` or `{{WORKSPACE_PATH}}/src/...` (workspace)
|
|
20
|
+
|
|
21
|
+
**If you see yourself working in the main project directory instead of the workspace, STOP and correct your working directory.**
|
|
22
|
+
|
|
7
23
|
## NEVER Defer Work (CRITICAL)
|
|
8
24
|
|
|
9
25
|
**You MUST complete ALL work in the issue scope. NEVER defer tasks to "future PRs".**
|
|
@@ -37,9 +53,18 @@
|
|
|
37
53
|
# 1. Run tests
|
|
38
54
|
npm test # or: mvn test, cargo test, etc.
|
|
39
55
|
|
|
40
|
-
# 2. Stage and commit ALL changes
|
|
56
|
+
# 2. Stage and commit ALL changes with Co-Authored-By line
|
|
57
|
+
# CRITICAL: Use YOUR EXACT MODEL ID in the Co-Authored-By line
|
|
58
|
+
# You have access to your model ID - it's shown in your system context
|
|
41
59
|
git add -A
|
|
42
|
-
git commit -m "feat: description (ISSUE-XXX)
|
|
60
|
+
git commit -m "feat: description (ISSUE-XXX)
|
|
61
|
+
|
|
62
|
+
Co-Authored-By: Claude <your-exact-model-id-here> <noreply@anthropic.com>"
|
|
63
|
+
|
|
64
|
+
# Example for claude-sonnet-4-5-20250929:
|
|
65
|
+
# git commit -m "feat: add specialist completion API
|
|
66
|
+
#
|
|
67
|
+
# Co-Authored-By: Claude claude-sonnet-4-5-20250929 <noreply@anthropic.com>"
|
|
43
68
|
|
|
44
69
|
# 3. Push to remote
|
|
45
70
|
git push -u origin $(git branch --show-current)
|
|
@@ -67,6 +67,28 @@ Before marking this issue complete:
|
|
|
67
67
|
- [ ] No console errors or warnings
|
|
68
68
|
- [ ] Documentation updated if needed
|
|
69
69
|
|
|
70
|
+
## Responding to Review Feedback
|
|
71
|
+
|
|
72
|
+
If you receive feedback from review-agent indicating issues to fix:
|
|
73
|
+
|
|
74
|
+
1. **Read the feedback carefully** - Understand each issue raised
|
|
75
|
+
2. **Fix all issues** - Address every item in the feedback
|
|
76
|
+
3. **Test your fixes** - Ensure tests still pass
|
|
77
|
+
4. **Commit and push** - Push your fixes to the remote branch
|
|
78
|
+
5. **Request re-review** - Run this command:
|
|
79
|
+
```bash
|
|
80
|
+
pan work request-review {{ISSUE_ID}} -m "Fixed: [brief summary of what you fixed]"
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
**Circuit breaker**: You can auto-request re-review up to 3 times. After that, a human must click "Review" in the dashboard.
|
|
84
|
+
|
|
85
|
+
**Example**:
|
|
86
|
+
```bash
|
|
87
|
+
pan work request-review PAN-123 -m "Fixed: added real tests instead of placeholders"
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
This will queue the review-agent to re-review your changes.
|
|
91
|
+
|
|
70
92
|
## Emergency Recovery
|
|
71
93
|
|
|
72
94
|
If you're resuming after a crash:
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# Reopened Issue: {{ISSUE_ID}}
|
|
2
|
+
|
|
3
|
+
## ⚠️ Important: This is Follow-up Work
|
|
4
|
+
|
|
5
|
+
This issue was previously completed and merged. It has been **reopened** for additional work.
|
|
6
|
+
|
|
7
|
+
## What This Means
|
|
8
|
+
|
|
9
|
+
You are NOT starting from scratch. Instead:
|
|
10
|
+
|
|
11
|
+
1. **Previous work exists** - Code has already been written, tested, and merged
|
|
12
|
+
2. **Build on what's there** - Extend, fix, or enhance the existing implementation
|
|
13
|
+
3. **Preserve functionality** - Don't break what's already working
|
|
14
|
+
4. **Understand the context** - Review what was done before planning new work
|
|
15
|
+
|
|
16
|
+
## Your Mission
|
|
17
|
+
|
|
18
|
+
**{{ISSUE_ID}}**: {{ISSUE_TITLE}}
|
|
19
|
+
|
|
20
|
+
### Why It Was Reopened
|
|
21
|
+
|
|
22
|
+
{{REOPEN_REASON}}
|
|
23
|
+
|
|
24
|
+
### What Was Previously Accomplished
|
|
25
|
+
|
|
26
|
+
{{PREVIOUS_WORK_SUMMARY}}
|
|
27
|
+
|
|
28
|
+
### Original Issue Description
|
|
29
|
+
|
|
30
|
+
{{ISSUE_DESCRIPTION}}
|
|
31
|
+
|
|
32
|
+
## Getting Started
|
|
33
|
+
|
|
34
|
+
1. **Read `.planning/REOPEN.md`** - Detailed context about previous work
|
|
35
|
+
2. **Read `.planning/STATE.md`** - Full implementation history
|
|
36
|
+
3. **Review the codebase** - Understand what was built:
|
|
37
|
+
{{KEY_FILES}}
|
|
38
|
+
4. **Check for new requirements** - Look for:
|
|
39
|
+
- New comments on the GitHub issue
|
|
40
|
+
- User feedback or bug reports
|
|
41
|
+
- Additional acceptance criteria
|
|
42
|
+
5. **Plan your approach** - Identify what needs to be added/fixed
|
|
43
|
+
6. **Implement carefully** - Build on the existing foundation
|
|
44
|
+
7. **Test thoroughly** - Ensure both old and new functionality works
|
|
45
|
+
8. **Request review** - When complete, run `pan work request-review {{ISSUE_ID}}`
|
|
46
|
+
|
|
47
|
+
## Critical Guidelines
|
|
48
|
+
|
|
49
|
+
- **Don't duplicate work** - Check if functionality already exists
|
|
50
|
+
- **Don't break existing tests** - All {{EXISTING_TESTS}} existing tests must still pass
|
|
51
|
+
- **Follow existing patterns** - Match the code style and architecture
|
|
52
|
+
- **Update existing docs** - Don't create duplicate documentation
|
|
53
|
+
- **Respect git history** - Review commits to understand design decisions
|
|
54
|
+
|
|
55
|
+
## Workspace Info
|
|
56
|
+
|
|
57
|
+
- **Branch**: {{BRANCH_NAME}}
|
|
58
|
+
- **Workspace**: {{WORKSPACE_PATH}}
|
|
59
|
+
- **Previous commits**: {{COMMIT_COUNT}} commits on this branch
|
|
60
|
+
- **Tests**: {{TEST_COUNT}} tests currently passing
|
|
61
|
+
|
|
62
|
+
## Review Workflow
|
|
63
|
+
|
|
64
|
+
This reopened issue can go through the standard review workflow:
|
|
65
|
+
|
|
66
|
+
1. Complete your work
|
|
67
|
+
2. Commit and push: `git push -u origin {{BRANCH_NAME}}`
|
|
68
|
+
3. Request review: `pan work request-review {{ISSUE_ID}} -m "Completed follow-up work"`
|
|
69
|
+
4. Review-agent will review
|
|
70
|
+
5. Test-agent will run tests
|
|
71
|
+
6. Human will approve and merge
|
|
72
|
+
|
|
73
|
+
---
|
|
74
|
+
|
|
75
|
+
**Remember**: This is iterative development. You're adding to something that already works, not building from zero.
|