claude-code-session-manager 0.8.6 → 0.10.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +95 -65
- package/dist/assets/{cssMode-DBg6nxUL.js → cssMode-AMMSQWRU.js} +1 -1
- package/dist/assets/{freemarker2-CyjUGY3f.js → freemarker2-B7HmOKy0.js} +1 -1
- package/dist/assets/{handlebars-lhtCWqlB.js → handlebars-DMhLYNJA.js} +1 -1
- package/dist/assets/{html-egptHwbZ.js → html-DIfRfeTv.js} +1 -1
- package/dist/assets/htmlMode-DBqG7xl_.js +1 -0
- package/dist/assets/{index-DjeqNwqn.js → index-BqL_4JKo.js} +1120 -1086
- package/dist/assets/{index-DnLtSCQS.css → index-CxncC9a0.css} +1 -1
- package/dist/assets/{javascript-tZbiID3O.js → javascript-Bsn1K6_V.js} +1 -1
- package/dist/assets/{jsonMode-BGtPN-L-.js → jsonMode-DVLHW2S3.js} +1 -1
- package/dist/assets/{liquid-DvTeXhev.js → liquid-9zGHPTSW.js} +1 -1
- package/dist/assets/{lspLanguageFeatures-D9xoxVlV.js → lspLanguageFeatures-BaqyiCFJ.js} +2 -2
- package/dist/assets/{mdx-BQ3Ja4wM.js → mdx-DhU2NoOP.js} +1 -1
- package/dist/assets/{ort-wasm-simd-threaded.asyncify-CtKKja6V.wasm → ort-wasm-simd-threaded.asyncify-DMmc6YqF.wasm} +0 -0
- package/dist/assets/{python-C71RWXaP.js → python-WMVORwGT.js} +1 -1
- package/dist/assets/{razor-w__Mkyns.js → razor-C13iUMo9.js} +1 -1
- package/dist/assets/{tsMode-DOQLQDB3.js → tsMode-B7lSY5y7.js} +1 -1
- package/dist/assets/{typescript-DEiub2Jt.js → typescript-BbjzsO4g.js} +1 -1
- package/dist/assets/{whisperWorker-QfIS0sPF.js → whisperWorker-CcsPqZUS.js} +19 -19
- package/dist/assets/{xml-RXkLQscS.js → xml-BH6qG4pe.js} +1 -1
- package/dist/assets/{yaml-C8HIpJku.js → yaml-B4r3z4qP.js} +1 -1
- package/dist/index.html +2 -2
- package/package.json +19 -10
- package/screenshots/.gitkeep +0 -0
- package/screenshots/README-screenshots.md +13 -0
- package/src/main/config.cjs +47 -9
- package/src/main/historyAggregator.cjs +10 -5
- package/src/main/index.cjs +186 -14
- package/src/main/ipcSchemas.cjs +165 -3
- package/src/main/lib/claudeBin.cjs +39 -0
- package/src/main/lib/encodeCwd.cjs +19 -0
- package/src/main/lib/fileTail.cjs +35 -0
- package/src/main/lib/insideHome.cjs +38 -0
- package/src/main/lib/prdFrontmatter.cjs +51 -0
- package/src/main/lib/sendToRenderer.cjs +21 -0
- package/src/main/memoryTool.cjs +203 -0
- package/src/main/otelSettings.cjs +2 -7
- package/src/main/pluginInstall.cjs +129 -0
- package/src/main/pty.cjs +13 -29
- package/src/main/queueOps.cjs +404 -0
- package/src/main/scheduler/prdParser.cjs +135 -0
- package/src/main/scheduler.cjs +296 -255
- package/src/main/sessionsStore.cjs +2 -6
- package/src/main/supervisor.cjs +3 -35
- package/src/main/teams.cjs +95 -0
- package/src/main/transcripts.cjs +5 -7
- package/src/main/usage.cjs +8 -0
- package/src/main/voiceHotkey.cjs +13 -9
- package/src/main/voiceSettings.cjs +2 -9
- package/src/main/voiceWizard.cjs +4 -11
- package/src/main/watchers.cjs +18 -42
- package/src/preload/api.d.ts +153 -1
- package/src/preload/index.cjs +29 -0
- package/dist/assets/htmlMode-tPDeHGOB.js +0 -1
package/src/preload/api.d.ts
CHANGED
|
@@ -247,6 +247,16 @@ export interface ScheduleConfig {
|
|
|
247
247
|
|
|
248
248
|
export type ScheduleJobStatus = 'pending' | 'running' | 'completed' | 'failed';
|
|
249
249
|
|
|
250
|
+
export interface ScheduleJobRuntime {
|
|
251
|
+
pid: number;
|
|
252
|
+
runId: string;
|
|
253
|
+
startedAt: string | null;
|
|
254
|
+
/** Claude session UUID for the `--session-id` arg — populated when the job spawns. */
|
|
255
|
+
sessionId?: string;
|
|
256
|
+
/** Resolved cwd the job was launched in (may differ from job.cwd if defaultCwd was applied). */
|
|
257
|
+
cwd?: string;
|
|
258
|
+
}
|
|
259
|
+
|
|
250
260
|
export interface ScheduleJob {
|
|
251
261
|
slug: string;
|
|
252
262
|
title: string;
|
|
@@ -260,6 +270,11 @@ export interface ScheduleJob {
|
|
|
260
270
|
finishedAt: string | null;
|
|
261
271
|
exitCode: number | null;
|
|
262
272
|
error: string | null;
|
|
273
|
+
/** Claude session UUID passed via `--session-id`. Set when the job spawns
|
|
274
|
+
* and persisted across queue reloads so the renderer can find the JSONL
|
|
275
|
+
* transcript even after restart. */
|
|
276
|
+
sessionId?: string;
|
|
277
|
+
runtime?: ScheduleJobRuntime;
|
|
263
278
|
}
|
|
264
279
|
|
|
265
280
|
export interface SchedulePaths {
|
|
@@ -395,6 +410,115 @@ export interface WatcherClosedEvent {
|
|
|
395
410
|
watcherId: string;
|
|
396
411
|
}
|
|
397
412
|
|
|
413
|
+
export interface TeamMember {
|
|
414
|
+
name: string;
|
|
415
|
+
agentType: string | null;
|
|
416
|
+
model: string | null;
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
export interface TeamInfo {
|
|
420
|
+
name: string;
|
|
421
|
+
configPath: string;
|
|
422
|
+
description: string | null;
|
|
423
|
+
leadAgentId: string | null;
|
|
424
|
+
members: TeamMember[];
|
|
425
|
+
memberCount: number;
|
|
426
|
+
inboxDepth: number;
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
export interface TeamsListResult {
|
|
430
|
+
teams: TeamInfo[];
|
|
431
|
+
}
|
|
432
|
+
|
|
433
|
+
// ────────────────────────────────────────────── Bundle D — queue ops
|
|
434
|
+
|
|
435
|
+
export interface LintFinding {
|
|
436
|
+
rule: string;
|
|
437
|
+
line: number;
|
|
438
|
+
snippet: string;
|
|
439
|
+
severity: 'warn' | 'error';
|
|
440
|
+
}
|
|
441
|
+
|
|
442
|
+
export interface LintReport {
|
|
443
|
+
slug: string;
|
|
444
|
+
findings: LintFinding[];
|
|
445
|
+
}
|
|
446
|
+
|
|
447
|
+
export interface LintQueueResult {
|
|
448
|
+
reports: LintReport[];
|
|
449
|
+
scannedAt: number;
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
export interface ArchivePrdResult {
|
|
453
|
+
ok: boolean;
|
|
454
|
+
archived: number;
|
|
455
|
+
archivedTo: string | null;
|
|
456
|
+
results: Array<{ ok: boolean; slug: string; error?: string; archivedTo?: string }>;
|
|
457
|
+
error?: string;
|
|
458
|
+
}
|
|
459
|
+
|
|
460
|
+
export interface RetagPrdItem {
|
|
461
|
+
slug: string;
|
|
462
|
+
/** New parallel-group number; if set on an NN-kebab slug, the file is renamed. */
|
|
463
|
+
parallelGroup?: number;
|
|
464
|
+
estimateMinutes?: number;
|
|
465
|
+
}
|
|
466
|
+
|
|
467
|
+
export interface RetagPrdResult {
|
|
468
|
+
ok: boolean;
|
|
469
|
+
retagged: number;
|
|
470
|
+
results: Array<{
|
|
471
|
+
ok: boolean;
|
|
472
|
+
slug: string;
|
|
473
|
+
newSlug?: string;
|
|
474
|
+
before?: Record<string, string>;
|
|
475
|
+
after?: Record<string, string>;
|
|
476
|
+
error?: string;
|
|
477
|
+
}>;
|
|
478
|
+
error?: string;
|
|
479
|
+
}
|
|
480
|
+
|
|
481
|
+
// ────────────────────────────────────────────── Bundle C (cycle 3) — Memory tab
|
|
482
|
+
|
|
483
|
+
export interface MemoryEntry {
|
|
484
|
+
name: string;
|
|
485
|
+
path: string;
|
|
486
|
+
mtimeMs: number;
|
|
487
|
+
bytes: number;
|
|
488
|
+
}
|
|
489
|
+
|
|
490
|
+
export interface MemoryListResult {
|
|
491
|
+
entries: MemoryEntry[];
|
|
492
|
+
workspace: string;
|
|
493
|
+
error: string | null;
|
|
494
|
+
}
|
|
495
|
+
|
|
496
|
+
export interface MemoryReadResult {
|
|
497
|
+
content: string;
|
|
498
|
+
exists: boolean;
|
|
499
|
+
mtimeMs: number;
|
|
500
|
+
bytes: number;
|
|
501
|
+
error: string | null;
|
|
502
|
+
}
|
|
503
|
+
|
|
504
|
+
export interface MemoryMutationResult {
|
|
505
|
+
ok: boolean;
|
|
506
|
+
error: string | null;
|
|
507
|
+
}
|
|
508
|
+
|
|
509
|
+
// ────────────────────────────────────────────── Bundle F — plugins install
|
|
510
|
+
|
|
511
|
+
export interface PluginInstallResult {
|
|
512
|
+
ok: boolean;
|
|
513
|
+
exitCode: number;
|
|
514
|
+
error?: string;
|
|
515
|
+
}
|
|
516
|
+
|
|
517
|
+
export interface PluginInstallProgressEvent {
|
|
518
|
+
slug: string;
|
|
519
|
+
line: string;
|
|
520
|
+
}
|
|
521
|
+
|
|
398
522
|
export interface SessionManagerAPI {
|
|
399
523
|
app: {
|
|
400
524
|
version: () => Promise<string>;
|
|
@@ -505,10 +629,16 @@ export interface SessionManagerAPI {
|
|
|
505
629
|
openFolder: () => Promise<{ ok: boolean }>;
|
|
506
630
|
readPrd: (slug: string) => Promise<{ ok: boolean; text?: string; error?: string }>;
|
|
507
631
|
readLog: (runId: string, slug: string) => Promise<{ ok: boolean; text?: string; error?: string }>;
|
|
508
|
-
writePrd: (slug: string, body: string) => Promise<{ ok:
|
|
632
|
+
writePrd: (slug: string, body: string) => Promise<{ ok: true; bytesWritten: number } | { ok: false; error: string }>;
|
|
509
633
|
listPrds: () => Promise<PrdListItem[]>;
|
|
510
634
|
health: () => Promise<ScheduleHealthSnapshot>;
|
|
511
635
|
onState: (handler: (snapshot: ScheduleStateSnapshot) => void) => () => void;
|
|
636
|
+
/** Bundle D — scan all PRDs for unbounded loops + missing frontmatter. */
|
|
637
|
+
lintQueue: () => Promise<LintQueueResult>;
|
|
638
|
+
/** Bundle D — move PRDs to prds-archived/<ISO>/. Never deletes. */
|
|
639
|
+
archivePrds: (slugs: string[]) => Promise<ArchivePrdResult>;
|
|
640
|
+
/** Bundle D — bulk retag parallelGroup and/or estimateMinutes. */
|
|
641
|
+
retagPrds: (items: RetagPrdItem[]) => Promise<RetagPrdResult>;
|
|
512
642
|
};
|
|
513
643
|
supervisor: {
|
|
514
644
|
/** Debug-only: run a supervisor tick immediately. Used by e2e tests. */
|
|
@@ -516,6 +646,28 @@ export interface SessionManagerAPI {
|
|
|
516
646
|
/** Return last 50 supervisor log entries, descending by ts. */
|
|
517
647
|
getLog: () => Promise<SupervisorLogEntry[]>;
|
|
518
648
|
};
|
|
649
|
+
teams: {
|
|
650
|
+
/** Enumerate ~/.claude/teams/<name>/config.json + inbox depths. */
|
|
651
|
+
list: () => Promise<TeamsListResult>;
|
|
652
|
+
};
|
|
653
|
+
plugins: {
|
|
654
|
+
/** Run `claude plugin install <slug>` in a hidden pty. Streams output
|
|
655
|
+
* via `onInstallProgress`. Returns { ok, exitCode } on exit. */
|
|
656
|
+
install: (payload: { slug: string }) => Promise<PluginInstallResult>;
|
|
657
|
+
onInstallProgress: (handler: (ev: PluginInstallProgressEvent) => void) => () => void;
|
|
658
|
+
};
|
|
659
|
+
memory: {
|
|
660
|
+
/** List markdown memory entries for the given workspace (defaults to 'default'). */
|
|
661
|
+
list: (workspace?: string) => Promise<MemoryListResult>;
|
|
662
|
+
/** Read the contents of one memory entry. */
|
|
663
|
+
read: (name: string, workspace?: string) => Promise<MemoryReadResult>;
|
|
664
|
+
/** Atomic write of a memory entry (max 1 MiB). */
|
|
665
|
+
write: (name: string, content: string, workspace?: string) => Promise<MemoryMutationResult>;
|
|
666
|
+
/** Delete a memory entry. */
|
|
667
|
+
delete: (name: string, workspace?: string) => Promise<MemoryMutationResult>;
|
|
668
|
+
/** Create a new memory entry with starter frontmatter + body. */
|
|
669
|
+
create: (name: string, description?: string, workspace?: string) => Promise<MemoryMutationResult>;
|
|
670
|
+
};
|
|
519
671
|
}
|
|
520
672
|
|
|
521
673
|
declare global {
|
package/src/preload/index.cjs
CHANGED
|
@@ -162,9 +162,38 @@ contextBridge.exposeInMainWorld('api', {
|
|
|
162
162
|
ipcRenderer.on('schedule:state', listener);
|
|
163
163
|
return () => ipcRenderer.removeListener('schedule:state', listener);
|
|
164
164
|
},
|
|
165
|
+
// Bundle D — queue ops (queueOps.cjs).
|
|
166
|
+
lintQueue: () => ipcRenderer.invoke('schedule:lint-queue'),
|
|
167
|
+
archivePrds: (slugs) => ipcRenderer.invoke('schedule:archive-prd', { slugs }),
|
|
168
|
+
retagPrds: (items) => ipcRenderer.invoke('schedule:retag-prd', { items }),
|
|
165
169
|
},
|
|
166
170
|
supervisor: {
|
|
167
171
|
tickNow: () => ipcRenderer.invoke('supervisor:tick-now'),
|
|
168
172
|
getLog: () => ipcRenderer.invoke('supervisor:get-log'),
|
|
169
173
|
},
|
|
174
|
+
teams: {
|
|
175
|
+
list: () => ipcRenderer.invoke('teams:list'),
|
|
176
|
+
},
|
|
177
|
+
plugins: {
|
|
178
|
+
install: (payload) => ipcRenderer.invoke('plugins:install', payload),
|
|
179
|
+
onInstallProgress: (handler) => {
|
|
180
|
+
const listener = (_e, payload) => handler(payload);
|
|
181
|
+
ipcRenderer.on('plugins:install-progress', listener);
|
|
182
|
+
return () => ipcRenderer.removeListener('plugins:install-progress', listener);
|
|
183
|
+
},
|
|
184
|
+
},
|
|
185
|
+
memory: {
|
|
186
|
+
list: (workspace) => ipcRenderer.invoke('memory:list', workspace ? { workspace } : {}),
|
|
187
|
+
read: (name, workspace) => ipcRenderer.invoke('memory:read', workspace ? { name, workspace } : { name }),
|
|
188
|
+
write: (name, content, workspace) =>
|
|
189
|
+
ipcRenderer.invoke('memory:write', workspace ? { name, content, workspace } : { name, content }),
|
|
190
|
+
delete: (name, workspace) =>
|
|
191
|
+
ipcRenderer.invoke('memory:delete', workspace ? { name, workspace } : { name }),
|
|
192
|
+
create: (name, description, workspace) => {
|
|
193
|
+
const payload = { name };
|
|
194
|
+
if (description) payload.description = description;
|
|
195
|
+
if (workspace) payload.workspace = workspace;
|
|
196
|
+
return ipcRenderer.invoke('memory:create', payload);
|
|
197
|
+
},
|
|
198
|
+
},
|
|
170
199
|
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{c as D,l as t}from"./index-DjeqNwqn.js";import{H as d,D as l,h as c,F as u,b as h,S as m,c as p,f as w,g as _,C as R}from"./lspLanguageFeatures-D9xoxVlV.js";import{a as E,e as H,d as b,R as y,i as U,j as T,t as x,k as M}from"./lspLanguageFeatures-D9xoxVlV.js";const I=120*1e3;class f{constructor(n){this._defaults=n,this._worker=null,this._client=null,this._idleCheckInterval=window.setInterval(()=>this._checkIfIdle(),30*1e3),this._lastUsedTime=0,this._configChangeListener=this._defaults.onDidChange(()=>this._stopWorker())}_stopWorker(){this._worker&&(this._worker.dispose(),this._worker=null),this._client=null}dispose(){clearInterval(this._idleCheckInterval),this._configChangeListener.dispose(),this._stopWorker()}_checkIfIdle(){if(!this._worker)return;Date.now()-this._lastUsedTime>I&&this._stopWorker()}_getClient(){return this._lastUsedTime=Date.now(),this._client||(this._worker=D({moduleId:"vs/language/html/htmlWorker",createWorker:()=>new Worker(new URL(""+new URL("html.worker-DtiGdgqp.js",import.meta.url).href,import.meta.url),{type:"module"}),createData:{languageSettings:this._defaults.options,languageId:this._defaults.languageId},label:this._defaults.languageId}),this._client=this._worker.getProxy()),this._client}getLanguageServiceWorker(...n){let e;return this._getClient().then(r=>{e=r}).then(r=>{if(this._worker)return this._worker.withSyncedResources(n)}).then(r=>e)}}class v extends R{constructor(n){super(n,[".",":","<",'"',"=","/"])}}function C(i){const n=new f(i),e=(...o)=>n.getLanguageServiceWorker(...o);let r=i.languageId;t.registerCompletionItemProvider(r,new v(e)),t.registerHoverProvider(r,new d(e)),t.registerDocumentHighlightProvider(r,new l(e)),t.registerLinkProvider(r,new c(e)),t.registerFoldingRangeProvider(r,new u(e)),t.registerDocumentSymbolProvider(r,new h(e)),t.registerSelectionRangeProvider(r,new m(e)),t.registerRenameProvider(r,new p(e)),r==="html"&&(t.registerDocumentFormattingEditProvider(r,new w(e)),t.registerDocumentRangeFormattingEditProvider(r,new _(e)))}function L(i){const n=[],e=[],r=new f(i);n.push(r);const o=(...s)=>r.getLanguageServiceWorker(...s);function P(){const{languageId:s,modeConfiguration:a}=i;k(e),a.completionItems&&e.push(t.registerCompletionItemProvider(s,new v(o))),a.hovers&&e.push(t.registerHoverProvider(s,new d(o))),a.documentHighlights&&e.push(t.registerDocumentHighlightProvider(s,new l(o))),a.links&&e.push(t.registerLinkProvider(s,new c(o))),a.documentSymbols&&e.push(t.registerDocumentSymbolProvider(s,new h(o))),a.rename&&e.push(t.registerRenameProvider(s,new p(o))),a.foldingRanges&&e.push(t.registerFoldingRangeProvider(s,new u(o))),a.selectionRanges&&e.push(t.registerSelectionRangeProvider(s,new m(o))),a.documentFormattingEdits&&e.push(t.registerDocumentFormattingEditProvider(s,new w(o))),a.documentRangeFormattingEdits&&e.push(t.registerDocumentRangeFormattingEditProvider(s,new _(o)))}return P(),n.push(g(e)),g(n)}function g(i){return{dispose:()=>k(i)}}function k(i){for(;i.length;)i.pop().dispose()}export{R as CompletionAdapter,E as DefinitionAdapter,H as DiagnosticsAdapter,b as DocumentColorAdapter,w as DocumentFormattingEditProvider,l as DocumentHighlightAdapter,c as DocumentLinkAdapter,_ as DocumentRangeFormattingEditProvider,h as DocumentSymbolAdapter,u as FoldingRangeAdapter,d as HoverAdapter,y as ReferenceAdapter,p as RenameAdapter,m as SelectionRangeAdapter,f as WorkerManager,U as fromPosition,T as fromRange,L as setupMode,C as setupMode1,x as toRange,M as toTextEdit};
|