@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,603 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Handoff Generator
|
|
3
|
+
*
|
|
4
|
+
* Generates handoff documents directly from transcript files.
|
|
5
|
+
* Uses rule-based extraction (no LLM) for fast, consistent results.
|
|
6
|
+
*/
|
|
7
|
+
import { promises as fs } from "fs";
|
|
8
|
+
import { join, basename } from "path";
|
|
9
|
+
import { parseJSONL } from "../session/parser.js";
|
|
10
|
+
import { ensureHandoffsDir, generateHandoffFilename } from "./catalog.js";
|
|
11
|
+
import { extractEmbeddedPlans, extractPlanTitle } from "../archive/plan-extractor.js";
|
|
12
|
+
/** Max number of recent user messages to include */
|
|
13
|
+
const MAX_RECENT_MESSAGES = 5;
|
|
14
|
+
/** Max number of recent user messages for skill context (more comprehensive) */
|
|
15
|
+
const MAX_SKILL_CONTEXT_MESSAGES = 10;
|
|
16
|
+
/** Max length for each message excerpt */
|
|
17
|
+
const MAX_MESSAGE_LENGTH = 300;
|
|
18
|
+
/** Max number of assistant highlights to extract */
|
|
19
|
+
const MAX_ASSISTANT_HIGHLIGHTS = 5;
|
|
20
|
+
/** Max length for each assistant highlight */
|
|
21
|
+
const MAX_HIGHLIGHT_LENGTH = 150;
|
|
22
|
+
/**
|
|
23
|
+
* Extract session title from entries
|
|
24
|
+
*/
|
|
25
|
+
function extractTitle(entries, projectDir) {
|
|
26
|
+
// First, try to find a summary entry
|
|
27
|
+
const summaryEntry = entries.find((e) => e.type === "summary");
|
|
28
|
+
if (summaryEntry?.content.summary) {
|
|
29
|
+
return summaryEntry.content.summary;
|
|
30
|
+
}
|
|
31
|
+
// Fallback: first user message (truncated)
|
|
32
|
+
const firstUser = entries.find((e) => e.type === "user_message");
|
|
33
|
+
if (firstUser?.content.text) {
|
|
34
|
+
const text = firstUser.content.text.trim();
|
|
35
|
+
if (text.length <= 80) {
|
|
36
|
+
return text;
|
|
37
|
+
}
|
|
38
|
+
return text.substring(0, 77) + "...";
|
|
39
|
+
}
|
|
40
|
+
// Last resort: project name
|
|
41
|
+
return `Session in ${basename(projectDir)}`;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Extract files modified from Write/Edit tool calls
|
|
45
|
+
*/
|
|
46
|
+
function extractFilesModified(entries) {
|
|
47
|
+
const files = new Set();
|
|
48
|
+
for (const entry of entries) {
|
|
49
|
+
if (entry.type === "tool_call") {
|
|
50
|
+
const toolName = entry.content.toolName;
|
|
51
|
+
const input = entry.content.toolInput;
|
|
52
|
+
if (toolName === "Write" || toolName === "Edit") {
|
|
53
|
+
const filePath = input?.file_path;
|
|
54
|
+
if (filePath) {
|
|
55
|
+
files.add(filePath);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return Array.from(files);
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Extract unique tools used
|
|
64
|
+
*/
|
|
65
|
+
function extractToolsUsed(entries) {
|
|
66
|
+
const tools = new Set();
|
|
67
|
+
for (const entry of entries) {
|
|
68
|
+
if (entry.type === "tool_call" && entry.content.toolName) {
|
|
69
|
+
tools.add(entry.content.toolName);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
return Array.from(tools).sort();
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Extract recent user messages (last N)
|
|
76
|
+
*/
|
|
77
|
+
function extractRecentMessages(entries, count = MAX_RECENT_MESSAGES) {
|
|
78
|
+
const userMessages = entries
|
|
79
|
+
.filter((e) => e.type === "user_message" && e.content.text)
|
|
80
|
+
.map((e) => {
|
|
81
|
+
const text = e.content.text.trim();
|
|
82
|
+
if (text.length <= MAX_MESSAGE_LENGTH) {
|
|
83
|
+
return text;
|
|
84
|
+
}
|
|
85
|
+
return text.substring(0, MAX_MESSAGE_LENGTH - 3) + "...";
|
|
86
|
+
})
|
|
87
|
+
.filter((m) => m.length > 0);
|
|
88
|
+
// Return last N messages
|
|
89
|
+
return userMessages.slice(-count);
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Extract key assistant response snippets (last N, excluding thinking/tools)
|
|
93
|
+
*/
|
|
94
|
+
function extractAssistantHighlights(entries, count = MAX_ASSISTANT_HIGHLIGHTS) {
|
|
95
|
+
const highlights = entries
|
|
96
|
+
.filter((e) => e.type === "assistant_message" && e.content.text)
|
|
97
|
+
.map((e) => {
|
|
98
|
+
const text = e.content.text.trim();
|
|
99
|
+
if (text.length <= MAX_HIGHLIGHT_LENGTH) {
|
|
100
|
+
return text;
|
|
101
|
+
}
|
|
102
|
+
return text.substring(0, MAX_HIGHLIGHT_LENGTH - 3) + "...";
|
|
103
|
+
})
|
|
104
|
+
.filter((h) => h.length > 0);
|
|
105
|
+
// Return last N highlights
|
|
106
|
+
return highlights.slice(-count);
|
|
107
|
+
}
|
|
108
|
+
/** Decision detection patterns */
|
|
109
|
+
const DECISION_PATTERNS = [
|
|
110
|
+
/\b(?:yes|yeah|yep|sure),?\s+(?:do that|go with|use|let's)/i,
|
|
111
|
+
/\b(?:let's|lets)\s+(?:go with|use|do|try|stick with)/i,
|
|
112
|
+
/\b(?:use|go with|switch to|prefer)\s+\w+\s+instead/i,
|
|
113
|
+
/\b(?:sounds good|that works|perfect|great idea)/i,
|
|
114
|
+
/\b(?:i want|i prefer|i'd like|i would like)\s+(?:to|the)/i,
|
|
115
|
+
/\b(?:don't|do not|shouldn't|should not)\s+(?:use|add|include)/i,
|
|
116
|
+
/\b(?:keep|remove|delete|add|include)\s+(?:the|that|this)/i,
|
|
117
|
+
/\bapproved?\b/i,
|
|
118
|
+
/\b(?:option|choice|approach)\s+(?:\d|[a-c])\b/i,
|
|
119
|
+
];
|
|
120
|
+
/**
|
|
121
|
+
* Extract user decision points from messages
|
|
122
|
+
*/
|
|
123
|
+
function extractDecisionPoints(entries) {
|
|
124
|
+
const decisions = [];
|
|
125
|
+
const seen = new Set();
|
|
126
|
+
for (const entry of entries) {
|
|
127
|
+
if (entry.type !== "user_message" || !entry.content.text)
|
|
128
|
+
continue;
|
|
129
|
+
const text = entry.content.text.trim();
|
|
130
|
+
for (const pattern of DECISION_PATTERNS) {
|
|
131
|
+
if (pattern.test(text)) {
|
|
132
|
+
// Extract the relevant sentence/phrase (up to 150 chars)
|
|
133
|
+
const excerpt = text.length <= 150 ? text : text.substring(0, 147) + "...";
|
|
134
|
+
// Deduplicate similar decisions
|
|
135
|
+
const normalized = excerpt.toLowerCase().replace(/\s+/g, " ");
|
|
136
|
+
if (!seen.has(normalized)) {
|
|
137
|
+
seen.add(normalized);
|
|
138
|
+
decisions.push(excerpt);
|
|
139
|
+
}
|
|
140
|
+
break; // Only one decision per message
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
return decisions;
|
|
145
|
+
}
|
|
146
|
+
/** Blocker/error detection patterns */
|
|
147
|
+
const BLOCKER_PATTERNS = [
|
|
148
|
+
/\b(?:blocked|blocking|stuck)\b/i,
|
|
149
|
+
/\b(?:error|exception|failed|failure|failing)\b/i,
|
|
150
|
+
/\b(?:bug|issue|problem)\b/i,
|
|
151
|
+
/\b(?:doesn't work|doesn't compile|won't compile)\b/i,
|
|
152
|
+
/\b(?:can't|cannot|unable to)\s+(?:find|get|access|connect)/i,
|
|
153
|
+
/\b(?:missing|not found|undefined)\b/i,
|
|
154
|
+
/\b(?:timeout|timed out)\b/i,
|
|
155
|
+
/\b(?:permission denied|access denied)\b/i,
|
|
156
|
+
/\b(?:crash|crashed|crashing)\b/i,
|
|
157
|
+
];
|
|
158
|
+
/**
|
|
159
|
+
* Extract blockers/errors from user and assistant messages
|
|
160
|
+
*/
|
|
161
|
+
function extractBlockers(entries) {
|
|
162
|
+
const blockers = [];
|
|
163
|
+
const seen = new Set();
|
|
164
|
+
for (const entry of entries) {
|
|
165
|
+
if ((entry.type !== "user_message" && entry.type !== "assistant_message") ||
|
|
166
|
+
!entry.content.text) {
|
|
167
|
+
continue;
|
|
168
|
+
}
|
|
169
|
+
const text = entry.content.text.trim();
|
|
170
|
+
for (const pattern of BLOCKER_PATTERNS) {
|
|
171
|
+
if (pattern.test(text)) {
|
|
172
|
+
// Extract the relevant portion (up to 150 chars)
|
|
173
|
+
const excerpt = text.length <= 150 ? text : text.substring(0, 147) + "...";
|
|
174
|
+
// Deduplicate
|
|
175
|
+
const normalized = excerpt.toLowerCase().replace(/\s+/g, " ");
|
|
176
|
+
if (!seen.has(normalized)) {
|
|
177
|
+
seen.add(normalized);
|
|
178
|
+
blockers.push(excerpt);
|
|
179
|
+
}
|
|
180
|
+
break;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
return blockers;
|
|
185
|
+
}
|
|
186
|
+
/** Technology detection patterns (same as manifest-extractor.ts) */
|
|
187
|
+
const TECH_PATTERNS = [
|
|
188
|
+
// Languages
|
|
189
|
+
{ pattern: /typescript|\.tsx?$/i, tech: "typescript" },
|
|
190
|
+
{ pattern: /javascript|\.jsx?$/i, tech: "javascript" },
|
|
191
|
+
{ pattern: /python|\.py$/i, tech: "python" },
|
|
192
|
+
{ pattern: /rust|\.rs$/i, tech: "rust" },
|
|
193
|
+
{ pattern: /golang|\.go$/i, tech: "go" },
|
|
194
|
+
{ pattern: /java(?!script)|\.java$/i, tech: "java" },
|
|
195
|
+
{ pattern: /c\+\+|\.cpp$|\.cc$/i, tech: "cpp" },
|
|
196
|
+
{ pattern: /c#|csharp|\.cs$/i, tech: "csharp" },
|
|
197
|
+
{ pattern: /ruby|\.rb$/i, tech: "ruby" },
|
|
198
|
+
{ pattern: /php|\.php$/i, tech: "php" },
|
|
199
|
+
{ pattern: /swift|\.swift$/i, tech: "swift" },
|
|
200
|
+
{ pattern: /kotlin|\.kt$/i, tech: "kotlin" },
|
|
201
|
+
// Frameworks
|
|
202
|
+
{ pattern: /\breact\b/i, tech: "react" },
|
|
203
|
+
{ pattern: /\bvue\b/i, tech: "vue" },
|
|
204
|
+
{ pattern: /\bangular\b/i, tech: "angular" },
|
|
205
|
+
{ pattern: /\bsvelte\b/i, tech: "svelte" },
|
|
206
|
+
{ pattern: /\bnextjs?\b|next\.config/i, tech: "nextjs" },
|
|
207
|
+
{ pattern: /\bnuxt\b/i, tech: "nuxt" },
|
|
208
|
+
{ pattern: /\bexpress\b/i, tech: "express" },
|
|
209
|
+
{ pattern: /\bfastapi\b/i, tech: "fastapi" },
|
|
210
|
+
{ pattern: /\bdjango\b/i, tech: "django" },
|
|
211
|
+
{ pattern: /\bflask\b/i, tech: "flask" },
|
|
212
|
+
{ pattern: /\brails\b/i, tech: "rails" },
|
|
213
|
+
{ pattern: /\bspring\b/i, tech: "spring" },
|
|
214
|
+
// Databases
|
|
215
|
+
{ pattern: /\bpostgres|psql\b/i, tech: "postgres" },
|
|
216
|
+
{ pattern: /\bmysql\b/i, tech: "mysql" },
|
|
217
|
+
{ pattern: /\bmongodb?\b/i, tech: "mongodb" },
|
|
218
|
+
{ pattern: /\bredis\b/i, tech: "redis" },
|
|
219
|
+
{ pattern: /\bsqlite\b/i, tech: "sqlite" },
|
|
220
|
+
{ pattern: /\bprisma\b/i, tech: "prisma" },
|
|
221
|
+
// Tools/Infrastructure
|
|
222
|
+
{ pattern: /\bdocker\b/i, tech: "docker" },
|
|
223
|
+
{ pattern: /\bkubernetes|k8s\b/i, tech: "kubernetes" },
|
|
224
|
+
{ pattern: /\baws\b/i, tech: "aws" },
|
|
225
|
+
{ pattern: /\bgcp\b|google cloud/i, tech: "gcp" },
|
|
226
|
+
{ pattern: /\bazure\b/i, tech: "azure" },
|
|
227
|
+
{ pattern: /\bgraphql\b/i, tech: "graphql" },
|
|
228
|
+
{ pattern: /\brest\s*api\b/i, tech: "rest" },
|
|
229
|
+
{ pattern: /\bwebsocket\b/i, tech: "websocket" },
|
|
230
|
+
{ pattern: /\bjest\b/i, tech: "jest" },
|
|
231
|
+
{ pattern: /\bpytest\b/i, tech: "pytest" },
|
|
232
|
+
{ pattern: /\bink\b.*\breact\b|\breact\b.*\bink\b/i, tech: "ink" },
|
|
233
|
+
{ pattern: /\btailwind\b/i, tech: "tailwind" },
|
|
234
|
+
// Build tools
|
|
235
|
+
{ pattern: /\bwebpack\b/i, tech: "webpack" },
|
|
236
|
+
{ pattern: /\bvite\b/i, tech: "vite" },
|
|
237
|
+
{ pattern: /\besbuild\b/i, tech: "esbuild" },
|
|
238
|
+
{ pattern: /\brollup\b/i, tech: "rollup" },
|
|
239
|
+
];
|
|
240
|
+
/**
|
|
241
|
+
* Extract technologies from content and file paths
|
|
242
|
+
*/
|
|
243
|
+
function extractTechnologies(entries, filesModified) {
|
|
244
|
+
const techs = new Set();
|
|
245
|
+
// Build combined text for pattern matching
|
|
246
|
+
const textParts = [];
|
|
247
|
+
for (const entry of entries) {
|
|
248
|
+
if (entry.content.text) {
|
|
249
|
+
textParts.push(entry.content.text);
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
// Add file paths
|
|
253
|
+
textParts.push(...filesModified);
|
|
254
|
+
const combinedText = textParts.join(" ");
|
|
255
|
+
// Check each pattern
|
|
256
|
+
for (const { pattern, tech } of TECH_PATTERNS) {
|
|
257
|
+
if (pattern.test(combinedText)) {
|
|
258
|
+
techs.add(tech);
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
return Array.from(techs).sort();
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Extract session ID from parsed entries.
|
|
265
|
+
*/
|
|
266
|
+
function extractSessionId(entries) {
|
|
267
|
+
// Try first entry
|
|
268
|
+
if (entries.length > 0 && entries[0].sessionId) {
|
|
269
|
+
return entries[0].sessionId;
|
|
270
|
+
}
|
|
271
|
+
// Fallback: generate timestamp-based ID (better than "handoff-temp")
|
|
272
|
+
return `handoff-${Date.now()}`;
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* Extract handoff data from parsed entries
|
|
276
|
+
*/
|
|
277
|
+
export async function extractHandoffData(entries, projectDir) {
|
|
278
|
+
const userMessageCount = entries.filter((e) => e.type === "user_message").length;
|
|
279
|
+
const toolCallCount = entries.filter((e) => e.type === "tool_call").length;
|
|
280
|
+
// Extract session ID from entries
|
|
281
|
+
const sessionId = extractSessionId(entries);
|
|
282
|
+
// Extract embedded plans with real session ID
|
|
283
|
+
const embeddedPlans = await extractEmbeddedPlans(entries, projectDir, sessionId);
|
|
284
|
+
// Process plans with error handling for file reads
|
|
285
|
+
let plans;
|
|
286
|
+
if (embeddedPlans.length > 0) {
|
|
287
|
+
const planResults = await Promise.all(embeddedPlans.map(async (p) => {
|
|
288
|
+
try {
|
|
289
|
+
const content = await fs.readFile(p.path, "utf-8");
|
|
290
|
+
return {
|
|
291
|
+
path: p.path,
|
|
292
|
+
title: extractPlanTitle(content) || p.name,
|
|
293
|
+
};
|
|
294
|
+
}
|
|
295
|
+
catch {
|
|
296
|
+
// File doesn't exist or can't be read - use name as title
|
|
297
|
+
return {
|
|
298
|
+
path: p.path,
|
|
299
|
+
title: p.name,
|
|
300
|
+
};
|
|
301
|
+
}
|
|
302
|
+
}));
|
|
303
|
+
plans = planResults;
|
|
304
|
+
}
|
|
305
|
+
const filesModified = extractFilesModified(entries);
|
|
306
|
+
return {
|
|
307
|
+
title: extractTitle(entries, projectDir),
|
|
308
|
+
projectDir,
|
|
309
|
+
filesModified,
|
|
310
|
+
toolsUsed: extractToolsUsed(entries),
|
|
311
|
+
recentMessages: extractRecentMessages(entries),
|
|
312
|
+
timestamp: new Date().toISOString(),
|
|
313
|
+
totalUserMessages: userMessageCount,
|
|
314
|
+
totalToolCalls: toolCallCount,
|
|
315
|
+
plans,
|
|
316
|
+
assistantHighlights: extractAssistantHighlights(entries),
|
|
317
|
+
decisions: extractDecisionPoints(entries),
|
|
318
|
+
technologies: extractTechnologies(entries, filesModified),
|
|
319
|
+
blockers: extractBlockers(entries),
|
|
320
|
+
};
|
|
321
|
+
}
|
|
322
|
+
/**
|
|
323
|
+
* Format handoff data into markdown document
|
|
324
|
+
*/
|
|
325
|
+
export function formatHandoffMarkdown(data) {
|
|
326
|
+
const lines = [];
|
|
327
|
+
// Header
|
|
328
|
+
lines.push("# Session Handoff");
|
|
329
|
+
lines.push("");
|
|
330
|
+
lines.push(`**Title:** ${data.title}`);
|
|
331
|
+
lines.push(`**Project:** ${data.projectDir}`);
|
|
332
|
+
lines.push(`**Generated:** ${data.timestamp}`);
|
|
333
|
+
lines.push(`**Messages:** ${data.totalUserMessages} | **Tool calls:** ${data.totalToolCalls}`);
|
|
334
|
+
lines.push("");
|
|
335
|
+
// Files Modified
|
|
336
|
+
lines.push("## Files Modified");
|
|
337
|
+
if (data.filesModified.length > 0) {
|
|
338
|
+
for (const file of data.filesModified) {
|
|
339
|
+
lines.push(`- ${file}`);
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
else {
|
|
343
|
+
lines.push("_No files were modified in this session._");
|
|
344
|
+
}
|
|
345
|
+
lines.push("");
|
|
346
|
+
// Tools Used
|
|
347
|
+
lines.push("## Tools Used");
|
|
348
|
+
if (data.toolsUsed.length > 0) {
|
|
349
|
+
lines.push(data.toolsUsed.join(", "));
|
|
350
|
+
}
|
|
351
|
+
else {
|
|
352
|
+
lines.push("_No tools were used in this session._");
|
|
353
|
+
}
|
|
354
|
+
lines.push("");
|
|
355
|
+
// Plan Context
|
|
356
|
+
if (data.plans && data.plans.length > 0) {
|
|
357
|
+
lines.push("## Plan Context");
|
|
358
|
+
if (data.plans.length === 1) {
|
|
359
|
+
lines.push(`This session is implementing: **${data.plans[0].title}**`);
|
|
360
|
+
lines.push(`Plan file: ${data.plans[0].path}`);
|
|
361
|
+
}
|
|
362
|
+
else {
|
|
363
|
+
lines.push(`This session is implementing ${data.plans.length} plans:`);
|
|
364
|
+
data.plans.forEach((plan, i) => {
|
|
365
|
+
lines.push(`${i + 1}. **${plan.title}**`);
|
|
366
|
+
lines.push(` File: ${plan.path}`);
|
|
367
|
+
});
|
|
368
|
+
}
|
|
369
|
+
lines.push("");
|
|
370
|
+
}
|
|
371
|
+
// Recent Context (last user messages)
|
|
372
|
+
lines.push("## Recent Context");
|
|
373
|
+
lines.push("");
|
|
374
|
+
if (data.recentMessages.length > 0) {
|
|
375
|
+
lines.push("Last user messages from the session:");
|
|
376
|
+
lines.push("");
|
|
377
|
+
for (let i = 0; i < data.recentMessages.length; i++) {
|
|
378
|
+
const num = data.recentMessages.length - data.recentMessages.length + i + 1;
|
|
379
|
+
lines.push(`${num}. ${data.recentMessages[i]}`);
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
else {
|
|
383
|
+
lines.push("_No user messages in this session._");
|
|
384
|
+
}
|
|
385
|
+
lines.push("");
|
|
386
|
+
// Instructions for continuing
|
|
387
|
+
lines.push("## How to Continue");
|
|
388
|
+
lines.push("");
|
|
389
|
+
lines.push("In a new Claude Code session, run `/jacques-continue` to load this handoff and resume work.");
|
|
390
|
+
lines.push("");
|
|
391
|
+
// Footer
|
|
392
|
+
lines.push("---");
|
|
393
|
+
lines.push("_Generated by Jacques Context Manager_");
|
|
394
|
+
return lines.join("\n");
|
|
395
|
+
}
|
|
396
|
+
/**
|
|
397
|
+
* Generate a handoff document from a transcript file
|
|
398
|
+
*/
|
|
399
|
+
export async function generateHandoffFromTranscript(transcriptPath, projectDir) {
|
|
400
|
+
try {
|
|
401
|
+
// Parse the JSONL file
|
|
402
|
+
const entries = await parseJSONL(transcriptPath);
|
|
403
|
+
// Extract handoff data
|
|
404
|
+
const data = await extractHandoffData(entries, projectDir);
|
|
405
|
+
// Format as markdown
|
|
406
|
+
const content = formatHandoffMarkdown(data);
|
|
407
|
+
// Ensure handoffs directory exists
|
|
408
|
+
const handoffsDir = await ensureHandoffsDir(projectDir);
|
|
409
|
+
// Generate filename
|
|
410
|
+
const filename = generateHandoffFilename();
|
|
411
|
+
const filePath = join(handoffsDir, filename);
|
|
412
|
+
// Write the file
|
|
413
|
+
await fs.writeFile(filePath, content, "utf-8");
|
|
414
|
+
// Estimate tokens (~4.5 chars per token)
|
|
415
|
+
const tokenEstimate = Math.ceil(content.length / 4.5);
|
|
416
|
+
return {
|
|
417
|
+
filePath,
|
|
418
|
+
filename,
|
|
419
|
+
content,
|
|
420
|
+
tokenEstimate,
|
|
421
|
+
};
|
|
422
|
+
}
|
|
423
|
+
catch (error) {
|
|
424
|
+
// Re-throw with more context
|
|
425
|
+
const errMsg = error instanceof Error ? error.message : String(error);
|
|
426
|
+
throw new Error(`Failed to generate handoff from ${transcriptPath}: ${errMsg}`);
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
/**
|
|
430
|
+
* Generate handoff from already-parsed entries (avoids re-parsing)
|
|
431
|
+
*/
|
|
432
|
+
export async function generateHandoffFromEntries(entries, projectDir) {
|
|
433
|
+
// Extract handoff data
|
|
434
|
+
const data = await extractHandoffData(entries, projectDir);
|
|
435
|
+
// Format as markdown
|
|
436
|
+
const content = formatHandoffMarkdown(data);
|
|
437
|
+
// Ensure handoffs directory exists
|
|
438
|
+
const handoffsDir = await ensureHandoffsDir(projectDir);
|
|
439
|
+
// Generate filename
|
|
440
|
+
const filename = generateHandoffFilename();
|
|
441
|
+
const filePath = join(handoffsDir, filename);
|
|
442
|
+
// Write the file
|
|
443
|
+
await fs.writeFile(filePath, content, "utf-8");
|
|
444
|
+
// Estimate tokens (~4.5 chars per token)
|
|
445
|
+
const tokenEstimate = Math.ceil(content.length / 4.5);
|
|
446
|
+
return {
|
|
447
|
+
filePath,
|
|
448
|
+
filename,
|
|
449
|
+
content,
|
|
450
|
+
tokenEstimate,
|
|
451
|
+
};
|
|
452
|
+
}
|
|
453
|
+
/**
|
|
454
|
+
* Format extracted handoff data as compact context for skill consumption.
|
|
455
|
+
* This creates a structured prompt that maps to the 8 sections the
|
|
456
|
+
* skill/orchestrator expects, but at ~2k tokens instead of 60k.
|
|
457
|
+
*/
|
|
458
|
+
export function formatAsSkillContext(data) {
|
|
459
|
+
const lines = [];
|
|
460
|
+
lines.push("## Pre-Extracted Session Context");
|
|
461
|
+
lines.push("");
|
|
462
|
+
lines.push("Use this extracted data to generate the handoff. The data has been pre-processed from the full conversation.");
|
|
463
|
+
lines.push("");
|
|
464
|
+
// Project Info
|
|
465
|
+
lines.push("### Project Info");
|
|
466
|
+
lines.push(`- **Project:** ${data.projectDir}`);
|
|
467
|
+
lines.push(`- **Title:** ${data.title}`);
|
|
468
|
+
if (data.technologies.length > 0) {
|
|
469
|
+
lines.push(`- **Technologies:** ${data.technologies.join(", ")}`);
|
|
470
|
+
}
|
|
471
|
+
if (data.filesModified.length > 0) {
|
|
472
|
+
lines.push(`- **Files Modified:**`);
|
|
473
|
+
for (const file of data.filesModified.slice(0, 15)) {
|
|
474
|
+
lines.push(` - ${file}`);
|
|
475
|
+
}
|
|
476
|
+
if (data.filesModified.length > 15) {
|
|
477
|
+
lines.push(` - ... and ${data.filesModified.length - 15} more`);
|
|
478
|
+
}
|
|
479
|
+
}
|
|
480
|
+
if (data.toolsUsed.length > 0) {
|
|
481
|
+
lines.push(`- **Tools Used:** ${data.toolsUsed.join(", ")}`);
|
|
482
|
+
}
|
|
483
|
+
lines.push(`- **Total Messages:** ${data.totalUserMessages}`);
|
|
484
|
+
lines.push(`- **Total Tool Calls:** ${data.totalToolCalls}`);
|
|
485
|
+
lines.push("");
|
|
486
|
+
// Plan Context (if any)
|
|
487
|
+
if (data.plans && data.plans.length > 0) {
|
|
488
|
+
lines.push("### Plan Context");
|
|
489
|
+
for (const plan of data.plans) {
|
|
490
|
+
lines.push(`- **${plan.title}** (${plan.path})`);
|
|
491
|
+
}
|
|
492
|
+
lines.push("");
|
|
493
|
+
}
|
|
494
|
+
// User Messages (chronological, last 10)
|
|
495
|
+
lines.push("### User Messages (chronological, last 10)");
|
|
496
|
+
const messages = extractRecentMessages([], MAX_SKILL_CONTEXT_MESSAGES); // Will be empty, use data.recentMessages instead
|
|
497
|
+
// Use the data's recentMessages but with extended count
|
|
498
|
+
if (data.recentMessages.length > 0) {
|
|
499
|
+
data.recentMessages.forEach((m, i) => {
|
|
500
|
+
lines.push(`${i + 1}. ${m}`);
|
|
501
|
+
});
|
|
502
|
+
}
|
|
503
|
+
else {
|
|
504
|
+
lines.push("_(No user messages recorded)_");
|
|
505
|
+
}
|
|
506
|
+
lines.push("");
|
|
507
|
+
// Assistant Highlights
|
|
508
|
+
lines.push("### Assistant Highlights (key responses)");
|
|
509
|
+
if (data.assistantHighlights.length > 0) {
|
|
510
|
+
for (const highlight of data.assistantHighlights) {
|
|
511
|
+
lines.push(`- ${highlight}`);
|
|
512
|
+
}
|
|
513
|
+
}
|
|
514
|
+
else {
|
|
515
|
+
lines.push("_(No assistant highlights extracted)_");
|
|
516
|
+
}
|
|
517
|
+
lines.push("");
|
|
518
|
+
// Detected Decisions
|
|
519
|
+
lines.push("### Detected User Decisions");
|
|
520
|
+
if (data.decisions.length > 0) {
|
|
521
|
+
for (const decision of data.decisions) {
|
|
522
|
+
lines.push(`- ${decision}`);
|
|
523
|
+
}
|
|
524
|
+
}
|
|
525
|
+
else {
|
|
526
|
+
lines.push('_(Review user messages for decision patterns like "yes do that", "let\'s go with X")_');
|
|
527
|
+
}
|
|
528
|
+
lines.push("");
|
|
529
|
+
// Detected Blockers/Errors
|
|
530
|
+
lines.push("### Detected Blockers/Errors");
|
|
531
|
+
if (data.blockers.length > 0) {
|
|
532
|
+
for (const blocker of data.blockers) {
|
|
533
|
+
lines.push(`- ${blocker}`);
|
|
534
|
+
}
|
|
535
|
+
}
|
|
536
|
+
else {
|
|
537
|
+
lines.push("_(None detected - check assistant highlights for any issues)_");
|
|
538
|
+
}
|
|
539
|
+
lines.push("");
|
|
540
|
+
// Instructions
|
|
541
|
+
lines.push("---");
|
|
542
|
+
lines.push("Now follow the skill instructions to generate a ~1000 token handoff document from this context.");
|
|
543
|
+
return lines.join("\n");
|
|
544
|
+
}
|
|
545
|
+
/**
|
|
546
|
+
* Extract handoff data with extended user messages for skill context.
|
|
547
|
+
* Uses more messages (10 instead of 5) for better LLM comprehension.
|
|
548
|
+
*/
|
|
549
|
+
async function extractHandoffDataForSkill(entries, projectDir) {
|
|
550
|
+
const baseData = await extractHandoffData(entries, projectDir);
|
|
551
|
+
// Override with extended message count for skill context
|
|
552
|
+
const extendedMessages = extractRecentMessages(entries, MAX_SKILL_CONTEXT_MESSAGES);
|
|
553
|
+
return {
|
|
554
|
+
...baseData,
|
|
555
|
+
recentMessages: extendedMessages,
|
|
556
|
+
};
|
|
557
|
+
}
|
|
558
|
+
/**
|
|
559
|
+
* Get compact context for LLM skill consumption.
|
|
560
|
+
* This is the main export for external interfaces like Dbook.
|
|
561
|
+
*
|
|
562
|
+
* Returns ~2k token context instead of sending 60k raw conversation.
|
|
563
|
+
*
|
|
564
|
+
* @param transcriptPath - Path to the JSONL transcript file
|
|
565
|
+
* @param projectDir - Project directory path
|
|
566
|
+
* @returns Compact context, token estimate, and raw data
|
|
567
|
+
*/
|
|
568
|
+
export async function getCompactContextForSkill(transcriptPath, projectDir) {
|
|
569
|
+
// Parse the JSONL file
|
|
570
|
+
const entries = await parseJSONL(transcriptPath);
|
|
571
|
+
// Extract handoff data with extended messages
|
|
572
|
+
const data = await extractHandoffDataForSkill(entries, projectDir);
|
|
573
|
+
// Format as compact context
|
|
574
|
+
const context = formatAsSkillContext(data);
|
|
575
|
+
// Estimate tokens (~4.5 chars per token)
|
|
576
|
+
const tokenEstimate = Math.ceil(context.length / 4.5);
|
|
577
|
+
return {
|
|
578
|
+
context,
|
|
579
|
+
tokenEstimate,
|
|
580
|
+
data,
|
|
581
|
+
};
|
|
582
|
+
}
|
|
583
|
+
/**
|
|
584
|
+
* Get compact context from already-parsed entries (avoids re-parsing).
|
|
585
|
+
*
|
|
586
|
+
* @param entries - Already parsed JSONL entries
|
|
587
|
+
* @param projectDir - Project directory path
|
|
588
|
+
* @returns Compact context, token estimate, and raw data
|
|
589
|
+
*/
|
|
590
|
+
export async function getCompactContextFromEntries(entries, projectDir) {
|
|
591
|
+
// Extract handoff data with extended messages
|
|
592
|
+
const data = await extractHandoffDataForSkill(entries, projectDir);
|
|
593
|
+
// Format as compact context
|
|
594
|
+
const context = formatAsSkillContext(data);
|
|
595
|
+
// Estimate tokens (~4.5 chars per token)
|
|
596
|
+
const tokenEstimate = Math.ceil(context.length / 4.5);
|
|
597
|
+
return {
|
|
598
|
+
context,
|
|
599
|
+
tokenEstimate,
|
|
600
|
+
data,
|
|
601
|
+
};
|
|
602
|
+
}
|
|
603
|
+
//# sourceMappingURL=generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../src/handoff/generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Handoff Module
|
|
3
|
+
*
|
|
4
|
+
* Session handoff generation and catalog management.
|
|
5
|
+
*/
|
|
6
|
+
export type { HandoffEntry, HandoffCatalog } from "./types.js";
|
|
7
|
+
export { getHandoffsDir, ensureHandoffsDir, parseTimestampFromFilename, generateHandoffFilename, formatHandoffDate, estimateTokens, formatTokenEstimate, listHandoffs, getHandoffContent, hasHandoffs, getLatestHandoff, } from "./catalog.js";
|
|
8
|
+
export { HANDOFF_INVOCATION, getHandoffPrompt, getHandoffPromptDisplay, } from "./prompts.js";
|
|
9
|
+
export type { HandoffData, HandoffResult, CompactContextResult } from "./generator.js";
|
|
10
|
+
export { extractHandoffData, formatHandoffMarkdown, generateHandoffFromTranscript, generateHandoffFromEntries, formatAsSkillContext, getCompactContextForSkill, getCompactContextFromEntries, } from "./generator.js";
|
|
11
|
+
export type { LLMHandoffResult, LLMHandoffOptions, LLMStreamCallbacks } from "./llm-generator.js";
|
|
12
|
+
export { generateHandoffWithLLM, isSkillInstalled, getSkillPath, ClaudeCodeError, } from "./llm-generator.js";
|
|
13
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/handoff/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAG/D,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,0BAA0B,EAC1B,uBAAuB,EACvB,iBAAiB,EACjB,cAAc,EACd,mBAAmB,EACnB,YAAY,EACZ,iBAAiB,EACjB,WAAW,EACX,gBAAgB,GACjB,MAAM,cAAc,CAAC;AAGtB,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,uBAAuB,GACxB,MAAM,cAAc,CAAC;AAGtB,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACvF,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,6BAA6B,EAC7B,0BAA0B,EAC1B,oBAAoB,EACpB,yBAAyB,EACzB,4BAA4B,GAC7B,MAAM,gBAAgB,CAAC;AAGxB,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAClG,OAAO,EACL,sBAAsB,EACtB,gBAAgB,EAChB,YAAY,EACZ,eAAe,GAChB,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Handoff Module
|
|
3
|
+
*
|
|
4
|
+
* Session handoff generation and catalog management.
|
|
5
|
+
*/
|
|
6
|
+
// Catalog operations
|
|
7
|
+
export { getHandoffsDir, ensureHandoffsDir, parseTimestampFromFilename, generateHandoffFilename, formatHandoffDate, estimateTokens, formatTokenEstimate, listHandoffs, getHandoffContent, hasHandoffs, getLatestHandoff, } from "./catalog.js";
|
|
8
|
+
// Prompts
|
|
9
|
+
export { HANDOFF_INVOCATION, getHandoffPrompt, getHandoffPromptDisplay, } from "./prompts.js";
|
|
10
|
+
export { extractHandoffData, formatHandoffMarkdown, generateHandoffFromTranscript, generateHandoffFromEntries, formatAsSkillContext, getCompactContextForSkill, getCompactContextFromEntries, } from "./generator.js";
|
|
11
|
+
export { generateHandoffWithLLM, isSkillInstalled, getSkillPath, ClaudeCodeError, } from "./llm-generator.js";
|
|
12
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/handoff/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,qBAAqB;AACrB,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,0BAA0B,EAC1B,uBAAuB,EACvB,iBAAiB,EACjB,cAAc,EACd,mBAAmB,EACnB,YAAY,EACZ,iBAAiB,EACjB,WAAW,EACX,gBAAgB,GACjB,MAAM,cAAc,CAAC;AAEtB,UAAU;AACV,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,uBAAuB,GACxB,MAAM,cAAc,CAAC;AAItB,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,6BAA6B,EAC7B,0BAA0B,EAC1B,oBAAoB,EACpB,yBAAyB,EACzB,4BAA4B,GAC7B,MAAM,gBAAgB,CAAC;AAIxB,OAAO,EACL,sBAAsB,EACtB,gBAAgB,EAChB,YAAY,EACZ,eAAe,GAChB,MAAM,oBAAoB,CAAC"}
|