@jacques-ai/core 0.0.7-alpha.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/dist/archive/archive-store.d.ts +166 -0
- package/dist/archive/archive-store.d.ts.map +1 -0
- package/dist/archive/archive-store.js +612 -0
- package/dist/archive/archive-store.js.map +1 -0
- package/dist/archive/bulk-archive.d.ts +63 -0
- package/dist/archive/bulk-archive.d.ts.map +1 -0
- package/dist/archive/bulk-archive.js +315 -0
- package/dist/archive/bulk-archive.js.map +1 -0
- package/dist/archive/filename-utils.d.ts +39 -0
- package/dist/archive/filename-utils.d.ts.map +1 -0
- package/dist/archive/filename-utils.js +78 -0
- package/dist/archive/filename-utils.js.map +1 -0
- package/dist/archive/index.d.ts +21 -0
- package/dist/archive/index.d.ts.map +1 -0
- package/dist/archive/index.js +45 -0
- package/dist/archive/index.js.map +1 -0
- package/dist/archive/manifest-extractor.d.ts +40 -0
- package/dist/archive/manifest-extractor.d.ts.map +1 -0
- package/dist/archive/manifest-extractor.js +456 -0
- package/dist/archive/manifest-extractor.js.map +1 -0
- package/dist/archive/migration.d.ts +59 -0
- package/dist/archive/migration.d.ts.map +1 -0
- package/dist/archive/migration.js +172 -0
- package/dist/archive/migration.js.map +1 -0
- package/dist/archive/plan-cataloger.d.ts +24 -0
- package/dist/archive/plan-cataloger.d.ts.map +1 -0
- package/dist/archive/plan-cataloger.js +100 -0
- package/dist/archive/plan-cataloger.js.map +1 -0
- package/dist/archive/plan-extractor.d.ts +84 -0
- package/dist/archive/plan-extractor.d.ts.map +1 -0
- package/dist/archive/plan-extractor.js +371 -0
- package/dist/archive/plan-extractor.js.map +1 -0
- package/dist/archive/search-indexer.d.ts +50 -0
- package/dist/archive/search-indexer.d.ts.map +1 -0
- package/dist/archive/search-indexer.js +294 -0
- package/dist/archive/search-indexer.js.map +1 -0
- package/dist/archive/subagent-store.d.ts +113 -0
- package/dist/archive/subagent-store.d.ts.map +1 -0
- package/dist/archive/subagent-store.js +173 -0
- package/dist/archive/subagent-store.js.map +1 -0
- package/dist/archive/types.d.ts +236 -0
- package/dist/archive/types.d.ts.map +1 -0
- package/dist/archive/types.js +30 -0
- package/dist/archive/types.js.map +1 -0
- package/dist/branding.d.ts +9 -0
- package/dist/branding.d.ts.map +1 -0
- package/dist/branding.js +50 -0
- package/dist/branding.js.map +1 -0
- package/dist/cache/git-utils.d.ts +36 -0
- package/dist/cache/git-utils.d.ts.map +1 -0
- package/dist/cache/git-utils.js +160 -0
- package/dist/cache/git-utils.js.map +1 -0
- package/dist/cache/hidden-projects.d.ts +19 -0
- package/dist/cache/hidden-projects.d.ts.map +1 -0
- package/dist/cache/hidden-projects.js +48 -0
- package/dist/cache/hidden-projects.js.map +1 -0
- package/dist/cache/index.d.ts +15 -0
- package/dist/cache/index.d.ts.map +1 -0
- package/dist/cache/index.js +20 -0
- package/dist/cache/index.js.map +1 -0
- package/dist/cache/metadata-extractor.d.ts +62 -0
- package/dist/cache/metadata-extractor.d.ts.map +1 -0
- package/dist/cache/metadata-extractor.js +574 -0
- package/dist/cache/metadata-extractor.js.map +1 -0
- package/dist/cache/mode-detector.d.ts +19 -0
- package/dist/cache/mode-detector.d.ts.map +1 -0
- package/dist/cache/mode-detector.js +161 -0
- package/dist/cache/mode-detector.js.map +1 -0
- package/dist/cache/persistence.d.ts +39 -0
- package/dist/cache/persistence.d.ts.map +1 -0
- package/dist/cache/persistence.js +98 -0
- package/dist/cache/persistence.js.map +1 -0
- package/dist/cache/project-discovery.d.ts +41 -0
- package/dist/cache/project-discovery.d.ts.map +1 -0
- package/dist/cache/project-discovery.js +212 -0
- package/dist/cache/project-discovery.js.map +1 -0
- package/dist/cache/session-index.d.ts +258 -0
- package/dist/cache/session-index.d.ts.map +1 -0
- package/dist/cache/session-index.js +1030 -0
- package/dist/cache/session-index.js.map +1 -0
- package/dist/cache/types.d.ts +159 -0
- package/dist/cache/types.d.ts.map +1 -0
- package/dist/cache/types.js +29 -0
- package/dist/cache/types.js.map +1 -0
- package/dist/catalog/bulk-extractor.d.ts +18 -0
- package/dist/catalog/bulk-extractor.d.ts.map +1 -0
- package/dist/catalog/bulk-extractor.js +150 -0
- package/dist/catalog/bulk-extractor.js.map +1 -0
- package/dist/catalog/extractor.d.ts +53 -0
- package/dist/catalog/extractor.d.ts.map +1 -0
- package/dist/catalog/extractor.js +522 -0
- package/dist/catalog/extractor.js.map +1 -0
- package/dist/catalog/index.d.ts +10 -0
- package/dist/catalog/index.d.ts.map +1 -0
- package/dist/catalog/index.js +11 -0
- package/dist/catalog/index.js.map +1 -0
- package/dist/catalog/types.d.ts +134 -0
- package/dist/catalog/types.d.ts.map +1 -0
- package/dist/catalog/types.js +8 -0
- package/dist/catalog/types.js.map +1 -0
- package/dist/client/index.d.ts +6 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +5 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client/websocket-client.d.ts +96 -0
- package/dist/client/websocket-client.d.ts.map +1 -0
- package/dist/client/websocket-client.js +222 -0
- package/dist/client/websocket-client.js.map +1 -0
- package/dist/context/index.d.ts +13 -0
- package/dist/context/index.d.ts.map +1 -0
- package/dist/context/index.js +26 -0
- package/dist/context/index.js.map +1 -0
- package/dist/context/indexer.d.ts +73 -0
- package/dist/context/indexer.d.ts.map +1 -0
- package/dist/context/indexer.js +233 -0
- package/dist/context/indexer.js.map +1 -0
- package/dist/context/manager.d.ts +66 -0
- package/dist/context/manager.d.ts.map +1 -0
- package/dist/context/manager.js +310 -0
- package/dist/context/manager.js.map +1 -0
- package/dist/context/types.d.ts +149 -0
- package/dist/context/types.d.ts.map +1 -0
- package/dist/context/types.js +36 -0
- package/dist/context/types.js.map +1 -0
- package/dist/handoff/catalog.d.ts +54 -0
- package/dist/handoff/catalog.d.ts.map +1 -0
- package/dist/handoff/catalog.js +121 -0
- package/dist/handoff/catalog.js.map +1 -0
- package/dist/handoff/generator.d.ts +107 -0
- package/dist/handoff/generator.d.ts.map +1 -0
- package/dist/handoff/generator.js +603 -0
- package/dist/handoff/generator.js.map +1 -0
- package/dist/handoff/index.d.ts +13 -0
- package/dist/handoff/index.d.ts.map +1 -0
- package/dist/handoff/index.js +12 -0
- package/dist/handoff/index.js.map +1 -0
- package/dist/handoff/llm-generator.d.ts +77 -0
- package/dist/handoff/llm-generator.d.ts.map +1 -0
- package/dist/handoff/llm-generator.js +513 -0
- package/dist/handoff/llm-generator.js.map +1 -0
- package/dist/handoff/prompts.d.ts +18 -0
- package/dist/handoff/prompts.d.ts.map +1 -0
- package/dist/handoff/prompts.js +22 -0
- package/dist/handoff/prompts.js.map +1 -0
- package/dist/handoff/types.d.ts +28 -0
- package/dist/handoff/types.d.ts.map +1 -0
- package/dist/handoff/types.js +7 -0
- package/dist/handoff/types.js.map +1 -0
- package/dist/index.d.ts +56 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +132 -0
- package/dist/index.js.map +1 -0
- package/dist/logging/claude-operations.d.ts +111 -0
- package/dist/logging/claude-operations.d.ts.map +1 -0
- package/dist/logging/claude-operations.js +132 -0
- package/dist/logging/claude-operations.js.map +1 -0
- package/dist/logging/error-utils.d.ts +18 -0
- package/dist/logging/error-utils.d.ts.map +1 -0
- package/dist/logging/error-utils.js +37 -0
- package/dist/logging/error-utils.js.map +1 -0
- package/dist/logging/index.d.ts +11 -0
- package/dist/logging/index.d.ts.map +1 -0
- package/dist/logging/index.js +10 -0
- package/dist/logging/index.js.map +1 -0
- package/dist/logging/logger.d.ts +25 -0
- package/dist/logging/logger.d.ts.map +1 -0
- package/dist/logging/logger.js +39 -0
- package/dist/logging/logger.js.map +1 -0
- package/dist/notifications/constants.d.ts +16 -0
- package/dist/notifications/constants.d.ts.map +1 -0
- package/dist/notifications/constants.js +49 -0
- package/dist/notifications/constants.js.map +1 -0
- package/dist/notifications/index.d.ts +9 -0
- package/dist/notifications/index.d.ts.map +1 -0
- package/dist/notifications/index.js +8 -0
- package/dist/notifications/index.js.map +1 -0
- package/dist/notifications/types.d.ts +28 -0
- package/dist/notifications/types.d.ts.map +1 -0
- package/dist/notifications/types.js +7 -0
- package/dist/notifications/types.js.map +1 -0
- package/dist/notifications/utils.d.ts +20 -0
- package/dist/notifications/utils.d.ts.map +1 -0
- package/dist/notifications/utils.js +37 -0
- package/dist/notifications/utils.js.map +1 -0
- package/dist/plan/index.d.ts +12 -0
- package/dist/plan/index.d.ts.map +1 -0
- package/dist/plan/index.js +15 -0
- package/dist/plan/index.js.map +1 -0
- package/dist/plan/plan-parser.d.ts +33 -0
- package/dist/plan/plan-parser.d.ts.map +1 -0
- package/dist/plan/plan-parser.js +189 -0
- package/dist/plan/plan-parser.js.map +1 -0
- package/dist/plan/progress-computer.d.ts +34 -0
- package/dist/plan/progress-computer.d.ts.map +1 -0
- package/dist/plan/progress-computer.js +211 -0
- package/dist/plan/progress-computer.js.map +1 -0
- package/dist/plan/progress-matcher.d.ts +34 -0
- package/dist/plan/progress-matcher.d.ts.map +1 -0
- package/dist/plan/progress-matcher.js +297 -0
- package/dist/plan/progress-matcher.js.map +1 -0
- package/dist/plan/task-extractor.d.ts +30 -0
- package/dist/plan/task-extractor.d.ts.map +1 -0
- package/dist/plan/task-extractor.js +435 -0
- package/dist/plan/task-extractor.js.map +1 -0
- package/dist/plan/types.d.ts +131 -0
- package/dist/plan/types.d.ts.map +1 -0
- package/dist/plan/types.js +8 -0
- package/dist/plan/types.js.map +1 -0
- package/dist/project/aggregator.d.ts +43 -0
- package/dist/project/aggregator.d.ts.map +1 -0
- package/dist/project/aggregator.js +218 -0
- package/dist/project/aggregator.js.map +1 -0
- package/dist/project/index.d.ts +9 -0
- package/dist/project/index.d.ts.map +1 -0
- package/dist/project/index.js +9 -0
- package/dist/project/index.js.map +1 -0
- package/dist/project/types.d.ts +65 -0
- package/dist/project/types.d.ts.map +1 -0
- package/dist/project/types.js +27 -0
- package/dist/project/types.js.map +1 -0
- package/dist/session/detector.d.ts +113 -0
- package/dist/session/detector.d.ts.map +1 -0
- package/dist/session/detector.js +333 -0
- package/dist/session/detector.js.map +1 -0
- package/dist/session/filters.d.ts +32 -0
- package/dist/session/filters.d.ts.map +1 -0
- package/dist/session/filters.js +100 -0
- package/dist/session/filters.js.map +1 -0
- package/dist/session/format-title.d.ts +16 -0
- package/dist/session/format-title.d.ts.map +1 -0
- package/dist/session/format-title.js +54 -0
- package/dist/session/format-title.js.map +1 -0
- package/dist/session/index.d.ts +16 -0
- package/dist/session/index.d.ts.map +1 -0
- package/dist/session/index.js +10 -0
- package/dist/session/index.js.map +1 -0
- package/dist/session/parser.d.ts +264 -0
- package/dist/session/parser.d.ts.map +1 -0
- package/dist/session/parser.js +588 -0
- package/dist/session/parser.js.map +1 -0
- package/dist/session/token-estimator.d.ts +32 -0
- package/dist/session/token-estimator.d.ts.map +1 -0
- package/dist/session/token-estimator.js +139 -0
- package/dist/session/token-estimator.js.map +1 -0
- package/dist/session/transformer.d.ts +126 -0
- package/dist/session/transformer.d.ts.map +1 -0
- package/dist/session/transformer.js +158 -0
- package/dist/session/transformer.js.map +1 -0
- package/dist/setup/hooks-config.d.ts +35 -0
- package/dist/setup/hooks-config.d.ts.map +1 -0
- package/dist/setup/hooks-config.js +107 -0
- package/dist/setup/hooks-config.js.map +1 -0
- package/dist/setup/hooks-symlink.d.ts +17 -0
- package/dist/setup/hooks-symlink.d.ts.map +1 -0
- package/dist/setup/hooks-symlink.js +89 -0
- package/dist/setup/hooks-symlink.js.map +1 -0
- package/dist/setup/index.d.ts +13 -0
- package/dist/setup/index.d.ts.map +1 -0
- package/dist/setup/index.js +12 -0
- package/dist/setup/index.js.map +1 -0
- package/dist/setup/prerequisites.d.ts +11 -0
- package/dist/setup/prerequisites.d.ts.map +1 -0
- package/dist/setup/prerequisites.js +72 -0
- package/dist/setup/prerequisites.js.map +1 -0
- package/dist/setup/settings-merge.d.ts +33 -0
- package/dist/setup/settings-merge.d.ts.map +1 -0
- package/dist/setup/settings-merge.js +131 -0
- package/dist/setup/settings-merge.js.map +1 -0
- package/dist/setup/skills-install.d.ts +17 -0
- package/dist/setup/skills-install.d.ts.map +1 -0
- package/dist/setup/skills-install.js +60 -0
- package/dist/setup/skills-install.js.map +1 -0
- package/dist/setup/types.d.ts +39 -0
- package/dist/setup/types.d.ts.map +1 -0
- package/dist/setup/types.js +7 -0
- package/dist/setup/types.js.map +1 -0
- package/dist/setup/verification.d.ts +9 -0
- package/dist/setup/verification.d.ts.map +1 -0
- package/dist/setup/verification.js +91 -0
- package/dist/setup/verification.js.map +1 -0
- package/dist/shortcuts/index.d.ts +8 -0
- package/dist/shortcuts/index.d.ts.map +1 -0
- package/dist/shortcuts/index.js +6 -0
- package/dist/shortcuts/index.js.map +1 -0
- package/dist/shortcuts/key-utils.d.ts +54 -0
- package/dist/shortcuts/key-utils.d.ts.map +1 -0
- package/dist/shortcuts/key-utils.js +129 -0
- package/dist/shortcuts/key-utils.js.map +1 -0
- package/dist/shortcuts/shortcut-registry.d.ts +37 -0
- package/dist/shortcuts/shortcut-registry.d.ts.map +1 -0
- package/dist/shortcuts/shortcut-registry.js +322 -0
- package/dist/shortcuts/shortcut-registry.js.map +1 -0
- package/dist/sources/config.d.ts +91 -0
- package/dist/sources/config.d.ts.map +1 -0
- package/dist/sources/config.js +229 -0
- package/dist/sources/config.js.map +1 -0
- package/dist/sources/googledocs.d.ts +43 -0
- package/dist/sources/googledocs.d.ts.map +1 -0
- package/dist/sources/googledocs.js +298 -0
- package/dist/sources/googledocs.js.map +1 -0
- package/dist/sources/index.d.ts +14 -0
- package/dist/sources/index.d.ts.map +1 -0
- package/dist/sources/index.js +19 -0
- package/dist/sources/index.js.map +1 -0
- package/dist/sources/notion.d.ts +35 -0
- package/dist/sources/notion.d.ts.map +1 -0
- package/dist/sources/notion.js +352 -0
- package/dist/sources/notion.js.map +1 -0
- package/dist/sources/obsidian.d.ts +38 -0
- package/dist/sources/obsidian.d.ts.map +1 -0
- package/dist/sources/obsidian.js +228 -0
- package/dist/sources/obsidian.js.map +1 -0
- package/dist/sources/types.d.ts +133 -0
- package/dist/sources/types.d.ts.map +1 -0
- package/dist/sources/types.js +19 -0
- package/dist/sources/types.js.map +1 -0
- package/dist/storage/index.d.ts +6 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +5 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/storage/writer.d.ts +86 -0
- package/dist/storage/writer.d.ts.map +1 -0
- package/dist/storage/writer.js +137 -0
- package/dist/storage/writer.js.map +1 -0
- package/dist/types.d.ts +203 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +8 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/claude-token.d.ts +49 -0
- package/dist/utils/claude-token.d.ts.map +1 -0
- package/dist/utils/claude-token.js +169 -0
- package/dist/utils/claude-token.js.map +1 -0
- package/dist/utils/index.d.ts +7 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +13 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/settings.d.ts +100 -0
- package/dist/utils/settings.d.ts.map +1 -0
- package/dist/utils/settings.js +206 -0
- package/dist/utils/settings.js.map +1 -0
- package/package.json +54 -0
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LLM Handoff Generator
|
|
3
|
+
*
|
|
4
|
+
* Generates handoff documents using Claude Code CLI with the jacques-handoff skill.
|
|
5
|
+
* This provides higher-quality, AI-powered extraction compared to the rule-based generator.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Result of LLM-powered handoff generation
|
|
9
|
+
*/
|
|
10
|
+
export interface LLMHandoffResult {
|
|
11
|
+
/** Full path to the generated handoff file */
|
|
12
|
+
filePath: string;
|
|
13
|
+
/** Filename of the handoff */
|
|
14
|
+
filename: string;
|
|
15
|
+
/** The handoff content */
|
|
16
|
+
content: string;
|
|
17
|
+
/** Input tokens used by the LLM */
|
|
18
|
+
inputTokens: number;
|
|
19
|
+
/** Output tokens generated by the LLM */
|
|
20
|
+
outputTokens: number;
|
|
21
|
+
/** Total tokens used */
|
|
22
|
+
totalTokens: number;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Error thrown when Claude Code CLI fails
|
|
26
|
+
*/
|
|
27
|
+
export declare class ClaudeCodeError extends Error {
|
|
28
|
+
readonly exitCode?: number | undefined;
|
|
29
|
+
readonly stderr?: string | undefined;
|
|
30
|
+
constructor(message: string, exitCode?: number | undefined, stderr?: string | undefined);
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Callbacks for streaming LLM output
|
|
34
|
+
*/
|
|
35
|
+
export interface LLMStreamCallbacks {
|
|
36
|
+
/** Called when new text is generated */
|
|
37
|
+
onTextDelta?: (text: string) => void;
|
|
38
|
+
/** Called when token counts are updated */
|
|
39
|
+
onTokenUpdate?: (inputTokens: number, outputTokens: number) => void;
|
|
40
|
+
/** Called when a new processing stage begins */
|
|
41
|
+
onStage?: (stage: string) => void;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Options for generateHandoffWithLLM
|
|
45
|
+
*/
|
|
46
|
+
export interface LLMHandoffOptions {
|
|
47
|
+
/** Timeout in milliseconds (default: 120000) */
|
|
48
|
+
timeout?: number;
|
|
49
|
+
/** AbortSignal for cancellation */
|
|
50
|
+
signal?: AbortSignal;
|
|
51
|
+
/** Callbacks for streaming output */
|
|
52
|
+
stream?: LLMStreamCallbacks;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Generate a handoff document using Claude Code CLI with the jacques-handoff skill.
|
|
56
|
+
*
|
|
57
|
+
* This function:
|
|
58
|
+
* 1. Reads the skill prompt from ~/.claude/skills/jacques-handoff/SKILL.md
|
|
59
|
+
* 2. Passes the transcript path to Claude (it uses Read tool to access it)
|
|
60
|
+
* 3. Claude extracts relevant info and generates the handoff
|
|
61
|
+
* 4. Saves the generated handoff to .jacques/handoffs/
|
|
62
|
+
*
|
|
63
|
+
* @param transcriptPath - Path to the session transcript (JSONL file)
|
|
64
|
+
* @param projectDir - Project directory (for saving the handoff)
|
|
65
|
+
* @param options - Optional timeout and abort signal
|
|
66
|
+
* @returns The generated handoff result with token usage
|
|
67
|
+
*/
|
|
68
|
+
export declare function generateHandoffWithLLM(transcriptPath: string, projectDir: string, options?: LLMHandoffOptions): Promise<LLMHandoffResult>;
|
|
69
|
+
/**
|
|
70
|
+
* Check if the jacques-handoff skill is installed
|
|
71
|
+
*/
|
|
72
|
+
export declare function isSkillInstalled(): Promise<boolean>;
|
|
73
|
+
/**
|
|
74
|
+
* Get the path to the jacques-handoff skill
|
|
75
|
+
*/
|
|
76
|
+
export declare function getSkillPath(): string;
|
|
77
|
+
//# sourceMappingURL=llm-generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llm-generator.d.ts","sourceRoot":"","sources":["../../src/handoff/llm-generator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAmCH;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,8CAA8C;IAC9C,QAAQ,EAAE,MAAM,CAAC;IACjB,8BAA8B;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,0BAA0B;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,mCAAmC;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,yCAAyC;IACzC,YAAY,EAAE,MAAM,CAAC;IACrB,wBAAwB;IACxB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,qBAAa,eAAgB,SAAQ,KAAK;aAGtB,QAAQ,CAAC,EAAE,MAAM;aACjB,MAAM,CAAC,EAAE,MAAM;gBAF/B,OAAO,EAAE,MAAM,EACC,QAAQ,CAAC,EAAE,MAAM,YAAA,EACjB,MAAM,CAAC,EAAE,MAAM,YAAA;CAKlC;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,wCAAwC;IACxC,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,2CAA2C;IAC3C,aAAa,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,KAAK,IAAI,CAAC;IACpE,gDAAgD;IAChD,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACnC;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,gDAAgD;IAChD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,mCAAmC;IACnC,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,qCAAqC;IACrC,MAAM,CAAC,EAAE,kBAAkB,CAAC;CAC7B;AAiWD;;;;;;;;;;;;;GAaG;AACH,wBAAsB,sBAAsB,CAC1C,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,gBAAgB,CAAC,CAyK3B;AAED;;GAEG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,OAAO,CAAC,CAOzD;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAErC"}
|
|
@@ -0,0 +1,513 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LLM Handoff Generator
|
|
3
|
+
*
|
|
4
|
+
* Generates handoff documents using Claude Code CLI with the jacques-handoff skill.
|
|
5
|
+
* This provides higher-quality, AI-powered extraction compared to the rule-based generator.
|
|
6
|
+
*/
|
|
7
|
+
import { spawn } from "child_process";
|
|
8
|
+
import { promises as fs, appendFileSync } from "fs";
|
|
9
|
+
import { join } from "path";
|
|
10
|
+
import { homedir } from "os";
|
|
11
|
+
import { ensureHandoffsDir, generateHandoffFilename } from "./catalog.js";
|
|
12
|
+
import { getCompactContextForSkill } from "./generator.js";
|
|
13
|
+
import { ClaudeOperationLogger } from "../logging/index.js";
|
|
14
|
+
/** Path to the jacques-handoff skill file */
|
|
15
|
+
const SKILL_PATH = join(homedir(), ".claude/skills/jacques-handoff/SKILL.md");
|
|
16
|
+
/** Default timeout for Claude Code CLI (5 minutes - handoffs can take a while for long conversations) */
|
|
17
|
+
const DEFAULT_TIMEOUT = 300000;
|
|
18
|
+
/** Enable debug logging for streaming events */
|
|
19
|
+
const DEBUG_STREAMING = process.env.JACQUES_DEBUG_STREAMING === "1";
|
|
20
|
+
/** Debug log file path */
|
|
21
|
+
const DEBUG_LOG_FILE = "/tmp/jacques-streaming-debug.log";
|
|
22
|
+
/** Write debug message to file */
|
|
23
|
+
function debugLog(message) {
|
|
24
|
+
if (!DEBUG_STREAMING)
|
|
25
|
+
return;
|
|
26
|
+
const timestamp = new Date().toISOString();
|
|
27
|
+
const line = `[${timestamp}] ${message}\n`;
|
|
28
|
+
// Sync write to ensure we see output immediately
|
|
29
|
+
try {
|
|
30
|
+
appendFileSync(DEBUG_LOG_FILE, line);
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
// Ignore write errors
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Error thrown when Claude Code CLI fails
|
|
38
|
+
*/
|
|
39
|
+
export class ClaudeCodeError extends Error {
|
|
40
|
+
exitCode;
|
|
41
|
+
stderr;
|
|
42
|
+
constructor(message, exitCode, stderr) {
|
|
43
|
+
super(message);
|
|
44
|
+
this.exitCode = exitCode;
|
|
45
|
+
this.stderr = stderr;
|
|
46
|
+
this.name = "ClaudeCodeError";
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Handle a streaming event from Claude Code CLI
|
|
51
|
+
*
|
|
52
|
+
* Event structure (with --include-partial-messages):
|
|
53
|
+
* - type: "stream_event", event.type: "message_start" - initial token count
|
|
54
|
+
* - type: "stream_event", event.type: "content_block_delta" - text chunks (delta.text)
|
|
55
|
+
* - type: "stream_event", event.type: "message_delta" - final usage
|
|
56
|
+
* - type: "result" - final result with total usage
|
|
57
|
+
*/
|
|
58
|
+
function handleStreamEvent(event, callbacks, state) {
|
|
59
|
+
if (!callbacks) {
|
|
60
|
+
debugLog(`[EVENT] NO CALLBACKS - skipping event type=${event.type}`);
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
debugLog(`[EVENT] type=${event.type} callbacks.onTextDelta=${!!callbacks.onTextDelta} callbacks.onTokenUpdate=${!!callbacks.onTokenUpdate}`);
|
|
64
|
+
// Handle stream_event wrapper
|
|
65
|
+
if (event.type === "stream_event") {
|
|
66
|
+
const inner = event.event;
|
|
67
|
+
if (!inner)
|
|
68
|
+
return;
|
|
69
|
+
debugLog(`[STREAM] inner.type=${inner.type}`);
|
|
70
|
+
// Content block start - could be text or tool_use
|
|
71
|
+
// Structure: { type: "content_block_start", content_block: { type: "text" | "tool_use", ... } }
|
|
72
|
+
if (inner.type === "content_block_start") {
|
|
73
|
+
const contentBlock = inner.content_block;
|
|
74
|
+
debugLog(`[BLOCK_START] type=${contentBlock?.type} name=${contentBlock?.name}`);
|
|
75
|
+
// Notify when a tool starts being used
|
|
76
|
+
if (contentBlock?.type === "tool_use" && contentBlock.name) {
|
|
77
|
+
callbacks.onStage?.(`Using ${contentBlock.name}...`);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
// Text delta - partial text as it's generated
|
|
81
|
+
// Structure: { type: "content_block_delta", delta: { type: "text_delta", text: "..." } }
|
|
82
|
+
if (inner.type === "content_block_delta") {
|
|
83
|
+
const delta = inner.delta;
|
|
84
|
+
debugLog(`[DELTA] type=${delta?.type} text=${delta?.text?.substring(0, 50)} json=${delta?.partial_json?.substring(0, 50)}`);
|
|
85
|
+
if (delta?.type === "text_delta" && delta.text) {
|
|
86
|
+
debugLog(`[TEXT_DELTA] calling onTextDelta with: ${delta.text.substring(0, 100)}`);
|
|
87
|
+
callbacks.onTextDelta?.(delta.text);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
// Message start - contains initial input token count
|
|
91
|
+
// Structure: { type: "message_start", message: { usage: { input_tokens, cache_read_input_tokens, ... } } }
|
|
92
|
+
if (inner.type === "message_start") {
|
|
93
|
+
const message = inner.message;
|
|
94
|
+
if (message?.usage && state) {
|
|
95
|
+
// Include cache read tokens in input count
|
|
96
|
+
const inputTokens = (message.usage.input_tokens || 0) + (message.usage.cache_read_input_tokens || 0);
|
|
97
|
+
state.inputTokens = inputTokens;
|
|
98
|
+
debugLog(`[TOKEN_UPDATE] message_start: input=${state.inputTokens} output=${state.outputTokens}`);
|
|
99
|
+
callbacks.onTokenUpdate?.(state.inputTokens, state.outputTokens);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
// Message delta - contains output token updates
|
|
103
|
+
// Structure: { type: "message_delta", usage: { output_tokens, ... } }
|
|
104
|
+
if (inner.type === "message_delta") {
|
|
105
|
+
const usage = inner.usage;
|
|
106
|
+
if (usage && state) {
|
|
107
|
+
if (usage.output_tokens) {
|
|
108
|
+
state.outputTokens = usage.output_tokens;
|
|
109
|
+
}
|
|
110
|
+
if (usage.input_tokens || usage.cache_read_input_tokens) {
|
|
111
|
+
state.inputTokens = (usage.input_tokens || 0) + (usage.cache_read_input_tokens || 0);
|
|
112
|
+
}
|
|
113
|
+
debugLog(`[TOKEN_UPDATE] message_delta: input=${state.inputTokens} output=${state.outputTokens}`);
|
|
114
|
+
callbacks.onTokenUpdate?.(state.inputTokens, state.outputTokens);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
// Handle result event (final response)
|
|
119
|
+
if (event.type === "result") {
|
|
120
|
+
debugLog(`[RESULT] event received`);
|
|
121
|
+
const usage = event.usage;
|
|
122
|
+
if (usage && state) {
|
|
123
|
+
state.inputTokens = (usage.input_tokens || 0) + (usage.cache_read_input_tokens || 0);
|
|
124
|
+
state.outputTokens = usage.output_tokens || state.outputTokens;
|
|
125
|
+
debugLog(`[TOKEN_UPDATE] result: input=${state.inputTokens} output=${state.outputTokens}`);
|
|
126
|
+
callbacks.onTokenUpdate?.(state.inputTokens, state.outputTokens);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Run Claude Code CLI and return the result
|
|
132
|
+
*/
|
|
133
|
+
async function runClaudeCode(systemPrompt, userPrompt, cwd, options = {}) {
|
|
134
|
+
const timeout = options.timeout ?? DEFAULT_TIMEOUT;
|
|
135
|
+
const useStreaming = !!options.stream;
|
|
136
|
+
return new Promise((resolve, reject) => {
|
|
137
|
+
let proc = null;
|
|
138
|
+
let timeoutId = null;
|
|
139
|
+
let killed = false;
|
|
140
|
+
// Handle abort signal
|
|
141
|
+
const abortHandler = () => {
|
|
142
|
+
killed = true;
|
|
143
|
+
proc?.kill("SIGTERM");
|
|
144
|
+
reject(new ClaudeCodeError("Cancelled by user"));
|
|
145
|
+
};
|
|
146
|
+
if (options.signal) {
|
|
147
|
+
if (options.signal.aborted) {
|
|
148
|
+
reject(new ClaudeCodeError("Cancelled by user"));
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
options.signal.addEventListener("abort", abortHandler, { once: true });
|
|
152
|
+
}
|
|
153
|
+
const cleanup = () => {
|
|
154
|
+
if (timeoutId)
|
|
155
|
+
clearTimeout(timeoutId);
|
|
156
|
+
if (options.signal) {
|
|
157
|
+
options.signal.removeEventListener("abort", abortHandler);
|
|
158
|
+
}
|
|
159
|
+
};
|
|
160
|
+
// Build command arguments
|
|
161
|
+
const args = [
|
|
162
|
+
"-p",
|
|
163
|
+
userPrompt,
|
|
164
|
+
"--system-prompt",
|
|
165
|
+
systemPrompt,
|
|
166
|
+
"--output-format",
|
|
167
|
+
useStreaming ? "stream-json" : "json",
|
|
168
|
+
"--allowedTools",
|
|
169
|
+
"Write", // Only needs Write to save handoff; context is pre-extracted
|
|
170
|
+
];
|
|
171
|
+
// Add streaming flags
|
|
172
|
+
if (useStreaming) {
|
|
173
|
+
args.push("--verbose");
|
|
174
|
+
args.push("--include-partial-messages");
|
|
175
|
+
}
|
|
176
|
+
debugLog(`[SPAWN] Starting claude with args: ${args.join(" ").substring(0, 200)}...`);
|
|
177
|
+
debugLog(`[SPAWN] useStreaming=${useStreaming} hasStreamCallbacks=${!!options.stream}`);
|
|
178
|
+
proc = spawn("claude", args, {
|
|
179
|
+
cwd,
|
|
180
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
181
|
+
env: {
|
|
182
|
+
...process.env,
|
|
183
|
+
// Prevent Jacques hooks from running in subprocess
|
|
184
|
+
JACQUES_SUBPROCESS: "1",
|
|
185
|
+
},
|
|
186
|
+
});
|
|
187
|
+
// IMPORTANT: Close stdin immediately to trigger streaming output
|
|
188
|
+
// Without this, Claude CLI buffers output waiting for input
|
|
189
|
+
proc.stdin?.end();
|
|
190
|
+
debugLog(`[SPAWN] Process started with PID: ${proc.pid}, stdin closed`);
|
|
191
|
+
let stdout = "";
|
|
192
|
+
let stderr = "";
|
|
193
|
+
let streamBuffer = "";
|
|
194
|
+
let accumulatedContent = "";
|
|
195
|
+
const tokenState = { inputTokens: 0, outputTokens: 0 };
|
|
196
|
+
const collectedEvents = []; // Collect ALL events for debugging
|
|
197
|
+
const toolsCalled = []; // Track tools used during operation
|
|
198
|
+
proc.stdout?.on("data", (data) => {
|
|
199
|
+
const chunk = data.toString();
|
|
200
|
+
stdout += chunk;
|
|
201
|
+
if (useStreaming) {
|
|
202
|
+
debugLog(`[STDOUT] received ${chunk.length} bytes`);
|
|
203
|
+
// Parse line-by-line for streaming
|
|
204
|
+
streamBuffer += chunk;
|
|
205
|
+
const lines = streamBuffer.split("\n");
|
|
206
|
+
// Keep the last incomplete line in the buffer
|
|
207
|
+
streamBuffer = lines.pop() || "";
|
|
208
|
+
debugLog(`[STDOUT] ${lines.length} complete lines to parse`);
|
|
209
|
+
for (const line of lines) {
|
|
210
|
+
if (!line.trim())
|
|
211
|
+
continue;
|
|
212
|
+
try {
|
|
213
|
+
const event = JSON.parse(line);
|
|
214
|
+
// Collect ALL events for debugging
|
|
215
|
+
collectedEvents.push(event);
|
|
216
|
+
handleStreamEvent(event, options.stream, tokenState);
|
|
217
|
+
// Track tool calls
|
|
218
|
+
if (event.type === "stream_event") {
|
|
219
|
+
const inner = event.event;
|
|
220
|
+
if (inner?.type === "content_block_start") {
|
|
221
|
+
const block = inner.content_block;
|
|
222
|
+
if (block?.type === "tool_use" && block.name && !toolsCalled.includes(block.name)) {
|
|
223
|
+
toolsCalled.push(block.name);
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
// Accumulate content from text deltas
|
|
228
|
+
if (event.type === "stream_event") {
|
|
229
|
+
const inner = event.event;
|
|
230
|
+
if (inner?.type === "content_block_delta") {
|
|
231
|
+
const delta = inner.delta;
|
|
232
|
+
if (delta?.type === "text_delta" && delta.text) {
|
|
233
|
+
accumulatedContent += delta.text;
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
// Also capture final result content (fallback)
|
|
238
|
+
if (event.type === "result") {
|
|
239
|
+
const result = event.result;
|
|
240
|
+
if (result && !accumulatedContent) {
|
|
241
|
+
accumulatedContent = result;
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
catch {
|
|
246
|
+
// Ignore malformed JSON lines
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
});
|
|
251
|
+
proc.stderr?.on("data", (data) => {
|
|
252
|
+
const chunk = data.toString();
|
|
253
|
+
stderr += chunk;
|
|
254
|
+
debugLog(`[STDERR] ${chunk.substring(0, 200)}`);
|
|
255
|
+
});
|
|
256
|
+
proc.on("close", (code) => {
|
|
257
|
+
debugLog(`[CLOSE] Process exited with code: ${code}`);
|
|
258
|
+
debugLog(`[CLOSE] accumulatedContent length: ${accumulatedContent.length}`);
|
|
259
|
+
debugLog(`[CLOSE] tokenState: input=${tokenState.inputTokens} output=${tokenState.outputTokens}`);
|
|
260
|
+
cleanup();
|
|
261
|
+
if (killed)
|
|
262
|
+
return;
|
|
263
|
+
if (code !== 0) {
|
|
264
|
+
// Try to extract error from stdout if stderr is empty
|
|
265
|
+
let errorMessage = stderr;
|
|
266
|
+
if (!errorMessage && stdout) {
|
|
267
|
+
// Look for error in JSON stream output
|
|
268
|
+
const lines = stdout.split("\n").filter(Boolean);
|
|
269
|
+
for (const line of lines) {
|
|
270
|
+
try {
|
|
271
|
+
const parsed = JSON.parse(line);
|
|
272
|
+
if (parsed.error || parsed.type === "error") {
|
|
273
|
+
errorMessage = parsed.error || parsed.message || JSON.stringify(parsed);
|
|
274
|
+
break;
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
catch {
|
|
278
|
+
// Not JSON, continue
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
// If no error found in JSON, show last few lines
|
|
282
|
+
if (!errorMessage) {
|
|
283
|
+
errorMessage = lines.slice(-5).join("\n").substring(0, 1000);
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
reject(new ClaudeCodeError(`Claude Code failed with exit code ${code}: ${errorMessage || "Unknown error"}`, code ?? undefined, stderr || stdout));
|
|
287
|
+
return;
|
|
288
|
+
}
|
|
289
|
+
if (useStreaming) {
|
|
290
|
+
// For streaming, use accumulated content and token state
|
|
291
|
+
resolve({
|
|
292
|
+
content: accumulatedContent,
|
|
293
|
+
inputTokens: tokenState.inputTokens,
|
|
294
|
+
outputTokens: tokenState.outputTokens,
|
|
295
|
+
cliArgs: args,
|
|
296
|
+
cliEvents: collectedEvents,
|
|
297
|
+
toolsCalled,
|
|
298
|
+
});
|
|
299
|
+
}
|
|
300
|
+
else {
|
|
301
|
+
try {
|
|
302
|
+
// Parse the JSON output
|
|
303
|
+
const response = JSON.parse(stdout);
|
|
304
|
+
// Extract content - Claude CLI returns result field
|
|
305
|
+
const content = response.result || response.text || "";
|
|
306
|
+
// For non-streaming, capture the full response as an event
|
|
307
|
+
collectedEvents.push(response);
|
|
308
|
+
resolve({
|
|
309
|
+
content,
|
|
310
|
+
inputTokens: response.usage?.input_tokens || 0,
|
|
311
|
+
outputTokens: response.usage?.output_tokens || 0,
|
|
312
|
+
cliArgs: args,
|
|
313
|
+
cliEvents: collectedEvents,
|
|
314
|
+
toolsCalled: [], // Non-streaming doesn't track tool calls
|
|
315
|
+
});
|
|
316
|
+
}
|
|
317
|
+
catch (e) {
|
|
318
|
+
reject(new ClaudeCodeError(`Failed to parse Claude Code output: ${e instanceof Error ? e.message : String(e)}`));
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
});
|
|
322
|
+
proc.on("error", (err) => {
|
|
323
|
+
cleanup();
|
|
324
|
+
if (!killed) {
|
|
325
|
+
reject(new ClaudeCodeError(`Failed to spawn Claude Code: ${err.message}`));
|
|
326
|
+
}
|
|
327
|
+
});
|
|
328
|
+
// Set timeout
|
|
329
|
+
timeoutId = setTimeout(() => {
|
|
330
|
+
killed = true;
|
|
331
|
+
proc?.kill("SIGTERM");
|
|
332
|
+
reject(new ClaudeCodeError(`Claude Code timed out after ${timeout / 1000} seconds`));
|
|
333
|
+
}, timeout);
|
|
334
|
+
});
|
|
335
|
+
}
|
|
336
|
+
/**
|
|
337
|
+
* Generate a handoff document using Claude Code CLI with the jacques-handoff skill.
|
|
338
|
+
*
|
|
339
|
+
* This function:
|
|
340
|
+
* 1. Reads the skill prompt from ~/.claude/skills/jacques-handoff/SKILL.md
|
|
341
|
+
* 2. Passes the transcript path to Claude (it uses Read tool to access it)
|
|
342
|
+
* 3. Claude extracts relevant info and generates the handoff
|
|
343
|
+
* 4. Saves the generated handoff to .jacques/handoffs/
|
|
344
|
+
*
|
|
345
|
+
* @param transcriptPath - Path to the session transcript (JSONL file)
|
|
346
|
+
* @param projectDir - Project directory (for saving the handoff)
|
|
347
|
+
* @param options - Optional timeout and abort signal
|
|
348
|
+
* @returns The generated handoff result with token usage
|
|
349
|
+
*/
|
|
350
|
+
export async function generateHandoffWithLLM(transcriptPath, projectDir, options = {}) {
|
|
351
|
+
// 1. Read skill prompt
|
|
352
|
+
let skillPrompt;
|
|
353
|
+
try {
|
|
354
|
+
skillPrompt = await fs.readFile(SKILL_PATH, "utf-8");
|
|
355
|
+
}
|
|
356
|
+
catch (err) {
|
|
357
|
+
throw new ClaudeCodeError(`Failed to read skill file at ${SKILL_PATH}: ${err instanceof Error ? err.message : String(err)}`);
|
|
358
|
+
}
|
|
359
|
+
// 2. Verify transcript exists
|
|
360
|
+
try {
|
|
361
|
+
await fs.access(transcriptPath);
|
|
362
|
+
}
|
|
363
|
+
catch (err) {
|
|
364
|
+
throw new ClaudeCodeError(`Transcript not found at ${transcriptPath}`);
|
|
365
|
+
}
|
|
366
|
+
// 3. Pre-extract compact context (rule-based, ~2k tokens instead of 60k)
|
|
367
|
+
// This avoids Claude reading the full transcript file
|
|
368
|
+
const { context: userPrompt, tokenEstimate } = await getCompactContextForSkill(transcriptPath, projectDir);
|
|
369
|
+
debugLog(`[CONTEXT] Pre-extracted compact context: ~${tokenEstimate} tokens`);
|
|
370
|
+
// 4. Run Claude Code CLI with logging
|
|
371
|
+
const operationId = ClaudeOperationLogger.createOperationId();
|
|
372
|
+
const startTime = Date.now();
|
|
373
|
+
// Estimate tokens (~4 chars per token is a rough estimate)
|
|
374
|
+
const userPromptTokensEst = Math.ceil(userPrompt.length / 4);
|
|
375
|
+
const systemPromptTokensEst = Math.ceil(skillPrompt.length / 4);
|
|
376
|
+
// Truncate for preview (first 200 chars)
|
|
377
|
+
const truncate = (s, len) => s.length > len ? s.substring(0, len) + "..." : s;
|
|
378
|
+
// Log operation START
|
|
379
|
+
const startOperation = {
|
|
380
|
+
id: operationId,
|
|
381
|
+
timestamp: new Date().toISOString(),
|
|
382
|
+
operation: "llm-handoff",
|
|
383
|
+
phase: "start",
|
|
384
|
+
inputTokens: 0,
|
|
385
|
+
outputTokens: 0,
|
|
386
|
+
totalTokens: 0,
|
|
387
|
+
durationMs: 0,
|
|
388
|
+
success: true, // Optimistic
|
|
389
|
+
userPromptChars: userPrompt.length,
|
|
390
|
+
systemPromptChars: skillPrompt.length,
|
|
391
|
+
userPromptTokensEst,
|
|
392
|
+
systemPromptTokensEst,
|
|
393
|
+
userPromptPreview: truncate(userPrompt.replace(/\n/g, " "), 200),
|
|
394
|
+
systemPromptPreview: truncate(skillPrompt.replace(/\n/g, " "), 200),
|
|
395
|
+
// Include full prompts only in debug mode
|
|
396
|
+
...(ClaudeOperationLogger.isDebugMode() && {
|
|
397
|
+
userPrompt,
|
|
398
|
+
systemPrompt: skillPrompt,
|
|
399
|
+
}),
|
|
400
|
+
};
|
|
401
|
+
await ClaudeOperationLogger.log(startOperation);
|
|
402
|
+
debugLog(`[OPERATION] Started: user=${userPromptTokensEst} tokens est, system=${systemPromptTokensEst} tokens est`);
|
|
403
|
+
let result;
|
|
404
|
+
let operationSuccess = true;
|
|
405
|
+
let errorMessage;
|
|
406
|
+
try {
|
|
407
|
+
result = await runClaudeCode(skillPrompt, userPrompt, projectDir, options);
|
|
408
|
+
}
|
|
409
|
+
catch (error) {
|
|
410
|
+
operationSuccess = false;
|
|
411
|
+
errorMessage = error instanceof Error ? error.message : String(error);
|
|
412
|
+
// Log the failed operation
|
|
413
|
+
const failedOperation = {
|
|
414
|
+
id: operationId,
|
|
415
|
+
timestamp: new Date().toISOString(),
|
|
416
|
+
operation: "llm-handoff",
|
|
417
|
+
phase: "complete",
|
|
418
|
+
inputTokens: 0,
|
|
419
|
+
outputTokens: 0,
|
|
420
|
+
totalTokens: 0,
|
|
421
|
+
durationMs: Date.now() - startTime,
|
|
422
|
+
success: false,
|
|
423
|
+
errorMessage,
|
|
424
|
+
userPromptChars: userPrompt.length,
|
|
425
|
+
systemPromptChars: skillPrompt.length,
|
|
426
|
+
userPromptTokensEst,
|
|
427
|
+
systemPromptTokensEst,
|
|
428
|
+
// Include full prompts only in debug mode
|
|
429
|
+
...(ClaudeOperationLogger.isDebugMode() && {
|
|
430
|
+
userPrompt,
|
|
431
|
+
systemPrompt: skillPrompt,
|
|
432
|
+
}),
|
|
433
|
+
};
|
|
434
|
+
await ClaudeOperationLogger.log(failedOperation);
|
|
435
|
+
throw error;
|
|
436
|
+
}
|
|
437
|
+
const durationMs = Date.now() - startTime;
|
|
438
|
+
// Calculate overhead (input tokens - estimated prompt tokens)
|
|
439
|
+
const promptTokensEst = userPromptTokensEst + systemPromptTokensEst;
|
|
440
|
+
const overheadTokens = result.inputTokens - promptTokensEst;
|
|
441
|
+
// Save debug data (always, for inspection)
|
|
442
|
+
const debugData = {
|
|
443
|
+
operationId,
|
|
444
|
+
timestamp: new Date().toISOString(),
|
|
445
|
+
userPrompt,
|
|
446
|
+
systemPrompt: skillPrompt,
|
|
447
|
+
cliArgs: result.cliArgs,
|
|
448
|
+
cliEvents: result.cliEvents,
|
|
449
|
+
response: result.content,
|
|
450
|
+
};
|
|
451
|
+
const debugFilePath = await ClaudeOperationLogger.saveDebugData(debugData);
|
|
452
|
+
debugLog(`[DEBUG] Saved debug data to: ${debugFilePath}`);
|
|
453
|
+
// Log the successful operation COMPLETE
|
|
454
|
+
const completeOperation = {
|
|
455
|
+
id: operationId,
|
|
456
|
+
timestamp: new Date().toISOString(),
|
|
457
|
+
operation: "llm-handoff",
|
|
458
|
+
phase: "complete",
|
|
459
|
+
inputTokens: result.inputTokens,
|
|
460
|
+
outputTokens: result.outputTokens,
|
|
461
|
+
totalTokens: result.inputTokens + result.outputTokens,
|
|
462
|
+
durationMs,
|
|
463
|
+
success: true,
|
|
464
|
+
userPromptChars: userPrompt.length,
|
|
465
|
+
systemPromptChars: skillPrompt.length,
|
|
466
|
+
userPromptTokensEst,
|
|
467
|
+
systemPromptTokensEst,
|
|
468
|
+
outputLength: result.content.length,
|
|
469
|
+
toolsCalled: result.toolsCalled.length > 0 ? result.toolsCalled : undefined,
|
|
470
|
+
// Include full prompts only in debug mode
|
|
471
|
+
...(ClaudeOperationLogger.isDebugMode() && {
|
|
472
|
+
userPrompt,
|
|
473
|
+
systemPrompt: skillPrompt,
|
|
474
|
+
}),
|
|
475
|
+
};
|
|
476
|
+
await ClaudeOperationLogger.log(completeOperation);
|
|
477
|
+
debugLog(`[OPERATION] Complete: ${result.inputTokens} in (est: ${promptTokensEst}, overhead: ${overheadTokens}), ${result.outputTokens} out, ${durationMs}ms`);
|
|
478
|
+
if (result.toolsCalled.length > 0) {
|
|
479
|
+
debugLog(`[TOOLS] Called: ${result.toolsCalled.join(", ")}`);
|
|
480
|
+
}
|
|
481
|
+
// 5. Save handoff file
|
|
482
|
+
const handoffsDir = await ensureHandoffsDir(projectDir);
|
|
483
|
+
const filename = generateHandoffFilename();
|
|
484
|
+
const filePath = join(handoffsDir, filename);
|
|
485
|
+
await fs.writeFile(filePath, result.content, "utf-8");
|
|
486
|
+
return {
|
|
487
|
+
filePath,
|
|
488
|
+
filename,
|
|
489
|
+
content: result.content,
|
|
490
|
+
inputTokens: result.inputTokens,
|
|
491
|
+
outputTokens: result.outputTokens,
|
|
492
|
+
totalTokens: result.inputTokens + result.outputTokens,
|
|
493
|
+
};
|
|
494
|
+
}
|
|
495
|
+
/**
|
|
496
|
+
* Check if the jacques-handoff skill is installed
|
|
497
|
+
*/
|
|
498
|
+
export async function isSkillInstalled() {
|
|
499
|
+
try {
|
|
500
|
+
await fs.access(SKILL_PATH);
|
|
501
|
+
return true;
|
|
502
|
+
}
|
|
503
|
+
catch {
|
|
504
|
+
return false;
|
|
505
|
+
}
|
|
506
|
+
}
|
|
507
|
+
/**
|
|
508
|
+
* Get the path to the jacques-handoff skill
|
|
509
|
+
*/
|
|
510
|
+
export function getSkillPath() {
|
|
511
|
+
return SKILL_PATH;
|
|
512
|
+
}
|
|
513
|
+
//# sourceMappingURL=llm-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llm-generator.js","sourceRoot":"","sources":["../../src/handoff/llm-generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Handoff Prompts
|
|
3
|
+
*
|
|
4
|
+
* Prompts for invoking the handoff orchestrator and related operations.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* The prompt to invoke the handoff orchestrator subagent
|
|
8
|
+
*/
|
|
9
|
+
export declare const HANDOFF_INVOCATION = "Use the handoff-orchestrator to prepare for a new session";
|
|
10
|
+
/**
|
|
11
|
+
* Get the handoff orchestrator invocation prompt
|
|
12
|
+
*/
|
|
13
|
+
export declare function getHandoffPrompt(): string;
|
|
14
|
+
/**
|
|
15
|
+
* Get a display-friendly version of the handoff prompt
|
|
16
|
+
*/
|
|
17
|
+
export declare function getHandoffPromptDisplay(): string;
|
|
18
|
+
//# sourceMappingURL=prompts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../src/handoff/prompts.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,eAAO,MAAM,kBAAkB,8DAA8D,CAAC;AAE9F;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,MAAM,CAEhD"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Handoff Prompts
|
|
3
|
+
*
|
|
4
|
+
* Prompts for invoking the handoff orchestrator and related operations.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* The prompt to invoke the handoff orchestrator subagent
|
|
8
|
+
*/
|
|
9
|
+
export const HANDOFF_INVOCATION = "Use the handoff-orchestrator to prepare for a new session";
|
|
10
|
+
/**
|
|
11
|
+
* Get the handoff orchestrator invocation prompt
|
|
12
|
+
*/
|
|
13
|
+
export function getHandoffPrompt() {
|
|
14
|
+
return HANDOFF_INVOCATION;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Get a display-friendly version of the handoff prompt
|
|
18
|
+
*/
|
|
19
|
+
export function getHandoffPromptDisplay() {
|
|
20
|
+
return HANDOFF_INVOCATION;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=prompts.js.map
|