@su-record/vibe 2.7.5 → 2.7.8
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/cli/commands/init.d.ts +7 -2
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +68 -6
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/update.d.ts.map +1 -1
- package/dist/cli/commands/update.js +21 -3
- package/dist/cli/commands/update.js.map +1 -1
- package/dist/cli/detect.d.ts.map +1 -1
- package/dist/cli/detect.js +28 -1
- package/dist/cli/detect.js.map +1 -1
- package/dist/cli/postinstall/constants.d.ts +10 -4
- package/dist/cli/postinstall/constants.d.ts.map +1 -1
- package/dist/cli/postinstall/constants.js +19 -6
- package/dist/cli/postinstall/constants.js.map +1 -1
- package/dist/cli/postinstall/index.d.ts +1 -1
- package/dist/cli/postinstall/index.d.ts.map +1 -1
- package/dist/cli/postinstall/index.js +1 -1
- package/dist/cli/postinstall/index.js.map +1 -1
- package/dist/cli/postinstall.d.ts +1 -1
- package/dist/cli/postinstall.d.ts.map +1 -1
- package/dist/cli/postinstall.js +1 -1
- package/dist/cli/postinstall.js.map +1 -1
- package/dist/cli/setup/Provisioner.d.ts +28 -0
- package/dist/cli/setup/Provisioner.d.ts.map +1 -0
- package/dist/cli/setup/Provisioner.js +201 -0
- package/dist/cli/setup/Provisioner.js.map +1 -0
- package/dist/cli/types.d.ts +1 -0
- package/dist/cli/types.d.ts.map +1 -1
- package/dist/infra/lib/TaskContext.d.ts +43 -0
- package/dist/infra/lib/TaskContext.d.ts.map +1 -0
- package/dist/infra/lib/TaskContext.js +84 -0
- package/dist/infra/lib/TaskContext.js.map +1 -0
- package/dist/infra/lib/TokenBudgetTracker.d.ts +55 -0
- package/dist/infra/lib/TokenBudgetTracker.d.ts.map +1 -0
- package/dist/infra/lib/TokenBudgetTracker.js +150 -0
- package/dist/infra/lib/TokenBudgetTracker.js.map +1 -0
- package/dist/infra/lib/constants.d.ts +5 -0
- package/dist/infra/lib/constants.d.ts.map +1 -1
- package/dist/infra/lib/constants.js +6 -0
- package/dist/infra/lib/constants.js.map +1 -1
- package/dist/infra/lib/memory/SessionRAGRetriever.d.ts +1 -0
- package/dist/infra/lib/memory/SessionRAGRetriever.d.ts.map +1 -1
- package/dist/infra/lib/memory/SessionRAGRetriever.js +46 -21
- package/dist/infra/lib/memory/SessionRAGRetriever.js.map +1 -1
- package/dist/infra/lib/memory/SessionRAGStore.d.ts +5 -0
- package/dist/infra/lib/memory/SessionRAGStore.d.ts.map +1 -1
- package/dist/infra/lib/memory/SessionRAGStore.js +46 -12
- package/dist/infra/lib/memory/SessionRAGStore.js.map +1 -1
- package/dist/infra/lib/memory/index.d.ts +4 -0
- package/dist/infra/lib/memory/index.d.ts.map +1 -1
- package/dist/infra/lib/memory/index.js +4 -0
- package/dist/infra/lib/memory/index.js.map +1 -1
- package/dist/infra/orchestrator/AgentManifestCache.d.ts +54 -0
- package/dist/infra/orchestrator/AgentManifestCache.d.ts.map +1 -0
- package/dist/infra/orchestrator/AgentManifestCache.js +191 -0
- package/dist/infra/orchestrator/AgentManifestCache.js.map +1 -0
- package/dist/infra/orchestrator/agentDiscovery.d.ts +8 -0
- package/dist/infra/orchestrator/agentDiscovery.d.ts.map +1 -1
- package/dist/infra/orchestrator/agentDiscovery.js +2 -2
- package/dist/infra/orchestrator/agentDiscovery.js.map +1 -1
- package/dist/infra/orchestrator/index.d.ts +3 -1
- package/dist/infra/orchestrator/index.d.ts.map +1 -1
- package/dist/infra/orchestrator/index.js +3 -1
- package/dist/infra/orchestrator/index.js.map +1 -1
- package/hooks/scripts/context-save.js +12 -0
- package/package.json +1 -1
- package/skills/characterization-test/SKILL.md +202 -0
- package/skills/video-production/SKILL.md +222 -0
package/dist/cli/postinstall.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* postinstall 스크립트 (re-export)
|
|
4
4
|
*/
|
|
5
5
|
// Export functions for use in vibe init/update
|
|
6
|
-
export { installCursorAgents, installClaudeAgents, generateCursorRules, generateCursorSkills, getCoreConfigDir, STACK_TO_LANGUAGE_FILE, GLOBAL_SKILLS, STACK_TO_SKILLS,
|
|
6
|
+
export { installCursorAgents, installClaudeAgents, generateCursorRules, generateCursorSkills, getCoreConfigDir, STACK_TO_LANGUAGE_FILE, GLOBAL_SKILLS, STACK_TO_SKILLS, CAPABILITY_SKILLS, AVAILABLE_CAPABILITIES, resolveLocalSkills, copySkillsFiltered, } from './postinstall/index.js';
|
|
7
7
|
// CLI 엔트리 포인트 - main.ts에서 직접 실행 감지 처리
|
|
8
8
|
import './postinstall/main.js';
|
|
9
9
|
//# sourceMappingURL=postinstall.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"postinstall.js","sourceRoot":"","sources":["../../src/cli/postinstall.ts"],"names":[],"mappings":";AACA;;GAEG;AAEH,+CAA+C;AAC/C,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,EACpB,gBAAgB,EAChB,sBAAsB,EACtB,aAAa,EACb,eAAe,EACf,
|
|
1
|
+
{"version":3,"file":"postinstall.js","sourceRoot":"","sources":["../../src/cli/postinstall.ts"],"names":[],"mappings":";AACA;;GAEG;AAEH,+CAA+C;AAC/C,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,EACpB,gBAAgB,EAChB,sBAAsB,EACtB,aAAa,EACb,eAAe,EACf,iBAAiB,EACjB,sBAAsB,EACtB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,wBAAwB,CAAC;AAEhC,sCAAsC;AACtC,OAAO,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provisioner - Post-init step for project-specific agent recommendations
|
|
3
|
+
* Generates recommended agents and SPEC template based on detected tech stacks
|
|
4
|
+
*/
|
|
5
|
+
import type { DetectedStack, StackDetails } from '../types.js';
|
|
6
|
+
export interface RecommendedAgent {
|
|
7
|
+
name: string;
|
|
8
|
+
category: string;
|
|
9
|
+
priority: 'high' | 'medium' | 'low';
|
|
10
|
+
rationale: string;
|
|
11
|
+
}
|
|
12
|
+
export interface RecommendedAgentsConfig {
|
|
13
|
+
generatedAt: string;
|
|
14
|
+
projectStacks: string[];
|
|
15
|
+
agents: RecommendedAgent[];
|
|
16
|
+
}
|
|
17
|
+
export interface ProvisionResult {
|
|
18
|
+
configEnhanced: boolean;
|
|
19
|
+
agentsGenerated: boolean;
|
|
20
|
+
specTemplateGenerated: boolean;
|
|
21
|
+
}
|
|
22
|
+
export declare class Provisioner {
|
|
23
|
+
private constructor();
|
|
24
|
+
static provision(projectRoot: string, detectedStacks: DetectedStack[], stackDetails: StackDetails): ProvisionResult;
|
|
25
|
+
static generateRecommendedAgents(stacks: string[]): RecommendedAgent[];
|
|
26
|
+
static generateSpecTemplate(stacks: string[], details: StackDetails): string;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=Provisioner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Provisioner.d.ts","sourceRoot":"","sources":["../../../src/cli/setup/Provisioner.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAM/D,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IACpC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,uBAAuB;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,MAAM,EAAE,gBAAgB,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,eAAe;IAC9B,cAAc,EAAE,OAAO,CAAC;IACxB,eAAe,EAAE,OAAO,CAAC;IACzB,qBAAqB,EAAE,OAAO,CAAC;CAChC;AAsFD,qBAAa,WAAW;IACtB,OAAO;IAIP,MAAM,CAAC,SAAS,CACd,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,aAAa,EAAE,EAC/B,YAAY,EAAE,YAAY,GACzB,eAAe;IA6ClB,MAAM,CAAC,yBAAyB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,gBAAgB,EAAE;IAiCtE,MAAM,CAAC,oBAAoB,CACzB,MAAM,EAAE,MAAM,EAAE,EAChB,OAAO,EAAE,YAAY,GACpB,MAAM;CAyDV"}
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provisioner - Post-init step for project-specific agent recommendations
|
|
3
|
+
* Generates recommended agents and SPEC template based on detected tech stacks
|
|
4
|
+
*/
|
|
5
|
+
import fs from 'fs';
|
|
6
|
+
import path from 'path';
|
|
7
|
+
const STACK_AGENT_MAP = {
|
|
8
|
+
'typescript-react': {
|
|
9
|
+
high: [
|
|
10
|
+
{ name: 'react-reviewer', category: 'review', priority: 'high', rationale: 'React component patterns and hooks validation' },
|
|
11
|
+
{ name: 'typescript-reviewer', category: 'review', priority: 'high', rationale: 'TypeScript type safety enforcement' },
|
|
12
|
+
],
|
|
13
|
+
medium: [
|
|
14
|
+
{ name: 'performance-reviewer', category: 'review', priority: 'medium', rationale: 'React render optimization' },
|
|
15
|
+
],
|
|
16
|
+
},
|
|
17
|
+
'typescript-nextjs': {
|
|
18
|
+
high: [
|
|
19
|
+
{ name: 'react-reviewer', category: 'review', priority: 'high', rationale: 'React/Next.js patterns and SSR validation' },
|
|
20
|
+
{ name: 'typescript-reviewer', category: 'review', priority: 'high', rationale: 'TypeScript type safety enforcement' },
|
|
21
|
+
],
|
|
22
|
+
medium: [
|
|
23
|
+
{ name: 'performance-reviewer', category: 'review', priority: 'medium', rationale: 'SSR/ISR performance optimization' },
|
|
24
|
+
],
|
|
25
|
+
},
|
|
26
|
+
'typescript-node': {
|
|
27
|
+
high: [
|
|
28
|
+
{ name: 'typescript-reviewer', category: 'review', priority: 'high', rationale: 'TypeScript type safety enforcement' },
|
|
29
|
+
{ name: 'data-integrity-reviewer', category: 'review', priority: 'high', rationale: 'Data validation and transaction safety' },
|
|
30
|
+
],
|
|
31
|
+
medium: [
|
|
32
|
+
{ name: 'test-coverage-reviewer', category: 'review', priority: 'medium', rationale: 'Backend test coverage assurance' },
|
|
33
|
+
],
|
|
34
|
+
},
|
|
35
|
+
'typescript-nestjs': {
|
|
36
|
+
high: [
|
|
37
|
+
{ name: 'typescript-reviewer', category: 'review', priority: 'high', rationale: 'TypeScript type safety enforcement' },
|
|
38
|
+
{ name: 'data-integrity-reviewer', category: 'review', priority: 'high', rationale: 'Data validation and transaction safety' },
|
|
39
|
+
],
|
|
40
|
+
medium: [
|
|
41
|
+
{ name: 'test-coverage-reviewer', category: 'review', priority: 'medium', rationale: 'Backend test coverage assurance' },
|
|
42
|
+
],
|
|
43
|
+
},
|
|
44
|
+
'python-fastapi': {
|
|
45
|
+
high: [
|
|
46
|
+
{ name: 'python-reviewer', category: 'review', priority: 'high', rationale: 'Python PEP 8 and type hints validation' },
|
|
47
|
+
],
|
|
48
|
+
medium: [
|
|
49
|
+
{ name: 'test-coverage-reviewer', category: 'review', priority: 'medium', rationale: 'API test coverage assurance' },
|
|
50
|
+
],
|
|
51
|
+
},
|
|
52
|
+
'python-django': {
|
|
53
|
+
high: [
|
|
54
|
+
{ name: 'python-reviewer', category: 'review', priority: 'high', rationale: 'Python PEP 8 and Django patterns validation' },
|
|
55
|
+
],
|
|
56
|
+
medium: [
|
|
57
|
+
{ name: 'test-coverage-reviewer', category: 'review', priority: 'medium', rationale: 'Django test coverage assurance' },
|
|
58
|
+
],
|
|
59
|
+
},
|
|
60
|
+
'ruby-rails': {
|
|
61
|
+
high: [
|
|
62
|
+
{ name: 'rails-reviewer', category: 'review', priority: 'high', rationale: 'Rails Way compliance and ActiveRecord patterns' },
|
|
63
|
+
{ name: 'data-integrity-reviewer', category: 'review', priority: 'high', rationale: 'Migration safety and transaction management' },
|
|
64
|
+
],
|
|
65
|
+
medium: [
|
|
66
|
+
{ name: 'security-reviewer', category: 'review', priority: 'medium', rationale: 'Rails security best practices' },
|
|
67
|
+
],
|
|
68
|
+
},
|
|
69
|
+
};
|
|
70
|
+
const UNIVERSAL_AGENTS = [
|
|
71
|
+
{ name: 'security-reviewer', category: 'review', priority: 'medium', rationale: 'OWASP Top 10 vulnerability detection' },
|
|
72
|
+
{ name: 'architecture-reviewer', category: 'review', priority: 'medium', rationale: 'Layer violations and SOLID principles' },
|
|
73
|
+
{ name: 'simplicity-reviewer', category: 'review', priority: 'medium', rationale: 'Over-abstraction and YAGNI detection' },
|
|
74
|
+
{ name: 'git-history-reviewer', category: 'review', priority: 'medium', rationale: 'Risk pattern detection from commit history' },
|
|
75
|
+
];
|
|
76
|
+
// ============================================================================
|
|
77
|
+
// Provisioner
|
|
78
|
+
// ============================================================================
|
|
79
|
+
export class Provisioner {
|
|
80
|
+
constructor() {
|
|
81
|
+
// Static-only class
|
|
82
|
+
}
|
|
83
|
+
static provision(projectRoot, detectedStacks, stackDetails) {
|
|
84
|
+
const result = {
|
|
85
|
+
configEnhanced: false,
|
|
86
|
+
agentsGenerated: false,
|
|
87
|
+
specTemplateGenerated: false,
|
|
88
|
+
};
|
|
89
|
+
const stackTypes = detectedStacks.map(s => s.type);
|
|
90
|
+
// Generate recommended agents config
|
|
91
|
+
const agentsPath = path.join(projectRoot, '.claude', 'vibe', 'recommended-agents.json');
|
|
92
|
+
if (!fs.existsSync(agentsPath)) {
|
|
93
|
+
const agents = Provisioner.generateRecommendedAgents(stackTypes);
|
|
94
|
+
const config = {
|
|
95
|
+
generatedAt: new Date().toISOString(),
|
|
96
|
+
projectStacks: stackTypes,
|
|
97
|
+
agents,
|
|
98
|
+
};
|
|
99
|
+
const dir = path.dirname(agentsPath);
|
|
100
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
101
|
+
fs.writeFileSync(agentsPath, JSON.stringify(config, null, 2));
|
|
102
|
+
result.agentsGenerated = true;
|
|
103
|
+
}
|
|
104
|
+
// Generate SPEC template
|
|
105
|
+
const specPath = path.join(projectRoot, '.claude', 'vibe', 'specs', 'project-spec-template.md');
|
|
106
|
+
if (!fs.existsSync(specPath)) {
|
|
107
|
+
const template = Provisioner.generateSpecTemplate(stackTypes, stackDetails);
|
|
108
|
+
const dir = path.dirname(specPath);
|
|
109
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
110
|
+
fs.writeFileSync(specPath, template);
|
|
111
|
+
result.specTemplateGenerated = true;
|
|
112
|
+
}
|
|
113
|
+
result.configEnhanced =
|
|
114
|
+
result.agentsGenerated || result.specTemplateGenerated;
|
|
115
|
+
return result;
|
|
116
|
+
}
|
|
117
|
+
static generateRecommendedAgents(stacks) {
|
|
118
|
+
const seen = new Set();
|
|
119
|
+
const agents = [];
|
|
120
|
+
const addAgent = (agent) => {
|
|
121
|
+
if (seen.has(agent.name))
|
|
122
|
+
return;
|
|
123
|
+
seen.add(agent.name);
|
|
124
|
+
agents.push(agent);
|
|
125
|
+
};
|
|
126
|
+
// Stack-specific agents
|
|
127
|
+
for (const stack of stacks) {
|
|
128
|
+
const mapping = STACK_AGENT_MAP[stack];
|
|
129
|
+
if (mapping) {
|
|
130
|
+
mapping.high.forEach(addAgent);
|
|
131
|
+
mapping.medium.forEach(addAgent);
|
|
132
|
+
continue;
|
|
133
|
+
}
|
|
134
|
+
// Prefix match (e.g., 'typescript' from 'typescript-vue')
|
|
135
|
+
const prefix = stack.split('-').slice(0, 2).join('-');
|
|
136
|
+
const prefixMapping = STACK_AGENT_MAP[prefix];
|
|
137
|
+
if (prefixMapping) {
|
|
138
|
+
prefixMapping.high.forEach(addAgent);
|
|
139
|
+
prefixMapping.medium.forEach(addAgent);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
// Universal agents
|
|
143
|
+
UNIVERSAL_AGENTS.forEach(addAgent);
|
|
144
|
+
return agents;
|
|
145
|
+
}
|
|
146
|
+
static generateSpecTemplate(stacks, details) {
|
|
147
|
+
const stackList = stacks.length > 0
|
|
148
|
+
? stacks.map(s => `- ${s}`).join('\n')
|
|
149
|
+
: '- (not detected)';
|
|
150
|
+
const dbSection = details.databases.length > 0
|
|
151
|
+
? details.databases.join(', ')
|
|
152
|
+
: 'N/A';
|
|
153
|
+
const stateSection = details.stateManagement.length > 0
|
|
154
|
+
? details.stateManagement.join(', ')
|
|
155
|
+
: 'N/A';
|
|
156
|
+
return `# [Feature Name] SPEC
|
|
157
|
+
|
|
158
|
+
## Overview
|
|
159
|
+
<!-- Brief description of the feature -->
|
|
160
|
+
|
|
161
|
+
## Tech Stack
|
|
162
|
+
${stackList}
|
|
163
|
+
|
|
164
|
+
### Infrastructure
|
|
165
|
+
- **Databases**: ${dbSection}
|
|
166
|
+
- **State Management**: ${stateSection}
|
|
167
|
+
|
|
168
|
+
## Problem Statement
|
|
169
|
+
<!-- What problem does this solve? -->
|
|
170
|
+
|
|
171
|
+
## Proposed Solution
|
|
172
|
+
<!-- High-level approach -->
|
|
173
|
+
|
|
174
|
+
## Requirements
|
|
175
|
+
|
|
176
|
+
### Functional
|
|
177
|
+
1. <!-- Requirement 1 -->
|
|
178
|
+
|
|
179
|
+
### Non-Functional
|
|
180
|
+
1. <!-- Performance, security, accessibility -->
|
|
181
|
+
|
|
182
|
+
## API Design
|
|
183
|
+
<!-- Endpoints, request/response schemas -->
|
|
184
|
+
|
|
185
|
+
## Data Model
|
|
186
|
+
<!-- Schema changes, migrations -->
|
|
187
|
+
|
|
188
|
+
## Test Strategy
|
|
189
|
+
- Unit tests: <!-- scope -->
|
|
190
|
+
- Integration tests: <!-- scope -->
|
|
191
|
+
- E2E tests: <!-- scope -->
|
|
192
|
+
|
|
193
|
+
## Acceptance Criteria
|
|
194
|
+
- [ ] <!-- Criterion 1 -->
|
|
195
|
+
|
|
196
|
+
## References
|
|
197
|
+
<!-- Links to relevant docs, designs, PRs -->
|
|
198
|
+
`;
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
//# sourceMappingURL=Provisioner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Provisioner.js","sourceRoot":"","sources":["../../../src/cli/setup/Provisioner.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/types.d.ts
CHANGED
package/dist/cli/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/cli/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,OAAO,GAAG,QAAQ,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,GAAG,EAAE,aAAa,EAAE,CAAC;IACrB,MAAM,EAAE,aAAa,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,aAAa,EAAE,OAAO,GAAG,IAAI,CAAC;CAC/B;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAGD,MAAM,MAAM,SAAS,GAAG,aAAa,CAAC;AAEtC,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,IAAI,EAAE,MAAM,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/cli/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TaskContext - Scoped context boundaries per task/agent
|
|
3
|
+
* Prevents memory pollution during concurrent multi-agent execution
|
|
4
|
+
* Pure static registry (no instantiation)
|
|
5
|
+
*/
|
|
6
|
+
export type ContextScope = 'task' | 'session' | 'project';
|
|
7
|
+
export interface TaskContextData {
|
|
8
|
+
readonly taskId: string;
|
|
9
|
+
readonly sessionId: string;
|
|
10
|
+
readonly projectPath: string;
|
|
11
|
+
readonly scope: ContextScope;
|
|
12
|
+
readonly parentTaskId: string | null;
|
|
13
|
+
readonly agentName: string | null;
|
|
14
|
+
readonly createdAt: string;
|
|
15
|
+
}
|
|
16
|
+
export interface TaskContextCreateOptions {
|
|
17
|
+
taskId: string;
|
|
18
|
+
sessionId: string;
|
|
19
|
+
projectPath: string;
|
|
20
|
+
scope?: ContextScope;
|
|
21
|
+
agentName?: string;
|
|
22
|
+
}
|
|
23
|
+
export interface TaskContextForkOptions {
|
|
24
|
+
taskId: string;
|
|
25
|
+
agentName?: string;
|
|
26
|
+
scope?: ContextScope;
|
|
27
|
+
}
|
|
28
|
+
export interface ScopeFilter {
|
|
29
|
+
clause: string;
|
|
30
|
+
params: unknown[];
|
|
31
|
+
}
|
|
32
|
+
export declare class TaskContext {
|
|
33
|
+
private static registry;
|
|
34
|
+
private constructor();
|
|
35
|
+
static create(opts: TaskContextCreateOptions): TaskContextData;
|
|
36
|
+
static fork(parentContext: TaskContextData, forkOpts: TaskContextForkOptions): TaskContextData;
|
|
37
|
+
static getScoped(taskId: string): TaskContextData | null;
|
|
38
|
+
static cleanup(taskId: string): boolean;
|
|
39
|
+
static buildScopeFilter(context?: TaskContextData): ScopeFilter;
|
|
40
|
+
static getChildren(parentTaskId: string): TaskContextData[];
|
|
41
|
+
static clear(): void;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=TaskContext.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TaskContext.d.ts","sourceRoot":"","sources":["../../../src/infra/lib/TaskContext.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,CAAC;AAE1D,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAC7B,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,YAAY,CAAC;CACtB;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,OAAO,EAAE,CAAC;CACnB;AAMD,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAA2C;IAElE,OAAO;IAIP,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,wBAAwB,GAAG,eAAe;IAc9D,MAAM,CAAC,IAAI,CACT,aAAa,EAAE,eAAe,EAC9B,QAAQ,EAAE,sBAAsB,GAC/B,eAAe;IAclB,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI;IAIxD,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAQvC,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,WAAW;IAuB/D,MAAM,CAAC,WAAW,CAAC,YAAY,EAAE,MAAM,GAAG,eAAe,EAAE;IAU3D,MAAM,CAAC,KAAK,IAAI,IAAI;CAGrB"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TaskContext - Scoped context boundaries per task/agent
|
|
3
|
+
* Prevents memory pollution during concurrent multi-agent execution
|
|
4
|
+
* Pure static registry (no instantiation)
|
|
5
|
+
*/
|
|
6
|
+
// ============================================================================
|
|
7
|
+
// TaskContext (static registry)
|
|
8
|
+
// ============================================================================
|
|
9
|
+
export class TaskContext {
|
|
10
|
+
static registry = new Map();
|
|
11
|
+
constructor() {
|
|
12
|
+
// Pure static class — no instantiation
|
|
13
|
+
}
|
|
14
|
+
static create(opts) {
|
|
15
|
+
const data = {
|
|
16
|
+
taskId: opts.taskId,
|
|
17
|
+
sessionId: opts.sessionId,
|
|
18
|
+
projectPath: opts.projectPath,
|
|
19
|
+
scope: opts.scope ?? 'task',
|
|
20
|
+
parentTaskId: null,
|
|
21
|
+
agentName: opts.agentName ?? null,
|
|
22
|
+
createdAt: new Date().toISOString(),
|
|
23
|
+
};
|
|
24
|
+
TaskContext.registry.set(opts.taskId, data);
|
|
25
|
+
return data;
|
|
26
|
+
}
|
|
27
|
+
static fork(parentContext, forkOpts) {
|
|
28
|
+
const data = {
|
|
29
|
+
taskId: forkOpts.taskId,
|
|
30
|
+
sessionId: parentContext.sessionId,
|
|
31
|
+
projectPath: parentContext.projectPath,
|
|
32
|
+
scope: forkOpts.scope ?? parentContext.scope,
|
|
33
|
+
parentTaskId: parentContext.taskId,
|
|
34
|
+
agentName: forkOpts.agentName ?? null,
|
|
35
|
+
createdAt: new Date().toISOString(),
|
|
36
|
+
};
|
|
37
|
+
TaskContext.registry.set(forkOpts.taskId, data);
|
|
38
|
+
return data;
|
|
39
|
+
}
|
|
40
|
+
static getScoped(taskId) {
|
|
41
|
+
return TaskContext.registry.get(taskId) ?? null;
|
|
42
|
+
}
|
|
43
|
+
static cleanup(taskId) {
|
|
44
|
+
const children = TaskContext.getChildren(taskId);
|
|
45
|
+
for (const child of children) {
|
|
46
|
+
TaskContext.cleanup(child.taskId);
|
|
47
|
+
}
|
|
48
|
+
return TaskContext.registry.delete(taskId);
|
|
49
|
+
}
|
|
50
|
+
static buildScopeFilter(context) {
|
|
51
|
+
if (!context) {
|
|
52
|
+
return { clause: '', params: [] };
|
|
53
|
+
}
|
|
54
|
+
switch (context.scope) {
|
|
55
|
+
case 'task':
|
|
56
|
+
return {
|
|
57
|
+
clause: ' AND taskId = ?',
|
|
58
|
+
params: [context.taskId],
|
|
59
|
+
};
|
|
60
|
+
case 'session':
|
|
61
|
+
return {
|
|
62
|
+
clause: ' AND sessionId = ?',
|
|
63
|
+
params: [context.sessionId],
|
|
64
|
+
};
|
|
65
|
+
case 'project':
|
|
66
|
+
return { clause: '', params: [] };
|
|
67
|
+
default:
|
|
68
|
+
return { clause: '', params: [] };
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
static getChildren(parentTaskId) {
|
|
72
|
+
const children = [];
|
|
73
|
+
for (const data of TaskContext.registry.values()) {
|
|
74
|
+
if (data.parentTaskId === parentTaskId) {
|
|
75
|
+
children.push(data);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return children;
|
|
79
|
+
}
|
|
80
|
+
static clear() {
|
|
81
|
+
TaskContext.registry.clear();
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=TaskContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TaskContext.js","sourceRoot":"","sources":["../../../src/infra/lib/TaskContext.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TokenBudgetTracker - In-memory per-session token budget tracker
|
|
3
|
+
* Singleton per project (same pattern as MemoryManager)
|
|
4
|
+
* Provides predictive overflow prevention with threshold-based warnings
|
|
5
|
+
*/
|
|
6
|
+
export type TokenSource = 'session_rag' | 'memory' | 'agent' | 'compression' | 'tool_call' | 'user_prompt' | 'system';
|
|
7
|
+
export type ThresholdLevel = 'none' | 'soft' | 'medium' | 'hard' | 'critical';
|
|
8
|
+
export interface BudgetSnapshot {
|
|
9
|
+
totalBudget: number;
|
|
10
|
+
consumed: number;
|
|
11
|
+
remaining: number;
|
|
12
|
+
usagePercent: number;
|
|
13
|
+
level: ThresholdLevel;
|
|
14
|
+
bySource: Record<TokenSource, number>;
|
|
15
|
+
crossings: ThresholdCrossing[];
|
|
16
|
+
}
|
|
17
|
+
export interface ActionEstimate {
|
|
18
|
+
action: string;
|
|
19
|
+
estimatedTokens: number;
|
|
20
|
+
wouldCrossThreshold: boolean;
|
|
21
|
+
resultingLevel: ThresholdLevel;
|
|
22
|
+
resultingPercent: number;
|
|
23
|
+
}
|
|
24
|
+
interface ThresholdCrossing {
|
|
25
|
+
level: ThresholdLevel;
|
|
26
|
+
crossedAt: number;
|
|
27
|
+
timestamp: string;
|
|
28
|
+
}
|
|
29
|
+
export declare class TokenBudgetTracker {
|
|
30
|
+
private static instances;
|
|
31
|
+
private static defaultInstance;
|
|
32
|
+
private totalBudget;
|
|
33
|
+
private consumed;
|
|
34
|
+
private bySource;
|
|
35
|
+
private crossings;
|
|
36
|
+
private lastLevel;
|
|
37
|
+
private constructor();
|
|
38
|
+
static getInstance(projectPath?: string, totalBudget?: number): TokenBudgetTracker;
|
|
39
|
+
trackConsumption(source: TokenSource, tokens: number): ThresholdLevel;
|
|
40
|
+
syncToPercent(percent: number): void;
|
|
41
|
+
getRemainingBudget(): number;
|
|
42
|
+
getUsagePercent(): number;
|
|
43
|
+
estimateAfterAction(action: string, estimatedTokens: number): ActionEstimate;
|
|
44
|
+
shouldThrottle(): boolean;
|
|
45
|
+
getCurrentLevel(): ThresholdLevel;
|
|
46
|
+
getSnapshot(): BudgetSnapshot;
|
|
47
|
+
static estimateTokens(text: string): number;
|
|
48
|
+
reset(): void;
|
|
49
|
+
static resetInstance(): void;
|
|
50
|
+
private createEmptySourceMap;
|
|
51
|
+
private levelForPercent;
|
|
52
|
+
private levelIndex;
|
|
53
|
+
}
|
|
54
|
+
export {};
|
|
55
|
+
//# sourceMappingURL=TokenBudgetTracker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TokenBudgetTracker.d.ts","sourceRoot":"","sources":["../../../src/infra/lib/TokenBudgetTracker.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAQH,MAAM,MAAM,WAAW,GACnB,aAAa,GACb,QAAQ,GACR,OAAO,GACP,aAAa,GACb,WAAW,GACX,aAAa,GACb,QAAQ,CAAC;AAEb,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;AAE9E,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,cAAc,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IACtC,SAAS,EAAE,iBAAiB,EAAE,CAAC;CAChC;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,CAAC;IACxB,mBAAmB,EAAE,OAAO,CAAC;IAC7B,cAAc,EAAE,cAAc,CAAC;IAC/B,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,UAAU,iBAAiB;IACzB,KAAK,EAAE,cAAc,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAsBD,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,MAAM,CAAC,SAAS,CAA8C;IACtE,OAAO,CAAC,MAAM,CAAC,eAAe,CAAmC;IAEjE,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,QAAQ,CAA8B;IAC9C,OAAO,CAAC,SAAS,CAAsB;IACvC,OAAO,CAAC,SAAS,CAAiB;IAElC,OAAO;IAQP,MAAM,CAAC,WAAW,CAChB,WAAW,CAAC,EAAE,MAAM,EACpB,WAAW,GAAE,MAA8B,GAC1C,kBAAkB;IAcrB,gBAAgB,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,GAAG,cAAc;IAerE,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAKpC,kBAAkB,IAAI,MAAM;IAI5B,eAAe,IAAI,MAAM;IAKzB,mBAAmB,CACjB,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,MAAM,GACtB,cAAc;IAmBjB,cAAc,IAAI,OAAO;IAIzB,eAAe,IAAI,cAAc;IAIjC,WAAW,IAAI,cAAc;IAY7B,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAI3C,KAAK,IAAI,IAAI;IAOb,MAAM,CAAC,aAAa,IAAI,IAAI;IAS5B,OAAO,CAAC,oBAAoB;IAY5B,OAAO,CAAC,eAAe;IAQvB,OAAO,CAAC,UAAU;CAGnB"}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TokenBudgetTracker - In-memory per-session token budget tracker
|
|
3
|
+
* Singleton per project (same pattern as MemoryManager)
|
|
4
|
+
* Provides predictive overflow prevention with threshold-based warnings
|
|
5
|
+
*/
|
|
6
|
+
import { TOKENS } from './constants.js';
|
|
7
|
+
// ============================================================================
|
|
8
|
+
// Constants
|
|
9
|
+
// ============================================================================
|
|
10
|
+
const THRESHOLD_PERCENTS = {
|
|
11
|
+
none: 0,
|
|
12
|
+
soft: 65,
|
|
13
|
+
medium: 75,
|
|
14
|
+
hard: 85,
|
|
15
|
+
critical: 95,
|
|
16
|
+
};
|
|
17
|
+
const ORDERED_LEVELS = [
|
|
18
|
+
'none', 'soft', 'medium', 'hard', 'critical',
|
|
19
|
+
];
|
|
20
|
+
// ============================================================================
|
|
21
|
+
// TokenBudgetTracker
|
|
22
|
+
// ============================================================================
|
|
23
|
+
export class TokenBudgetTracker {
|
|
24
|
+
static instances = new Map();
|
|
25
|
+
static defaultInstance = null;
|
|
26
|
+
totalBudget;
|
|
27
|
+
consumed;
|
|
28
|
+
bySource;
|
|
29
|
+
crossings;
|
|
30
|
+
lastLevel;
|
|
31
|
+
constructor(totalBudget) {
|
|
32
|
+
this.totalBudget = totalBudget;
|
|
33
|
+
this.consumed = 0;
|
|
34
|
+
this.bySource = this.createEmptySourceMap();
|
|
35
|
+
this.crossings = [];
|
|
36
|
+
this.lastLevel = 'none';
|
|
37
|
+
}
|
|
38
|
+
static getInstance(projectPath, totalBudget = TOKENS.DEFAULT_BUDGET) {
|
|
39
|
+
if (projectPath) {
|
|
40
|
+
const existing = TokenBudgetTracker.instances.get(projectPath);
|
|
41
|
+
if (existing)
|
|
42
|
+
return existing;
|
|
43
|
+
const inst = new TokenBudgetTracker(totalBudget);
|
|
44
|
+
TokenBudgetTracker.instances.set(projectPath, inst);
|
|
45
|
+
return inst;
|
|
46
|
+
}
|
|
47
|
+
if (!TokenBudgetTracker.defaultInstance) {
|
|
48
|
+
TokenBudgetTracker.defaultInstance = new TokenBudgetTracker(totalBudget);
|
|
49
|
+
}
|
|
50
|
+
return TokenBudgetTracker.defaultInstance;
|
|
51
|
+
}
|
|
52
|
+
trackConsumption(source, tokens) {
|
|
53
|
+
this.consumed += tokens;
|
|
54
|
+
this.bySource[source] += tokens;
|
|
55
|
+
const newLevel = this.getCurrentLevel();
|
|
56
|
+
if (this.levelIndex(newLevel) > this.levelIndex(this.lastLevel)) {
|
|
57
|
+
this.crossings.push({
|
|
58
|
+
level: newLevel,
|
|
59
|
+
crossedAt: this.consumed,
|
|
60
|
+
timestamp: new Date().toISOString(),
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
this.lastLevel = newLevel;
|
|
64
|
+
return newLevel;
|
|
65
|
+
}
|
|
66
|
+
syncToPercent(percent) {
|
|
67
|
+
this.consumed = Math.round(this.totalBudget * (percent / 100));
|
|
68
|
+
this.lastLevel = this.getCurrentLevel();
|
|
69
|
+
}
|
|
70
|
+
getRemainingBudget() {
|
|
71
|
+
return Math.max(0, this.totalBudget - this.consumed);
|
|
72
|
+
}
|
|
73
|
+
getUsagePercent() {
|
|
74
|
+
if (this.totalBudget === 0)
|
|
75
|
+
return 100;
|
|
76
|
+
return Math.min(100, (this.consumed / this.totalBudget) * 100);
|
|
77
|
+
}
|
|
78
|
+
estimateAfterAction(action, estimatedTokens) {
|
|
79
|
+
const projectedConsumed = this.consumed + estimatedTokens;
|
|
80
|
+
const projectedPercent = Math.min(100, (projectedConsumed / this.totalBudget) * 100);
|
|
81
|
+
const projectedLevel = this.levelForPercent(projectedPercent);
|
|
82
|
+
const wouldCross = this.levelIndex(projectedLevel) > this.levelIndex(this.lastLevel);
|
|
83
|
+
return {
|
|
84
|
+
action,
|
|
85
|
+
estimatedTokens,
|
|
86
|
+
wouldCrossThreshold: wouldCross,
|
|
87
|
+
resultingLevel: projectedLevel,
|
|
88
|
+
resultingPercent: Math.round(projectedPercent * 100) / 100,
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
shouldThrottle() {
|
|
92
|
+
return this.getUsagePercent() >= THRESHOLD_PERCENTS.medium;
|
|
93
|
+
}
|
|
94
|
+
getCurrentLevel() {
|
|
95
|
+
return this.levelForPercent(this.getUsagePercent());
|
|
96
|
+
}
|
|
97
|
+
getSnapshot() {
|
|
98
|
+
return {
|
|
99
|
+
totalBudget: this.totalBudget,
|
|
100
|
+
consumed: this.consumed,
|
|
101
|
+
remaining: this.getRemainingBudget(),
|
|
102
|
+
usagePercent: Math.round(this.getUsagePercent() * 100) / 100,
|
|
103
|
+
level: this.getCurrentLevel(),
|
|
104
|
+
bySource: { ...this.bySource },
|
|
105
|
+
crossings: [...this.crossings],
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
static estimateTokens(text) {
|
|
109
|
+
return Math.ceil(text.length * TOKENS.PER_CHAR_ESTIMATE);
|
|
110
|
+
}
|
|
111
|
+
reset() {
|
|
112
|
+
this.consumed = 0;
|
|
113
|
+
this.bySource = this.createEmptySourceMap();
|
|
114
|
+
this.crossings = [];
|
|
115
|
+
this.lastLevel = 'none';
|
|
116
|
+
}
|
|
117
|
+
static resetInstance() {
|
|
118
|
+
TokenBudgetTracker.instances.clear();
|
|
119
|
+
TokenBudgetTracker.defaultInstance = null;
|
|
120
|
+
}
|
|
121
|
+
// ========================================================================
|
|
122
|
+
// Private helpers
|
|
123
|
+
// ========================================================================
|
|
124
|
+
createEmptySourceMap() {
|
|
125
|
+
return {
|
|
126
|
+
session_rag: 0,
|
|
127
|
+
memory: 0,
|
|
128
|
+
agent: 0,
|
|
129
|
+
compression: 0,
|
|
130
|
+
tool_call: 0,
|
|
131
|
+
user_prompt: 0,
|
|
132
|
+
system: 0,
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
levelForPercent(percent) {
|
|
136
|
+
if (percent >= THRESHOLD_PERCENTS.critical)
|
|
137
|
+
return 'critical';
|
|
138
|
+
if (percent >= THRESHOLD_PERCENTS.hard)
|
|
139
|
+
return 'hard';
|
|
140
|
+
if (percent >= THRESHOLD_PERCENTS.medium)
|
|
141
|
+
return 'medium';
|
|
142
|
+
if (percent >= THRESHOLD_PERCENTS.soft)
|
|
143
|
+
return 'soft';
|
|
144
|
+
return 'none';
|
|
145
|
+
}
|
|
146
|
+
levelIndex(level) {
|
|
147
|
+
return ORDERED_LEVELS.indexOf(level);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
//# sourceMappingURL=TokenBudgetTracker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TokenBudgetTracker.js","sourceRoot":"","sources":["../../../src/infra/lib/TokenBudgetTracker.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAyCxC,+EAA+E;AAC/E,YAAY;AACZ,+EAA+E;AAE/E,MAAM,kBAAkB,GAAmC;IACzD,IAAI,EAAE,CAAC;IACP,IAAI,EAAE,EAAE;IACR,MAAM,EAAE,EAAE;IACV,IAAI,EAAE,EAAE;IACR,QAAQ,EAAE,EAAE;CACb,CAAC;AAEF,MAAM,cAAc,GAAqB;IACvC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU;CAC7C,CAAC;AAEF,+EAA+E;AAC/E,qBAAqB;AACrB,+EAA+E;AAE/E,MAAM,OAAO,kBAAkB;IACrB,MAAM,CAAC,SAAS,GAAoC,IAAI,GAAG,EAAE,CAAC;IAC9D,MAAM,CAAC,eAAe,GAA8B,IAAI,CAAC;IAEzD,WAAW,CAAS;IACpB,QAAQ,CAAS;IACjB,QAAQ,CAA8B;IACtC,SAAS,CAAsB;IAC/B,SAAS,CAAiB;IAElC,YAAoB,WAAmB;QACrC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;QAClB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5C,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;QACpB,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC;IAC1B,CAAC;IAED,MAAM,CAAC,WAAW,CAChB,WAAoB,EACpB,cAAsB,MAAM,CAAC,cAAc;QAE3C,IAAI,WAAW,EAAE,CAAC;YAChB,MAAM,QAAQ,GAAG,kBAAkB,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YAC/D,IAAI,QAAQ;gBAAE,OAAO,QAAQ,CAAC;YAC9B,MAAM,IAAI,GAAG,IAAI,kBAAkB,CAAC,WAAW,CAAC,CAAC;YACjD,kBAAkB,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;YACpD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,CAAC,kBAAkB,CAAC,eAAe,EAAE,CAAC;YACxC,kBAAkB,CAAC,eAAe,GAAG,IAAI,kBAAkB,CAAC,WAAW,CAAC,CAAC;QAC3E,CAAC;QACD,OAAO,kBAAkB,CAAC,eAAe,CAAC;IAC5C,CAAC;IAED,gBAAgB,CAAC,MAAmB,EAAE,MAAc;QAClD,IAAI,CAAC,QAAQ,IAAI,MAAM,CAAC;QACxB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC;QAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QACxC,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YAChE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;gBAClB,KAAK,EAAE,QAAQ;gBACf,SAAS,EAAE,IAAI,CAAC,QAAQ;gBACxB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACpC,CAAC,CAAC;QACL,CAAC;QACD,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,aAAa,CAAC,OAAe;QAC3B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC;QAC/D,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;IAC1C,CAAC;IAED,kBAAkB;QAChB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;IACvD,CAAC;IAED,eAAe;QACb,IAAI,IAAI,CAAC,WAAW,KAAK,CAAC;YAAE,OAAO,GAAG,CAAC;QACvC,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,GAAG,CAAC,CAAC;IACjE,CAAC;IAED,mBAAmB,CACjB,MAAc,EACd,eAAuB;QAEvB,MAAM,iBAAiB,GAAG,IAAI,CAAC,QAAQ,GAAG,eAAe,CAAC;QAC1D,MAAM,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAC/B,GAAG,EACH,CAAC,iBAAiB,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,GAAG,CAC7C,CAAC;QACF,MAAM,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,CAAC;QAC9D,MAAM,UAAU,GACd,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAEpE,OAAO;YACL,MAAM;YACN,eAAe;YACf,mBAAmB,EAAE,UAAU;YAC/B,cAAc,EAAE,cAAc;YAC9B,gBAAgB,EAAE,IAAI,CAAC,KAAK,CAAC,gBAAgB,GAAG,GAAG,CAAC,GAAG,GAAG;SAC3D,CAAC;IACJ,CAAC;IAED,cAAc;QACZ,OAAO,IAAI,CAAC,eAAe,EAAE,IAAI,kBAAkB,CAAC,MAAM,CAAC;IAC7D,CAAC;IAED,eAAe;QACb,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,WAAW;QACT,OAAO;YACL,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,SAAS,EAAE,IAAI,CAAC,kBAAkB,EAAE;YACpC,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,EAAE,GAAG,GAAG,CAAC,GAAG,GAAG;YAC5D,KAAK,EAAE,IAAI,CAAC,eAAe,EAAE;YAC7B,QAAQ,EAAE,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE;YAC9B,SAAS,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC;SAC/B,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,cAAc,CAAC,IAAY;QAChC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAC3D,CAAC;IAED,KAAK;QACH,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;QAClB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5C,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;QACpB,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC;IAC1B,CAAC;IAED,MAAM,CAAC,aAAa;QAClB,kBAAkB,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QACrC,kBAAkB,CAAC,eAAe,GAAG,IAAI,CAAC;IAC5C,CAAC;IAED,2EAA2E;IAC3E,kBAAkB;IAClB,2EAA2E;IAEnE,oBAAoB;QAC1B,OAAO;YACL,WAAW,EAAE,CAAC;YACd,MAAM,EAAE,CAAC;YACT,KAAK,EAAE,CAAC;YACR,WAAW,EAAE,CAAC;YACd,SAAS,EAAE,CAAC;YACZ,WAAW,EAAE,CAAC;YACd,MAAM,EAAE,CAAC;SACV,CAAC;IACJ,CAAC;IAEO,eAAe,CAAC,OAAe;QACrC,IAAI,OAAO,IAAI,kBAAkB,CAAC,QAAQ;YAAE,OAAO,UAAU,CAAC;QAC9D,IAAI,OAAO,IAAI,kBAAkB,CAAC,IAAI;YAAE,OAAO,MAAM,CAAC;QACtD,IAAI,OAAO,IAAI,kBAAkB,CAAC,MAAM;YAAE,OAAO,QAAQ,CAAC;QAC1D,IAAI,OAAO,IAAI,kBAAkB,CAAC,IAAI;YAAE,OAAO,MAAM,CAAC;QACtD,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,UAAU,CAAC,KAAqB;QACtC,OAAO,cAAc,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACvC,CAAC"}
|