codehere 0.5.0-alpha.0 → 0.5.1-alpha
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 +1 -1
- package/README.md +106 -30
- package/dist/application/agents/execution-agent.js +2 -2
- package/dist/application/agents/multi-agent-orchestrator.d.ts +1 -0
- package/dist/application/agents/multi-agent-orchestrator.d.ts.map +1 -1
- package/dist/application/agents/multi-agent-orchestrator.js +10 -3
- package/dist/application/agents/multi-agent-orchestrator.js.map +1 -1
- package/dist/application/agents/planning-agent.d.ts.map +1 -1
- package/dist/application/agents/planning-agent.js +15 -11
- package/dist/application/agents/planning-agent.js.map +1 -1
- package/dist/application/reasoning/multi-model-planning-strategy.d.ts +21 -0
- package/dist/application/reasoning/multi-model-planning-strategy.d.ts.map +1 -0
- package/dist/application/reasoning/multi-model-planning-strategy.js +158 -0
- package/dist/application/reasoning/multi-model-planning-strategy.js.map +1 -0
- package/dist/application/reasoning/reasoning-config.d.ts +15 -0
- package/dist/application/reasoning/reasoning-config.d.ts.map +1 -0
- package/dist/application/reasoning/reasoning-config.js +50 -0
- package/dist/application/reasoning/reasoning-config.js.map +1 -0
- package/dist/application/reasoning/reasoning-orchestrator.d.ts +18 -0
- package/dist/application/reasoning/reasoning-orchestrator.d.ts.map +1 -0
- package/dist/application/reasoning/reasoning-orchestrator.js +170 -0
- package/dist/application/reasoning/reasoning-orchestrator.js.map +1 -0
- package/dist/application/reasoning/reasoning-strategy.interface.d.ts +24 -0
- package/dist/application/reasoning/reasoning-strategy.interface.d.ts.map +1 -0
- package/dist/application/reasoning/reasoning-strategy.interface.js +6 -0
- package/dist/application/reasoning/reasoning-strategy.interface.js.map +1 -0
- package/dist/application/reasoning/role-provider-resolver.d.ts +36 -0
- package/dist/application/reasoning/role-provider-resolver.d.ts.map +1 -0
- package/dist/application/reasoning/role-provider-resolver.js +74 -0
- package/dist/application/reasoning/role-provider-resolver.js.map +1 -0
- package/dist/application/reasoning/simple-planning-strategy.d.ts +22 -0
- package/dist/application/reasoning/simple-planning-strategy.d.ts.map +1 -0
- package/dist/application/reasoning/simple-planning-strategy.js +217 -0
- package/dist/application/reasoning/simple-planning-strategy.js.map +1 -0
- package/dist/application/reasoning/types.d.ts +65 -0
- package/dist/application/reasoning/types.d.ts.map +1 -0
- package/dist/application/reasoning/types.js +6 -0
- package/dist/application/reasoning/types.js.map +1 -0
- package/dist/application/reasoning/validator-strategy.d.ts +56 -0
- package/dist/application/reasoning/validator-strategy.d.ts.map +1 -0
- package/dist/application/reasoning/validator-strategy.js +103 -0
- package/dist/application/reasoning/validator-strategy.js.map +1 -0
- package/dist/application/services/dependency-container.d.ts.map +1 -1
- package/dist/application/services/dependency-container.js +5 -7
- package/dist/application/services/dependency-container.js.map +1 -1
- package/dist/application/services/intelligent-router.d.ts +5 -5
- package/dist/application/services/intelligent-router.d.ts.map +1 -1
- package/dist/application/services/intelligent-router.js +81 -62
- package/dist/application/services/intelligent-router.js.map +1 -1
- package/dist/application/use-cases/planning-use-case.d.ts +14 -1
- package/dist/application/use-cases/planning-use-case.d.ts.map +1 -1
- package/dist/application/use-cases/planning-use-case.js +109 -2
- package/dist/application/use-cases/planning-use-case.js.map +1 -1
- package/dist/chat.d.ts.map +1 -1
- package/dist/chat.js +18 -7
- package/dist/chat.js.map +1 -1
- package/dist/domain/entities/memory.d.ts.map +1 -1
- package/dist/domain/entities/task.d.ts +1 -1
- package/dist/domain/entities/task.js +1 -1
- package/dist/domain/services/query-intent-classifier.d.ts.map +1 -1
- package/dist/domain/services/query-intent-classifier.js +20 -1
- package/dist/domain/services/query-intent-classifier.js.map +1 -1
- package/dist/index.js +111 -14
- package/dist/index.js.map +1 -1
- package/dist/infrastructure/config/config-manager.d.ts +10 -0
- package/dist/infrastructure/config/config-manager.d.ts.map +1 -1
- package/dist/infrastructure/config/config-manager.js +11 -0
- package/dist/infrastructure/config/config-manager.js.map +1 -1
- package/dist/infrastructure/context/conversation-context.d.ts +11 -10
- package/dist/infrastructure/context/conversation-context.d.ts.map +1 -1
- package/dist/infrastructure/context/conversation-context.js +3 -5
- package/dist/infrastructure/context/conversation-context.js.map +1 -1
- package/dist/infrastructure/index.d.ts +0 -1
- package/dist/infrastructure/index.d.ts.map +1 -1
- package/dist/infrastructure/index.js +2 -1
- package/dist/infrastructure/index.js.map +1 -1
- package/dist/infrastructure/protocols/a2a-metadata.js +1 -1
- package/dist/infrastructure/protocols/mcp-oauth.js +1 -1
- package/dist/infrastructure/providers/cohere-provider.d.ts +2 -1
- package/dist/infrastructure/providers/cohere-provider.d.ts.map +1 -1
- package/dist/infrastructure/providers/cohere-provider.js +37 -13
- package/dist/infrastructure/providers/cohere-provider.js.map +1 -1
- package/dist/infrastructure/providers/openrouter-provider.d.ts.map +1 -1
- package/dist/infrastructure/providers/openrouter-provider.js +4 -2
- package/dist/infrastructure/providers/openrouter-provider.js.map +1 -1
- package/dist/infrastructure/security/input-validator.d.ts.map +1 -1
- package/dist/infrastructure/security/input-validator.js +19 -6
- package/dist/infrastructure/security/input-validator.js.map +1 -1
- package/dist/infrastructure/security/network-guard.d.ts +8 -0
- package/dist/infrastructure/security/network-guard.d.ts.map +1 -0
- package/dist/infrastructure/security/network-guard.js +70 -0
- package/dist/infrastructure/security/network-guard.js.map +1 -0
- package/dist/infrastructure/security/offline.d.ts +16 -0
- package/dist/infrastructure/security/offline.d.ts.map +1 -0
- package/dist/infrastructure/security/offline.js +24 -0
- package/dist/infrastructure/security/offline.js.map +1 -0
- package/dist/infrastructure/storage/memory-stream-service.d.ts.map +1 -1
- package/dist/infrastructure/storage/memory-stream-service.js +88 -58
- package/dist/infrastructure/storage/memory-stream-service.js.map +1 -1
- package/dist/infrastructure/storage/sqljs-init.d.ts +8 -0
- package/dist/infrastructure/storage/sqljs-init.d.ts.map +1 -0
- package/dist/infrastructure/storage/sqljs-init.js +23 -0
- package/dist/infrastructure/storage/sqljs-init.js.map +1 -0
- package/dist/infrastructure/storage/task-helpers.d.ts +1 -1
- package/dist/infrastructure/storage/task-helpers.js +1 -1
- package/dist/infrastructure/storage/task-repository.d.ts +2 -1
- package/dist/infrastructure/storage/task-repository.d.ts.map +1 -1
- package/dist/infrastructure/storage/task-repository.js +14 -3
- package/dist/infrastructure/storage/task-repository.js.map +1 -1
- package/dist/infrastructure/telemetry/telemetry-service.d.ts +74 -0
- package/dist/infrastructure/telemetry/telemetry-service.d.ts.map +1 -0
- package/dist/infrastructure/telemetry/telemetry-service.js +167 -0
- package/dist/infrastructure/telemetry/telemetry-service.js.map +1 -0
- package/dist/infrastructure/ux/meta-query.d.ts +9 -0
- package/dist/infrastructure/ux/meta-query.d.ts.map +1 -0
- package/dist/infrastructure/ux/meta-query.js +63 -0
- package/dist/infrastructure/ux/meta-query.js.map +1 -0
- package/dist/infrastructure/ux/progress-indicator.d.ts +10 -49
- package/dist/infrastructure/ux/progress-indicator.d.ts.map +1 -1
- package/dist/infrastructure/ux/progress-indicator.js +9 -112
- package/dist/infrastructure/ux/progress-indicator.js.map +1 -1
- package/dist/infrastructure/ux/repo-fingerprint.d.ts +10 -0
- package/dist/infrastructure/ux/repo-fingerprint.d.ts.map +1 -0
- package/dist/infrastructure/ux/repo-fingerprint.js +55 -0
- package/dist/infrastructure/ux/repo-fingerprint.js.map +1 -0
- package/dist/presentation/cli/commands/ask-command.d.ts +2 -0
- package/dist/presentation/cli/commands/ask-command.d.ts.map +1 -1
- package/dist/presentation/cli/commands/ask-command.js +140 -31
- package/dist/presentation/cli/commands/ask-command.js.map +1 -1
- package/dist/presentation/cli/commands/config-command.d.ts.map +1 -1
- package/dist/presentation/cli/commands/config-command.js +14 -2
- package/dist/presentation/cli/commands/config-command.js.map +1 -1
- package/dist/presentation/cli/commands/decision-command.js +23 -6
- package/dist/presentation/cli/commands/decision-command.js.map +1 -1
- package/dist/presentation/cli/commands/fix-command.d.ts.map +1 -1
- package/dist/presentation/cli/commands/fix-command.js +23 -4
- package/dist/presentation/cli/commands/fix-command.js.map +1 -1
- package/dist/presentation/cli/commands/help-command.d.ts.map +1 -1
- package/dist/presentation/cli/commands/help-command.js +21 -1
- package/dist/presentation/cli/commands/help-command.js.map +1 -1
- package/dist/presentation/cli/commands/memory-command.d.ts +17 -0
- package/dist/presentation/cli/commands/memory-command.d.ts.map +1 -0
- package/dist/presentation/cli/commands/memory-command.js +252 -0
- package/dist/presentation/cli/commands/memory-command.js.map +1 -0
- package/dist/presentation/cli/commands/orchestrate-command.d.ts +1 -0
- package/dist/presentation/cli/commands/orchestrate-command.d.ts.map +1 -1
- package/dist/presentation/cli/commands/orchestrate-command.js +126 -19
- package/dist/presentation/cli/commands/orchestrate-command.js.map +1 -1
- package/dist/presentation/cli/commands/plan-command.d.ts +1 -0
- package/dist/presentation/cli/commands/plan-command.d.ts.map +1 -1
- package/dist/presentation/cli/commands/plan-command.js +133 -27
- package/dist/presentation/cli/commands/plan-command.js.map +1 -1
- package/dist/presentation/cli/commands/react-command.d.ts.map +1 -1
- package/dist/presentation/cli/commands/react-command.js +5 -1
- package/dist/presentation/cli/commands/react-command.js.map +1 -1
- package/dist/presentation/cli/commands/review-command.d.ts.map +1 -1
- package/dist/presentation/cli/commands/review-command.js +21 -2
- package/dist/presentation/cli/commands/review-command.js.map +1 -1
- package/dist/presentation/cli/commands/smart-command.d.ts.map +1 -1
- package/dist/presentation/cli/commands/smart-command.js +72 -5
- package/dist/presentation/cli/commands/smart-command.js.map +1 -1
- package/dist/presentation/cli/commands/status-command.d.ts.map +1 -1
- package/dist/presentation/cli/commands/status-command.js +5 -1
- package/dist/presentation/cli/commands/status-command.js.map +1 -1
- package/dist/presentation/cli/error-display.d.ts.map +1 -1
- package/dist/presentation/cli/error-display.js +75 -17
- package/dist/presentation/cli/error-display.js.map +1 -1
- package/dist/search.d.ts.map +1 -1
- package/dist/search.js +18 -5
- package/dist/search.js.map +1 -1
- package/dist/session.js +44 -2
- package/dist/session.js.map +1 -1
- package/dist/tools/bash.d 2.ts +53 -0
- package/dist/tools/bash.d.ts.map +1 -1
- package/dist/tools/bash.js +3 -0
- package/dist/tools/bash.js 2.map +1 -0
- package/dist/tools/bash.js.map +1 -1
- package/dist/tools/edit 2.js +235 -0
- package/dist/tools/edit.d.ts 2.map +1 -0
- package/dist/tools/git-tool.js +7 -7
- package/dist/tools/git-tool.js.map +1 -1
- package/dist/ui.d.ts +5 -0
- package/dist/ui.d.ts.map +1 -1
- package/dist/ui.js +19 -0
- package/dist/ui.js.map +1 -1
- package/package.json +11 -5
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Infrastructure: Telemetry Service
|
|
3
|
+
* Privacy-first, opt-in telemetry for understanding usage patterns
|
|
4
|
+
*
|
|
5
|
+
* Principles:
|
|
6
|
+
* - Opt-in only (CODEHERE_TELEMETRY_ENABLED=true)
|
|
7
|
+
* - No code/content transmitted
|
|
8
|
+
* - Anonymized data only
|
|
9
|
+
* - Local-first (stores locally, syncs if enabled)
|
|
10
|
+
*
|
|
11
|
+
* Clean Architecture: Infrastructure Layer
|
|
12
|
+
*/
|
|
13
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync, appendFileSync } from 'fs';
|
|
14
|
+
import { join, dirname } from 'path';
|
|
15
|
+
import { fileURLToPath } from 'url';
|
|
16
|
+
import { randomUUID } from 'crypto';
|
|
17
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
18
|
+
const __dirname = dirname(__filename);
|
|
19
|
+
export class TelemetryService {
|
|
20
|
+
telemetryDir;
|
|
21
|
+
eventsFile;
|
|
22
|
+
configFile;
|
|
23
|
+
enabled = false;
|
|
24
|
+
anonymousId = '';
|
|
25
|
+
sessionId = '';
|
|
26
|
+
constructor() {
|
|
27
|
+
// Find codebase root
|
|
28
|
+
const codebaseRoot = this.findCodebaseRoot();
|
|
29
|
+
this.telemetryDir = join(codebaseRoot, '.codehere', 'telemetry');
|
|
30
|
+
this.eventsFile = join(this.telemetryDir, 'events.jsonl');
|
|
31
|
+
this.configFile = join(this.telemetryDir, 'config.json');
|
|
32
|
+
this.sessionId = randomUUID();
|
|
33
|
+
this.loadConfig();
|
|
34
|
+
}
|
|
35
|
+
findCodebaseRoot() {
|
|
36
|
+
let current = process.cwd();
|
|
37
|
+
while (current !== '/') {
|
|
38
|
+
if (existsSync(join(current, '.codehere'))) {
|
|
39
|
+
return current;
|
|
40
|
+
}
|
|
41
|
+
current = join(current, '..');
|
|
42
|
+
}
|
|
43
|
+
return process.cwd();
|
|
44
|
+
}
|
|
45
|
+
loadConfig() {
|
|
46
|
+
// Check environment variable first
|
|
47
|
+
const envEnabled = process.env.CODEHERE_TELEMETRY_ENABLED === 'true';
|
|
48
|
+
if (existsSync(this.configFile)) {
|
|
49
|
+
try {
|
|
50
|
+
const config = JSON.parse(readFileSync(this.configFile, 'utf-8'));
|
|
51
|
+
this.enabled = config.enabled || envEnabled;
|
|
52
|
+
this.anonymousId = config.anonymousId || this.generateAnonymousId();
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
this.enabled = envEnabled;
|
|
56
|
+
this.anonymousId = this.generateAnonymousId();
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
this.enabled = envEnabled;
|
|
61
|
+
this.anonymousId = this.generateAnonymousId();
|
|
62
|
+
}
|
|
63
|
+
// Save config
|
|
64
|
+
this.saveConfig();
|
|
65
|
+
}
|
|
66
|
+
generateAnonymousId() {
|
|
67
|
+
// Generate a persistent anonymous ID (not tied to user identity)
|
|
68
|
+
return randomUUID();
|
|
69
|
+
}
|
|
70
|
+
saveConfig() {
|
|
71
|
+
if (!existsSync(this.telemetryDir)) {
|
|
72
|
+
mkdirSync(this.telemetryDir, { recursive: true });
|
|
73
|
+
}
|
|
74
|
+
writeFileSync(this.configFile, JSON.stringify({
|
|
75
|
+
enabled: this.enabled,
|
|
76
|
+
anonymousId: this.anonymousId,
|
|
77
|
+
enabledAt: this.enabled ? Date.now() : null,
|
|
78
|
+
}, null, 2));
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Check if telemetry is enabled
|
|
82
|
+
*/
|
|
83
|
+
isEnabled() {
|
|
84
|
+
return this.enabled;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Enable telemetry (opt-in)
|
|
88
|
+
*/
|
|
89
|
+
enable() {
|
|
90
|
+
this.enabled = true;
|
|
91
|
+
this.saveConfig();
|
|
92
|
+
this.track('install', {
|
|
93
|
+
version: process.env.npm_package_version || 'unknown',
|
|
94
|
+
os: process.platform,
|
|
95
|
+
nodeVersion: process.version,
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Disable telemetry
|
|
100
|
+
*/
|
|
101
|
+
disable() {
|
|
102
|
+
this.enabled = false;
|
|
103
|
+
this.saveConfig();
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Track an event
|
|
107
|
+
*/
|
|
108
|
+
track(eventType, data = {}) {
|
|
109
|
+
if (!this.enabled) {
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
const event = {
|
|
113
|
+
id: randomUUID(),
|
|
114
|
+
timestamp: Date.now(),
|
|
115
|
+
eventType,
|
|
116
|
+
data: {
|
|
117
|
+
...data,
|
|
118
|
+
version: data.version || process.env.npm_package_version || 'unknown',
|
|
119
|
+
os: data.os || process.platform,
|
|
120
|
+
nodeVersion: data.nodeVersion || process.version,
|
|
121
|
+
},
|
|
122
|
+
sessionId: this.sessionId,
|
|
123
|
+
anonymousId: this.anonymousId,
|
|
124
|
+
};
|
|
125
|
+
// Write to local file
|
|
126
|
+
if (!existsSync(this.telemetryDir)) {
|
|
127
|
+
mkdirSync(this.telemetryDir, { recursive: true });
|
|
128
|
+
}
|
|
129
|
+
appendFileSync(this.eventsFile, JSON.stringify(event) + '\n');
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Track command usage
|
|
133
|
+
*/
|
|
134
|
+
trackCommand(command) {
|
|
135
|
+
this.track('command', { command });
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Track error
|
|
139
|
+
*/
|
|
140
|
+
trackError(errorType) {
|
|
141
|
+
this.track('error', { errorType });
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Track feature usage
|
|
145
|
+
*/
|
|
146
|
+
trackFeature(feature) {
|
|
147
|
+
this.track('feature_use', { feature });
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Get telemetry status message
|
|
151
|
+
*/
|
|
152
|
+
getStatusMessage() {
|
|
153
|
+
if (this.enabled) {
|
|
154
|
+
return 'Telemetry: Enabled (opt-in)';
|
|
155
|
+
}
|
|
156
|
+
return 'Telemetry: Disabled (set CODEHERE_TELEMETRY_ENABLED=true to enable)';
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
// Singleton instance
|
|
160
|
+
let telemetryService = null;
|
|
161
|
+
export function getTelemetryService() {
|
|
162
|
+
if (!telemetryService) {
|
|
163
|
+
telemetryService = new TelemetryService();
|
|
164
|
+
}
|
|
165
|
+
return telemetryService;
|
|
166
|
+
}
|
|
167
|
+
//# sourceMappingURL=telemetry-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telemetry-service.js","sourceRoot":"","sources":["../../../src/infrastructure/telemetry/telemetry-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export type MetaQueryResult = {
|
|
2
|
+
handled: false;
|
|
3
|
+
} | {
|
|
4
|
+
handled: true;
|
|
5
|
+
kind: 'capabilities' | 'project' | 'goto';
|
|
6
|
+
message: string;
|
|
7
|
+
};
|
|
8
|
+
export declare function handleMetaQuery(query: string, cwd: string): MetaQueryResult;
|
|
9
|
+
//# sourceMappingURL=meta-query.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"meta-query.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/ux/meta-query.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,eAAe,GACvB;IAAE,OAAO,EAAE,KAAK,CAAA;CAAE,GAClB;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,cAAc,GAAG,SAAS,GAAG,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAElF,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,eAAe,CAyD3E"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* UX: Meta-query handler (deterministic, no LLM)
|
|
3
|
+
* Used to keep UX professional for "what can I do" / "what project is this" / "go to <path>".
|
|
4
|
+
*/
|
|
5
|
+
import { fingerprintRepo } from './repo-fingerprint.js';
|
|
6
|
+
import { isOfflineModeEnabled } from '../security/offline.js';
|
|
7
|
+
export function handleMetaQuery(query, cwd) {
|
|
8
|
+
const trimmed = query.trim();
|
|
9
|
+
const lower = trimmed.toLowerCase();
|
|
10
|
+
const normalized = lower.replace(/[?!.\u2026]+$/g, '').trim();
|
|
11
|
+
if (normalized === 'what can i do' || normalized === 'what i can do' || normalized === 'capabilities') {
|
|
12
|
+
const offlineNote = isOfflineModeEnabled()
|
|
13
|
+
? 'Offline: ON (no outbound network).'
|
|
14
|
+
: 'Offline: use `--offline` or CODEHERE_OFFLINE=1 to block outbound network (localhost allowed).';
|
|
15
|
+
return {
|
|
16
|
+
handled: true,
|
|
17
|
+
kind: 'capabilities',
|
|
18
|
+
message: [
|
|
19
|
+
'Commands you can run:',
|
|
20
|
+
'- codehere ask "..." --json',
|
|
21
|
+
'- codehere explain <file>',
|
|
22
|
+
'- codehere plan "..." --json',
|
|
23
|
+
'- codehere fix <file> "..." --review',
|
|
24
|
+
'- codehere orchestrate "..." --json',
|
|
25
|
+
'- codehere memory --list --json',
|
|
26
|
+
'- codehere trace export <runId> --json',
|
|
27
|
+
'',
|
|
28
|
+
'Tips:',
|
|
29
|
+
`- Current directory: ${cwd}`,
|
|
30
|
+
'- To work on another repo: `cd /path/to/repo` in your shell, then re-run.',
|
|
31
|
+
`- ${offlineNote}`,
|
|
32
|
+
].join('\n'),
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
if (normalized === 'what project is this' || normalized === 'what is this project' || normalized === 'project') {
|
|
36
|
+
const fp = fingerprintRepo(cwd);
|
|
37
|
+
const lines = [
|
|
38
|
+
'Project fingerprint:',
|
|
39
|
+
`- directory: ${fp.cwd}`,
|
|
40
|
+
`- type: ${fp.kind}`,
|
|
41
|
+
];
|
|
42
|
+
if (fp.name)
|
|
43
|
+
lines.push(`- name: ${fp.name}`);
|
|
44
|
+
if (fp.description)
|
|
45
|
+
lines.push(`- description: ${fp.description}`);
|
|
46
|
+
if (fp.packageManager)
|
|
47
|
+
lines.push(`- package manager: ${fp.packageManager}`);
|
|
48
|
+
if (fp.scripts && fp.scripts.length > 0)
|
|
49
|
+
lines.push(`- scripts: ${fp.scripts.slice(0, 12).join(', ')}${fp.scripts.length > 12 ? ', ...' : ''}`);
|
|
50
|
+
return { handled: true, kind: 'project', message: lines.join('\n') };
|
|
51
|
+
}
|
|
52
|
+
const goToMatch = trimmed.match(/\b(go to|switch to|cd to)\s+(\S+)/i);
|
|
53
|
+
if (goToMatch) {
|
|
54
|
+
const target = goToMatch[2];
|
|
55
|
+
return {
|
|
56
|
+
handled: true,
|
|
57
|
+
kind: 'goto',
|
|
58
|
+
message: `I can’t change your shell’s working directory. Run this in your terminal:\n\ncd ${target}\n\nThen run:\ncodehere ask \"what project is this\" --json`,
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
return { handled: false };
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=meta-query.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"meta-query.js","sourceRoot":"","sources":["../../../src/infrastructure/ux/meta-query.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAM9D,MAAM,UAAU,eAAe,CAAC,KAAa,EAAE,GAAW;IACxD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IACpC,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAE9D,IAAI,UAAU,KAAK,eAAe,IAAI,UAAU,KAAK,eAAe,IAAI,UAAU,KAAK,cAAc,EAAE,CAAC;QACtG,MAAM,WAAW,GAAG,oBAAoB,EAAE;YACxC,CAAC,CAAC,oCAAoC;YACtC,CAAC,CAAC,+FAA+F,CAAC;QAEpG,OAAO;YACL,OAAO,EAAE,IAAI;YACb,IAAI,EAAE,cAAc;YACpB,OAAO,EACL;gBACE,uBAAuB;gBACvB,6BAA6B;gBAC7B,2BAA2B;gBAC3B,8BAA8B;gBAC9B,sCAAsC;gBACtC,qCAAqC;gBACrC,iCAAiC;gBACjC,wCAAwC;gBACxC,EAAE;gBACF,OAAO;gBACP,wBAAwB,GAAG,EAAE;gBAC7B,2EAA2E;gBAC3E,KAAK,WAAW,EAAE;aACnB,CAAC,IAAI,CAAC,IAAI,CAAC;SACf,CAAC;IACJ,CAAC;IAED,IAAI,UAAU,KAAK,sBAAsB,IAAI,UAAU,KAAK,sBAAsB,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC/G,MAAM,EAAE,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;QAChC,MAAM,KAAK,GAAa;YACtB,sBAAsB;YACtB,gBAAgB,EAAE,CAAC,GAAG,EAAE;YACxB,WAAW,EAAE,CAAC,IAAI,EAAE;SACrB,CAAC;QACF,IAAI,EAAE,CAAC,IAAI;YAAE,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;QAC9C,IAAI,EAAE,CAAC,WAAW;YAAE,KAAK,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;QACnE,IAAI,EAAE,CAAC,cAAc;YAAE,KAAK,CAAC,IAAI,CAAC,sBAAsB,EAAE,CAAC,cAAc,EAAE,CAAC,CAAC;QAC7E,IAAI,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAChJ,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;IACvE,CAAC;IAED,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;IACtE,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;QAC5B,OAAO;YACL,OAAO,EAAE,IAAI;YACb,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,mFAAmF,MAAM,6DAA6D;SAChK,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AAC5B,CAAC"}
|
|
@@ -1,53 +1,14 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
*/
|
|
7
|
-
export interface ProgressOptions {
|
|
8
|
-
total?: number;
|
|
9
|
-
message?: string;
|
|
10
|
-
showPercentage?: boolean;
|
|
11
|
-
showCount?: boolean;
|
|
12
|
-
}
|
|
13
|
-
export declare class ProgressIndicator {
|
|
14
|
-
private spinner;
|
|
15
|
-
private progressBar;
|
|
16
|
-
private operationStartTime;
|
|
17
|
-
private currentValue;
|
|
18
|
-
private total;
|
|
19
|
-
private message;
|
|
20
|
-
/**
|
|
21
|
-
* Start progress indicator
|
|
22
|
-
*/
|
|
23
|
-
start(options?: ProgressOptions): void;
|
|
24
|
-
/**
|
|
25
|
-
* Update progress
|
|
26
|
-
*/
|
|
27
|
-
update(value: number, message?: string): void;
|
|
28
|
-
/**
|
|
29
|
-
* Increment progress
|
|
30
|
-
*/
|
|
31
|
-
increment(delta?: number, message?: string): void;
|
|
32
|
-
/**
|
|
33
|
-
* Stop progress indicator with smooth transition
|
|
34
|
-
*/
|
|
35
|
-
stop(success?: boolean, finalMessage?: string): void;
|
|
36
|
-
/**
|
|
37
|
-
* Get elapsed time
|
|
38
|
-
*/
|
|
39
|
-
getElapsedTime(): number;
|
|
1
|
+
export interface ProgressHandle {
|
|
2
|
+
start: (opts?: {
|
|
3
|
+
message?: string;
|
|
4
|
+
}) => void;
|
|
5
|
+
stop: (success?: boolean, finalMessage?: string) => void;
|
|
40
6
|
}
|
|
41
7
|
/**
|
|
42
|
-
*
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
* Create progress indicator for plan generation
|
|
47
|
-
*/
|
|
48
|
-
export declare function createPlanGenerationProgress(): ProgressIndicator;
|
|
49
|
-
/**
|
|
50
|
-
* Create progress indicator for memory synthesis
|
|
8
|
+
* Lightweight progress indicator for embedding search.
|
|
9
|
+
*
|
|
10
|
+
* This is intentionally a **no-op** implementation to avoid adding dependencies
|
|
11
|
+
* or noisy console output in non-interactive/test environments.
|
|
51
12
|
*/
|
|
52
|
-
export declare function
|
|
13
|
+
export declare function createEmbeddingSearchProgress(_estimatedTotalChunks: number): ProgressHandle;
|
|
53
14
|
//# sourceMappingURL=progress-indicator.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"progress-indicator.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/ux/progress-indicator.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"progress-indicator.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/ux/progress-indicator.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IAC7C,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CAC1D;AAED;;;;;GAKG;AACH,wBAAgB,6BAA6B,CAAC,qBAAqB,EAAE,MAAM,GAAG,cAAc,CAK3F"}
|
|
@@ -1,116 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
* Provides progress indicators for long-running operations
|
|
2
|
+
* Lightweight progress indicator for embedding search.
|
|
4
3
|
*
|
|
5
|
-
*
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
export
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
total = 0;
|
|
14
|
-
message = '';
|
|
15
|
-
/**
|
|
16
|
-
* Start progress indicator
|
|
17
|
-
*/
|
|
18
|
-
start(options = {}) {
|
|
19
|
-
this.operationStartTime = Date.now();
|
|
20
|
-
this.currentValue = 0;
|
|
21
|
-
this.total = options.total || 0;
|
|
22
|
-
this.message = options.message || 'Processing...';
|
|
23
|
-
if (this.total > 0) {
|
|
24
|
-
// Progress bar mode
|
|
25
|
-
this.update(0, this.message);
|
|
26
|
-
}
|
|
27
|
-
else {
|
|
28
|
-
// Spinner mode
|
|
29
|
-
this.spinner = createSpinner(this.message);
|
|
30
|
-
this.spinner.start();
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
/**
|
|
34
|
-
* Update progress
|
|
35
|
-
*/
|
|
36
|
-
update(value, message) {
|
|
37
|
-
this.currentValue = value;
|
|
38
|
-
if (message) {
|
|
39
|
-
this.message = message;
|
|
40
|
-
}
|
|
41
|
-
if (this.total > 0) {
|
|
42
|
-
// Progress bar
|
|
43
|
-
const percentage = Math.min(100, Math.floor((value / this.total) * 100));
|
|
44
|
-
const barLength = 20;
|
|
45
|
-
const filled = Math.floor((percentage / 100) * barLength);
|
|
46
|
-
const bar = '█'.repeat(filled) + '░'.repeat(barLength - filled);
|
|
47
|
-
process.stdout.write(`\r${this.message} [${bar}] ${percentage}% (${value}/${this.total})`);
|
|
48
|
-
}
|
|
49
|
-
else if (this.spinner) {
|
|
50
|
-
// Spinner
|
|
51
|
-
this.spinner.text = this.message;
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
/**
|
|
55
|
-
* Increment progress
|
|
56
|
-
*/
|
|
57
|
-
increment(delta = 1, message) {
|
|
58
|
-
this.update(this.currentValue + delta, message);
|
|
59
|
-
}
|
|
60
|
-
/**
|
|
61
|
-
* Stop progress indicator with smooth transition
|
|
62
|
-
*/
|
|
63
|
-
stop(success = true, finalMessage) {
|
|
64
|
-
if (this.spinner) {
|
|
65
|
-
this.spinner.stop();
|
|
66
|
-
this.spinner = null;
|
|
67
|
-
}
|
|
68
|
-
else if (this.total > 0) {
|
|
69
|
-
// Clear progress bar
|
|
70
|
-
process.stdout.write('\r' + ' '.repeat(80) + '\r');
|
|
71
|
-
}
|
|
72
|
-
if (finalMessage) {
|
|
73
|
-
console.log(finalMessage);
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
/**
|
|
77
|
-
* Get elapsed time
|
|
78
|
-
*/
|
|
79
|
-
getElapsedTime() {
|
|
80
|
-
return Date.now() - this.operationStartTime;
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
/**
|
|
84
|
-
* Create progress indicator for embedding search
|
|
85
|
-
*/
|
|
86
|
-
export function createEmbeddingSearchProgress(total) {
|
|
87
|
-
const indicator = new ProgressIndicator();
|
|
88
|
-
indicator.start({
|
|
89
|
-
total,
|
|
90
|
-
message: 'Searching embeddings',
|
|
91
|
-
showPercentage: true,
|
|
92
|
-
showCount: true,
|
|
93
|
-
});
|
|
94
|
-
return indicator;
|
|
95
|
-
}
|
|
96
|
-
/**
|
|
97
|
-
* Create progress indicator for plan generation
|
|
98
|
-
*/
|
|
99
|
-
export function createPlanGenerationProgress() {
|
|
100
|
-
const indicator = new ProgressIndicator();
|
|
101
|
-
indicator.start({
|
|
102
|
-
message: 'Generating plan',
|
|
103
|
-
});
|
|
104
|
-
return indicator;
|
|
105
|
-
}
|
|
106
|
-
/**
|
|
107
|
-
* Create progress indicator for memory synthesis
|
|
108
|
-
*/
|
|
109
|
-
export function createMemorySynthesisProgress() {
|
|
110
|
-
const indicator = new ProgressIndicator();
|
|
111
|
-
indicator.start({
|
|
112
|
-
message: 'Synthesizing memories',
|
|
113
|
-
});
|
|
114
|
-
return indicator;
|
|
4
|
+
* This is intentionally a **no-op** implementation to avoid adding dependencies
|
|
5
|
+
* or noisy console output in non-interactive/test environments.
|
|
6
|
+
*/
|
|
7
|
+
export function createEmbeddingSearchProgress(_estimatedTotalChunks) {
|
|
8
|
+
return {
|
|
9
|
+
start: () => { },
|
|
10
|
+
stop: () => { },
|
|
11
|
+
};
|
|
115
12
|
}
|
|
116
13
|
//# sourceMappingURL=progress-indicator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"progress-indicator.js","sourceRoot":"","sources":["../../../src/infrastructure/ux/progress-indicator.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"progress-indicator.js","sourceRoot":"","sources":["../../../src/infrastructure/ux/progress-indicator.ts"],"names":[],"mappings":"AAKA;;;;;GAKG;AACH,MAAM,UAAU,6BAA6B,CAAC,qBAA6B;IACzE,OAAO;QACL,KAAK,EAAE,GAAG,EAAE,GAAE,CAAC;QACf,IAAI,EAAE,GAAG,EAAE,GAAE,CAAC;KACf,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export type RepoFingerprint = {
|
|
2
|
+
cwd: string;
|
|
3
|
+
kind: 'node' | 'python' | 'go' | 'rust' | 'unknown';
|
|
4
|
+
name?: string;
|
|
5
|
+
description?: string;
|
|
6
|
+
packageManager?: 'npm' | 'pnpm' | 'yarn';
|
|
7
|
+
scripts?: string[];
|
|
8
|
+
};
|
|
9
|
+
export declare function fingerprintRepo(cwd: string): RepoFingerprint;
|
|
10
|
+
//# sourceMappingURL=repo-fingerprint.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repo-fingerprint.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/ux/repo-fingerprint.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,eAAe,GAAG;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,GAAG,MAAM,GAAG,SAAS,CAAC;IACpD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC;IACzC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB,CAAC;AAUF,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,CA0C5D"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* UX: Repo Fingerprint (deterministic, no LLM)
|
|
3
|
+
* Produces a quick, reliable summary of the current directory/repo.
|
|
4
|
+
*/
|
|
5
|
+
import { existsSync, readFileSync, readdirSync } from 'fs';
|
|
6
|
+
import { join } from 'path';
|
|
7
|
+
function safeReadJson(path) {
|
|
8
|
+
try {
|
|
9
|
+
return JSON.parse(readFileSync(path, 'utf-8'));
|
|
10
|
+
}
|
|
11
|
+
catch {
|
|
12
|
+
return null;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
export function fingerprintRepo(cwd) {
|
|
16
|
+
const pkgPath = join(cwd, 'package.json');
|
|
17
|
+
const pnpmLock = join(cwd, 'pnpm-lock.yaml');
|
|
18
|
+
const yarnLock = join(cwd, 'yarn.lock');
|
|
19
|
+
const npmLock = join(cwd, 'package-lock.json');
|
|
20
|
+
if (existsSync(pkgPath)) {
|
|
21
|
+
const pkg = safeReadJson(pkgPath) || {};
|
|
22
|
+
const scripts = pkg.scripts && typeof pkg.scripts === 'object'
|
|
23
|
+
? Object.keys(pkg.scripts).sort()
|
|
24
|
+
: [];
|
|
25
|
+
const packageManager = existsSync(pnpmLock) ? 'pnpm' : existsSync(yarnLock) ? 'yarn' : existsSync(npmLock) ? 'npm' : 'npm';
|
|
26
|
+
return {
|
|
27
|
+
cwd,
|
|
28
|
+
kind: 'node',
|
|
29
|
+
name: typeof pkg.name === 'string' ? pkg.name : undefined,
|
|
30
|
+
description: typeof pkg.description === 'string' ? pkg.description : undefined,
|
|
31
|
+
packageManager,
|
|
32
|
+
scripts,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
if (existsSync(join(cwd, 'pyproject.toml')) || existsSync(join(cwd, 'requirements.txt'))) {
|
|
36
|
+
return { cwd, kind: 'python' };
|
|
37
|
+
}
|
|
38
|
+
if (existsSync(join(cwd, 'go.mod'))) {
|
|
39
|
+
return { cwd, kind: 'go' };
|
|
40
|
+
}
|
|
41
|
+
if (existsSync(join(cwd, 'Cargo.toml'))) {
|
|
42
|
+
return { cwd, kind: 'rust' };
|
|
43
|
+
}
|
|
44
|
+
// Lightweight heuristic: if directory is empty-ish, call it unknown
|
|
45
|
+
try {
|
|
46
|
+
const entries = readdirSync(cwd);
|
|
47
|
+
if (entries.length === 0)
|
|
48
|
+
return { cwd, kind: 'unknown' };
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
// ignore
|
|
52
|
+
}
|
|
53
|
+
return { cwd, kind: 'unknown' };
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=repo-fingerprint.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repo-fingerprint.js","sourceRoot":"","sources":["../../../src/infrastructure/ux/repo-fingerprint.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,IAAI,CAAC;AAC3D,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAW5B,SAAS,YAAY,CAAC,IAAY;IAChC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;IACjD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,GAAW;IACzC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;IAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;IAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;IACxC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,mBAAmB,CAAC,CAAC;IAE/C,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACxB,MAAM,GAAG,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QACxC,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ;YAC5D,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE;YACjC,CAAC,CAAC,EAAE,CAAC;QACP,MAAM,cAAc,GAClB,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;QACtG,OAAO;YACL,GAAG;YACH,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;YACzD,WAAW,EAAE,OAAO,GAAG,CAAC,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS;YAC9E,cAAc;YACd,OAAO;SACR,CAAC;IACJ,CAAC;IAED,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,kBAAkB,CAAC,CAAC,EAAE,CAAC;QACzF,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IACjC,CAAC;IACD,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC;QACpC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAC7B,CAAC;IACD,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC;QACxC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAC/B,CAAC;IAED,oEAAoE;IACpE,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IAC5D,CAAC;IAAC,MAAM,CAAC;QACP,SAAS;IACX,CAAC;IAED,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;AAClC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ask-command.d.ts","sourceRoot":"","sources":["../../../../src/presentation/cli/commands/ask-command.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"ask-command.d.ts","sourceRoot":"","sources":["../../../../src/presentation/cli/commands/ask-command.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA0BH,wBAAsB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA8c1I"}
|