@eddacraft/anvil-core 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +14 -0
- package/dist/antipattern/index.d.ts +11 -0
- package/dist/antipattern/index.d.ts.map +1 -0
- package/dist/antipattern/index.js +31 -0
- package/dist/antipattern/patterns-css.d.ts +17 -0
- package/dist/antipattern/patterns-css.d.ts.map +1 -0
- package/dist/antipattern/patterns-css.js +72 -0
- package/dist/antipattern/patterns-html.d.ts +21 -0
- package/dist/antipattern/patterns-html.d.ts.map +1 -0
- package/dist/antipattern/patterns-html.js +139 -0
- package/dist/antipattern/patterns.d.ts +72 -0
- package/dist/antipattern/patterns.d.ts.map +1 -0
- package/dist/antipattern/patterns.js +301 -0
- package/dist/antipattern/scanner.d.ts +32 -0
- package/dist/antipattern/scanner.d.ts.map +1 -0
- package/dist/antipattern/scanner.js +89 -0
- package/dist/antipattern/types.d.ts +318 -0
- package/dist/antipattern/types.d.ts.map +1 -0
- package/dist/antipattern/types.js +278 -0
- package/dist/architecture/analyzer.d.ts +123 -0
- package/dist/architecture/analyzer.d.ts.map +1 -0
- package/dist/architecture/analyzer.js +321 -0
- package/dist/architecture/baseline.d.ts +112 -0
- package/dist/architecture/baseline.d.ts.map +1 -0
- package/dist/architecture/baseline.js +245 -0
- package/dist/architecture/compiler.d.ts +24 -0
- package/dist/architecture/compiler.d.ts.map +1 -0
- package/dist/architecture/compiler.js +57 -0
- package/dist/architecture/context.d.ts +129 -0
- package/dist/architecture/context.d.ts.map +1 -0
- package/dist/architecture/context.js +116 -0
- package/dist/architecture/dc-generator.d.ts +9 -0
- package/dist/architecture/dc-generator.d.ts.map +1 -0
- package/dist/architecture/dc-generator.js +220 -0
- package/dist/architecture/definition-schema.d.ts +128 -0
- package/dist/architecture/definition-schema.d.ts.map +1 -0
- package/dist/architecture/definition-schema.js +94 -0
- package/dist/architecture/edge-detector-html.d.ts +6 -0
- package/dist/architecture/edge-detector-html.d.ts.map +1 -0
- package/dist/architecture/edge-detector-html.js +5 -0
- package/dist/architecture/edge-detector-web.d.ts +32 -0
- package/dist/architecture/edge-detector-web.d.ts.map +1 -0
- package/dist/architecture/edge-detector-web.js +133 -0
- package/dist/architecture/edge-detector.d.ts +116 -0
- package/dist/architecture/edge-detector.d.ts.map +1 -0
- package/dist/architecture/edge-detector.js +229 -0
- package/dist/architecture/entry-detector.d.ts +44 -0
- package/dist/architecture/entry-detector.d.ts.map +1 -0
- package/dist/architecture/entry-detector.js +263 -0
- package/dist/architecture/index.d.ts +21 -0
- package/dist/architecture/index.d.ts.map +1 -0
- package/dist/architecture/index.js +48 -0
- package/dist/architecture/layer-detector.d.ts +60 -0
- package/dist/architecture/layer-detector.d.ts.map +1 -0
- package/dist/architecture/layer-detector.js +331 -0
- package/dist/architecture/rego-generator.d.ts +25 -0
- package/dist/architecture/rego-generator.d.ts.map +1 -0
- package/dist/architecture/rego-generator.js +229 -0
- package/dist/architecture/templates/index.d.ts +39 -0
- package/dist/architecture/templates/index.d.ts.map +1 -0
- package/dist/architecture/templates/index.js +124 -0
- package/dist/architecture/types.d.ts +280 -0
- package/dist/architecture/types.d.ts.map +1 -0
- package/dist/architecture/types.js +269 -0
- package/dist/architecture/yaml-parser.d.ts +13 -0
- package/dist/architecture/yaml-parser.d.ts.map +1 -0
- package/dist/architecture/yaml-parser.js +234 -0
- package/dist/config/constants.d.ts +9 -0
- package/dist/config/constants.d.ts.map +1 -0
- package/dist/config/constants.js +20 -0
- package/dist/config/index.d.ts +9 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +8 -0
- package/dist/config/loader.d.ts +41 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +76 -0
- package/dist/config/nudge-config.d.ts +35 -0
- package/dist/config/nudge-config.d.ts.map +1 -0
- package/dist/config/nudge-config.js +34 -0
- package/dist/config/types.d.ts +30 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +4 -0
- package/dist/contracts/index.d.ts +14 -0
- package/dist/contracts/index.d.ts.map +1 -0
- package/dist/contracts/index.js +13 -0
- package/dist/contracts/schemas/aps.schema.d.ts +269 -0
- package/dist/contracts/schemas/aps.schema.d.ts.map +1 -0
- package/dist/contracts/schemas/aps.schema.js +183 -0
- package/dist/contracts/schemas/index.d.ts +12 -0
- package/dist/contracts/schemas/index.d.ts.map +1 -0
- package/dist/contracts/schemas/index.js +14 -0
- package/dist/contracts/schemas/json-schema.d.ts +14 -0
- package/dist/contracts/schemas/json-schema.d.ts.map +1 -0
- package/dist/contracts/schemas/json-schema.js +31 -0
- package/dist/contracts/schemas/warning.schema.d.ts +171 -0
- package/dist/contracts/schemas/warning.schema.d.ts.map +1 -0
- package/dist/contracts/schemas/warning.schema.js +123 -0
- package/dist/contracts/types/gate.types.d.ts +194 -0
- package/dist/contracts/types/gate.types.d.ts.map +1 -0
- package/dist/contracts/types/gate.types.js +19 -0
- package/dist/contracts/types/index.d.ts +9 -0
- package/dist/contracts/types/index.d.ts.map +1 -0
- package/dist/contracts/types/index.js +8 -0
- package/dist/crypto/hash.d.ts +47 -0
- package/dist/crypto/hash.d.ts.map +1 -0
- package/dist/crypto/hash.js +110 -0
- package/dist/crypto/index.d.ts +7 -0
- package/dist/crypto/index.d.ts.map +1 -0
- package/dist/crypto/index.js +6 -0
- package/dist/drift/index.d.ts +6 -0
- package/dist/drift/index.d.ts.map +1 -0
- package/dist/drift/index.js +5 -0
- package/dist/drift/report-generator.d.ts +21 -0
- package/dist/drift/report-generator.d.ts.map +1 -0
- package/dist/drift/report-generator.js +240 -0
- package/dist/drift/snapshot-capture.d.ts +26 -0
- package/dist/drift/snapshot-capture.d.ts.map +1 -0
- package/dist/drift/snapshot-capture.js +195 -0
- package/dist/drift/snapshot-compare.d.ts +50 -0
- package/dist/drift/snapshot-compare.d.ts.map +1 -0
- package/dist/drift/snapshot-compare.js +142 -0
- package/dist/drift/snapshot-schema.d.ts +197 -0
- package/dist/drift/snapshot-schema.d.ts.map +1 -0
- package/dist/drift/snapshot-schema.js +193 -0
- package/dist/drift/snapshot-storage.d.ts +25 -0
- package/dist/drift/snapshot-storage.d.ts.map +1 -0
- package/dist/drift/snapshot-storage.js +179 -0
- package/dist/explain/antipattern-explainer.d.ts +4 -0
- package/dist/explain/antipattern-explainer.d.ts.map +1 -0
- package/dist/explain/antipattern-explainer.js +196 -0
- package/dist/explain/boundary-explainer.d.ts +5 -0
- package/dist/explain/boundary-explainer.d.ts.map +1 -0
- package/dist/explain/boundary-explainer.js +261 -0
- package/dist/explain/explain-service.d.ts +19 -0
- package/dist/explain/explain-service.d.ts.map +1 -0
- package/dist/explain/explain-service.js +106 -0
- package/dist/explain/index.d.ts +7 -0
- package/dist/explain/index.d.ts.map +1 -0
- package/dist/explain/index.js +5 -0
- package/dist/explain/template-loader.d.ts +9 -0
- package/dist/explain/template-loader.d.ts.map +1 -0
- package/dist/explain/template-loader.js +51 -0
- package/dist/explain/types.d.ts +46 -0
- package/dist/explain/types.d.ts.map +1 -0
- package/dist/explain/types.js +31 -0
- package/dist/index.d.ts +26 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +37 -0
- package/dist/provenance/collector.d.ts +86 -0
- package/dist/provenance/collector.d.ts.map +1 -0
- package/dist/provenance/collector.js +425 -0
- package/dist/provenance/git-ai-standard/git-notes.d.ts +85 -0
- package/dist/provenance/git-ai-standard/git-notes.d.ts.map +1 -0
- package/dist/provenance/git-ai-standard/git-notes.js +292 -0
- package/dist/provenance/git-ai-standard/index.d.ts +44 -0
- package/dist/provenance/git-ai-standard/index.d.ts.map +1 -0
- package/dist/provenance/git-ai-standard/index.js +47 -0
- package/dist/provenance/git-ai-standard/serializer.d.ts +54 -0
- package/dist/provenance/git-ai-standard/serializer.d.ts.map +1 -0
- package/dist/provenance/git-ai-standard/serializer.js +224 -0
- package/dist/provenance/git-ai-standard/session.d.ts +51 -0
- package/dist/provenance/git-ai-standard/session.d.ts.map +1 -0
- package/dist/provenance/git-ai-standard/session.js +118 -0
- package/dist/provenance/git-ai-standard/types.d.ts +173 -0
- package/dist/provenance/git-ai-standard/types.d.ts.map +1 -0
- package/dist/provenance/git-ai-standard/types.js +109 -0
- package/dist/provenance/index.d.ts +5 -0
- package/dist/provenance/index.d.ts.map +1 -0
- package/dist/provenance/index.js +6 -0
- package/dist/provenance/store.d.ts +83 -0
- package/dist/provenance/store.d.ts.map +1 -0
- package/dist/provenance/store.js +248 -0
- package/dist/provenance/types.d.ts +160 -0
- package/dist/provenance/types.d.ts.map +1 -0
- package/dist/provenance/types.js +112 -0
- package/dist/suppression/index.d.ts +4 -0
- package/dist/suppression/index.d.ts.map +1 -0
- package/dist/suppression/index.js +3 -0
- package/dist/suppression/parser.d.ts +31 -0
- package/dist/suppression/parser.d.ts.map +1 -0
- package/dist/suppression/parser.js +219 -0
- package/dist/suppression/service.d.ts +29 -0
- package/dist/suppression/service.d.ts.map +1 -0
- package/dist/suppression/service.js +132 -0
- package/dist/suppression/store.d.ts +61 -0
- package/dist/suppression/store.d.ts.map +1 -0
- package/dist/suppression/store.js +169 -0
- package/dist/utils/debug.d.ts +48 -0
- package/dist/utils/debug.d.ts.map +1 -0
- package/dist/utils/debug.js +100 -0
- package/dist/utils/index.d.ts +4 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +3 -0
- package/dist/utils/path-safety.d.ts +21 -0
- package/dist/utils/path-safety.d.ts.map +1 -0
- package/dist/utils/path-safety.js +49 -0
- package/dist/utils/severity.d.ts +37 -0
- package/dist/utils/severity.d.ts.map +1 -0
- package/dist/utils/severity.js +22 -0
- package/dist/validation/aps-validator.d.ts +66 -0
- package/dist/validation/aps-validator.d.ts.map +1 -0
- package/dist/validation/aps-validator.js +173 -0
- package/dist/validation/errors.d.ts +52 -0
- package/dist/validation/errors.d.ts.map +1 -0
- package/dist/validation/errors.js +115 -0
- package/dist/validation/index.d.ts +8 -0
- package/dist/validation/index.d.ts.map +1 -0
- package/dist/validation/index.js +13 -0
- package/dist/warnings/index.d.ts +2 -0
- package/dist/warnings/index.d.ts.map +1 -0
- package/dist/warnings/index.js +1 -0
- package/dist/warnings/warning-id.d.ts +180 -0
- package/dist/warnings/warning-id.d.ts.map +1 -0
- package/dist/warnings/warning-id.js +257 -0
- package/package.json +79 -0
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import type { SessionHash, AgentId } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Generate a session hash from tool and conversation ID
|
|
4
|
+
*
|
|
5
|
+
* Per Git AI Standard v3.0.0: 16-character SHA-256 prefix of {tool}:{conversation_id}
|
|
6
|
+
*
|
|
7
|
+
* @param tool - AI tool name (e.g., "claude-code", "cursor")
|
|
8
|
+
* @param conversationId - Unique session/conversation identifier
|
|
9
|
+
* @returns 16-character hex session hash
|
|
10
|
+
*/
|
|
11
|
+
export declare function generateSessionHash(tool: string, conversationId: string): SessionHash;
|
|
12
|
+
/**
|
|
13
|
+
* Generate a session hash from an AgentId
|
|
14
|
+
*/
|
|
15
|
+
export declare function sessionHashFromAgentId(agentId: AgentId): SessionHash;
|
|
16
|
+
/**
|
|
17
|
+
* Create an AgentId from parameters
|
|
18
|
+
*
|
|
19
|
+
* @param options - Agent identification options
|
|
20
|
+
* @returns AgentId object
|
|
21
|
+
*/
|
|
22
|
+
export declare function createAgentId(options: {
|
|
23
|
+
tool: string;
|
|
24
|
+
conversationId?: string;
|
|
25
|
+
model?: string;
|
|
26
|
+
}): AgentId;
|
|
27
|
+
/**
|
|
28
|
+
* Detect current AI tool and create AgentId from environment
|
|
29
|
+
*
|
|
30
|
+
* Checks environment variables for known AI tool session identifiers.
|
|
31
|
+
* Returns null if no AI tool is detected.
|
|
32
|
+
*
|
|
33
|
+
* @returns AgentId if an AI tool is detected, null otherwise
|
|
34
|
+
*/
|
|
35
|
+
export declare function detectCurrentAgent(): AgentId | null;
|
|
36
|
+
/**
|
|
37
|
+
* Create an AgentId for manual/explicit use
|
|
38
|
+
*
|
|
39
|
+
* Use this when you know the exact tool and session ID.
|
|
40
|
+
*
|
|
41
|
+
* @param tool - AI tool name
|
|
42
|
+
* @param sessionId - Session/conversation ID
|
|
43
|
+
* @param model - Optional model identifier
|
|
44
|
+
* @returns AgentId object
|
|
45
|
+
*/
|
|
46
|
+
export declare function createExplicitAgent(tool: string, sessionId: string, model?: string): AgentId;
|
|
47
|
+
/**
|
|
48
|
+
* Format an AgentId for display
|
|
49
|
+
*/
|
|
50
|
+
export declare function formatAgentId(agent: AgentId): string;
|
|
51
|
+
//# sourceMappingURL=session.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../../src/provenance/git-ai-standard/session.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAEvD;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,WAAW,CAIrF;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,WAAW,CAEpE;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAWV;AAiCD;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,IAAI,OAAO,GAAG,IAAI,CAenD;AAED;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAM5F;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAOpD"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { createHash, randomUUID } from 'node:crypto';
|
|
2
|
+
/**
|
|
3
|
+
* Generate a session hash from tool and conversation ID
|
|
4
|
+
*
|
|
5
|
+
* Per Git AI Standard v3.0.0: 16-character SHA-256 prefix of {tool}:{conversation_id}
|
|
6
|
+
*
|
|
7
|
+
* @param tool - AI tool name (e.g., "claude-code", "cursor")
|
|
8
|
+
* @param conversationId - Unique session/conversation identifier
|
|
9
|
+
* @returns 16-character hex session hash
|
|
10
|
+
*/
|
|
11
|
+
export function generateSessionHash(tool, conversationId) {
|
|
12
|
+
const input = `${tool}:${conversationId}`;
|
|
13
|
+
const fullHash = createHash('sha256').update(input).digest('hex');
|
|
14
|
+
return fullHash.slice(0, 16);
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Generate a session hash from an AgentId
|
|
18
|
+
*/
|
|
19
|
+
export function sessionHashFromAgentId(agentId) {
|
|
20
|
+
return generateSessionHash(agentId.tool, agentId.id);
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Create an AgentId from parameters
|
|
24
|
+
*
|
|
25
|
+
* @param options - Agent identification options
|
|
26
|
+
* @returns AgentId object
|
|
27
|
+
*/
|
|
28
|
+
export function createAgentId(options) {
|
|
29
|
+
const { tool, model } = options;
|
|
30
|
+
// Generate conversation ID if not provided (using crypto for robust randomness)
|
|
31
|
+
const conversationId = options.conversationId ?? `${Date.now()}-${randomUUID().slice(0, 8)}`;
|
|
32
|
+
return {
|
|
33
|
+
tool,
|
|
34
|
+
id: conversationId,
|
|
35
|
+
model,
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Known AI tool environment detection patterns
|
|
40
|
+
*/
|
|
41
|
+
const AI_TOOL_PATTERNS = [
|
|
42
|
+
{
|
|
43
|
+
tool: 'claude-code',
|
|
44
|
+
envVars: ['CLAUDE_SESSION_ID', 'CLAUDE_CODE_SESSION'],
|
|
45
|
+
modelVar: 'CLAUDE_MODEL',
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
tool: 'cursor',
|
|
49
|
+
envVars: ['CURSOR_SESSION', 'CURSOR_SESSION_ID'],
|
|
50
|
+
modelVar: 'CURSOR_MODEL',
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
tool: 'copilot',
|
|
54
|
+
envVars: ['GITHUB_COPILOT_TOKEN', 'COPILOT_SESSION'],
|
|
55
|
+
modelVar: undefined,
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
tool: 'codewhisperer',
|
|
59
|
+
envVars: ['AWS_CODEWHISPERER_SESSION'],
|
|
60
|
+
modelVar: undefined,
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
tool: 'tabnine',
|
|
64
|
+
envVars: ['TABNINE_SESSION'],
|
|
65
|
+
modelVar: undefined,
|
|
66
|
+
},
|
|
67
|
+
];
|
|
68
|
+
/**
|
|
69
|
+
* Detect current AI tool and create AgentId from environment
|
|
70
|
+
*
|
|
71
|
+
* Checks environment variables for known AI tool session identifiers.
|
|
72
|
+
* Returns null if no AI tool is detected.
|
|
73
|
+
*
|
|
74
|
+
* @returns AgentId if an AI tool is detected, null otherwise
|
|
75
|
+
*/
|
|
76
|
+
export function detectCurrentAgent() {
|
|
77
|
+
for (const pattern of AI_TOOL_PATTERNS) {
|
|
78
|
+
for (const envVar of pattern.envVars) {
|
|
79
|
+
const sessionId = process.env[envVar];
|
|
80
|
+
if (sessionId) {
|
|
81
|
+
return createAgentId({
|
|
82
|
+
tool: pattern.tool,
|
|
83
|
+
conversationId: sessionId,
|
|
84
|
+
model: pattern.modelVar ? process.env[pattern.modelVar] : undefined,
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return null;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Create an AgentId for manual/explicit use
|
|
93
|
+
*
|
|
94
|
+
* Use this when you know the exact tool and session ID.
|
|
95
|
+
*
|
|
96
|
+
* @param tool - AI tool name
|
|
97
|
+
* @param sessionId - Session/conversation ID
|
|
98
|
+
* @param model - Optional model identifier
|
|
99
|
+
* @returns AgentId object
|
|
100
|
+
*/
|
|
101
|
+
export function createExplicitAgent(tool, sessionId, model) {
|
|
102
|
+
return {
|
|
103
|
+
tool,
|
|
104
|
+
id: sessionId,
|
|
105
|
+
model,
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Format an AgentId for display
|
|
110
|
+
*/
|
|
111
|
+
export function formatAgentId(agent) {
|
|
112
|
+
const parts = [agent.tool];
|
|
113
|
+
if (agent.model) {
|
|
114
|
+
parts.push(`(${agent.model})`);
|
|
115
|
+
}
|
|
116
|
+
parts.push(`session:${agent.id.slice(0, 8)}...`);
|
|
117
|
+
return parts.join(' ');
|
|
118
|
+
}
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
/**
|
|
3
|
+
* Git AI Standard v3.0.0 Type Definitions
|
|
4
|
+
*
|
|
5
|
+
* This module implements the schema definitions for tracking AI-generated code
|
|
6
|
+
* contributions using Git Notes under the refs/notes/ai namespace.
|
|
7
|
+
*
|
|
8
|
+
* @see https://github.com/git-ai-project/git-ai/blob/main/specs/git_ai_standard_v3.0.0.md
|
|
9
|
+
*/
|
|
10
|
+
export declare const SCHEMA_VERSION: "authorship/3.0.0";
|
|
11
|
+
/**
|
|
12
|
+
* Session hash - 16-character hex prefix of SHA-256({tool}:{conversation_id})
|
|
13
|
+
*
|
|
14
|
+
* Session hashes must:
|
|
15
|
+
* - Remain stable across commits for the same session
|
|
16
|
+
* - Correspond to keys in the prompts object
|
|
17
|
+
* - Use only hexadecimal characters
|
|
18
|
+
*
|
|
19
|
+
* Backward compatibility allows 7-character hashes.
|
|
20
|
+
*/
|
|
21
|
+
export declare const SessionHashSchema: z.ZodString;
|
|
22
|
+
/**
|
|
23
|
+
* Line range specification (1-indexed)
|
|
24
|
+
*
|
|
25
|
+
* Formats:
|
|
26
|
+
* - Single lines: "42"
|
|
27
|
+
* - Ranges: "19-222"
|
|
28
|
+
* - Multiple: "1,2,19-222,300"
|
|
29
|
+
*/
|
|
30
|
+
export declare const LineRangeSchema: z.ZodString;
|
|
31
|
+
/**
|
|
32
|
+
* File attestation entry - maps session hash to line ranges
|
|
33
|
+
*/
|
|
34
|
+
export declare const FileAttestationSchema: z.ZodObject<{
|
|
35
|
+
sessionHash: z.ZodString;
|
|
36
|
+
lineRanges: z.ZodString;
|
|
37
|
+
}, z.core.$strip>;
|
|
38
|
+
/**
|
|
39
|
+
* Agent identifier - identifies the AI tool and session
|
|
40
|
+
*/
|
|
41
|
+
export declare const AgentIdSchema: z.ZodObject<{
|
|
42
|
+
tool: z.ZodString;
|
|
43
|
+
id: z.ZodString;
|
|
44
|
+
model: z.ZodOptional<z.ZodString>;
|
|
45
|
+
}, z.core.$strip>;
|
|
46
|
+
/**
|
|
47
|
+
* Message types in a prompt conversation
|
|
48
|
+
*
|
|
49
|
+
* Note: Tool responses are explicitly excluded per the spec to avoid bloat.
|
|
50
|
+
*/
|
|
51
|
+
export declare const MessageTypeSchema: z.ZodEnum<{
|
|
52
|
+
user: "user";
|
|
53
|
+
assistant: "assistant";
|
|
54
|
+
tool_use: "tool_use";
|
|
55
|
+
}>;
|
|
56
|
+
/**
|
|
57
|
+
* Message in a prompt conversation
|
|
58
|
+
*/
|
|
59
|
+
export declare const MessageSchema: z.ZodObject<{
|
|
60
|
+
type: z.ZodEnum<{
|
|
61
|
+
user: "user";
|
|
62
|
+
assistant: "assistant";
|
|
63
|
+
tool_use: "tool_use";
|
|
64
|
+
}>;
|
|
65
|
+
text: z.ZodString;
|
|
66
|
+
timestamp: z.ZodOptional<z.ZodString>;
|
|
67
|
+
}, z.core.$strip>;
|
|
68
|
+
/**
|
|
69
|
+
* Prompt record for a session
|
|
70
|
+
*
|
|
71
|
+
* Contains the full conversation and metrics for a single AI session
|
|
72
|
+
* that contributed to the commit.
|
|
73
|
+
*/
|
|
74
|
+
export declare const PromptRecordSchema: z.ZodObject<{
|
|
75
|
+
agent_id: z.ZodObject<{
|
|
76
|
+
tool: z.ZodString;
|
|
77
|
+
id: z.ZodString;
|
|
78
|
+
model: z.ZodOptional<z.ZodString>;
|
|
79
|
+
}, z.core.$strip>;
|
|
80
|
+
messages: z.ZodArray<z.ZodObject<{
|
|
81
|
+
type: z.ZodEnum<{
|
|
82
|
+
user: "user";
|
|
83
|
+
assistant: "assistant";
|
|
84
|
+
tool_use: "tool_use";
|
|
85
|
+
}>;
|
|
86
|
+
text: z.ZodString;
|
|
87
|
+
timestamp: z.ZodOptional<z.ZodString>;
|
|
88
|
+
}, z.core.$strip>>;
|
|
89
|
+
total_additions: z.ZodNumber;
|
|
90
|
+
total_deletions: z.ZodNumber;
|
|
91
|
+
accepted_lines: z.ZodNumber;
|
|
92
|
+
overridden_lines: z.ZodNumber;
|
|
93
|
+
human_author: z.ZodOptional<z.ZodString>;
|
|
94
|
+
}, z.core.$strip>;
|
|
95
|
+
/**
|
|
96
|
+
* Metadata section of authorship log
|
|
97
|
+
*
|
|
98
|
+
* The JSON object containing prompt records and versioning information.
|
|
99
|
+
*/
|
|
100
|
+
export declare const AuthorshipMetadataSchema: z.ZodObject<{
|
|
101
|
+
schema_version: z.ZodLiteral<"authorship/3.0.0">;
|
|
102
|
+
base_commit_sha: z.ZodString;
|
|
103
|
+
prompts: z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
104
|
+
agent_id: z.ZodObject<{
|
|
105
|
+
tool: z.ZodString;
|
|
106
|
+
id: z.ZodString;
|
|
107
|
+
model: z.ZodOptional<z.ZodString>;
|
|
108
|
+
}, z.core.$strip>;
|
|
109
|
+
messages: z.ZodArray<z.ZodObject<{
|
|
110
|
+
type: z.ZodEnum<{
|
|
111
|
+
user: "user";
|
|
112
|
+
assistant: "assistant";
|
|
113
|
+
tool_use: "tool_use";
|
|
114
|
+
}>;
|
|
115
|
+
text: z.ZodString;
|
|
116
|
+
timestamp: z.ZodOptional<z.ZodString>;
|
|
117
|
+
}, z.core.$strip>>;
|
|
118
|
+
total_additions: z.ZodNumber;
|
|
119
|
+
total_deletions: z.ZodNumber;
|
|
120
|
+
accepted_lines: z.ZodNumber;
|
|
121
|
+
overridden_lines: z.ZodNumber;
|
|
122
|
+
human_author: z.ZodOptional<z.ZodString>;
|
|
123
|
+
}, z.core.$strip>>;
|
|
124
|
+
}, z.core.$strip>;
|
|
125
|
+
/**
|
|
126
|
+
* Complete authorship log (attestation + metadata)
|
|
127
|
+
*
|
|
128
|
+
* The full structure stored in Git Notes under refs/notes/ai.
|
|
129
|
+
* Consists of two sections separated by "---":
|
|
130
|
+
* 1. Attestation section - maps files to AI sessions and line numbers
|
|
131
|
+
* 2. Metadata section - JSON object with prompt records and versioning
|
|
132
|
+
*/
|
|
133
|
+
export declare const AuthorshipLogSchema: z.ZodObject<{
|
|
134
|
+
attestations: z.ZodRecord<z.ZodString, z.ZodArray<z.ZodObject<{
|
|
135
|
+
sessionHash: z.ZodString;
|
|
136
|
+
lineRanges: z.ZodString;
|
|
137
|
+
}, z.core.$strip>>>;
|
|
138
|
+
metadata: z.ZodObject<{
|
|
139
|
+
schema_version: z.ZodLiteral<"authorship/3.0.0">;
|
|
140
|
+
base_commit_sha: z.ZodString;
|
|
141
|
+
prompts: z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
142
|
+
agent_id: z.ZodObject<{
|
|
143
|
+
tool: z.ZodString;
|
|
144
|
+
id: z.ZodString;
|
|
145
|
+
model: z.ZodOptional<z.ZodString>;
|
|
146
|
+
}, z.core.$strip>;
|
|
147
|
+
messages: z.ZodArray<z.ZodObject<{
|
|
148
|
+
type: z.ZodEnum<{
|
|
149
|
+
user: "user";
|
|
150
|
+
assistant: "assistant";
|
|
151
|
+
tool_use: "tool_use";
|
|
152
|
+
}>;
|
|
153
|
+
text: z.ZodString;
|
|
154
|
+
timestamp: z.ZodOptional<z.ZodString>;
|
|
155
|
+
}, z.core.$strip>>;
|
|
156
|
+
total_additions: z.ZodNumber;
|
|
157
|
+
total_deletions: z.ZodNumber;
|
|
158
|
+
accepted_lines: z.ZodNumber;
|
|
159
|
+
overridden_lines: z.ZodNumber;
|
|
160
|
+
human_author: z.ZodOptional<z.ZodString>;
|
|
161
|
+
}, z.core.$strip>>;
|
|
162
|
+
}, z.core.$strip>;
|
|
163
|
+
}, z.core.$strip>;
|
|
164
|
+
export type SessionHash = z.infer<typeof SessionHashSchema>;
|
|
165
|
+
export type LineRange = z.infer<typeof LineRangeSchema>;
|
|
166
|
+
export type FileAttestation = z.infer<typeof FileAttestationSchema>;
|
|
167
|
+
export type AgentId = z.infer<typeof AgentIdSchema>;
|
|
168
|
+
export type MessageType = z.infer<typeof MessageTypeSchema>;
|
|
169
|
+
export type Message = z.infer<typeof MessageSchema>;
|
|
170
|
+
export type PromptRecord = z.infer<typeof PromptRecordSchema>;
|
|
171
|
+
export type AuthorshipMetadata = z.infer<typeof AuthorshipMetadataSchema>;
|
|
172
|
+
export type AuthorshipLog = z.infer<typeof AuthorshipLogSchema>;
|
|
173
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/provenance/git-ai-standard/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;;;;GAOG;AAEH,eAAO,MAAM,cAAc,EAAG,kBAA2B,CAAC;AAE1D;;;;;;;;;GASG;AACH,eAAO,MAAM,iBAAiB,aAG4B,CAAC;AAE3D;;;;;;;GAOG;AACH,eAAO,MAAM,eAAe,aAGgC,CAAC;AAE7D;;GAEG;AACH,eAAO,MAAM,qBAAqB;;;iBAGhC,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,aAAa;;;;iBAIxB,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,iBAAiB;;;;EAA4C,CAAC;AAE3E;;GAEG;AACH,eAAO,MAAM,aAAa;;;;;;;;iBAIxB,CAAC;AAEH;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;iBAQ7B,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;iBASnC,CAAC;AAEH;;;;;;;GAOG;AACH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAK9B,CAAC;AAGH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAC5D,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AACxD,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AACpE,MAAM,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AACpD,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAC5D,MAAM,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AACpD,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAC9D,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAC1E,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
/**
|
|
3
|
+
* Git AI Standard v3.0.0 Type Definitions
|
|
4
|
+
*
|
|
5
|
+
* This module implements the schema definitions for tracking AI-generated code
|
|
6
|
+
* contributions using Git Notes under the refs/notes/ai namespace.
|
|
7
|
+
*
|
|
8
|
+
* @see https://github.com/git-ai-project/git-ai/blob/main/specs/git_ai_standard_v3.0.0.md
|
|
9
|
+
*/
|
|
10
|
+
export const SCHEMA_VERSION = 'authorship/3.0.0';
|
|
11
|
+
/**
|
|
12
|
+
* Session hash - 16-character hex prefix of SHA-256({tool}:{conversation_id})
|
|
13
|
+
*
|
|
14
|
+
* Session hashes must:
|
|
15
|
+
* - Remain stable across commits for the same session
|
|
16
|
+
* - Correspond to keys in the prompts object
|
|
17
|
+
* - Use only hexadecimal characters
|
|
18
|
+
*
|
|
19
|
+
* Backward compatibility allows 7-character hashes.
|
|
20
|
+
*/
|
|
21
|
+
export const SessionHashSchema = z
|
|
22
|
+
.string()
|
|
23
|
+
.regex(/^[a-f0-9]{7,16}$/, 'Session hash must be 7-16 hex characters')
|
|
24
|
+
.describe('Session identifier (16-char SHA-256 prefix)');
|
|
25
|
+
/**
|
|
26
|
+
* Line range specification (1-indexed)
|
|
27
|
+
*
|
|
28
|
+
* Formats:
|
|
29
|
+
* - Single lines: "42"
|
|
30
|
+
* - Ranges: "19-222"
|
|
31
|
+
* - Multiple: "1,2,19-222,300"
|
|
32
|
+
*/
|
|
33
|
+
export const LineRangeSchema = z
|
|
34
|
+
.string()
|
|
35
|
+
.regex(/^(\d+(-\d+)?)(,\d+(-\d+)?)*$/, 'Invalid line range format')
|
|
36
|
+
.describe('Line range specification (e.g., "1-10,15-20")');
|
|
37
|
+
/**
|
|
38
|
+
* File attestation entry - maps session hash to line ranges
|
|
39
|
+
*/
|
|
40
|
+
export const FileAttestationSchema = z.object({
|
|
41
|
+
sessionHash: SessionHashSchema,
|
|
42
|
+
lineRanges: LineRangeSchema,
|
|
43
|
+
});
|
|
44
|
+
/**
|
|
45
|
+
* Agent identifier - identifies the AI tool and session
|
|
46
|
+
*/
|
|
47
|
+
export const AgentIdSchema = z.object({
|
|
48
|
+
tool: z.string().describe('AI tool name (e.g., "claude-code", "cursor", "copilot")'),
|
|
49
|
+
id: z.string().describe('Unique conversation/session ID'),
|
|
50
|
+
model: z.string().optional().describe('Model used (e.g., "claude-3-opus", "gpt-4")'),
|
|
51
|
+
});
|
|
52
|
+
/**
|
|
53
|
+
* Message types in a prompt conversation
|
|
54
|
+
*
|
|
55
|
+
* Note: Tool responses are explicitly excluded per the spec to avoid bloat.
|
|
56
|
+
*/
|
|
57
|
+
export const MessageTypeSchema = z.enum(['user', 'assistant', 'tool_use']);
|
|
58
|
+
/**
|
|
59
|
+
* Message in a prompt conversation
|
|
60
|
+
*/
|
|
61
|
+
export const MessageSchema = z.object({
|
|
62
|
+
type: MessageTypeSchema.describe('Message type'),
|
|
63
|
+
text: z.string().describe('Message content'),
|
|
64
|
+
timestamp: z.string().datetime().optional().describe('ISO 8601 timestamp'),
|
|
65
|
+
});
|
|
66
|
+
/**
|
|
67
|
+
* Prompt record for a session
|
|
68
|
+
*
|
|
69
|
+
* Contains the full conversation and metrics for a single AI session
|
|
70
|
+
* that contributed to the commit.
|
|
71
|
+
*/
|
|
72
|
+
export const PromptRecordSchema = z.object({
|
|
73
|
+
agent_id: AgentIdSchema.describe('AI tool identifier'),
|
|
74
|
+
messages: z.array(MessageSchema).describe('Conversation turns'),
|
|
75
|
+
total_additions: z.number().int().min(0).describe('Total lines added by AI'),
|
|
76
|
+
total_deletions: z.number().int().min(0).describe('Total lines deleted by AI'),
|
|
77
|
+
accepted_lines: z.number().int().min(0).describe('Lines accepted as-is from AI'),
|
|
78
|
+
overridden_lines: z.number().int().min(0).describe('Lines human-modified after AI generation'),
|
|
79
|
+
human_author: z.string().optional().describe('Human author in "Name <email>" format'),
|
|
80
|
+
});
|
|
81
|
+
/**
|
|
82
|
+
* Metadata section of authorship log
|
|
83
|
+
*
|
|
84
|
+
* The JSON object containing prompt records and versioning information.
|
|
85
|
+
*/
|
|
86
|
+
export const AuthorshipMetadataSchema = z.object({
|
|
87
|
+
schema_version: z.literal(SCHEMA_VERSION).describe('Must be "authorship/3.0.0"'),
|
|
88
|
+
base_commit_sha: z
|
|
89
|
+
.string()
|
|
90
|
+
.regex(/^[a-f0-9]{40}$/, 'Must be full 40-char SHA')
|
|
91
|
+
.describe('The commit SHA this log is attached to'),
|
|
92
|
+
prompts: z
|
|
93
|
+
.record(SessionHashSchema, PromptRecordSchema)
|
|
94
|
+
.describe('Map of session hashes to prompt records'),
|
|
95
|
+
});
|
|
96
|
+
/**
|
|
97
|
+
* Complete authorship log (attestation + metadata)
|
|
98
|
+
*
|
|
99
|
+
* The full structure stored in Git Notes under refs/notes/ai.
|
|
100
|
+
* Consists of two sections separated by "---":
|
|
101
|
+
* 1. Attestation section - maps files to AI sessions and line numbers
|
|
102
|
+
* 2. Metadata section - JSON object with prompt records and versioning
|
|
103
|
+
*/
|
|
104
|
+
export const AuthorshipLogSchema = z.object({
|
|
105
|
+
attestations: z
|
|
106
|
+
.record(z.string(), z.array(FileAttestationSchema))
|
|
107
|
+
.describe('Map of file paths to attestation entries'),
|
|
108
|
+
metadata: AuthorshipMetadataSchema.describe('Metadata with prompts and versioning'),
|
|
109
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/provenance/index.ts"],"names":[],"mappings":"AACA,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAG3B,cAAc,4BAA4B,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
// Provenance system for tracking check history and audit trails
|
|
2
|
+
export * from './types.js';
|
|
3
|
+
export * from './collector.js';
|
|
4
|
+
export * from './store.js';
|
|
5
|
+
// Git AI Standard v3.0.0 - AI authorship tracking via Git Notes
|
|
6
|
+
export * from './git-ai-standard/index.js';
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import type { ProvenanceRecord, ProvenanceIndex } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* ProvenanceStore - manages provenance records on disk
|
|
4
|
+
*/
|
|
5
|
+
export declare class ProvenanceStore {
|
|
6
|
+
private readonly baseDir;
|
|
7
|
+
private readonly historyDir;
|
|
8
|
+
private readonly indexPath;
|
|
9
|
+
constructor(workspaceRoot: string);
|
|
10
|
+
/**
|
|
11
|
+
* Ensures the provenance directories exist
|
|
12
|
+
*/
|
|
13
|
+
private ensureDirectories;
|
|
14
|
+
/**
|
|
15
|
+
* Loads the provenance index
|
|
16
|
+
*/
|
|
17
|
+
private createEmptyIndex;
|
|
18
|
+
private loadIndex;
|
|
19
|
+
/**
|
|
20
|
+
* Saves the provenance index
|
|
21
|
+
*/
|
|
22
|
+
private saveIndex;
|
|
23
|
+
/**
|
|
24
|
+
* Saves a provenance record
|
|
25
|
+
*/
|
|
26
|
+
save(record: ProvenanceRecord): void;
|
|
27
|
+
/**
|
|
28
|
+
* Gets a specific provenance record by ID
|
|
29
|
+
*/
|
|
30
|
+
get(id: string): ProvenanceRecord | null;
|
|
31
|
+
/**
|
|
32
|
+
* Gets the most recent provenance record
|
|
33
|
+
*/
|
|
34
|
+
getLatest(): ProvenanceRecord | null;
|
|
35
|
+
/**
|
|
36
|
+
* Gets the provenance index with statistics
|
|
37
|
+
*/
|
|
38
|
+
getIndex(): ProvenanceIndex;
|
|
39
|
+
/**
|
|
40
|
+
* Lists recent provenance records
|
|
41
|
+
*/
|
|
42
|
+
list(options?: {
|
|
43
|
+
limit?: number;
|
|
44
|
+
passed?: boolean;
|
|
45
|
+
since?: Date;
|
|
46
|
+
}): ProvenanceRecord[];
|
|
47
|
+
/**
|
|
48
|
+
* Finds records by git commit
|
|
49
|
+
*/
|
|
50
|
+
findByCommit(commitPrefix: string): ProvenanceRecord[];
|
|
51
|
+
/**
|
|
52
|
+
* Gets statistics about provenance history
|
|
53
|
+
*/
|
|
54
|
+
getStatistics(): {
|
|
55
|
+
total: number;
|
|
56
|
+
passed: number;
|
|
57
|
+
failed: number;
|
|
58
|
+
passRate: number;
|
|
59
|
+
lastCheck: string | null;
|
|
60
|
+
lastPass: string | null;
|
|
61
|
+
lastFail: string | null;
|
|
62
|
+
};
|
|
63
|
+
/**
|
|
64
|
+
* Exports provenance history as JSON
|
|
65
|
+
*/
|
|
66
|
+
export(options?: {
|
|
67
|
+
since?: Date;
|
|
68
|
+
limit?: number;
|
|
69
|
+
}): string;
|
|
70
|
+
/**
|
|
71
|
+
* Clears all provenance history
|
|
72
|
+
*/
|
|
73
|
+
clear(): void;
|
|
74
|
+
/**
|
|
75
|
+
* Checks if provenance tracking is initialised
|
|
76
|
+
*/
|
|
77
|
+
isInitialised(): boolean;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Creates a provenance store for the given workspace
|
|
81
|
+
*/
|
|
82
|
+
export declare function createProvenanceStore(workspaceRoot: string): ProvenanceStore;
|
|
83
|
+
//# sourceMappingURL=store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/provenance/store.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAWpE;;GAEG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;gBAEvB,aAAa,EAAE,MAAM;IAMjC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAqBzB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAaxB,OAAO,CAAC,SAAS;IAsBjB;;OAEG;IACH,OAAO,CAAC,SAAS;IAMjB;;OAEG;IACH,IAAI,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI;IAsCpC;;OAEG;IACH,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI;IAwBxC;;OAEG;IACH,SAAS,IAAI,gBAAgB,GAAG,IAAI;IAQpC;;OAEG;IACH,QAAQ,IAAI,eAAe;IAI3B;;OAEG;IACH,IAAI,CAAC,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,IAAI,CAAA;KAAE,GAAG,gBAAgB,EAAE;IAuBtF;;OAEG;IACH,YAAY,CAAC,YAAY,EAAE,MAAM,GAAG,gBAAgB,EAAE;IAMtD;;OAEG;IACH,aAAa,IAAI;QACf,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;QACzB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;QACxB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;KACzB;IAgBD;;OAEG;IACH,MAAM,CAAC,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,IAAI,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM;IAe1D;;OAEG;IACH,KAAK,IAAI,IAAI;IAkBb;;OAEG;IACH,aAAa,IAAI,OAAO;CAGzB;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,aAAa,EAAE,MAAM,GAAG,eAAe,CAE5E"}
|