panopticon-cli 0.1.3 → 0.2.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/README.md +645 -22
- package/dist/chunk-J7JUNJGH.js +1058 -0
- package/dist/chunk-J7JUNJGH.js.map +1 -0
- package/dist/cli/index.js +1733 -717
- package/dist/cli/index.js.map +1 -1
- package/dist/index.d.ts +368 -5
- package/dist/index.js +43 -1
- package/package.json +11 -2
- package/templates/context/CLAUDE.md.template +81 -0
- package/templates/context/STATE.md.template +106 -0
- package/templates/context/WORKSPACE.md.template +90 -0
- package/templates/docker/dotnet/Dockerfile.dev +22 -0
- package/templates/docker/dotnet/README.md +111 -0
- package/templates/docker/dotnet/docker-compose.yml +55 -0
- package/templates/docker/monorepo/Dockerfile.backend +15 -0
- package/templates/docker/monorepo/Dockerfile.frontend +17 -0
- package/templates/docker/monorepo/README.md +208 -0
- package/templates/docker/monorepo/docker-compose.yml +88 -0
- package/templates/docker/nextjs/Dockerfile.dev +20 -0
- package/templates/docker/nextjs/README.md +103 -0
- package/templates/docker/nextjs/docker-compose.yml +30 -0
- package/templates/docker/python-fastapi/Dockerfile.dev +22 -0
- package/templates/docker/python-fastapi/README.md +148 -0
- package/templates/docker/python-fastapi/docker-compose.yml +65 -0
- package/templates/docker/react-vite/Dockerfile.dev +20 -0
- package/templates/docker/react-vite/README.md +94 -0
- package/templates/docker/react-vite/docker-compose.yml +29 -0
- package/templates/docker/spring-boot/Dockerfile.dev +24 -0
- package/templates/docker/spring-boot/README.md +111 -0
- package/templates/docker/spring-boot/docker-compose.yml +71 -0
- package/templates/traefik/README.md +106 -0
- package/templates/traefik/docker-compose.yml +40 -0
- package/templates/traefik/dynamic/panopticon.yml +51 -0
- package/templates/traefik/dynamic/workspace.yml.template +34 -0
- package/templates/traefik/traefik.yml +45 -0
- package/dist/chunk-FR2P66GU.js +0 -352
- package/dist/chunk-FR2P66GU.js.map +0 -1
package/dist/index.d.ts
CHANGED
|
@@ -5,6 +5,10 @@ declare const COMMANDS_DIR: string;
|
|
|
5
5
|
declare const AGENTS_DIR: string;
|
|
6
6
|
declare const BACKUPS_DIR: string;
|
|
7
7
|
declare const COSTS_DIR: string;
|
|
8
|
+
declare const TRAEFIK_DIR: string;
|
|
9
|
+
declare const TRAEFIK_DYNAMIC_DIR: string;
|
|
10
|
+
declare const TRAEFIK_CERTS_DIR: string;
|
|
11
|
+
declare const CERTS_DIR: string;
|
|
8
12
|
declare const CONFIG_FILE: string;
|
|
9
13
|
declare const CLAUDE_DIR: string;
|
|
10
14
|
declare const CODEX_DIR: string;
|
|
@@ -31,8 +35,174 @@ declare const SYNC_TARGETS: {
|
|
|
31
35
|
type Runtime = keyof typeof SYNC_TARGETS;
|
|
32
36
|
declare const TEMPLATES_DIR: string;
|
|
33
37
|
declare const CLAUDE_MD_TEMPLATES: string;
|
|
38
|
+
declare const SOURCE_TEMPLATES_DIR: string;
|
|
39
|
+
declare const SOURCE_TRAEFIK_TEMPLATES: string;
|
|
34
40
|
declare const INIT_DIRS: string[];
|
|
35
41
|
|
|
42
|
+
/**
|
|
43
|
+
* Issue Tracker Abstraction Layer
|
|
44
|
+
*
|
|
45
|
+
* Provides a unified interface for different issue tracking systems
|
|
46
|
+
* (Linear, GitHub Issues, GitLab Issues, etc.)
|
|
47
|
+
*/
|
|
48
|
+
type TrackerType = 'linear' | 'github' | 'gitlab';
|
|
49
|
+
type IssueState = 'open' | 'in_progress' | 'closed';
|
|
50
|
+
interface Issue {
|
|
51
|
+
/** Tracker-specific unique ID */
|
|
52
|
+
id: string;
|
|
53
|
+
/** Human-readable reference (e.g., MIN-630, #42) */
|
|
54
|
+
ref: string;
|
|
55
|
+
/** Issue title */
|
|
56
|
+
title: string;
|
|
57
|
+
/** Issue description/body (markdown) */
|
|
58
|
+
description: string;
|
|
59
|
+
/** Normalized state */
|
|
60
|
+
state: IssueState;
|
|
61
|
+
/** Labels/tags */
|
|
62
|
+
labels: string[];
|
|
63
|
+
/** Assignee username/name */
|
|
64
|
+
assignee?: string;
|
|
65
|
+
/** Web URL to the issue */
|
|
66
|
+
url: string;
|
|
67
|
+
/** Which tracker this issue came from */
|
|
68
|
+
tracker: TrackerType;
|
|
69
|
+
/** Cross-tracker linked issue references */
|
|
70
|
+
linkedIssues?: string[];
|
|
71
|
+
/** Priority (1=urgent, 2=high, 3=normal, 4=low) */
|
|
72
|
+
priority?: number;
|
|
73
|
+
/** Due date (ISO string) */
|
|
74
|
+
dueDate?: string;
|
|
75
|
+
/** Creation timestamp (ISO string) */
|
|
76
|
+
createdAt: string;
|
|
77
|
+
/** Last update timestamp (ISO string) */
|
|
78
|
+
updatedAt: string;
|
|
79
|
+
}
|
|
80
|
+
interface Comment {
|
|
81
|
+
id: string;
|
|
82
|
+
issueId: string;
|
|
83
|
+
body: string;
|
|
84
|
+
author: string;
|
|
85
|
+
createdAt: string;
|
|
86
|
+
updatedAt: string;
|
|
87
|
+
}
|
|
88
|
+
interface IssueFilters {
|
|
89
|
+
/** Filter by state */
|
|
90
|
+
state?: IssueState;
|
|
91
|
+
/** Filter by labels (AND logic) */
|
|
92
|
+
labels?: string[];
|
|
93
|
+
/** Filter by assignee */
|
|
94
|
+
assignee?: string;
|
|
95
|
+
/** Filter by team/project (tracker-specific) */
|
|
96
|
+
team?: string;
|
|
97
|
+
/** Search query for title/description */
|
|
98
|
+
query?: string;
|
|
99
|
+
/** Maximum number of results */
|
|
100
|
+
limit?: number;
|
|
101
|
+
/** Include closed issues (default: false) */
|
|
102
|
+
includeClosed?: boolean;
|
|
103
|
+
}
|
|
104
|
+
interface NewIssue {
|
|
105
|
+
title: string;
|
|
106
|
+
description?: string;
|
|
107
|
+
labels?: string[];
|
|
108
|
+
assignee?: string;
|
|
109
|
+
team?: string;
|
|
110
|
+
priority?: number;
|
|
111
|
+
dueDate?: string;
|
|
112
|
+
}
|
|
113
|
+
interface IssueUpdate {
|
|
114
|
+
title?: string;
|
|
115
|
+
description?: string;
|
|
116
|
+
state?: IssueState;
|
|
117
|
+
labels?: string[];
|
|
118
|
+
assignee?: string;
|
|
119
|
+
priority?: number;
|
|
120
|
+
dueDate?: string;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Abstract interface for issue trackers.
|
|
124
|
+
* Implementations must handle normalization to/from tracker-specific formats.
|
|
125
|
+
*/
|
|
126
|
+
interface IssueTracker {
|
|
127
|
+
/** Tracker type identifier */
|
|
128
|
+
readonly name: TrackerType;
|
|
129
|
+
/**
|
|
130
|
+
* List issues matching filters
|
|
131
|
+
*/
|
|
132
|
+
listIssues(filters?: IssueFilters): Promise<Issue[]>;
|
|
133
|
+
/**
|
|
134
|
+
* Get a single issue by ID or ref
|
|
135
|
+
* @param id - Issue ID or human-readable ref (e.g., "MIN-630", "#42")
|
|
136
|
+
*/
|
|
137
|
+
getIssue(id: string): Promise<Issue>;
|
|
138
|
+
/**
|
|
139
|
+
* Update an existing issue
|
|
140
|
+
*/
|
|
141
|
+
updateIssue(id: string, update: IssueUpdate): Promise<Issue>;
|
|
142
|
+
/**
|
|
143
|
+
* Create a new issue
|
|
144
|
+
*/
|
|
145
|
+
createIssue(issue: NewIssue): Promise<Issue>;
|
|
146
|
+
/**
|
|
147
|
+
* Get comments on an issue
|
|
148
|
+
*/
|
|
149
|
+
getComments(issueId: string): Promise<Comment[]>;
|
|
150
|
+
/**
|
|
151
|
+
* Add a comment to an issue
|
|
152
|
+
*/
|
|
153
|
+
addComment(issueId: string, body: string): Promise<Comment>;
|
|
154
|
+
/**
|
|
155
|
+
* Transition issue to a new state
|
|
156
|
+
*/
|
|
157
|
+
transitionIssue(id: string, state: IssueState): Promise<void>;
|
|
158
|
+
/**
|
|
159
|
+
* Link a PR/MR to an issue
|
|
160
|
+
*/
|
|
161
|
+
linkPR(issueId: string, prUrl: string): Promise<void>;
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Error thrown when a tracker feature is not implemented
|
|
165
|
+
*/
|
|
166
|
+
declare class NotImplementedError extends Error {
|
|
167
|
+
constructor(feature: string);
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Error thrown when an issue is not found
|
|
171
|
+
*/
|
|
172
|
+
declare class IssueNotFoundError extends Error {
|
|
173
|
+
constructor(id: string, tracker: TrackerType);
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Error thrown when tracker authentication fails
|
|
177
|
+
*/
|
|
178
|
+
declare class TrackerAuthError extends Error {
|
|
179
|
+
constructor(tracker: TrackerType, message: string);
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
interface LinearConfig {
|
|
183
|
+
type: 'linear';
|
|
184
|
+
api_key_env?: string;
|
|
185
|
+
team?: string;
|
|
186
|
+
}
|
|
187
|
+
interface GitHubConfig {
|
|
188
|
+
type: 'github';
|
|
189
|
+
token_env?: string;
|
|
190
|
+
owner: string;
|
|
191
|
+
repo: string;
|
|
192
|
+
}
|
|
193
|
+
interface GitLabConfig {
|
|
194
|
+
type: 'gitlab';
|
|
195
|
+
token_env?: string;
|
|
196
|
+
project_id: string;
|
|
197
|
+
}
|
|
198
|
+
type TrackerConfigItem = LinearConfig | GitHubConfig | GitLabConfig;
|
|
199
|
+
interface TrackersConfig {
|
|
200
|
+
primary: TrackerType;
|
|
201
|
+
secondary?: TrackerType;
|
|
202
|
+
linear?: LinearConfig;
|
|
203
|
+
github?: GitHubConfig;
|
|
204
|
+
gitlab?: GitLabConfig;
|
|
205
|
+
}
|
|
36
206
|
interface PanopticonConfig {
|
|
37
207
|
panopticon: {
|
|
38
208
|
version: string;
|
|
@@ -40,15 +210,19 @@ interface PanopticonConfig {
|
|
|
40
210
|
sync: {
|
|
41
211
|
targets: string[];
|
|
42
212
|
backup_before_sync: boolean;
|
|
213
|
+
auto_sync?: boolean;
|
|
214
|
+
strategy?: 'symlink' | 'copy';
|
|
43
215
|
};
|
|
44
|
-
trackers:
|
|
45
|
-
primary: string;
|
|
46
|
-
secondary?: string;
|
|
47
|
-
};
|
|
216
|
+
trackers: TrackersConfig;
|
|
48
217
|
dashboard: {
|
|
49
218
|
port: number;
|
|
50
219
|
api_port: number;
|
|
51
220
|
};
|
|
221
|
+
traefik?: {
|
|
222
|
+
enabled: boolean;
|
|
223
|
+
dashboard_port?: number;
|
|
224
|
+
domain?: string;
|
|
225
|
+
};
|
|
52
226
|
}
|
|
53
227
|
declare function loadConfig(): PanopticonConfig;
|
|
54
228
|
declare function saveConfig(config: PanopticonConfig): void;
|
|
@@ -105,4 +279,193 @@ interface SyncResult {
|
|
|
105
279
|
*/
|
|
106
280
|
declare function executeSync(runtime: Runtime, options?: SyncOptions): SyncResult;
|
|
107
281
|
|
|
108
|
-
|
|
282
|
+
/**
|
|
283
|
+
* Linear Issue Tracker Adapter
|
|
284
|
+
*
|
|
285
|
+
* Implements IssueTracker interface for Linear.
|
|
286
|
+
*/
|
|
287
|
+
|
|
288
|
+
declare class LinearTracker implements IssueTracker {
|
|
289
|
+
readonly name: TrackerType;
|
|
290
|
+
private client;
|
|
291
|
+
private defaultTeam?;
|
|
292
|
+
constructor(apiKey: string, options?: {
|
|
293
|
+
team?: string;
|
|
294
|
+
});
|
|
295
|
+
listIssues(filters?: IssueFilters): Promise<Issue[]>;
|
|
296
|
+
getIssue(id: string): Promise<Issue>;
|
|
297
|
+
updateIssue(id: string, update: IssueUpdate): Promise<Issue>;
|
|
298
|
+
createIssue(newIssue: NewIssue): Promise<Issue>;
|
|
299
|
+
getComments(issueId: string): Promise<Comment[]>;
|
|
300
|
+
addComment(issueId: string, body: string): Promise<Comment>;
|
|
301
|
+
transitionIssue(id: string, state: IssueState): Promise<void>;
|
|
302
|
+
linkPR(issueId: string, prUrl: string): Promise<void>;
|
|
303
|
+
private normalizeIssue;
|
|
304
|
+
private mapState;
|
|
305
|
+
private reverseMapState;
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
/**
|
|
309
|
+
* GitHub Issues Tracker Adapter
|
|
310
|
+
*
|
|
311
|
+
* Implements IssueTracker interface for GitHub Issues.
|
|
312
|
+
*/
|
|
313
|
+
|
|
314
|
+
declare class GitHubTracker implements IssueTracker {
|
|
315
|
+
readonly name: TrackerType;
|
|
316
|
+
private octokit;
|
|
317
|
+
private owner;
|
|
318
|
+
private repo;
|
|
319
|
+
constructor(token: string, owner: string, repo: string);
|
|
320
|
+
listIssues(filters?: IssueFilters): Promise<Issue[]>;
|
|
321
|
+
getIssue(id: string): Promise<Issue>;
|
|
322
|
+
updateIssue(id: string, update: IssueUpdate): Promise<Issue>;
|
|
323
|
+
createIssue(newIssue: NewIssue): Promise<Issue>;
|
|
324
|
+
getComments(issueId: string): Promise<Comment[]>;
|
|
325
|
+
addComment(issueId: string, body: string): Promise<Comment>;
|
|
326
|
+
transitionIssue(id: string, state: IssueState): Promise<void>;
|
|
327
|
+
linkPR(issueId: string, prUrl: string): Promise<void>;
|
|
328
|
+
private normalizeIssue;
|
|
329
|
+
private mapStateFromGitHub;
|
|
330
|
+
private mapStateToGitHub;
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
/**
|
|
334
|
+
* GitLab Issues Tracker Adapter (Stub)
|
|
335
|
+
*
|
|
336
|
+
* Placeholder implementation for GitLab Issues support.
|
|
337
|
+
* Full implementation will use @gitbeaker/rest.
|
|
338
|
+
*/
|
|
339
|
+
|
|
340
|
+
declare class GitLabTracker implements IssueTracker {
|
|
341
|
+
private token;
|
|
342
|
+
private projectId;
|
|
343
|
+
readonly name: TrackerType;
|
|
344
|
+
constructor(token: string, projectId: string);
|
|
345
|
+
listIssues(_filters?: IssueFilters): Promise<Issue[]>;
|
|
346
|
+
getIssue(_id: string): Promise<Issue>;
|
|
347
|
+
updateIssue(_id: string, _update: IssueUpdate): Promise<Issue>;
|
|
348
|
+
createIssue(_issue: NewIssue): Promise<Issue>;
|
|
349
|
+
getComments(_issueId: string): Promise<Comment[]>;
|
|
350
|
+
addComment(_issueId: string, _body: string): Promise<Comment>;
|
|
351
|
+
transitionIssue(_id: string, _state: IssueState): Promise<void>;
|
|
352
|
+
linkPR(_issueId: string, _prUrl: string): Promise<void>;
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
/**
|
|
356
|
+
* Tracker Factory
|
|
357
|
+
*
|
|
358
|
+
* Creates appropriate tracker instances based on configuration.
|
|
359
|
+
*/
|
|
360
|
+
|
|
361
|
+
interface TrackerConfig {
|
|
362
|
+
type: TrackerType;
|
|
363
|
+
apiKeyEnv?: string;
|
|
364
|
+
team?: string;
|
|
365
|
+
tokenEnv?: string;
|
|
366
|
+
owner?: string;
|
|
367
|
+
repo?: string;
|
|
368
|
+
projectId?: string;
|
|
369
|
+
}
|
|
370
|
+
/**
|
|
371
|
+
* Create a tracker instance from configuration
|
|
372
|
+
*/
|
|
373
|
+
declare function createTracker(config: TrackerConfig): IssueTracker;
|
|
374
|
+
/**
|
|
375
|
+
* Create tracker from trackers configuration section
|
|
376
|
+
*/
|
|
377
|
+
declare function createTrackerFromConfig(trackersConfig: TrackersConfig, trackerType: TrackerType): IssueTracker;
|
|
378
|
+
/**
|
|
379
|
+
* Get the primary tracker from configuration
|
|
380
|
+
*/
|
|
381
|
+
declare function getPrimaryTracker(trackersConfig: TrackersConfig): IssueTracker;
|
|
382
|
+
/**
|
|
383
|
+
* Get the secondary tracker from configuration (if configured)
|
|
384
|
+
*/
|
|
385
|
+
declare function getSecondaryTracker(trackersConfig: TrackersConfig): IssueTracker | null;
|
|
386
|
+
/**
|
|
387
|
+
* Get all configured trackers
|
|
388
|
+
*/
|
|
389
|
+
declare function getAllTrackers(trackersConfig: TrackersConfig): IssueTracker[];
|
|
390
|
+
|
|
391
|
+
/**
|
|
392
|
+
* Cross-Tracker Linking
|
|
393
|
+
*
|
|
394
|
+
* Manages links between issues in different trackers.
|
|
395
|
+
* Links are stored in a local JSON file for persistence.
|
|
396
|
+
*/
|
|
397
|
+
|
|
398
|
+
type LinkDirection = 'blocks' | 'blocked_by' | 'related' | 'duplicate_of';
|
|
399
|
+
interface TrackerLink {
|
|
400
|
+
sourceIssueRef: string;
|
|
401
|
+
sourceTracker: TrackerType;
|
|
402
|
+
targetIssueRef: string;
|
|
403
|
+
targetTracker: TrackerType;
|
|
404
|
+
direction: LinkDirection;
|
|
405
|
+
createdAt: string;
|
|
406
|
+
}
|
|
407
|
+
/**
|
|
408
|
+
* Parse an issue reference to extract tracker and ID
|
|
409
|
+
* Examples:
|
|
410
|
+
* "#42" -> { tracker: "github", ref: "#42" }
|
|
411
|
+
* "github#42" -> { tracker: "github", ref: "#42" }
|
|
412
|
+
* "MIN-630" -> { tracker: "linear", ref: "MIN-630" }
|
|
413
|
+
* "gitlab#15" -> { tracker: "gitlab", ref: "#15" }
|
|
414
|
+
*/
|
|
415
|
+
declare function parseIssueRef(ref: string): {
|
|
416
|
+
tracker: TrackerType;
|
|
417
|
+
ref: string;
|
|
418
|
+
} | null;
|
|
419
|
+
/**
|
|
420
|
+
* Format an issue ref with tracker prefix for display
|
|
421
|
+
*/
|
|
422
|
+
declare function formatIssueRef(ref: string, tracker: TrackerType): string;
|
|
423
|
+
/**
|
|
424
|
+
* Link Manager for cross-tracker issue linking
|
|
425
|
+
*/
|
|
426
|
+
declare class LinkManager {
|
|
427
|
+
private storePath;
|
|
428
|
+
private store;
|
|
429
|
+
constructor(storePath?: string);
|
|
430
|
+
private load;
|
|
431
|
+
private save;
|
|
432
|
+
/**
|
|
433
|
+
* Add a link between two issues
|
|
434
|
+
*/
|
|
435
|
+
addLink(source: {
|
|
436
|
+
ref: string;
|
|
437
|
+
tracker: TrackerType;
|
|
438
|
+
}, target: {
|
|
439
|
+
ref: string;
|
|
440
|
+
tracker: TrackerType;
|
|
441
|
+
}, direction?: LinkDirection): TrackerLink;
|
|
442
|
+
/**
|
|
443
|
+
* Remove a link between two issues
|
|
444
|
+
*/
|
|
445
|
+
removeLink(source: {
|
|
446
|
+
ref: string;
|
|
447
|
+
tracker: TrackerType;
|
|
448
|
+
}, target: {
|
|
449
|
+
ref: string;
|
|
450
|
+
tracker: TrackerType;
|
|
451
|
+
}): boolean;
|
|
452
|
+
/**
|
|
453
|
+
* Get all issues linked to a given issue
|
|
454
|
+
*/
|
|
455
|
+
getLinkedIssues(ref: string, tracker: TrackerType): TrackerLink[];
|
|
456
|
+
/**
|
|
457
|
+
* Get all links (for debugging/admin)
|
|
458
|
+
*/
|
|
459
|
+
getAllLinks(): TrackerLink[];
|
|
460
|
+
/**
|
|
461
|
+
* Find linked issue in another tracker
|
|
462
|
+
*/
|
|
463
|
+
findLinkedIssue(ref: string, sourceTracker: TrackerType, targetTracker: TrackerType): string | null;
|
|
464
|
+
/**
|
|
465
|
+
* Clear all links (for testing)
|
|
466
|
+
*/
|
|
467
|
+
clear(): void;
|
|
468
|
+
}
|
|
469
|
+
declare function getLinkManager(): LinkManager;
|
|
470
|
+
|
|
471
|
+
export { AGENTS_DIR, BACKUPS_DIR, type BackupInfo, CERTS_DIR, CLAUDE_DIR, CLAUDE_MD_TEMPLATES, CODEX_DIR, COMMANDS_DIR, CONFIG_DIR, CONFIG_FILE, COSTS_DIR, CURSOR_DIR, type Comment, GEMINI_DIR, type GitHubConfig, GitHubTracker, type GitLabConfig, GitLabTracker, INIT_DIRS, type Issue, type IssueFilters, IssueNotFoundError, type IssueState, type IssueTracker, type IssueUpdate, type LinearConfig, LinearTracker, type LinkDirection, LinkManager, type NewIssue, NotImplementedError, PANOPTICON_HOME, type PanopticonConfig, type Runtime, SKILLS_DIR, SOURCE_TEMPLATES_DIR, SOURCE_TRAEFIK_TEMPLATES, SYNC_TARGETS, type Shell, 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, addAlias, cleanOldBackups, createBackup, createBackupTimestamp, createTracker, createTrackerFromConfig, detectShell, executeSync, formatIssueRef, getAliasInstructions, getAllTrackers, getDefaultConfig, getLinkManager, getPrimaryTracker, getSecondaryTracker, getShellRcFile, hasAlias, isPanopticonSymlink, listBackups, loadConfig, parseIssueRef, planSync, restoreBackup, saveConfig };
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
AGENTS_DIR,
|
|
3
3
|
BACKUPS_DIR,
|
|
4
|
+
CERTS_DIR,
|
|
4
5
|
CLAUDE_DIR,
|
|
5
6
|
CLAUDE_MD_TEMPLATES,
|
|
6
7
|
CODEX_DIR,
|
|
@@ -10,31 +11,52 @@ import {
|
|
|
10
11
|
COSTS_DIR,
|
|
11
12
|
CURSOR_DIR,
|
|
12
13
|
GEMINI_DIR,
|
|
14
|
+
GitHubTracker,
|
|
15
|
+
GitLabTracker,
|
|
13
16
|
INIT_DIRS,
|
|
17
|
+
IssueNotFoundError,
|
|
18
|
+
LinearTracker,
|
|
19
|
+
LinkManager,
|
|
20
|
+
NotImplementedError,
|
|
14
21
|
PANOPTICON_HOME,
|
|
15
22
|
SKILLS_DIR,
|
|
23
|
+
SOURCE_TEMPLATES_DIR,
|
|
24
|
+
SOURCE_TRAEFIK_TEMPLATES,
|
|
16
25
|
SYNC_TARGETS,
|
|
17
26
|
TEMPLATES_DIR,
|
|
27
|
+
TRAEFIK_CERTS_DIR,
|
|
28
|
+
TRAEFIK_DIR,
|
|
29
|
+
TRAEFIK_DYNAMIC_DIR,
|
|
30
|
+
TrackerAuthError,
|
|
18
31
|
addAlias,
|
|
19
32
|
cleanOldBackups,
|
|
20
33
|
createBackup,
|
|
21
34
|
createBackupTimestamp,
|
|
35
|
+
createTracker,
|
|
36
|
+
createTrackerFromConfig,
|
|
22
37
|
detectShell,
|
|
23
38
|
executeSync,
|
|
39
|
+
formatIssueRef,
|
|
24
40
|
getAliasInstructions,
|
|
41
|
+
getAllTrackers,
|
|
25
42
|
getDefaultConfig,
|
|
43
|
+
getLinkManager,
|
|
44
|
+
getPrimaryTracker,
|
|
45
|
+
getSecondaryTracker,
|
|
26
46
|
getShellRcFile,
|
|
27
47
|
hasAlias,
|
|
28
48
|
isPanopticonSymlink,
|
|
29
49
|
listBackups,
|
|
30
50
|
loadConfig,
|
|
51
|
+
parseIssueRef,
|
|
31
52
|
planSync,
|
|
32
53
|
restoreBackup,
|
|
33
54
|
saveConfig
|
|
34
|
-
} from "./chunk-
|
|
55
|
+
} from "./chunk-J7JUNJGH.js";
|
|
35
56
|
export {
|
|
36
57
|
AGENTS_DIR,
|
|
37
58
|
BACKUPS_DIR,
|
|
59
|
+
CERTS_DIR,
|
|
38
60
|
CLAUDE_DIR,
|
|
39
61
|
CLAUDE_MD_TEMPLATES,
|
|
40
62
|
CODEX_DIR,
|
|
@@ -44,24 +66,44 @@ export {
|
|
|
44
66
|
COSTS_DIR,
|
|
45
67
|
CURSOR_DIR,
|
|
46
68
|
GEMINI_DIR,
|
|
69
|
+
GitHubTracker,
|
|
70
|
+
GitLabTracker,
|
|
47
71
|
INIT_DIRS,
|
|
72
|
+
IssueNotFoundError,
|
|
73
|
+
LinearTracker,
|
|
74
|
+
LinkManager,
|
|
75
|
+
NotImplementedError,
|
|
48
76
|
PANOPTICON_HOME,
|
|
49
77
|
SKILLS_DIR,
|
|
78
|
+
SOURCE_TEMPLATES_DIR,
|
|
79
|
+
SOURCE_TRAEFIK_TEMPLATES,
|
|
50
80
|
SYNC_TARGETS,
|
|
51
81
|
TEMPLATES_DIR,
|
|
82
|
+
TRAEFIK_CERTS_DIR,
|
|
83
|
+
TRAEFIK_DIR,
|
|
84
|
+
TRAEFIK_DYNAMIC_DIR,
|
|
85
|
+
TrackerAuthError,
|
|
52
86
|
addAlias,
|
|
53
87
|
cleanOldBackups,
|
|
54
88
|
createBackup,
|
|
55
89
|
createBackupTimestamp,
|
|
90
|
+
createTracker,
|
|
91
|
+
createTrackerFromConfig,
|
|
56
92
|
detectShell,
|
|
57
93
|
executeSync,
|
|
94
|
+
formatIssueRef,
|
|
58
95
|
getAliasInstructions,
|
|
96
|
+
getAllTrackers,
|
|
59
97
|
getDefaultConfig,
|
|
98
|
+
getLinkManager,
|
|
99
|
+
getPrimaryTracker,
|
|
100
|
+
getSecondaryTracker,
|
|
60
101
|
getShellRcFile,
|
|
61
102
|
hasAlias,
|
|
62
103
|
isPanopticonSymlink,
|
|
63
104
|
listBackups,
|
|
64
105
|
loadConfig,
|
|
106
|
+
parseIssueRef,
|
|
65
107
|
planSync,
|
|
66
108
|
restoreBackup,
|
|
67
109
|
saveConfig
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "panopticon-cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "Multi-agent orchestration for AI coding assistants (Claude Code, Codex, Cursor, Gemini CLI)",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"ai-agents",
|
|
@@ -44,12 +44,19 @@
|
|
|
44
44
|
"build": "tsup",
|
|
45
45
|
"typecheck": "tsc --noEmit",
|
|
46
46
|
"lint": "eslint src/",
|
|
47
|
-
"test": "vitest",
|
|
47
|
+
"test": "vitest --no-file-parallelism",
|
|
48
|
+
"test:unit": "vitest run tests/unit",
|
|
49
|
+
"test:integration": "vitest run tests/integration",
|
|
50
|
+
"test:e2e": "vitest run tests/e2e",
|
|
51
|
+
"test:coverage": "vitest run --coverage",
|
|
52
|
+
"docs": "typedoc",
|
|
53
|
+
"docs:watch": "typedoc --watch",
|
|
48
54
|
"prepublishOnly": "npm run build"
|
|
49
55
|
},
|
|
50
56
|
"dependencies": {
|
|
51
57
|
"@iarna/toml": "^2.2.5",
|
|
52
58
|
"@linear/sdk": "^70.0.0",
|
|
59
|
+
"@octokit/rest": "^22.0.1",
|
|
53
60
|
"chalk": "^5.6.2",
|
|
54
61
|
"commander": "^12.1.0",
|
|
55
62
|
"conf": "^12.0.0",
|
|
@@ -60,9 +67,11 @@
|
|
|
60
67
|
"devDependencies": {
|
|
61
68
|
"@types/inquirer": "^9.0.9",
|
|
62
69
|
"@types/node": "^20.10.0",
|
|
70
|
+
"@vitest/coverage-v8": "^1.0.4",
|
|
63
71
|
"eslint": "^8.55.0",
|
|
64
72
|
"tsup": "^8.0.1",
|
|
65
73
|
"tsx": "^4.6.2",
|
|
74
|
+
"typedoc": "^0.25.0",
|
|
66
75
|
"typescript": "^5.3.2",
|
|
67
76
|
"vitest": "^1.0.4"
|
|
68
77
|
}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
# Agent Instructions: {{ISSUE_ID}}
|
|
2
|
+
|
|
3
|
+
## Your Mission
|
|
4
|
+
|
|
5
|
+
You are an autonomous AI coding agent working on:
|
|
6
|
+
|
|
7
|
+
**{{ISSUE_ID}}**: {{ISSUE_TITLE}}
|
|
8
|
+
|
|
9
|
+
## Critical Rules
|
|
10
|
+
|
|
11
|
+
1. **Read STATE.md first** - Always check `.planning/STATE.md` for current progress
|
|
12
|
+
2. **Update STATE.md frequently** - Keep state current for crash recovery
|
|
13
|
+
3. **Commit often** - Small, focused commits with clear messages
|
|
14
|
+
4. **Test your changes** - Run tests before marking work complete
|
|
15
|
+
5. **Ask when unsure** - Don't guess on requirements, ask for clarification
|
|
16
|
+
|
|
17
|
+
## Project Context
|
|
18
|
+
|
|
19
|
+
{{PROJECT_CONTEXT}}
|
|
20
|
+
|
|
21
|
+
## Coding Standards
|
|
22
|
+
|
|
23
|
+
{{CODING_STANDARDS}}
|
|
24
|
+
|
|
25
|
+
## Issue Details
|
|
26
|
+
|
|
27
|
+
### Description
|
|
28
|
+
{{ISSUE_DESCRIPTION}}
|
|
29
|
+
|
|
30
|
+
### Acceptance Criteria
|
|
31
|
+
{{ACCEPTANCE_CRITERIA}}
|
|
32
|
+
|
|
33
|
+
### Technical Requirements
|
|
34
|
+
{{TECHNICAL_REQUIREMENTS}}
|
|
35
|
+
|
|
36
|
+
## File Locations
|
|
37
|
+
|
|
38
|
+
| Purpose | Path |
|
|
39
|
+
|---------|------|
|
|
40
|
+
{{FILE_LOCATIONS}}
|
|
41
|
+
|
|
42
|
+
## Workflow
|
|
43
|
+
|
|
44
|
+
1. **Start**: Read STATE.md, understand current progress
|
|
45
|
+
2. **Plan**: Break down work into small steps
|
|
46
|
+
3. **Implement**: Write code, following project standards
|
|
47
|
+
4. **Test**: Run tests, fix any failures
|
|
48
|
+
5. **Document**: Update STATE.md with progress
|
|
49
|
+
6. **Commit**: Create focused commits with clear messages
|
|
50
|
+
7. **Repeat**: Continue until issue is complete
|
|
51
|
+
|
|
52
|
+
## Communication
|
|
53
|
+
|
|
54
|
+
To send a message to the user or request help:
|
|
55
|
+
- Update STATE.md with your question under "Questions for Review"
|
|
56
|
+
- Include clear context about what you need
|
|
57
|
+
|
|
58
|
+
## Completion Checklist
|
|
59
|
+
|
|
60
|
+
Before marking this issue complete:
|
|
61
|
+
|
|
62
|
+
- [ ] All acceptance criteria met
|
|
63
|
+
- [ ] Tests pass
|
|
64
|
+
- [ ] Code follows project standards
|
|
65
|
+
- [ ] STATE.md updated with final status
|
|
66
|
+
- [ ] Changes committed and pushed
|
|
67
|
+
- [ ] No console errors or warnings
|
|
68
|
+
- [ ] Documentation updated if needed
|
|
69
|
+
|
|
70
|
+
## Emergency Recovery
|
|
71
|
+
|
|
72
|
+
If you're resuming after a crash:
|
|
73
|
+
|
|
74
|
+
1. Run `git status` to see uncommitted changes
|
|
75
|
+
2. Read STATE.md for last known progress
|
|
76
|
+
3. Check "Last Action" and "Next Steps" sections
|
|
77
|
+
4. Continue from where work was interrupted
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
*This file is auto-generated by Panopticon. Modify project-specific sections as needed.*
|