sessionlog 0.0.1 → 0.0.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 +99 -34
- package/dist/agent/agents/claude-code.d.ts +1 -1
- package/dist/agent/agents/claude-code.js +13 -13
- package/dist/agent/agents/claude-code.js.map +1 -1
- package/dist/agent/agents/cursor.d.ts +1 -1
- package/dist/agent/agents/cursor.js +10 -10
- package/dist/agent/agents/cursor.js.map +1 -1
- package/dist/agent/agents/gemini-cli.d.ts +1 -1
- package/dist/agent/agents/gemini-cli.d.ts.map +1 -1
- package/dist/agent/agents/gemini-cli.js +49 -24
- package/dist/agent/agents/gemini-cli.js.map +1 -1
- package/dist/agent/agents/opencode.d.ts +1 -1
- package/dist/agent/agents/opencode.js +18 -18
- package/dist/agent/agents/opencode.js.map +1 -1
- package/dist/agent/types.d.ts +2 -2
- package/dist/agent/types.d.ts.map +1 -1
- package/dist/agent/types.js +1 -1
- package/dist/cli.d.ts +1 -1
- package/dist/cli.js +49 -23
- package/dist/cli.js.map +1 -1
- package/dist/commands/clean.d.ts +1 -1
- package/dist/commands/clean.js +3 -3
- package/dist/commands/clean.js.map +1 -1
- package/dist/commands/disable.d.ts +3 -3
- package/dist/commands/disable.js +3 -3
- package/dist/commands/enable.d.ts +2 -2
- package/dist/commands/enable.js +7 -7
- package/dist/commands/enable.js.map +1 -1
- package/dist/commands/setup-ccweb.d.ts +37 -0
- package/dist/commands/setup-ccweb.d.ts.map +1 -0
- package/dist/commands/setup-ccweb.js +192 -0
- package/dist/commands/setup-ccweb.js.map +1 -0
- package/dist/commands/status.d.ts +5 -5
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +2 -2
- package/dist/commands/status.js.map +1 -1
- package/dist/config.d.ts +12 -12
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +18 -18
- package/dist/config.js.map +1 -1
- package/dist/events/event-log.d.ts +43 -0
- package/dist/events/event-log.d.ts.map +1 -0
- package/dist/events/event-log.js +91 -0
- package/dist/events/event-log.js.map +1 -0
- package/dist/git-operations.d.ts +1 -1
- package/dist/git-operations.js +8 -8
- package/dist/git-operations.js.map +1 -1
- package/dist/hooks/git-hooks.d.ts +4 -4
- package/dist/hooks/git-hooks.d.ts.map +1 -1
- package/dist/hooks/git-hooks.js +13 -13
- package/dist/hooks/git-hooks.js.map +1 -1
- package/dist/index.d.ts +9 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -4
- package/dist/index.js.map +1 -1
- package/dist/store/checkpoint-store.d.ts +5 -5
- package/dist/store/checkpoint-store.js +9 -9
- package/dist/store/checkpoint-store.js.map +1 -1
- package/dist/store/native-store.d.ts +6 -6
- package/dist/store/native-store.d.ts.map +1 -1
- package/dist/store/native-store.js +8 -8
- package/dist/store/native-store.js.map +1 -1
- package/dist/store/provider-types.d.ts +20 -20
- package/dist/store/provider-types.d.ts.map +1 -1
- package/dist/store/provider-types.js +4 -4
- package/dist/store/session-store.d.ts +3 -3
- package/dist/store/session-store.js +3 -3
- package/dist/strategy/common.d.ts +1 -1
- package/dist/strategy/common.js +2 -2
- package/dist/strategy/common.js.map +1 -1
- package/dist/strategy/manual-commit.d.ts +9 -2
- package/dist/strategy/manual-commit.d.ts.map +1 -1
- package/dist/strategy/manual-commit.js +27 -6
- package/dist/strategy/manual-commit.js.map +1 -1
- package/dist/types.d.ts +21 -12
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +11 -10
- package/dist/types.js.map +1 -1
- package/dist/utils/hook-managers.d.ts +2 -2
- package/dist/utils/hook-managers.d.ts.map +1 -1
- package/dist/utils/hook-managers.js +8 -8
- package/dist/utils/hook-managers.js.map +1 -1
- package/dist/utils/paths.d.ts +3 -3
- package/dist/utils/paths.js +5 -5
- package/dist/utils/paths.js.map +1 -1
- package/dist/utils/shadow-branch.d.ts +2 -2
- package/dist/utils/shadow-branch.js +3 -3
- package/dist/utils/shadow-branch.js.map +1 -1
- package/dist/utils/trailers.d.ts +9 -9
- package/dist/utils/trailers.d.ts.map +1 -1
- package/dist/utils/trailers.js +9 -9
- package/dist/utils/trailers.js.map +1 -1
- package/dist/utils/tty.d.ts +1 -1
- package/dist/utils/tty.js +2 -2
- package/dist/utils/tty.js.map +1 -1
- package/dist/wire-types.d.ts +56 -0
- package/dist/wire-types.d.ts.map +1 -0
- package/dist/wire-types.js +11 -0
- package/dist/wire-types.js.map +1 -0
- package/package.json +6 -5
- package/templates/setup-env.sh +153 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shadow-branch.js","sourceRoot":"","sources":["../../src/utils/shadow-branch.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAClG,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAElE,iDAAiD;AACjD,MAAM,uBAAuB,GAAG,CAAC,CAAC;AAElC,
|
|
1
|
+
{"version":3,"file":"shadow-branch.js","sourceRoot":"","sources":["../../src/utils/shadow-branch.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/trailers.d.ts
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Commit Message Trailers
|
|
3
3
|
*
|
|
4
|
-
* Parsing and formatting for
|
|
4
|
+
* Parsing and formatting for Sessionlog commit message trailers.
|
|
5
5
|
* Trailers are key-value metadata appended to git commit messages
|
|
6
6
|
* following the git trailer convention (key: value format after a blank line).
|
|
7
7
|
*/
|
|
8
8
|
import { type CheckpointID } from '../types.js';
|
|
9
|
-
export declare const MetadataTrailerKey = "
|
|
10
|
-
export declare const MetadataTaskTrailerKey = "
|
|
11
|
-
export declare const StrategyTrailerKey = "
|
|
9
|
+
export declare const MetadataTrailerKey = "Sessionlog-Metadata";
|
|
10
|
+
export declare const MetadataTaskTrailerKey = "Sessionlog-Metadata-Task";
|
|
11
|
+
export declare const StrategyTrailerKey = "Sessionlog-Strategy";
|
|
12
12
|
export declare const BaseCommitTrailerKey = "Base-Commit";
|
|
13
|
-
export declare const SessionTrailerKey = "
|
|
14
|
-
export declare const CondensationTrailerKey = "
|
|
15
|
-
export declare const SourceRefTrailerKey = "
|
|
16
|
-
export declare const CheckpointTrailerKey = "
|
|
13
|
+
export declare const SessionTrailerKey = "Sessionlog-Session";
|
|
14
|
+
export declare const CondensationTrailerKey = "Sessionlog-Condensation";
|
|
15
|
+
export declare const SourceRefTrailerKey = "Sessionlog-Source-Ref";
|
|
16
|
+
export declare const CheckpointTrailerKey = "Sessionlog-Checkpoint";
|
|
17
17
|
export declare const EphemeralBranchTrailerKey = "Ephemeral-branch";
|
|
18
|
-
export declare const AgentTrailerKey = "
|
|
18
|
+
export declare const AgentTrailerKey = "Sessionlog-Agent";
|
|
19
19
|
export declare function parseStrategy(commitMessage: string): [string, boolean];
|
|
20
20
|
export declare function parseMetadata(commitMessage: string): [string, boolean];
|
|
21
21
|
export declare function parseTaskMetadata(commitMessage: string): [string, boolean];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trailers.d.ts","sourceRoot":"","sources":["../../src/utils/trailers.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAyB,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAMvE,eAAO,MAAM,kBAAkB,
|
|
1
|
+
{"version":3,"file":"trailers.d.ts","sourceRoot":"","sources":["../../src/utils/trailers.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAyB,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAMvE,eAAO,MAAM,kBAAkB,wBAAwB,CAAC;AACxD,eAAO,MAAM,sBAAsB,6BAA6B,CAAC;AACjE,eAAO,MAAM,kBAAkB,wBAAwB,CAAC;AACxD,eAAO,MAAM,oBAAoB,gBAAgB,CAAC;AAClD,eAAO,MAAM,iBAAiB,uBAAuB,CAAC;AACtD,eAAO,MAAM,sBAAsB,4BAA4B,CAAC;AAChE,eAAO,MAAM,mBAAmB,0BAA0B,CAAC;AAC3D,eAAO,MAAM,oBAAoB,0BAA0B,CAAC;AAC5D,eAAO,MAAM,yBAAyB,qBAAqB,CAAC;AAC5D,eAAO,MAAM,eAAe,qBAAqB,CAAC;AAkBlD,wBAAgB,aAAa,CAAC,aAAa,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAMtE;AAED,wBAAgB,aAAa,CAAC,aAAa,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAMtE;AAED,wBAAgB,iBAAiB,CAAC,aAAa,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAM1E;AAED,wBAAgB,eAAe,CAAC,aAAa,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAMxE;AAED,wBAAgB,iBAAiB,CAAC,aAAa,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAM1E;AAED,wBAAgB,YAAY,CAAC,aAAa,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAMrE;AAED,wBAAgB,eAAe,CAAC,aAAa,EAAE,MAAM,GAAG,CAAC,YAAY,GAAG,IAAI,EAAE,OAAO,CAAC,CASrF;AAED,wBAAgB,gBAAgB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,EAAE,CAehE;AAMD,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAExE;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,MAAM,CAEnF;AAED,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,MAAM,EACf,eAAe,EAAE,MAAM,EACvB,QAAQ,EAAE,MAAM,GACf,MAAM,CAER;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAG1E;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAE3E;AAED,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,GACf,MAAM,CAER;AAED,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,GAChB,MAAM,CASR;AAED,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,MAAM,EACf,eAAe,EAAE,MAAM,EACvB,SAAS,EAAE,MAAM,GAChB,MAAM,CASR;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,GAAG,MAAM,CAE5E"}
|
package/dist/utils/trailers.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Commit Message Trailers
|
|
3
3
|
*
|
|
4
|
-
* Parsing and formatting for
|
|
4
|
+
* Parsing and formatting for Sessionlog commit message trailers.
|
|
5
5
|
* Trailers are key-value metadata appended to git commit messages
|
|
6
6
|
* following the git trailer convention (key: value format after a blank line).
|
|
7
7
|
*/
|
|
@@ -9,16 +9,16 @@ import { CHECKPOINT_ID_PATTERN } from '../types.js';
|
|
|
9
9
|
// ============================================================================
|
|
10
10
|
// Trailer Key Constants
|
|
11
11
|
// ============================================================================
|
|
12
|
-
export const MetadataTrailerKey = '
|
|
13
|
-
export const MetadataTaskTrailerKey = '
|
|
14
|
-
export const StrategyTrailerKey = '
|
|
12
|
+
export const MetadataTrailerKey = 'Sessionlog-Metadata';
|
|
13
|
+
export const MetadataTaskTrailerKey = 'Sessionlog-Metadata-Task';
|
|
14
|
+
export const StrategyTrailerKey = 'Sessionlog-Strategy';
|
|
15
15
|
export const BaseCommitTrailerKey = 'Base-Commit';
|
|
16
|
-
export const SessionTrailerKey = '
|
|
17
|
-
export const CondensationTrailerKey = '
|
|
18
|
-
export const SourceRefTrailerKey = '
|
|
19
|
-
export const CheckpointTrailerKey = '
|
|
16
|
+
export const SessionTrailerKey = 'Sessionlog-Session';
|
|
17
|
+
export const CondensationTrailerKey = 'Sessionlog-Condensation';
|
|
18
|
+
export const SourceRefTrailerKey = 'Sessionlog-Source-Ref';
|
|
19
|
+
export const CheckpointTrailerKey = 'Sessionlog-Checkpoint';
|
|
20
20
|
export const EphemeralBranchTrailerKey = 'Ephemeral-branch';
|
|
21
|
-
export const AgentTrailerKey = '
|
|
21
|
+
export const AgentTrailerKey = 'Sessionlog-Agent';
|
|
22
22
|
// ============================================================================
|
|
23
23
|
// Pre-compiled Regex Patterns
|
|
24
24
|
// ============================================================================
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trailers.js","sourceRoot":"","sources":["../../src/utils/trailers.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,qBAAqB,EAAqB,MAAM,aAAa,CAAC;AAEvE,+EAA+E;AAC/E,wBAAwB;AACxB,+EAA+E;AAE/E,MAAM,CAAC,MAAM,kBAAkB,GAAG,
|
|
1
|
+
{"version":3,"file":"trailers.js","sourceRoot":"","sources":["../../src/utils/trailers.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/tty.d.ts
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
* Detect if a controlling terminal (TTY) is available.
|
|
12
12
|
*
|
|
13
13
|
* Respects environment variables:
|
|
14
|
-
* - `
|
|
14
|
+
* - `SESSIONLOG_TEST_TTY=1` forces TTY detection to true (for testing)
|
|
15
15
|
* - `GEMINI_CLI=1` forces TTY detection to false (Gemini runs non-interactively)
|
|
16
16
|
*/
|
|
17
17
|
export declare function hasTTY(): boolean;
|
package/dist/utils/tty.js
CHANGED
|
@@ -13,12 +13,12 @@ import * as readline from 'node:readline';
|
|
|
13
13
|
* Detect if a controlling terminal (TTY) is available.
|
|
14
14
|
*
|
|
15
15
|
* Respects environment variables:
|
|
16
|
-
* - `
|
|
16
|
+
* - `SESSIONLOG_TEST_TTY=1` forces TTY detection to true (for testing)
|
|
17
17
|
* - `GEMINI_CLI=1` forces TTY detection to false (Gemini runs non-interactively)
|
|
18
18
|
*/
|
|
19
19
|
export function hasTTY() {
|
|
20
20
|
// Check environment overrides
|
|
21
|
-
if (process.env.
|
|
21
|
+
if (process.env.SESSIONLOG_TEST_TTY === '1')
|
|
22
22
|
return true;
|
|
23
23
|
if (process.env.GEMINI_CLI === '1')
|
|
24
24
|
return false;
|
package/dist/utils/tty.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tty.js","sourceRoot":"","sources":["../../src/utils/tty.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAE1C;;;;;;GAMG;AACH,MAAM,UAAU,MAAM;IACpB,8BAA8B;IAC9B,IAAI,OAAO,CAAC,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"tty.js","sourceRoot":"","sources":["../../src/utils/tty.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAE1C;;;;;;GAMG;AACH,MAAM,UAAU,MAAM;IACpB,8BAA8B;IAC9B,IAAI,OAAO,CAAC,GAAG,CAAC,mBAAmB,KAAK,GAAG;QAAE,OAAO,IAAI,CAAC;IACzD,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,KAAK,GAAG;QAAE,OAAO,KAAK,CAAC;IAEjD,kEAAkE;IAClE,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;QACxC,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QACjB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,MAAc;IAChD,IAAI,CAAC,MAAM,EAAE;QAAE,OAAO,KAAK,CAAC;IAE5B,IAAI,KAAgC,CAAC;IACrC,IAAI,MAAkC,CAAC;IAEvC,IAAI,CAAC;QACH,KAAK,GAAG,EAAE,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;QACxC,MAAM,GAAG,EAAE,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;QAE1C,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC;YAClC,KAAK,EAAE,KAAK;YACZ,MAAM,EAAE,MAAM;SACf,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,MAAM,IAAI,OAAO,CAAU,CAAC,OAAO,EAAE,EAAE;YACpD,EAAE,CAAC,QAAQ,CAAC,GAAG,MAAM,SAAS,EAAE,CAAC,MAAM,EAAE,EAAE;gBACzC,EAAE,CAAC,KAAK,EAAE,CAAC;gBACX,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;gBAC/C,OAAO,CAAC,UAAU,KAAK,GAAG,IAAI,UAAU,KAAK,KAAK,CAAC,CAAC;YACtD,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;YAAS,CAAC;QACT,KAAK,EAAE,OAAO,EAAE,CAAC;QACjB,MAAM,EAAE,OAAO,EAAE,CAAC;IACpB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wire Format Types
|
|
3
|
+
*
|
|
4
|
+
* Snake_case types describing how sessionlog checkpoint data is formatted
|
|
5
|
+
* for external consumption over wire protocols (e.g., MAP trajectory sync).
|
|
6
|
+
*
|
|
7
|
+
* These are the canonical wire-format definitions. External systems
|
|
8
|
+
* (e.g., OpenHive hub) import these to construct properly-typed messages.
|
|
9
|
+
*/
|
|
10
|
+
/** Token usage stats for a checkpoint (wire format) */
|
|
11
|
+
export interface SessionSyncTokenUsage {
|
|
12
|
+
input_tokens: number;
|
|
13
|
+
output_tokens: number;
|
|
14
|
+
cache_creation_tokens: number;
|
|
15
|
+
cache_read_tokens: number;
|
|
16
|
+
api_call_count: number;
|
|
17
|
+
}
|
|
18
|
+
/** AI-generated session summary (wire format) */
|
|
19
|
+
export interface SessionSyncSummary {
|
|
20
|
+
intent: string;
|
|
21
|
+
outcome: string;
|
|
22
|
+
learnings?: {
|
|
23
|
+
repo: string[];
|
|
24
|
+
workflow: string[];
|
|
25
|
+
};
|
|
26
|
+
friction?: string[];
|
|
27
|
+
open_items?: string[];
|
|
28
|
+
}
|
|
29
|
+
/** Attribution stats for agent vs human contributions (wire format) */
|
|
30
|
+
export interface SessionSyncAttribution {
|
|
31
|
+
agent_lines: number;
|
|
32
|
+
human_added: number;
|
|
33
|
+
agent_percentage: number;
|
|
34
|
+
}
|
|
35
|
+
/** Inline checkpoint metadata for session sync notifications (wire format) */
|
|
36
|
+
export interface SessionSyncCheckpoint {
|
|
37
|
+
/** 12-char hex checkpoint ID */
|
|
38
|
+
id: string;
|
|
39
|
+
/** Sessionlog session ID */
|
|
40
|
+
session_id: string;
|
|
41
|
+
/** Agent type (e.g., "Claude Code", "Cursor IDE") */
|
|
42
|
+
agent: string;
|
|
43
|
+
/** Git branch the checkpoint was created on */
|
|
44
|
+
branch?: string;
|
|
45
|
+
/** Files modified in this checkpoint */
|
|
46
|
+
files_touched: string[];
|
|
47
|
+
/** Number of temporary checkpoints before this commit */
|
|
48
|
+
checkpoints_count: number;
|
|
49
|
+
/** Token usage for this checkpoint */
|
|
50
|
+
token_usage?: SessionSyncTokenUsage;
|
|
51
|
+
/** AI-generated summary of the session */
|
|
52
|
+
summary?: SessionSyncSummary;
|
|
53
|
+
/** Agent vs human contribution attribution */
|
|
54
|
+
attribution?: SessionSyncAttribution;
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=wire-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wire-types.d.ts","sourceRoot":"","sources":["../src/wire-types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,uDAAuD;AACvD,MAAM,WAAW,qBAAqB;IACpC,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,iDAAiD;AACjD,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE;QACV,IAAI,EAAE,MAAM,EAAE,CAAC;QACf,QAAQ,EAAE,MAAM,EAAE,CAAC;KACpB,CAAC;IACF,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,uEAAuE;AACvE,MAAM,WAAW,sBAAsB;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,8EAA8E;AAC9E,MAAM,WAAW,qBAAqB;IACpC,gCAAgC;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,4BAA4B;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,qDAAqD;IACrD,KAAK,EAAE,MAAM,CAAC;IACd,+CAA+C;IAC/C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,wCAAwC;IACxC,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,yDAAyD;IACzD,iBAAiB,EAAE,MAAM,CAAC;IAC1B,sCAAsC;IACtC,WAAW,CAAC,EAAE,qBAAqB,CAAC;IACpC,0CAA0C;IAC1C,OAAO,CAAC,EAAE,kBAAkB,CAAC;IAC7B,8CAA8C;IAC9C,WAAW,CAAC,EAAE,sBAAsB,CAAC;CACtC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wire Format Types
|
|
3
|
+
*
|
|
4
|
+
* Snake_case types describing how sessionlog checkpoint data is formatted
|
|
5
|
+
* for external consumption over wire protocols (e.g., MAP trajectory sync).
|
|
6
|
+
*
|
|
7
|
+
* These are the canonical wire-format definitions. External systems
|
|
8
|
+
* (e.g., OpenHive hub) import these to construct properly-typed messages.
|
|
9
|
+
*/
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=wire-types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wire-types.js","sourceRoot":"","sources":["../src/wire-types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sessionlog",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.4",
|
|
4
4
|
"description": "Session tracking and checkpoint management for AI coding agents",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -13,10 +13,11 @@
|
|
|
13
13
|
}
|
|
14
14
|
},
|
|
15
15
|
"bin": {
|
|
16
|
-
"
|
|
16
|
+
"sessionlog": "./dist/cli.js"
|
|
17
17
|
},
|
|
18
18
|
"files": [
|
|
19
|
-
"dist"
|
|
19
|
+
"dist",
|
|
20
|
+
"templates"
|
|
20
21
|
],
|
|
21
22
|
"scripts": {
|
|
22
23
|
"build": "tsc",
|
|
@@ -34,7 +35,7 @@
|
|
|
34
35
|
"prepare": "husky"
|
|
35
36
|
},
|
|
36
37
|
"keywords": [
|
|
37
|
-
"
|
|
38
|
+
"sessionlog",
|
|
38
39
|
"git",
|
|
39
40
|
"session-tracking",
|
|
40
41
|
"checkpoints",
|
|
@@ -59,6 +60,6 @@
|
|
|
59
60
|
},
|
|
60
61
|
"repository": {
|
|
61
62
|
"type": "git",
|
|
62
|
-
"url": "git+https://github.com/alexngai/
|
|
63
|
+
"url": "git+https://github.com/alexngai/sessionlog.git"
|
|
63
64
|
}
|
|
64
65
|
}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
#!/bin/sh
|
|
2
|
+
# Sessionlog setup script for Claude Code Web (ccweb)
|
|
3
|
+
#
|
|
4
|
+
# This script is executed as a SessionStart hook in Claude Code Web sessions.
|
|
5
|
+
# It installs the sessionlog CLI, enables it for the current repo, and
|
|
6
|
+
# configures GitHub direct-push access for session/checkpoint branches.
|
|
7
|
+
#
|
|
8
|
+
# Generated by: sessionlog setup-ccweb
|
|
9
|
+
set -e
|
|
10
|
+
|
|
11
|
+
# Only run in remote Claude Code environments
|
|
12
|
+
if [ "$CLAUDE_CODE_REMOTE" != "true" ]; then
|
|
13
|
+
exit 0
|
|
14
|
+
fi
|
|
15
|
+
|
|
16
|
+
# ============================================================================
|
|
17
|
+
# Configuration
|
|
18
|
+
# ============================================================================
|
|
19
|
+
|
|
20
|
+
# Branch prefixes allowed for direct push (space-separated).
|
|
21
|
+
# Edit this to allow additional prefixes beyond sessionlog's defaults.
|
|
22
|
+
ALLOWED_PUSH_PREFIXES="sessionlog/ claude/"
|
|
23
|
+
|
|
24
|
+
# ============================================================================
|
|
25
|
+
# Install sessionlog CLI
|
|
26
|
+
# ============================================================================
|
|
27
|
+
|
|
28
|
+
if ! command -v sessionlog >/dev/null 2>&1; then
|
|
29
|
+
echo "[sessionlog-ccweb] Installing sessionlog CLI..."
|
|
30
|
+
npm install -g sessionlog 2>/dev/null || {
|
|
31
|
+
echo "[sessionlog-ccweb] Warning: Failed to install sessionlog globally, trying npx..."
|
|
32
|
+
}
|
|
33
|
+
fi
|
|
34
|
+
|
|
35
|
+
# ============================================================================
|
|
36
|
+
# Enable sessionlog for this repository
|
|
37
|
+
# ============================================================================
|
|
38
|
+
|
|
39
|
+
if command -v sessionlog >/dev/null 2>&1; then
|
|
40
|
+
# Enable with Claude Code agent (idempotent)
|
|
41
|
+
sessionlog enable --agent claude-code --local 2>/dev/null || true
|
|
42
|
+
echo "[sessionlog-ccweb] Sessionlog enabled."
|
|
43
|
+
else
|
|
44
|
+
echo "[sessionlog-ccweb] Warning: sessionlog not found. Skipping enable."
|
|
45
|
+
fi
|
|
46
|
+
|
|
47
|
+
# ============================================================================
|
|
48
|
+
# Configure GitHub direct-push access
|
|
49
|
+
# ============================================================================
|
|
50
|
+
|
|
51
|
+
# The ccweb proxy only allows pushing to the current working branch.
|
|
52
|
+
# We need direct GitHub access to push sessionlog shadow branches.
|
|
53
|
+
|
|
54
|
+
if [ -n "$GITHUB_TOKEN" ]; then
|
|
55
|
+
# Get the remote URL and extract owner/repo
|
|
56
|
+
REMOTE_URL=$(git remote get-url origin 2>/dev/null || echo "")
|
|
57
|
+
|
|
58
|
+
if [ -n "$REMOTE_URL" ]; then
|
|
59
|
+
# Extract owner/repo from various URL formats
|
|
60
|
+
OWNER_REPO=$(echo "$REMOTE_URL" | sed -E 's#.*github\.com[:/]([^/]+/[^/.]+)(\.git)?$#\1#')
|
|
61
|
+
|
|
62
|
+
if [ -n "$OWNER_REPO" ]; then
|
|
63
|
+
# Configure git to push directly to GitHub (bypassing ccweb proxy)
|
|
64
|
+
DIRECT_URL="https://x-access-token:${GITHUB_TOKEN}@github.com/${OWNER_REPO}.git"
|
|
65
|
+
git remote set-url --push origin "$DIRECT_URL" 2>/dev/null || true
|
|
66
|
+
echo "[sessionlog-ccweb] Configured direct GitHub push access."
|
|
67
|
+
fi
|
|
68
|
+
fi
|
|
69
|
+
else
|
|
70
|
+
echo "[sessionlog-ccweb] Warning: GITHUB_TOKEN not set. Session push will be limited."
|
|
71
|
+
fi
|
|
72
|
+
|
|
73
|
+
# ============================================================================
|
|
74
|
+
# Install pre-push branch filter
|
|
75
|
+
# ============================================================================
|
|
76
|
+
|
|
77
|
+
# Restrict direct pushes to only allowed prefixes and the current working branch.
|
|
78
|
+
# This prevents accidental pushes to other branches via the direct GitHub URL.
|
|
79
|
+
|
|
80
|
+
HOOKS_DIR="$(git rev-parse --git-dir)/hooks"
|
|
81
|
+
PRE_PUSH_HOOK="$HOOKS_DIR/pre-push"
|
|
82
|
+
|
|
83
|
+
install_push_filter() {
|
|
84
|
+
mkdir -p "$HOOKS_DIR"
|
|
85
|
+
|
|
86
|
+
# Check if pre-push hook already exists
|
|
87
|
+
if [ -f "$PRE_PUSH_HOOK" ]; then
|
|
88
|
+
# Check if our filter is already installed
|
|
89
|
+
if grep -q "sessionlog-ccweb-push-filter" "$PRE_PUSH_HOOK" 2>/dev/null; then
|
|
90
|
+
return
|
|
91
|
+
fi
|
|
92
|
+
|
|
93
|
+
# Append to existing hook
|
|
94
|
+
cat >> "$PRE_PUSH_HOOK" << 'HOOKEOF'
|
|
95
|
+
|
|
96
|
+
# sessionlog-ccweb-push-filter
|
|
97
|
+
CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD 2>/dev/null || echo "")
|
|
98
|
+
while read local_ref local_sha remote_ref remote_sha; do
|
|
99
|
+
BRANCH_NAME=$(echo "$remote_ref" | sed 's#refs/heads/##')
|
|
100
|
+
# Allow current working branch
|
|
101
|
+
if [ "$BRANCH_NAME" = "$CURRENT_BRANCH" ]; then
|
|
102
|
+
continue
|
|
103
|
+
fi
|
|
104
|
+
# Check allowed prefixes
|
|
105
|
+
ALLOWED=false
|
|
106
|
+
for prefix in ALLOWED_PUSH_PREFIXES_PLACEHOLDER; do
|
|
107
|
+
case "$BRANCH_NAME" in
|
|
108
|
+
"$prefix"*) ALLOWED=true; break ;;
|
|
109
|
+
esac
|
|
110
|
+
done
|
|
111
|
+
if [ "$ALLOWED" = "false" ]; then
|
|
112
|
+
echo "[sessionlog-ccweb] Blocked push to '$BRANCH_NAME' (not in allowed prefixes)"
|
|
113
|
+
exit 1
|
|
114
|
+
fi
|
|
115
|
+
done
|
|
116
|
+
HOOKEOF
|
|
117
|
+
else
|
|
118
|
+
# Create new hook
|
|
119
|
+
cat > "$PRE_PUSH_HOOK" << 'HOOKEOF'
|
|
120
|
+
#!/bin/sh
|
|
121
|
+
# sessionlog-ccweb-push-filter
|
|
122
|
+
CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD 2>/dev/null || echo "")
|
|
123
|
+
while read local_ref local_sha remote_ref remote_sha; do
|
|
124
|
+
BRANCH_NAME=$(echo "$remote_ref" | sed 's#refs/heads/##')
|
|
125
|
+
# Allow current working branch
|
|
126
|
+
if [ "$BRANCH_NAME" = "$CURRENT_BRANCH" ]; then
|
|
127
|
+
continue
|
|
128
|
+
fi
|
|
129
|
+
# Check allowed prefixes
|
|
130
|
+
ALLOWED=false
|
|
131
|
+
for prefix in ALLOWED_PUSH_PREFIXES_PLACEHOLDER; do
|
|
132
|
+
case "$BRANCH_NAME" in
|
|
133
|
+
"$prefix"*) ALLOWED=true; break ;;
|
|
134
|
+
esac
|
|
135
|
+
done
|
|
136
|
+
if [ "$ALLOWED" = "false" ]; then
|
|
137
|
+
echo "[sessionlog-ccweb] Blocked push to '$BRANCH_NAME' (not in allowed prefixes)"
|
|
138
|
+
exit 1
|
|
139
|
+
fi
|
|
140
|
+
done
|
|
141
|
+
HOOKEOF
|
|
142
|
+
fi
|
|
143
|
+
|
|
144
|
+
chmod +x "$PRE_PUSH_HOOK"
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
# Replace placeholder with actual prefixes and install
|
|
148
|
+
install_push_filter
|
|
149
|
+
if [ -f "$PRE_PUSH_HOOK" ]; then
|
|
150
|
+
sed -i "s/ALLOWED_PUSH_PREFIXES_PLACEHOLDER/$ALLOWED_PUSH_PREFIXES/g" "$PRE_PUSH_HOOK"
|
|
151
|
+
fi
|
|
152
|
+
|
|
153
|
+
echo "[sessionlog-ccweb] Setup complete."
|