sessionlog 0.0.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/LICENSE +21 -0
- package/README.md +388 -0
- package/dist/agent/agents/claude-code.d.ts +76 -0
- package/dist/agent/agents/claude-code.d.ts.map +1 -0
- package/dist/agent/agents/claude-code.js +769 -0
- package/dist/agent/agents/claude-code.js.map +1 -0
- package/dist/agent/agents/cursor.d.ts +35 -0
- package/dist/agent/agents/cursor.d.ts.map +1 -0
- package/dist/agent/agents/cursor.js +294 -0
- package/dist/agent/agents/cursor.js.map +1 -0
- package/dist/agent/agents/gemini-cli.d.ts +62 -0
- package/dist/agent/agents/gemini-cli.d.ts.map +1 -0
- package/dist/agent/agents/gemini-cli.js +474 -0
- package/dist/agent/agents/gemini-cli.js.map +1 -0
- package/dist/agent/agents/opencode.d.ts +100 -0
- package/dist/agent/agents/opencode.d.ts.map +1 -0
- package/dist/agent/agents/opencode.js +423 -0
- package/dist/agent/agents/opencode.js.map +1 -0
- package/dist/agent/registry.d.ts +54 -0
- package/dist/agent/registry.d.ts.map +1 -0
- package/dist/agent/registry.js +123 -0
- package/dist/agent/registry.js.map +1 -0
- package/dist/agent/session-types.d.ts +45 -0
- package/dist/agent/session-types.d.ts.map +1 -0
- package/dist/agent/session-types.js +48 -0
- package/dist/agent/session-types.js.map +1 -0
- package/dist/agent/types.d.ts +126 -0
- package/dist/agent/types.d.ts.map +1 -0
- package/dist/agent/types.js +40 -0
- package/dist/agent/types.js.map +1 -0
- package/dist/cli.d.ts +12 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +425 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/clean.d.ts +30 -0
- package/dist/commands/clean.d.ts.map +1 -0
- package/dist/commands/clean.js +98 -0
- package/dist/commands/clean.js.map +1 -0
- package/dist/commands/disable.d.ts +23 -0
- package/dist/commands/disable.d.ts.map +1 -0
- package/dist/commands/disable.js +57 -0
- package/dist/commands/disable.js.map +1 -0
- package/dist/commands/doctor.d.ts +43 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +97 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/enable.d.ts +37 -0
- package/dist/commands/enable.d.ts.map +1 -0
- package/dist/commands/enable.js +133 -0
- package/dist/commands/enable.js.map +1 -0
- package/dist/commands/explain.d.ts +68 -0
- package/dist/commands/explain.d.ts.map +1 -0
- package/dist/commands/explain.js +182 -0
- package/dist/commands/explain.js.map +1 -0
- package/dist/commands/reset.d.ts +23 -0
- package/dist/commands/reset.d.ts.map +1 -0
- package/dist/commands/reset.js +68 -0
- package/dist/commands/reset.js.map +1 -0
- package/dist/commands/resume.d.ts +42 -0
- package/dist/commands/resume.d.ts.map +1 -0
- package/dist/commands/resume.js +133 -0
- package/dist/commands/resume.js.map +1 -0
- package/dist/commands/rewind.d.ts +34 -0
- package/dist/commands/rewind.d.ts.map +1 -0
- package/dist/commands/rewind.js +155 -0
- package/dist/commands/rewind.js.map +1 -0
- package/dist/commands/status.d.ts +51 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +112 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/config.d.ts +40 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +127 -0
- package/dist/config.js.map +1 -0
- package/dist/git-operations.d.ts +191 -0
- package/dist/git-operations.d.ts.map +1 -0
- package/dist/git-operations.js +462 -0
- package/dist/git-operations.js.map +1 -0
- package/dist/hooks/git-hooks.d.ts +22 -0
- package/dist/hooks/git-hooks.d.ts.map +1 -0
- package/dist/hooks/git-hooks.js +139 -0
- package/dist/hooks/git-hooks.js.map +1 -0
- package/dist/hooks/lifecycle.d.ts +21 -0
- package/dist/hooks/lifecycle.d.ts.map +1 -0
- package/dist/hooks/lifecycle.js +179 -0
- package/dist/hooks/lifecycle.js.map +1 -0
- package/dist/index.d.ts +76 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +166 -0
- package/dist/index.js.map +1 -0
- package/dist/security/redaction.d.ts +35 -0
- package/dist/security/redaction.d.ts.map +1 -0
- package/dist/security/redaction.js +239 -0
- package/dist/security/redaction.js.map +1 -0
- package/dist/session/state-machine.d.ts +90 -0
- package/dist/session/state-machine.d.ts.map +1 -0
- package/dist/session/state-machine.js +345 -0
- package/dist/session/state-machine.js.map +1 -0
- package/dist/store/checkpoint-store.d.ts +59 -0
- package/dist/store/checkpoint-store.d.ts.map +1 -0
- package/dist/store/checkpoint-store.js +321 -0
- package/dist/store/checkpoint-store.js.map +1 -0
- package/dist/store/native-store.d.ts +14 -0
- package/dist/store/native-store.d.ts.map +1 -0
- package/dist/store/native-store.js +159 -0
- package/dist/store/native-store.js.map +1 -0
- package/dist/store/provider-types.d.ts +78 -0
- package/dist/store/provider-types.d.ts.map +1 -0
- package/dist/store/provider-types.js +12 -0
- package/dist/store/provider-types.js.map +1 -0
- package/dist/store/session-store.d.ts +36 -0
- package/dist/store/session-store.d.ts.map +1 -0
- package/dist/store/session-store.js +193 -0
- package/dist/store/session-store.js.map +1 -0
- package/dist/strategy/attribution.d.ts +39 -0
- package/dist/strategy/attribution.d.ts.map +1 -0
- package/dist/strategy/attribution.js +225 -0
- package/dist/strategy/attribution.js.map +1 -0
- package/dist/strategy/common.d.ts +57 -0
- package/dist/strategy/common.d.ts.map +1 -0
- package/dist/strategy/common.js +156 -0
- package/dist/strategy/common.js.map +1 -0
- package/dist/strategy/content-overlap.d.ts +33 -0
- package/dist/strategy/content-overlap.d.ts.map +1 -0
- package/dist/strategy/content-overlap.js +176 -0
- package/dist/strategy/content-overlap.js.map +1 -0
- package/dist/strategy/manual-commit.d.ts +36 -0
- package/dist/strategy/manual-commit.d.ts.map +1 -0
- package/dist/strategy/manual-commit.js +717 -0
- package/dist/strategy/manual-commit.js.map +1 -0
- package/dist/strategy/types.d.ts +163 -0
- package/dist/strategy/types.d.ts.map +1 -0
- package/dist/strategy/types.js +48 -0
- package/dist/strategy/types.js.map +1 -0
- package/dist/summarize/claude-generator.d.ts +25 -0
- package/dist/summarize/claude-generator.d.ts.map +1 -0
- package/dist/summarize/claude-generator.js +87 -0
- package/dist/summarize/claude-generator.js.map +1 -0
- package/dist/summarize/summarize.d.ts +52 -0
- package/dist/summarize/summarize.d.ts.map +1 -0
- package/dist/summarize/summarize.js +335 -0
- package/dist/summarize/summarize.js.map +1 -0
- package/dist/types.d.ts +293 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +94 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/chunk-files.d.ts +25 -0
- package/dist/utils/chunk-files.d.ts.map +1 -0
- package/dist/utils/chunk-files.js +47 -0
- package/dist/utils/chunk-files.js.map +1 -0
- package/dist/utils/commit-message.d.ts +11 -0
- package/dist/utils/commit-message.d.ts.map +1 -0
- package/dist/utils/commit-message.js +54 -0
- package/dist/utils/commit-message.js.map +1 -0
- package/dist/utils/detect-agent.d.ts +19 -0
- package/dist/utils/detect-agent.d.ts.map +1 -0
- package/dist/utils/detect-agent.js +34 -0
- package/dist/utils/detect-agent.js.map +1 -0
- package/dist/utils/hook-managers.d.ts +24 -0
- package/dist/utils/hook-managers.d.ts.map +1 -0
- package/dist/utils/hook-managers.js +96 -0
- package/dist/utils/hook-managers.js.map +1 -0
- package/dist/utils/ide-tags.d.ts +12 -0
- package/dist/utils/ide-tags.d.ts.map +1 -0
- package/dist/utils/ide-tags.js +30 -0
- package/dist/utils/ide-tags.js.map +1 -0
- package/dist/utils/paths.d.ts +32 -0
- package/dist/utils/paths.d.ts.map +1 -0
- package/dist/utils/paths.js +55 -0
- package/dist/utils/paths.js.map +1 -0
- package/dist/utils/preview-rewind.d.ts +23 -0
- package/dist/utils/preview-rewind.d.ts.map +1 -0
- package/dist/utils/preview-rewind.js +63 -0
- package/dist/utils/preview-rewind.js.map +1 -0
- package/dist/utils/rewind-conflict.d.ts +52 -0
- package/dist/utils/rewind-conflict.d.ts.map +1 -0
- package/dist/utils/rewind-conflict.js +79 -0
- package/dist/utils/rewind-conflict.js.map +1 -0
- package/dist/utils/shadow-branch.d.ts +44 -0
- package/dist/utils/shadow-branch.d.ts.map +1 -0
- package/dist/utils/shadow-branch.js +93 -0
- package/dist/utils/shadow-branch.js.map +1 -0
- package/dist/utils/string-utils.d.ts +24 -0
- package/dist/utils/string-utils.d.ts.map +1 -0
- package/dist/utils/string-utils.js +47 -0
- package/dist/utils/string-utils.js.map +1 -0
- package/dist/utils/todo-extract.d.ts +52 -0
- package/dist/utils/todo-extract.d.ts.map +1 -0
- package/dist/utils/todo-extract.js +167 -0
- package/dist/utils/todo-extract.js.map +1 -0
- package/dist/utils/trailers.d.ts +36 -0
- package/dist/utils/trailers.d.ts.map +1 -0
- package/dist/utils/trailers.js +148 -0
- package/dist/utils/trailers.js.map +1 -0
- package/dist/utils/transcript-parse.d.ts +57 -0
- package/dist/utils/transcript-parse.d.ts.map +1 -0
- package/dist/utils/transcript-parse.js +126 -0
- package/dist/utils/transcript-parse.js.map +1 -0
- package/dist/utils/transcript-timestamp.d.ts +22 -0
- package/dist/utils/transcript-timestamp.d.ts.map +1 -0
- package/dist/utils/transcript-timestamp.js +56 -0
- package/dist/utils/transcript-timestamp.js.map +1 -0
- package/dist/utils/tree-ops.d.ts +47 -0
- package/dist/utils/tree-ops.d.ts.map +1 -0
- package/dist/utils/tree-ops.js +145 -0
- package/dist/utils/tree-ops.js.map +1 -0
- package/dist/utils/tty.d.ts +25 -0
- package/dist/utils/tty.d.ts.map +1 -0
- package/dist/utils/tty.js +70 -0
- package/dist/utils/tty.js.map +1 -0
- package/dist/utils/validation.d.ts +31 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +59 -0
- package/dist/utils/validation.js.map +1 -0
- package/dist/utils/worktree.d.ts +16 -0
- package/dist/utils/worktree.d.ts.map +1 -0
- package/dist/utils/worktree.js +50 -0
- package/dist/utils/worktree.js.map +1 -0
- package/package.json +64 -0
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Explain Command
|
|
3
|
+
*
|
|
4
|
+
* Provides human-readable context about sessions, commits, and checkpoints.
|
|
5
|
+
* This is the library implementation - consumers (CLI, IDE plugins) handle
|
|
6
|
+
* their own output formatting and pager support.
|
|
7
|
+
*/
|
|
8
|
+
import type { CheckpointID, Summary, AgentType, TokenUsage } from '../types.js';
|
|
9
|
+
export interface CheckpointDetail {
|
|
10
|
+
checkpointID: CheckpointID;
|
|
11
|
+
sessionID: string;
|
|
12
|
+
agent?: AgentType;
|
|
13
|
+
strategy: string;
|
|
14
|
+
createdAt: string;
|
|
15
|
+
branch?: string;
|
|
16
|
+
checkpointsCount: number;
|
|
17
|
+
filesTouched: string[];
|
|
18
|
+
tokenUsage?: TokenUsage;
|
|
19
|
+
summary?: Summary;
|
|
20
|
+
isTaskCheckpoint?: boolean;
|
|
21
|
+
turnID?: string;
|
|
22
|
+
transcriptIdentifierAtStart?: string;
|
|
23
|
+
checkpointTranscriptStart: number;
|
|
24
|
+
}
|
|
25
|
+
export interface CheckpointListItem {
|
|
26
|
+
checkpointID: CheckpointID;
|
|
27
|
+
sessionID: string;
|
|
28
|
+
message: string;
|
|
29
|
+
date: string;
|
|
30
|
+
isTaskCheckpoint: boolean;
|
|
31
|
+
agent?: AgentType;
|
|
32
|
+
sessionCount: number;
|
|
33
|
+
sessionIDs: string[];
|
|
34
|
+
}
|
|
35
|
+
export interface ExplainOptions {
|
|
36
|
+
cwd?: string;
|
|
37
|
+
sessionFilter?: string;
|
|
38
|
+
maxDepth?: number;
|
|
39
|
+
searchAll?: boolean;
|
|
40
|
+
}
|
|
41
|
+
export interface CommitExplainResult {
|
|
42
|
+
commitSHA: string;
|
|
43
|
+
commitMessage: string;
|
|
44
|
+
checkpointID: CheckpointID | null;
|
|
45
|
+
detail: CheckpointDetail | null;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* List checkpoints on the current branch.
|
|
49
|
+
* Optionally filtered by session ID prefix.
|
|
50
|
+
*/
|
|
51
|
+
export declare function listCheckpoints(options?: ExplainOptions): Promise<CheckpointListItem[]>;
|
|
52
|
+
/**
|
|
53
|
+
* Get detailed information about a specific checkpoint.
|
|
54
|
+
*/
|
|
55
|
+
export declare function getCheckpointDetail(checkpointID: CheckpointID, options?: ExplainOptions): Promise<CheckpointDetail | null>;
|
|
56
|
+
/**
|
|
57
|
+
* Get the transcript content for a checkpoint.
|
|
58
|
+
*/
|
|
59
|
+
export declare function getCheckpointTranscript(checkpointID: CheckpointID, options?: ExplainOptions): Promise<Buffer | null>;
|
|
60
|
+
/**
|
|
61
|
+
* Explain a specific commit by finding its associated checkpoint.
|
|
62
|
+
*/
|
|
63
|
+
export declare function explainCommit(commitRef: string, options?: ExplainOptions): Promise<CommitExplainResult | null>;
|
|
64
|
+
/**
|
|
65
|
+
* Find a checkpoint by ID prefix (partial match).
|
|
66
|
+
*/
|
|
67
|
+
export declare function findCheckpointByPrefix(prefix: string, options?: ExplainOptions): Promise<CheckpointID | null>;
|
|
68
|
+
//# sourceMappingURL=explain.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"explain.d.ts","sourceRoot":"","sources":["../../src/commands/explain.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAqB,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AASnG,MAAM,WAAW,gBAAgB;IAC/B,YAAY,EAAE,YAAY,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2BAA2B,CAAC,EAAE,MAAM,CAAC;IACrC,yBAAyB,EAAE,MAAM,CAAC;CACnC;AAED,MAAM,WAAW,kBAAkB;IACjC,YAAY,EAAE,YAAY,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB,EAAE,OAAO,CAAC;IAC1B,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,cAAc;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,YAAY,GAAG,IAAI,CAAC;IAClC,MAAM,EAAE,gBAAgB,GAAG,IAAI,CAAC;CACjC;AAMD;;;GAGG;AACH,wBAAsB,eAAe,CAAC,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAiEjG;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,YAAY,EAAE,YAAY,EAC1B,OAAO,GAAE,cAAmB,GAC3B,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CA6BlC;AAED;;GAEG;AACH,wBAAsB,uBAAuB,CAC3C,YAAY,EAAE,YAAY,EAC1B,OAAO,GAAE,cAAmB,GAC3B,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAUxB;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,cAAmB,GAC3B,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC,CAgCrC;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,cAAmB,GAC3B,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAyB9B"}
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Explain Command
|
|
3
|
+
*
|
|
4
|
+
* Provides human-readable context about sessions, commits, and checkpoints.
|
|
5
|
+
* This is the library implementation - consumers (CLI, IDE plugins) handle
|
|
6
|
+
* their own output formatting and pager support.
|
|
7
|
+
*/
|
|
8
|
+
import { CHECKPOINTS_BRANCH, checkpointIDPath } from '../types.js';
|
|
9
|
+
import { git, catFile, lsTree } from '../git-operations.js';
|
|
10
|
+
import { parseCheckpoint, parseAllSessions } from '../utils/trailers.js';
|
|
11
|
+
// ============================================================================
|
|
12
|
+
// Public API
|
|
13
|
+
// ============================================================================
|
|
14
|
+
/**
|
|
15
|
+
* List checkpoints on the current branch.
|
|
16
|
+
* Optionally filtered by session ID prefix.
|
|
17
|
+
*/
|
|
18
|
+
export async function listCheckpoints(options = {}) {
|
|
19
|
+
const cwd = options.cwd;
|
|
20
|
+
const maxDepth = options.searchAll ? 0 : (options.maxDepth ?? 500);
|
|
21
|
+
// Get commits on the current branch
|
|
22
|
+
const logArgs = ['log', '--format=%H %s'];
|
|
23
|
+
if (maxDepth > 0)
|
|
24
|
+
logArgs.push(`-n`, `${maxDepth}`);
|
|
25
|
+
let logOutput;
|
|
26
|
+
try {
|
|
27
|
+
logOutput = await git(logArgs, { cwd });
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
return [];
|
|
31
|
+
}
|
|
32
|
+
const items = [];
|
|
33
|
+
for (const line of logOutput.split('\n')) {
|
|
34
|
+
if (!line.trim())
|
|
35
|
+
continue;
|
|
36
|
+
const spaceIdx = line.indexOf(' ');
|
|
37
|
+
if (spaceIdx === -1)
|
|
38
|
+
continue;
|
|
39
|
+
const sha = line.slice(0, spaceIdx);
|
|
40
|
+
const message = line.slice(spaceIdx + 1);
|
|
41
|
+
// Get full commit message to check for trailers
|
|
42
|
+
let fullMessage;
|
|
43
|
+
try {
|
|
44
|
+
fullMessage = await git(['log', '-1', '--format=%B', sha], { cwd });
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
continue;
|
|
48
|
+
}
|
|
49
|
+
const [cpID, hasCp] = parseCheckpoint(fullMessage);
|
|
50
|
+
if (!hasCp || !cpID)
|
|
51
|
+
continue;
|
|
52
|
+
const sessionIDs = parseAllSessions(fullMessage);
|
|
53
|
+
// Apply session filter
|
|
54
|
+
if (options.sessionFilter) {
|
|
55
|
+
const hasMatch = sessionIDs.some((sid) => sid.startsWith(options.sessionFilter));
|
|
56
|
+
if (!hasMatch)
|
|
57
|
+
continue;
|
|
58
|
+
}
|
|
59
|
+
// Get commit date
|
|
60
|
+
let date;
|
|
61
|
+
try {
|
|
62
|
+
date = (await git(['log', '-1', '--format=%aI', sha], { cwd })).trim();
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
date = '';
|
|
66
|
+
}
|
|
67
|
+
items.push({
|
|
68
|
+
checkpointID: cpID,
|
|
69
|
+
sessionID: sessionIDs[0] ?? '',
|
|
70
|
+
message: message.trim(),
|
|
71
|
+
date,
|
|
72
|
+
isTaskCheckpoint: message.includes('[task]'),
|
|
73
|
+
sessionCount: sessionIDs.length,
|
|
74
|
+
sessionIDs,
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
return items;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Get detailed information about a specific checkpoint.
|
|
81
|
+
*/
|
|
82
|
+
export async function getCheckpointDetail(checkpointID, options = {}) {
|
|
83
|
+
const cwd = options.cwd;
|
|
84
|
+
// Try to read committed metadata from the checkpoints branch
|
|
85
|
+
const metadataPath = `${checkpointIDPath(checkpointID)}/metadata.json`;
|
|
86
|
+
try {
|
|
87
|
+
const content = await catFile(`${CHECKPOINTS_BRANCH}:${metadataPath}`, cwd);
|
|
88
|
+
const metadata = JSON.parse(content);
|
|
89
|
+
return {
|
|
90
|
+
checkpointID: metadata.checkpointID,
|
|
91
|
+
sessionID: metadata.sessionID,
|
|
92
|
+
agent: metadata.agent,
|
|
93
|
+
strategy: metadata.strategy,
|
|
94
|
+
createdAt: metadata.createdAt,
|
|
95
|
+
branch: metadata.branch,
|
|
96
|
+
checkpointsCount: metadata.checkpointsCount,
|
|
97
|
+
filesTouched: metadata.filesTouched,
|
|
98
|
+
tokenUsage: metadata.tokenUsage,
|
|
99
|
+
summary: metadata.summary,
|
|
100
|
+
isTaskCheckpoint: metadata.isTask,
|
|
101
|
+
turnID: metadata.turnID,
|
|
102
|
+
transcriptIdentifierAtStart: metadata.transcriptIdentifierAtStart,
|
|
103
|
+
checkpointTranscriptStart: metadata.checkpointTranscriptStart,
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
catch {
|
|
107
|
+
return null;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Get the transcript content for a checkpoint.
|
|
112
|
+
*/
|
|
113
|
+
export async function getCheckpointTranscript(checkpointID, options = {}) {
|
|
114
|
+
const cwd = options.cwd;
|
|
115
|
+
const transcriptPath = `${checkpointIDPath(checkpointID)}/transcript`;
|
|
116
|
+
try {
|
|
117
|
+
const content = await catFile(`${CHECKPOINTS_BRANCH}:${transcriptPath}`, cwd);
|
|
118
|
+
return Buffer.from(content, 'utf-8');
|
|
119
|
+
}
|
|
120
|
+
catch {
|
|
121
|
+
return null;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Explain a specific commit by finding its associated checkpoint.
|
|
126
|
+
*/
|
|
127
|
+
export async function explainCommit(commitRef, options = {}) {
|
|
128
|
+
const cwd = options.cwd;
|
|
129
|
+
let fullMessage;
|
|
130
|
+
try {
|
|
131
|
+
fullMessage = await git(['log', '-1', '--format=%B', commitRef], { cwd });
|
|
132
|
+
}
|
|
133
|
+
catch {
|
|
134
|
+
return null;
|
|
135
|
+
}
|
|
136
|
+
const [cpID] = parseCheckpoint(fullMessage);
|
|
137
|
+
let sha;
|
|
138
|
+
try {
|
|
139
|
+
sha = (await git(['rev-parse', commitRef], { cwd })).trim();
|
|
140
|
+
}
|
|
141
|
+
catch {
|
|
142
|
+
return null;
|
|
143
|
+
}
|
|
144
|
+
const message = fullMessage.split('\n')[0] ?? '';
|
|
145
|
+
let detail = null;
|
|
146
|
+
if (cpID) {
|
|
147
|
+
detail = await getCheckpointDetail(cpID, options);
|
|
148
|
+
}
|
|
149
|
+
return {
|
|
150
|
+
commitSHA: sha,
|
|
151
|
+
commitMessage: message,
|
|
152
|
+
checkpointID: cpID,
|
|
153
|
+
detail,
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Find a checkpoint by ID prefix (partial match).
|
|
158
|
+
*/
|
|
159
|
+
export async function findCheckpointByPrefix(prefix, options = {}) {
|
|
160
|
+
const cwd = options.cwd;
|
|
161
|
+
// For full IDs, just return directly
|
|
162
|
+
if (prefix.length === 12)
|
|
163
|
+
return prefix;
|
|
164
|
+
// Need at least 2 chars for shard prefix
|
|
165
|
+
if (prefix.length < 2)
|
|
166
|
+
return null;
|
|
167
|
+
const shardPrefix = prefix.slice(0, 2);
|
|
168
|
+
const remainder = prefix.slice(2);
|
|
169
|
+
try {
|
|
170
|
+
const entries = await lsTree(CHECKPOINTS_BRANCH, shardPrefix, cwd);
|
|
171
|
+
for (const entry of entries) {
|
|
172
|
+
if (entry.name.startsWith(remainder)) {
|
|
173
|
+
return `${shardPrefix}${entry.name}`;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
catch {
|
|
178
|
+
// Shard doesn't exist
|
|
179
|
+
}
|
|
180
|
+
return null;
|
|
181
|
+
}
|
|
182
|
+
//# sourceMappingURL=explain.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"explain.js","sourceRoot":"","sources":["../../src/commands/explain.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reset Command
|
|
3
|
+
*
|
|
4
|
+
* Deletes shadow branch and session state for the current HEAD.
|
|
5
|
+
* More targeted than clean — only affects the current commit's sessions.
|
|
6
|
+
*/
|
|
7
|
+
export interface ResetOptions {
|
|
8
|
+
cwd?: string;
|
|
9
|
+
/** Reset a specific session instead of all */
|
|
10
|
+
sessionID?: string;
|
|
11
|
+
/** Skip confirmation (for programmatic use) */
|
|
12
|
+
force?: boolean;
|
|
13
|
+
}
|
|
14
|
+
export interface ResetResult {
|
|
15
|
+
sessionsReset: string[];
|
|
16
|
+
branchesDeleted: string[];
|
|
17
|
+
errors: string[];
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Reset shadow branches and session state for the current HEAD
|
|
21
|
+
*/
|
|
22
|
+
export declare function reset(options?: ResetOptions): Promise<ResetResult>;
|
|
23
|
+
//# sourceMappingURL=reset.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reset.d.ts","sourceRoot":"","sources":["../../src/commands/reset.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAWH,MAAM,WAAW,YAAY;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,8CAA8C;IAC9C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,+CAA+C;IAC/C,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAMD;;GAEG;AACH,wBAAsB,KAAK,CAAC,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,CAmE5E"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reset Command
|
|
3
|
+
*
|
|
4
|
+
* Deletes shadow branch and session state for the current HEAD.
|
|
5
|
+
* More targeted than clean — only affects the current commit's sessions.
|
|
6
|
+
*/
|
|
7
|
+
import { getHead } from '../git-operations.js';
|
|
8
|
+
import { createSessionStore } from '../store/session-store.js';
|
|
9
|
+
import { createCheckpointStore } from '../store/checkpoint-store.js';
|
|
10
|
+
// ============================================================================
|
|
11
|
+
// Implementation
|
|
12
|
+
// ============================================================================
|
|
13
|
+
/**
|
|
14
|
+
* Reset shadow branches and session state for the current HEAD
|
|
15
|
+
*/
|
|
16
|
+
export async function reset(options = {}) {
|
|
17
|
+
const cwd = options.cwd;
|
|
18
|
+
const sessionStore = createSessionStore(cwd);
|
|
19
|
+
const checkpointStore = createCheckpointStore(cwd);
|
|
20
|
+
const head = await getHead(cwd);
|
|
21
|
+
const errors = [];
|
|
22
|
+
const sessionsReset = [];
|
|
23
|
+
const branchesDeleted = [];
|
|
24
|
+
const sessions = await sessionStore.list();
|
|
25
|
+
// Find sessions matching the current HEAD
|
|
26
|
+
let matchingSessions;
|
|
27
|
+
if (options.sessionID) {
|
|
28
|
+
matchingSessions = sessions.filter((s) => s.sessionID === options.sessionID);
|
|
29
|
+
if (matchingSessions.length === 0) {
|
|
30
|
+
errors.push(`Session not found: ${options.sessionID}`);
|
|
31
|
+
return { sessionsReset, branchesDeleted, errors };
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
matchingSessions = sessions.filter((s) => s.baseCommit === head || head.startsWith(s.baseCommit));
|
|
36
|
+
}
|
|
37
|
+
// Safety check: warn about active sessions
|
|
38
|
+
if (!options.force) {
|
|
39
|
+
const activeSessions = matchingSessions.filter((s) => s.phase === 'active');
|
|
40
|
+
if (activeSessions.length > 0) {
|
|
41
|
+
errors.push(`${activeSessions.length} active session(s) found. Use --force to reset active sessions.`);
|
|
42
|
+
return { sessionsReset, branchesDeleted, errors };
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
for (const session of matchingSessions) {
|
|
46
|
+
// Delete shadow branch
|
|
47
|
+
if (session.baseCommit) {
|
|
48
|
+
const branchName = checkpointStore.getShadowBranchName(session.baseCommit, session.worktreeID);
|
|
49
|
+
try {
|
|
50
|
+
await checkpointStore.deleteShadowBranch(branchName);
|
|
51
|
+
branchesDeleted.push(branchName);
|
|
52
|
+
}
|
|
53
|
+
catch (e) {
|
|
54
|
+
errors.push(`Failed to delete branch ${branchName}: ${e instanceof Error ? e.message : String(e)}`);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
// Delete session state
|
|
58
|
+
try {
|
|
59
|
+
await sessionStore.delete(session.sessionID);
|
|
60
|
+
sessionsReset.push(session.sessionID);
|
|
61
|
+
}
|
|
62
|
+
catch (e) {
|
|
63
|
+
errors.push(`Failed to delete session ${session.sessionID}: ${e instanceof Error ? e.message : String(e)}`);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return { sessionsReset, branchesDeleted, errors };
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=reset.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reset.js","sourceRoot":"","sources":["../../src/commands/reset.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resume Command
|
|
3
|
+
*
|
|
4
|
+
* Library implementation for resuming agent sessions from branches.
|
|
5
|
+
* Handles branch checkout, session discovery from commit trailers,
|
|
6
|
+
* and transcript restoration.
|
|
7
|
+
*/
|
|
8
|
+
import type { CheckpointID } from '../types.js';
|
|
9
|
+
export interface ResumeInfo {
|
|
10
|
+
branchName: string;
|
|
11
|
+
sessionID: string;
|
|
12
|
+
sessionIDs: string[];
|
|
13
|
+
checkpointID: CheckpointID | null;
|
|
14
|
+
resumeCommand: string;
|
|
15
|
+
commitSHA: string;
|
|
16
|
+
commitMessage: string;
|
|
17
|
+
needsReset: boolean;
|
|
18
|
+
resetTargetSHA?: string;
|
|
19
|
+
}
|
|
20
|
+
export interface ResumeOptions {
|
|
21
|
+
cwd?: string;
|
|
22
|
+
force?: boolean;
|
|
23
|
+
}
|
|
24
|
+
export interface ResumeResult {
|
|
25
|
+
success: boolean;
|
|
26
|
+
info?: ResumeInfo;
|
|
27
|
+
error?: string;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Discover resume information for a branch without performing any actions.
|
|
31
|
+
* This is useful for preview/dry-run scenarios.
|
|
32
|
+
*/
|
|
33
|
+
export declare function discoverResumeInfo(branchName: string, options?: ResumeOptions): Promise<ResumeResult>;
|
|
34
|
+
/**
|
|
35
|
+
* Get a list of branches that have checkpointed sessions.
|
|
36
|
+
*/
|
|
37
|
+
export declare function listResumableBranches(options?: ResumeOptions): Promise<Array<{
|
|
38
|
+
branch: string;
|
|
39
|
+
sessionID: string;
|
|
40
|
+
lastCommit: string;
|
|
41
|
+
}>>;
|
|
42
|
+
//# sourceMappingURL=resume.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resume.d.ts","sourceRoot":"","sources":["../../src/commands/resume.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAQhD,MAAM,WAAW,UAAU;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,YAAY,EAAE,YAAY,GAAG,IAAI,CAAC;IAClC,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,OAAO,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,aAAa;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAMD;;;GAGG;AACH,wBAAsB,kBAAkB,CACtC,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,YAAY,CAAC,CA+BvB;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,KAAK,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CA2C3E"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resume Command
|
|
3
|
+
*
|
|
4
|
+
* Library implementation for resuming agent sessions from branches.
|
|
5
|
+
* Handles branch checkout, session discovery from commit trailers,
|
|
6
|
+
* and transcript restoration.
|
|
7
|
+
*/
|
|
8
|
+
import { git, refExists } from '../git-operations.js';
|
|
9
|
+
import { parseCheckpoint, parseAllSessions } from '../utils/trailers.js';
|
|
10
|
+
// ============================================================================
|
|
11
|
+
// Public API
|
|
12
|
+
// ============================================================================
|
|
13
|
+
/**
|
|
14
|
+
* Discover resume information for a branch without performing any actions.
|
|
15
|
+
* This is useful for preview/dry-run scenarios.
|
|
16
|
+
*/
|
|
17
|
+
export async function discoverResumeInfo(branchName, options = {}) {
|
|
18
|
+
const cwd = options.cwd;
|
|
19
|
+
// Check if branch exists locally
|
|
20
|
+
const localExists = await refExists(`refs/heads/${branchName}`, cwd);
|
|
21
|
+
if (!localExists) {
|
|
22
|
+
// Check remote
|
|
23
|
+
const remoteExists = await refExists(`refs/remotes/origin/${branchName}`, cwd);
|
|
24
|
+
if (!remoteExists) {
|
|
25
|
+
return {
|
|
26
|
+
success: false,
|
|
27
|
+
error: `Branch '${branchName}' not found locally or on origin`,
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
return {
|
|
31
|
+
success: false,
|
|
32
|
+
error: `Branch '${branchName}' exists on origin but not locally. Fetch it first.`,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
// Find the most recent commit with a checkpoint trailer
|
|
36
|
+
const info = await findSessionInfo(branchName, cwd);
|
|
37
|
+
if (!info) {
|
|
38
|
+
return {
|
|
39
|
+
success: false,
|
|
40
|
+
error: `No checkpointed session found on branch '${branchName}'`,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
return { success: true, info };
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Get a list of branches that have checkpointed sessions.
|
|
47
|
+
*/
|
|
48
|
+
export async function listResumableBranches(options = {}) {
|
|
49
|
+
const cwd = options.cwd;
|
|
50
|
+
const results = [];
|
|
51
|
+
let branchOutput;
|
|
52
|
+
try {
|
|
53
|
+
branchOutput = await git(['branch', '--format=%(refname:short)'], { cwd });
|
|
54
|
+
}
|
|
55
|
+
catch {
|
|
56
|
+
return [];
|
|
57
|
+
}
|
|
58
|
+
for (const branch of branchOutput.split('\n')) {
|
|
59
|
+
const trimmed = branch.trim();
|
|
60
|
+
if (!trimmed)
|
|
61
|
+
continue;
|
|
62
|
+
// Get the last few commits to check for checkpoint trailers
|
|
63
|
+
try {
|
|
64
|
+
const logOutput = await git(['log', '-10', '--format=%H', trimmed], { cwd });
|
|
65
|
+
for (const sha of logOutput.split('\n')) {
|
|
66
|
+
if (!sha.trim())
|
|
67
|
+
continue;
|
|
68
|
+
const fullMessage = await git(['log', '-1', '--format=%B', sha.trim()], { cwd });
|
|
69
|
+
const [cpID, hasCp] = parseCheckpoint(fullMessage);
|
|
70
|
+
if (hasCp && cpID) {
|
|
71
|
+
const sessionIDs = parseAllSessions(fullMessage);
|
|
72
|
+
if (sessionIDs.length > 0) {
|
|
73
|
+
results.push({
|
|
74
|
+
branch: trimmed,
|
|
75
|
+
sessionID: sessionIDs[0],
|
|
76
|
+
lastCommit: sha.trim().slice(0, 7),
|
|
77
|
+
});
|
|
78
|
+
break; // Only report first match per branch
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
continue;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
return results;
|
|
88
|
+
}
|
|
89
|
+
// ============================================================================
|
|
90
|
+
// Internal Helpers
|
|
91
|
+
// ============================================================================
|
|
92
|
+
async function findSessionInfo(branchName, cwd) {
|
|
93
|
+
// Walk commits on the branch looking for one with a checkpoint trailer
|
|
94
|
+
let logOutput;
|
|
95
|
+
try {
|
|
96
|
+
logOutput = await git(['log', '-50', '--format=%H', branchName], { cwd });
|
|
97
|
+
}
|
|
98
|
+
catch {
|
|
99
|
+
return null;
|
|
100
|
+
}
|
|
101
|
+
const shas = logOutput.split('\n').filter(Boolean);
|
|
102
|
+
for (let i = 0; i < shas.length; i++) {
|
|
103
|
+
const sha = shas[i].trim();
|
|
104
|
+
if (!sha)
|
|
105
|
+
continue;
|
|
106
|
+
let fullMessage;
|
|
107
|
+
try {
|
|
108
|
+
fullMessage = await git(['log', '-1', '--format=%B', sha], { cwd });
|
|
109
|
+
}
|
|
110
|
+
catch {
|
|
111
|
+
continue;
|
|
112
|
+
}
|
|
113
|
+
const [cpID, hasCp] = parseCheckpoint(fullMessage);
|
|
114
|
+
if (!hasCp || !cpID)
|
|
115
|
+
continue;
|
|
116
|
+
const sessionIDs = parseAllSessions(fullMessage);
|
|
117
|
+
const message = fullMessage.split('\n')[0] ?? '';
|
|
118
|
+
const needsReset = i > 0; // If not the tip commit, needs reset
|
|
119
|
+
return {
|
|
120
|
+
branchName,
|
|
121
|
+
sessionID: sessionIDs[0] ?? '',
|
|
122
|
+
sessionIDs,
|
|
123
|
+
checkpointID: cpID,
|
|
124
|
+
resumeCommand: '', // To be filled by consumer with agent-specific command
|
|
125
|
+
commitSHA: sha,
|
|
126
|
+
commitMessage: message,
|
|
127
|
+
needsReset,
|
|
128
|
+
resetTargetSHA: needsReset ? sha : undefined,
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
return null;
|
|
132
|
+
}
|
|
133
|
+
//# sourceMappingURL=resume.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resume.js","sourceRoot":"","sources":["../../src/commands/resume.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rewind Command
|
|
3
|
+
*
|
|
4
|
+
* Browse checkpoints and restore session state to a previous point.
|
|
5
|
+
* Supports both shadow branch (temporary) and committed checkpoint rewind.
|
|
6
|
+
*/
|
|
7
|
+
import type { RewindPoint } from '../types.js';
|
|
8
|
+
export interface RewindOptions {
|
|
9
|
+
cwd?: string;
|
|
10
|
+
/** Maximum number of rewind points to return */
|
|
11
|
+
limit?: number;
|
|
12
|
+
}
|
|
13
|
+
export interface RewindResult {
|
|
14
|
+
success: boolean;
|
|
15
|
+
message: string;
|
|
16
|
+
rewindPoint?: RewindPoint;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* List available rewind points
|
|
20
|
+
*/
|
|
21
|
+
export declare function listRewindPoints(options?: RewindOptions): Promise<RewindPoint[]>;
|
|
22
|
+
/**
|
|
23
|
+
* Rewind to a specific point (non-interactive)
|
|
24
|
+
*/
|
|
25
|
+
export declare function rewindTo(pointID: string, options?: {
|
|
26
|
+
cwd?: string;
|
|
27
|
+
logsOnly?: boolean;
|
|
28
|
+
reset?: boolean;
|
|
29
|
+
}): Promise<RewindResult>;
|
|
30
|
+
/**
|
|
31
|
+
* List rewind points as JSON (for CLI --list flag)
|
|
32
|
+
*/
|
|
33
|
+
export declare function listRewindPointsJSON(options?: RewindOptions): Promise<string>;
|
|
34
|
+
//# sourceMappingURL=rewind.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rewind.d.ts","sourceRoot":"","sources":["../../src/commands/rewind.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAQ/C,MAAM,WAAW,aAAa;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,gDAAgD;IAChD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B;AAMD;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CA8D1F;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAC5B,OAAO,EAAE,MAAM,EACf,OAAO,GAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAO,GAClE,OAAO,CAAC,YAAY,CAAC,CAmEvB;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,CAkBvF"}
|