@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,149 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Context Types
|
|
3
|
+
*
|
|
4
|
+
* Type definitions for the unified project index (.jacques/index.json)
|
|
5
|
+
* This is the single entry point for all project knowledge:
|
|
6
|
+
* - context: External files imported from Obsidian, Google Docs, etc.
|
|
7
|
+
* - sessions: Saved Claude Code conversations
|
|
8
|
+
* - plans: Implementation plans created during conversations
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Unified index of all project knowledge (.jacques/index.json)
|
|
12
|
+
*/
|
|
13
|
+
export interface ProjectIndex {
|
|
14
|
+
version: string;
|
|
15
|
+
updatedAt: string;
|
|
16
|
+
context: ContextFile[];
|
|
17
|
+
sessions: SessionEntry[];
|
|
18
|
+
plans: PlanEntry[];
|
|
19
|
+
subagents: SubagentEntry[];
|
|
20
|
+
/** Currently active plan IDs (cross-session tracking) */
|
|
21
|
+
activePlanIds?: string[];
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* A single context file entry (imported from external sources)
|
|
25
|
+
*/
|
|
26
|
+
export interface ContextFile {
|
|
27
|
+
id: string;
|
|
28
|
+
name: string;
|
|
29
|
+
path: string;
|
|
30
|
+
source: ContextSource;
|
|
31
|
+
sourceFile: string;
|
|
32
|
+
addedAt: string;
|
|
33
|
+
description?: string;
|
|
34
|
+
sizeBytes: number;
|
|
35
|
+
tags?: string[];
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* A single session entry (saved conversation)
|
|
39
|
+
*/
|
|
40
|
+
export interface SessionEntry {
|
|
41
|
+
id: string;
|
|
42
|
+
title: string;
|
|
43
|
+
filename: string;
|
|
44
|
+
path: string;
|
|
45
|
+
savedAt: string;
|
|
46
|
+
startedAt: string;
|
|
47
|
+
endedAt: string;
|
|
48
|
+
durationMinutes: number;
|
|
49
|
+
messageCount: number;
|
|
50
|
+
toolCallCount: number;
|
|
51
|
+
technologies: string[];
|
|
52
|
+
userLabel?: string;
|
|
53
|
+
/** Files modified via Write/Edit tool calls */
|
|
54
|
+
filesModified?: string[];
|
|
55
|
+
/** Unique tool names used */
|
|
56
|
+
toolsUsed?: string[];
|
|
57
|
+
/** Token usage stats */
|
|
58
|
+
tokens?: {
|
|
59
|
+
input: number;
|
|
60
|
+
output: number;
|
|
61
|
+
cacheCreation: number;
|
|
62
|
+
cacheRead: number;
|
|
63
|
+
};
|
|
64
|
+
/** Whether session has user-visible subagents */
|
|
65
|
+
hasSubagents?: boolean;
|
|
66
|
+
/** Whether auto-compact occurred */
|
|
67
|
+
hadAutoCompact?: boolean;
|
|
68
|
+
/** Session mode: planning or execution */
|
|
69
|
+
mode?: "planning" | "execution" | null;
|
|
70
|
+
/** Number of plans in this session */
|
|
71
|
+
planCount?: number;
|
|
72
|
+
/** Number of subagent artifacts */
|
|
73
|
+
subagentCount?: number;
|
|
74
|
+
/** Linked plan IDs (references PlanEntry.id) */
|
|
75
|
+
planIds?: string[];
|
|
76
|
+
/** Linked subagent IDs (references SubagentEntry.id) */
|
|
77
|
+
subagentIds?: string[];
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* A single subagent entry (exploration or search result)
|
|
81
|
+
*/
|
|
82
|
+
export interface SubagentEntry {
|
|
83
|
+
/** Unique ID: agentId for explorations, generated hash for searches */
|
|
84
|
+
id: string;
|
|
85
|
+
/** Parent session ID */
|
|
86
|
+
sessionId: string;
|
|
87
|
+
/** Type: exploration (Explore agent) or search (web search) */
|
|
88
|
+
type: "exploration" | "search";
|
|
89
|
+
/** Description (exploration) or query (search) */
|
|
90
|
+
title: string;
|
|
91
|
+
/** Output filename */
|
|
92
|
+
filename: string;
|
|
93
|
+
/** Relative path: "subagents/{filename}" */
|
|
94
|
+
path: string;
|
|
95
|
+
/** When the subagent ran or search was performed */
|
|
96
|
+
timestamp: string;
|
|
97
|
+
/** Estimated token cost (for explorations) */
|
|
98
|
+
tokenCost?: number;
|
|
99
|
+
/** Number of results (for searches) */
|
|
100
|
+
resultCount?: number;
|
|
101
|
+
/** When this was extracted */
|
|
102
|
+
extractedAt: string;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* A single plan entry
|
|
106
|
+
*/
|
|
107
|
+
export interface PlanEntry {
|
|
108
|
+
id: string;
|
|
109
|
+
title: string;
|
|
110
|
+
filename: string;
|
|
111
|
+
path: string;
|
|
112
|
+
contentHash?: string;
|
|
113
|
+
bodyHash?: string;
|
|
114
|
+
createdAt: string;
|
|
115
|
+
updatedAt: string;
|
|
116
|
+
sessions: string[];
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Supported context sources
|
|
120
|
+
*/
|
|
121
|
+
export type ContextSource = "obsidian" | "google_docs" | "notion" | "local";
|
|
122
|
+
/**
|
|
123
|
+
* Options for adding a new context file
|
|
124
|
+
*/
|
|
125
|
+
export interface AddContextOptions {
|
|
126
|
+
cwd: string;
|
|
127
|
+
sourceFile: string;
|
|
128
|
+
name: string;
|
|
129
|
+
source: ContextSource;
|
|
130
|
+
description?: string;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Default empty index
|
|
134
|
+
*/
|
|
135
|
+
export declare function getDefaultIndex(): ProjectIndex;
|
|
136
|
+
/**
|
|
137
|
+
* Legacy ContextIndex type for backwards compatibility
|
|
138
|
+
* @deprecated Use ProjectIndex instead
|
|
139
|
+
*/
|
|
140
|
+
export interface ContextIndex {
|
|
141
|
+
version: string;
|
|
142
|
+
updatedAt: string;
|
|
143
|
+
files: ContextFile[];
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Migrate legacy index to new format
|
|
147
|
+
*/
|
|
148
|
+
export declare function migrateIndex(legacy: ContextIndex): ProjectIndex;
|
|
149
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/context/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Context Types
|
|
3
|
+
*
|
|
4
|
+
* Type definitions for the unified project index (.jacques/index.json)
|
|
5
|
+
* This is the single entry point for all project knowledge:
|
|
6
|
+
* - context: External files imported from Obsidian, Google Docs, etc.
|
|
7
|
+
* - sessions: Saved Claude Code conversations
|
|
8
|
+
* - plans: Implementation plans created during conversations
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Default empty index
|
|
12
|
+
*/
|
|
13
|
+
export function getDefaultIndex() {
|
|
14
|
+
return {
|
|
15
|
+
version: "2.0.0",
|
|
16
|
+
updatedAt: new Date().toISOString(),
|
|
17
|
+
context: [],
|
|
18
|
+
sessions: [],
|
|
19
|
+
plans: [],
|
|
20
|
+
subagents: [],
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Migrate legacy index to new format
|
|
25
|
+
*/
|
|
26
|
+
export function migrateIndex(legacy) {
|
|
27
|
+
return {
|
|
28
|
+
version: "2.0.0",
|
|
29
|
+
updatedAt: legacy.updatedAt,
|
|
30
|
+
context: legacy.files,
|
|
31
|
+
sessions: [],
|
|
32
|
+
plans: [],
|
|
33
|
+
subagents: [],
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/context/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAmIH;;GAEG;AACH,MAAM,UAAU,eAAe;IAC7B,OAAO;QACL,OAAO,EAAE,OAAO;QAChB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,OAAO,EAAE,EAAE;QACX,QAAQ,EAAE,EAAE;QACZ,KAAK,EAAE,EAAE;QACT,SAAS,EAAE,EAAE;KACd,CAAC;AACJ,CAAC;AAYD;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,MAAoB;IAC/C,OAAO;QACL,OAAO,EAAE,OAAO;QAChB,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,OAAO,EAAE,MAAM,CAAC,KAAK;QACrB,QAAQ,EAAE,EAAE;QACZ,KAAK,EAAE,EAAE;QACT,SAAS,EAAE,EAAE;KACd,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Handoff Catalog
|
|
3
|
+
*
|
|
4
|
+
* Lists and reads handoff files from .jacques/handoffs/
|
|
5
|
+
*/
|
|
6
|
+
import type { HandoffEntry, HandoffCatalog } from "./types.js";
|
|
7
|
+
/**
|
|
8
|
+
* Get the handoffs directory path for a project
|
|
9
|
+
*/
|
|
10
|
+
export declare function getHandoffsDir(projectDir: string): string;
|
|
11
|
+
/**
|
|
12
|
+
* Ensure the handoffs directory exists
|
|
13
|
+
*/
|
|
14
|
+
export declare function ensureHandoffsDir(projectDir: string): Promise<string>;
|
|
15
|
+
/**
|
|
16
|
+
* Parse timestamp from handoff filename
|
|
17
|
+
* Format: 2026-01-31T14-30-00-handoff.md
|
|
18
|
+
*/
|
|
19
|
+
export declare function parseTimestampFromFilename(filename: string): Date;
|
|
20
|
+
/**
|
|
21
|
+
* Generate a handoff filename with current timestamp
|
|
22
|
+
*/
|
|
23
|
+
export declare function generateHandoffFilename(): string;
|
|
24
|
+
/**
|
|
25
|
+
* Format a Date object for display
|
|
26
|
+
*/
|
|
27
|
+
export declare function formatHandoffDate(date: Date): string;
|
|
28
|
+
/**
|
|
29
|
+
* Estimate token count from content length
|
|
30
|
+
* Uses ~4.5 characters per token average
|
|
31
|
+
*/
|
|
32
|
+
export declare function estimateTokens(content: string): number;
|
|
33
|
+
/**
|
|
34
|
+
* Format token count for display (e.g., "2.1k")
|
|
35
|
+
*/
|
|
36
|
+
export declare function formatTokenEstimate(tokens: number): string;
|
|
37
|
+
/**
|
|
38
|
+
* List all handoffs in a project directory
|
|
39
|
+
* Returns entries sorted by timestamp (newest first)
|
|
40
|
+
*/
|
|
41
|
+
export declare function listHandoffs(projectDir: string): Promise<HandoffCatalog>;
|
|
42
|
+
/**
|
|
43
|
+
* Get the content of a specific handoff file
|
|
44
|
+
*/
|
|
45
|
+
export declare function getHandoffContent(path: string): Promise<string>;
|
|
46
|
+
/**
|
|
47
|
+
* Check if any handoffs exist for a project
|
|
48
|
+
*/
|
|
49
|
+
export declare function hasHandoffs(projectDir: string): Promise<boolean>;
|
|
50
|
+
/**
|
|
51
|
+
* Get the most recent handoff for a project
|
|
52
|
+
*/
|
|
53
|
+
export declare function getLatestHandoff(projectDir: string): Promise<HandoffEntry | null>;
|
|
54
|
+
//# sourceMappingURL=catalog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../../src/handoff/catalog.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE/D;;GAEG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAI3E;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAOjE;AAED;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,MAAM,CAMhD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CASpD;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAK1D;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CA6B9E;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAErE;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAGtE;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAGvF"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Handoff Catalog
|
|
3
|
+
*
|
|
4
|
+
* Lists and reads handoff files from .jacques/handoffs/
|
|
5
|
+
*/
|
|
6
|
+
import { promises as fs } from "fs";
|
|
7
|
+
import { join } from "path";
|
|
8
|
+
/**
|
|
9
|
+
* Get the handoffs directory path for a project
|
|
10
|
+
*/
|
|
11
|
+
export function getHandoffsDir(projectDir) {
|
|
12
|
+
return join(projectDir, ".jacques", "handoffs");
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Ensure the handoffs directory exists
|
|
16
|
+
*/
|
|
17
|
+
export async function ensureHandoffsDir(projectDir) {
|
|
18
|
+
const dir = getHandoffsDir(projectDir);
|
|
19
|
+
await fs.mkdir(dir, { recursive: true });
|
|
20
|
+
return dir;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Parse timestamp from handoff filename
|
|
24
|
+
* Format: 2026-01-31T14-30-00-handoff.md
|
|
25
|
+
*/
|
|
26
|
+
export function parseTimestampFromFilename(filename) {
|
|
27
|
+
const match = filename.match(/^(\d{4}-\d{2}-\d{2})T(\d{2})-(\d{2})-(\d{2})/);
|
|
28
|
+
if (match) {
|
|
29
|
+
const [, date, hour, min, sec] = match;
|
|
30
|
+
return new Date(`${date}T${hour}:${min}:${sec}`);
|
|
31
|
+
}
|
|
32
|
+
return new Date();
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Generate a handoff filename with current timestamp
|
|
36
|
+
*/
|
|
37
|
+
export function generateHandoffFilename() {
|
|
38
|
+
const now = new Date();
|
|
39
|
+
const timestamp = now.toISOString()
|
|
40
|
+
.replace(/:/g, "-") // Replace colons with dashes
|
|
41
|
+
.replace(/\.\d{3}Z$/, ""); // Remove milliseconds and Z
|
|
42
|
+
return `${timestamp}-handoff.md`;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Format a Date object for display
|
|
46
|
+
*/
|
|
47
|
+
export function formatHandoffDate(date) {
|
|
48
|
+
return date.toLocaleString("en-US", {
|
|
49
|
+
year: "numeric",
|
|
50
|
+
month: "2-digit",
|
|
51
|
+
day: "2-digit",
|
|
52
|
+
hour: "2-digit",
|
|
53
|
+
minute: "2-digit",
|
|
54
|
+
hour12: false,
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Estimate token count from content length
|
|
59
|
+
* Uses ~4.5 characters per token average
|
|
60
|
+
*/
|
|
61
|
+
export function estimateTokens(content) {
|
|
62
|
+
return Math.ceil(content.length / 4.5);
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Format token count for display (e.g., "2.1k")
|
|
66
|
+
*/
|
|
67
|
+
export function formatTokenEstimate(tokens) {
|
|
68
|
+
if (tokens >= 1000) {
|
|
69
|
+
return `${(tokens / 1000).toFixed(1)}k`;
|
|
70
|
+
}
|
|
71
|
+
return tokens.toString();
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* List all handoffs in a project directory
|
|
75
|
+
* Returns entries sorted by timestamp (newest first)
|
|
76
|
+
*/
|
|
77
|
+
export async function listHandoffs(projectDir) {
|
|
78
|
+
const directory = getHandoffsDir(projectDir);
|
|
79
|
+
try {
|
|
80
|
+
const files = await fs.readdir(directory);
|
|
81
|
+
const mdFiles = files.filter(f => f.endsWith("-handoff.md"));
|
|
82
|
+
const entries = await Promise.all(mdFiles.map(async (filename) => {
|
|
83
|
+
const path = join(directory, filename);
|
|
84
|
+
const content = await fs.readFile(path, "utf-8");
|
|
85
|
+
const timestamp = parseTimestampFromFilename(filename);
|
|
86
|
+
const tokenEstimate = estimateTokens(content);
|
|
87
|
+
return { filename, timestamp, path, tokenEstimate };
|
|
88
|
+
}));
|
|
89
|
+
// Sort by timestamp, newest first
|
|
90
|
+
entries.sort((a, b) => b.timestamp.getTime() - a.timestamp.getTime());
|
|
91
|
+
return { directory, entries };
|
|
92
|
+
}
|
|
93
|
+
catch (error) {
|
|
94
|
+
// Directory doesn't exist or is empty
|
|
95
|
+
if (error.code === "ENOENT") {
|
|
96
|
+
return { directory, entries: [] };
|
|
97
|
+
}
|
|
98
|
+
throw error;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Get the content of a specific handoff file
|
|
103
|
+
*/
|
|
104
|
+
export async function getHandoffContent(path) {
|
|
105
|
+
return fs.readFile(path, "utf-8");
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Check if any handoffs exist for a project
|
|
109
|
+
*/
|
|
110
|
+
export async function hasHandoffs(projectDir) {
|
|
111
|
+
const catalog = await listHandoffs(projectDir);
|
|
112
|
+
return catalog.entries.length > 0;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Get the most recent handoff for a project
|
|
116
|
+
*/
|
|
117
|
+
export async function getLatestHandoff(projectDir) {
|
|
118
|
+
const catalog = await listHandoffs(projectDir);
|
|
119
|
+
return catalog.entries[0] || null;
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=catalog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../src/handoff/catalog.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,107 @@
|
|
|
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 type { ParsedEntry } from "../session/parser.js";
|
|
8
|
+
/**
|
|
9
|
+
* Data extracted from a transcript for handoff generation
|
|
10
|
+
*/
|
|
11
|
+
export interface HandoffData {
|
|
12
|
+
/** Session title from summary entry */
|
|
13
|
+
title: string;
|
|
14
|
+
/** Project directory */
|
|
15
|
+
projectDir: string;
|
|
16
|
+
/** Files modified (Write/Edit tool calls) */
|
|
17
|
+
filesModified: string[];
|
|
18
|
+
/** Tools used in the session */
|
|
19
|
+
toolsUsed: string[];
|
|
20
|
+
/** Recent user messages (last N) */
|
|
21
|
+
recentMessages: string[];
|
|
22
|
+
/** Timestamp of extraction */
|
|
23
|
+
timestamp: string;
|
|
24
|
+
/** Total user message count */
|
|
25
|
+
totalUserMessages: number;
|
|
26
|
+
/** Total tool call count */
|
|
27
|
+
totalToolCalls: number;
|
|
28
|
+
/** Plans detected in the session */
|
|
29
|
+
plans?: Array<{
|
|
30
|
+
path: string;
|
|
31
|
+
title: string;
|
|
32
|
+
}>;
|
|
33
|
+
/** Key assistant response snippets (last N, no thinking/tools) */
|
|
34
|
+
assistantHighlights: string[];
|
|
35
|
+
/** Detected decision points from user messages */
|
|
36
|
+
decisions: string[];
|
|
37
|
+
/** Technologies detected in the session */
|
|
38
|
+
technologies: string[];
|
|
39
|
+
/** Detected blockers/errors from messages */
|
|
40
|
+
blockers: string[];
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Result of handoff generation
|
|
44
|
+
*/
|
|
45
|
+
export interface HandoffResult {
|
|
46
|
+
/** Path to the generated handoff file */
|
|
47
|
+
filePath: string;
|
|
48
|
+
/** Filename of the handoff */
|
|
49
|
+
filename: string;
|
|
50
|
+
/** The handoff content */
|
|
51
|
+
content: string;
|
|
52
|
+
/** Estimated token count */
|
|
53
|
+
tokenEstimate: number;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Extract handoff data from parsed entries
|
|
57
|
+
*/
|
|
58
|
+
export declare function extractHandoffData(entries: ParsedEntry[], projectDir: string): Promise<HandoffData>;
|
|
59
|
+
/**
|
|
60
|
+
* Format handoff data into markdown document
|
|
61
|
+
*/
|
|
62
|
+
export declare function formatHandoffMarkdown(data: HandoffData): string;
|
|
63
|
+
/**
|
|
64
|
+
* Generate a handoff document from a transcript file
|
|
65
|
+
*/
|
|
66
|
+
export declare function generateHandoffFromTranscript(transcriptPath: string, projectDir: string): Promise<HandoffResult>;
|
|
67
|
+
/**
|
|
68
|
+
* Generate handoff from already-parsed entries (avoids re-parsing)
|
|
69
|
+
*/
|
|
70
|
+
export declare function generateHandoffFromEntries(entries: ParsedEntry[], projectDir: string): Promise<HandoffResult>;
|
|
71
|
+
/**
|
|
72
|
+
* Result of compact context extraction for skill consumption
|
|
73
|
+
*/
|
|
74
|
+
export interface CompactContextResult {
|
|
75
|
+
/** Formatted context string for LLM skill (~2k tokens) */
|
|
76
|
+
context: string;
|
|
77
|
+
/** Estimated token count for the context */
|
|
78
|
+
tokenEstimate: number;
|
|
79
|
+
/** Raw extracted data for reference */
|
|
80
|
+
data: HandoffData;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Format extracted handoff data as compact context for skill consumption.
|
|
84
|
+
* This creates a structured prompt that maps to the 8 sections the
|
|
85
|
+
* skill/orchestrator expects, but at ~2k tokens instead of 60k.
|
|
86
|
+
*/
|
|
87
|
+
export declare function formatAsSkillContext(data: HandoffData): string;
|
|
88
|
+
/**
|
|
89
|
+
* Get compact context for LLM skill consumption.
|
|
90
|
+
* This is the main export for external interfaces like Dbook.
|
|
91
|
+
*
|
|
92
|
+
* Returns ~2k token context instead of sending 60k raw conversation.
|
|
93
|
+
*
|
|
94
|
+
* @param transcriptPath - Path to the JSONL transcript file
|
|
95
|
+
* @param projectDir - Project directory path
|
|
96
|
+
* @returns Compact context, token estimate, and raw data
|
|
97
|
+
*/
|
|
98
|
+
export declare function getCompactContextForSkill(transcriptPath: string, projectDir: string): Promise<CompactContextResult>;
|
|
99
|
+
/**
|
|
100
|
+
* Get compact context from already-parsed entries (avoids re-parsing).
|
|
101
|
+
*
|
|
102
|
+
* @param entries - Already parsed JSONL entries
|
|
103
|
+
* @param projectDir - Project directory path
|
|
104
|
+
* @returns Compact context, token estimate, and raw data
|
|
105
|
+
*/
|
|
106
|
+
export declare function getCompactContextFromEntries(entries: ParsedEntry[], projectDir: string): Promise<CompactContextResult>;
|
|
107
|
+
//# sourceMappingURL=generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../../src/handoff/generator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAoBxD;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,uCAAuC;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,wBAAwB;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,6CAA6C;IAC7C,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,gCAAgC;IAChC,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,oCAAoC;IACpC,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,8BAA8B;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,+BAA+B;IAC/B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,4BAA4B;IAC5B,cAAc,EAAE,MAAM,CAAC;IACvB,oCAAoC;IACpC,KAAK,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/C,kEAAkE;IAClE,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,kDAAkD;IAClD,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,2CAA2C;IAC3C,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,6CAA6C;IAC7C,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,yCAAyC;IACzC,QAAQ,EAAE,MAAM,CAAC;IACjB,8BAA8B;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,0BAA0B;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,4BAA4B;IAC5B,aAAa,EAAE,MAAM,CAAC;CACvB;AAgTD;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,WAAW,EAAE,EACtB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,WAAW,CAAC,CAwDtB;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CA0E/D;AAED;;GAEG;AACH,wBAAsB,6BAA6B,CACjD,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,aAAa,CAAC,CAqCxB;AAED;;GAEG;AACH,wBAAsB,0BAA0B,CAC9C,OAAO,EAAE,WAAW,EAAE,EACtB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,aAAa,CAAC,CA0BxB;AAMD;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,0DAA0D;IAC1D,OAAO,EAAE,MAAM,CAAC;IAChB,4CAA4C;IAC5C,aAAa,EAAE,MAAM,CAAC;IACtB,uCAAuC;IACvC,IAAI,EAAE,WAAW,CAAC;CACnB;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAoG9D;AAwBD;;;;;;;;;GASG;AACH,wBAAsB,yBAAyB,CAC7C,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,oBAAoB,CAAC,CAkB/B;AAED;;;;;;GAMG;AACH,wBAAsB,4BAA4B,CAChD,OAAO,EAAE,WAAW,EAAE,EACtB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,oBAAoB,CAAC,CAe/B"}
|