@defai.digital/ax-cli 2.2.1 → 2.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,105 @@
1
+ /**
2
+ * Onboarding Manager - First-run detection and state management
3
+ */
4
+ import * as fs from 'fs';
5
+ import * as path from 'path';
6
+ import * as os from 'os';
7
+ export class OnboardingManager {
8
+ static FIRST_RUN_MARKER = '.first-run-complete';
9
+ static USER_CONFIG_DIR = '.ax-cli';
10
+ /**
11
+ * Get the user's AX CLI configuration directory
12
+ */
13
+ static getUserConfigDir() {
14
+ return path.join(os.homedir(), OnboardingManager.USER_CONFIG_DIR);
15
+ }
16
+ /**
17
+ * Get the path to the first-run marker file
18
+ */
19
+ static getMarkerPath() {
20
+ return path.join(OnboardingManager.getUserConfigDir(), OnboardingManager.FIRST_RUN_MARKER);
21
+ }
22
+ /**
23
+ * Detect if this is the user's first run of AX CLI
24
+ */
25
+ static detectFirstRun() {
26
+ const markerPath = OnboardingManager.getMarkerPath();
27
+ return !fs.existsSync(markerPath);
28
+ }
29
+ /**
30
+ * Mark onboarding as completed
31
+ */
32
+ static markCompleted() {
33
+ const configDir = OnboardingManager.getUserConfigDir();
34
+ const markerPath = OnboardingManager.getMarkerPath();
35
+ // Create config directory if it doesn't exist
36
+ if (!fs.existsSync(configDir)) {
37
+ fs.mkdirSync(configDir, { recursive: true });
38
+ }
39
+ // Create marker file with timestamp
40
+ const state = {
41
+ isFirstRun: false,
42
+ setupCompleted: true,
43
+ completedAt: new Date().toISOString(),
44
+ version: this.getVersion(),
45
+ };
46
+ fs.writeFileSync(markerPath, JSON.stringify(state, null, 2), 'utf-8');
47
+ }
48
+ /**
49
+ * Get current onboarding state
50
+ */
51
+ static getCurrentState() {
52
+ const markerPath = OnboardingManager.getMarkerPath();
53
+ if (!fs.existsSync(markerPath)) {
54
+ return {
55
+ isFirstRun: true,
56
+ setupCompleted: false,
57
+ version: this.getVersion(),
58
+ };
59
+ }
60
+ try {
61
+ const content = fs.readFileSync(markerPath, 'utf-8');
62
+ return JSON.parse(content);
63
+ }
64
+ catch {
65
+ // If marker file is corrupted, treat as first run
66
+ return {
67
+ isFirstRun: true,
68
+ setupCompleted: false,
69
+ version: this.getVersion(),
70
+ };
71
+ }
72
+ }
73
+ /**
74
+ * Reset onboarding state (useful for testing)
75
+ */
76
+ static resetOnboarding() {
77
+ const markerPath = OnboardingManager.getMarkerPath();
78
+ if (fs.existsSync(markerPath)) {
79
+ fs.unlinkSync(markerPath);
80
+ }
81
+ }
82
+ /**
83
+ * Check if welcome screen should be shown
84
+ */
85
+ static shouldShowWelcome() {
86
+ return OnboardingManager.detectFirstRun();
87
+ }
88
+ /**
89
+ * Get current CLI version
90
+ */
91
+ static getVersion() {
92
+ try {
93
+ const packageJsonPath = path.join(process.cwd(), 'package.json');
94
+ if (fs.existsSync(packageJsonPath)) {
95
+ const pkg = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
96
+ return pkg.version || '0.0.0';
97
+ }
98
+ }
99
+ catch {
100
+ // Ignore errors
101
+ }
102
+ return '0.0.0';
103
+ }
104
+ }
105
+ //# sourceMappingURL=onboarding-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"onboarding-manager.js","sourceRoot":"","sources":["../../src/utils/onboarding-manager.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AASzB,MAAM,OAAO,iBAAiB;IACpB,MAAM,CAAU,gBAAgB,GAAG,qBAAqB,CAAC;IACzD,MAAM,CAAU,eAAe,GAAG,SAAS,CAAC;IAEpD;;OAEG;IACK,MAAM,CAAC,gBAAgB;QAC7B,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,iBAAiB,CAAC,eAAe,CAAC,CAAC;IACpE,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,aAAa;QAC1B,OAAO,IAAI,CAAC,IAAI,CACd,iBAAiB,CAAC,gBAAgB,EAAE,EACpC,iBAAiB,CAAC,gBAAgB,CACnC,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,cAAc;QACnB,MAAM,UAAU,GAAG,iBAAiB,CAAC,aAAa,EAAE,CAAC;QACrD,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IACpC,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,aAAa;QAClB,MAAM,SAAS,GAAG,iBAAiB,CAAC,gBAAgB,EAAE,CAAC;QACvD,MAAM,UAAU,GAAG,iBAAiB,CAAC,aAAa,EAAE,CAAC;QAErD,8CAA8C;QAC9C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC9B,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/C,CAAC;QAED,oCAAoC;QACpC,MAAM,KAAK,GAAoB;YAC7B,UAAU,EAAE,KAAK;YACjB,cAAc,EAAE,IAAI;YACpB,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACrC,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE;SAC3B,CAAC;QAEF,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IACxE,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,eAAe;QACpB,MAAM,UAAU,GAAG,iBAAiB,CAAC,aAAa,EAAE,CAAC;QAErD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC/B,OAAO;gBACL,UAAU,EAAE,IAAI;gBAChB,cAAc,EAAE,KAAK;gBACrB,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE;aAC3B,CAAC;QACJ,CAAC;QAED,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YACrD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAoB,CAAC;QAChD,CAAC;QAAC,MAAM,CAAC;YACP,kDAAkD;YAClD,OAAO;gBACL,UAAU,EAAE,IAAI;gBAChB,cAAc,EAAE,KAAK;gBACrB,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE;aAC3B,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,eAAe;QACpB,MAAM,UAAU,GAAG,iBAAiB,CAAC,aAAa,EAAE,CAAC;QACrD,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC9B,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,iBAAiB;QACtB,OAAO,iBAAiB,CAAC,cAAc,EAAE,CAAC;IAC5C,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,UAAU;QACvB,IAAI,CAAC;YACH,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,CAAC,CAAC;YACjE,IAAI,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;gBACnC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC;gBAClE,OAAO,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC;YAChC,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,gBAAgB;QAClB,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Usage Tracker - Session-based API usage tracking
3
+ *
4
+ * Tracks token usage across API calls in the current session.
5
+ * Phase 1: Support for z.ai and session-based tracking
6
+ * Phase 2: Add support for historical tracking and other providers
7
+ */
8
+ export interface UsageStats {
9
+ requests: number;
10
+ promptTokens: number;
11
+ completionTokens: number;
12
+ totalTokens: number;
13
+ reasoningTokens: number;
14
+ }
15
+ export interface SessionStats {
16
+ totalRequests: number;
17
+ totalPromptTokens: number;
18
+ totalCompletionTokens: number;
19
+ totalTokens: number;
20
+ totalReasoningTokens: number;
21
+ byModel: Map<string, UsageStats>;
22
+ }
23
+ /**
24
+ * UsageTracker - Singleton for tracking API usage
25
+ */
26
+ export declare class UsageTracker {
27
+ private static instance;
28
+ private sessionStats;
29
+ private constructor();
30
+ /**
31
+ * Get singleton instance
32
+ */
33
+ static getInstance(): UsageTracker;
34
+ /**
35
+ * Track usage from API response
36
+ */
37
+ trackUsage(model: string, usage: {
38
+ prompt_tokens?: number;
39
+ completion_tokens?: number;
40
+ total_tokens?: number;
41
+ reasoning_tokens?: number;
42
+ }): void;
43
+ /**
44
+ * Get current session statistics
45
+ */
46
+ getSessionStats(): SessionStats;
47
+ /**
48
+ * Reset session statistics
49
+ */
50
+ resetSession(): void;
51
+ /**
52
+ * Get statistics for a specific model
53
+ */
54
+ getModelStats(model: string): UsageStats | null;
55
+ }
56
+ /**
57
+ * Get the singleton usage tracker instance
58
+ */
59
+ export declare function getUsageTracker(): UsageTracker;
@@ -0,0 +1,97 @@
1
+ /**
2
+ * Usage Tracker - Session-based API usage tracking
3
+ *
4
+ * Tracks token usage across API calls in the current session.
5
+ * Phase 1: Support for z.ai and session-based tracking
6
+ * Phase 2: Add support for historical tracking and other providers
7
+ */
8
+ /**
9
+ * UsageTracker - Singleton for tracking API usage
10
+ */
11
+ export class UsageTracker {
12
+ static instance = null;
13
+ sessionStats = {
14
+ totalRequests: 0,
15
+ totalPromptTokens: 0,
16
+ totalCompletionTokens: 0,
17
+ totalTokens: 0,
18
+ totalReasoningTokens: 0,
19
+ byModel: new Map()
20
+ };
21
+ constructor() {
22
+ // Private constructor for singleton
23
+ }
24
+ /**
25
+ * Get singleton instance
26
+ */
27
+ static getInstance() {
28
+ if (!UsageTracker.instance) {
29
+ UsageTracker.instance = new UsageTracker();
30
+ }
31
+ return UsageTracker.instance;
32
+ }
33
+ /**
34
+ * Track usage from API response
35
+ */
36
+ trackUsage(model, usage) {
37
+ const promptTokens = usage.prompt_tokens || 0;
38
+ const completionTokens = usage.completion_tokens || 0;
39
+ const totalTokens = usage.total_tokens || (promptTokens + completionTokens);
40
+ const reasoningTokens = usage.reasoning_tokens || 0;
41
+ // Update total stats
42
+ this.sessionStats.totalRequests++;
43
+ this.sessionStats.totalPromptTokens += promptTokens;
44
+ this.sessionStats.totalCompletionTokens += completionTokens;
45
+ this.sessionStats.totalTokens += totalTokens;
46
+ this.sessionStats.totalReasoningTokens += reasoningTokens;
47
+ // Update per-model stats
48
+ const modelStats = this.sessionStats.byModel.get(model) || {
49
+ requests: 0,
50
+ promptTokens: 0,
51
+ completionTokens: 0,
52
+ totalTokens: 0,
53
+ reasoningTokens: 0
54
+ };
55
+ modelStats.requests++;
56
+ modelStats.promptTokens += promptTokens;
57
+ modelStats.completionTokens += completionTokens;
58
+ modelStats.totalTokens += totalTokens;
59
+ modelStats.reasoningTokens += reasoningTokens;
60
+ this.sessionStats.byModel.set(model, modelStats);
61
+ }
62
+ /**
63
+ * Get current session statistics
64
+ */
65
+ getSessionStats() {
66
+ return {
67
+ ...this.sessionStats,
68
+ byModel: new Map(this.sessionStats.byModel)
69
+ };
70
+ }
71
+ /**
72
+ * Reset session statistics
73
+ */
74
+ resetSession() {
75
+ this.sessionStats = {
76
+ totalRequests: 0,
77
+ totalPromptTokens: 0,
78
+ totalCompletionTokens: 0,
79
+ totalTokens: 0,
80
+ totalReasoningTokens: 0,
81
+ byModel: new Map()
82
+ };
83
+ }
84
+ /**
85
+ * Get statistics for a specific model
86
+ */
87
+ getModelStats(model) {
88
+ return this.sessionStats.byModel.get(model) || null;
89
+ }
90
+ }
91
+ /**
92
+ * Get the singleton usage tracker instance
93
+ */
94
+ export function getUsageTracker() {
95
+ return UsageTracker.getInstance();
96
+ }
97
+ //# sourceMappingURL=usage-tracker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usage-tracker.js","sourceRoot":"","sources":["../../src/utils/usage-tracker.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAmBH;;GAEG;AACH,MAAM,OAAO,YAAY;IACf,MAAM,CAAC,QAAQ,GAAwB,IAAI,CAAC;IAE5C,YAAY,GAAiB;QACnC,aAAa,EAAE,CAAC;QAChB,iBAAiB,EAAE,CAAC;QACpB,qBAAqB,EAAE,CAAC;QACxB,WAAW,EAAE,CAAC;QACd,oBAAoB,EAAE,CAAC;QACvB,OAAO,EAAE,IAAI,GAAG,EAAE;KACnB,CAAC;IAEF;QACE,oCAAoC;IACtC,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,WAAW;QAChB,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC;YAC3B,YAAY,CAAC,QAAQ,GAAG,IAAI,YAAY,EAAE,CAAC;QAC7C,CAAC;QACD,OAAO,YAAY,CAAC,QAAQ,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,KAAa,EAAE,KAKzB;QACC,MAAM,YAAY,GAAG,KAAK,CAAC,aAAa,IAAI,CAAC,CAAC;QAC9C,MAAM,gBAAgB,GAAG,KAAK,CAAC,iBAAiB,IAAI,CAAC,CAAC;QACtD,MAAM,WAAW,GAAG,KAAK,CAAC,YAAY,IAAI,CAAC,YAAY,GAAG,gBAAgB,CAAC,CAAC;QAC5E,MAAM,eAAe,GAAG,KAAK,CAAC,gBAAgB,IAAI,CAAC,CAAC;QAEpD,qBAAqB;QACrB,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE,CAAC;QAClC,IAAI,CAAC,YAAY,CAAC,iBAAiB,IAAI,YAAY,CAAC;QACpD,IAAI,CAAC,YAAY,CAAC,qBAAqB,IAAI,gBAAgB,CAAC;QAC5D,IAAI,CAAC,YAAY,CAAC,WAAW,IAAI,WAAW,CAAC;QAC7C,IAAI,CAAC,YAAY,CAAC,oBAAoB,IAAI,eAAe,CAAC;QAE1D,yBAAyB;QACzB,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI;YACzD,QAAQ,EAAE,CAAC;YACX,YAAY,EAAE,CAAC;YACf,gBAAgB,EAAE,CAAC;YACnB,WAAW,EAAE,CAAC;YACd,eAAe,EAAE,CAAC;SACnB,CAAC;QAEF,UAAU,CAAC,QAAQ,EAAE,CAAC;QACtB,UAAU,CAAC,YAAY,IAAI,YAAY,CAAC;QACxC,UAAU,CAAC,gBAAgB,IAAI,gBAAgB,CAAC;QAChD,UAAU,CAAC,WAAW,IAAI,WAAW,CAAC;QACtC,UAAU,CAAC,eAAe,IAAI,eAAe,CAAC;QAE9C,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IACnD,CAAC;IAED;;OAEG;IACH,eAAe;QACb,OAAO;YACL,GAAG,IAAI,CAAC,YAAY;YACpB,OAAO,EAAE,IAAI,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;SAC5C,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,YAAY;QACV,IAAI,CAAC,YAAY,GAAG;YAClB,aAAa,EAAE,CAAC;YAChB,iBAAiB,EAAE,CAAC;YACpB,qBAAqB,EAAE,CAAC;YACxB,WAAW,EAAE,CAAC;YACd,oBAAoB,EAAE,CAAC;YACvB,OAAO,EAAE,IAAI,GAAG,EAAE;SACnB,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,aAAa,CAAC,KAAa;QACzB,OAAO,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC;IACtD,CAAC;;AAGH;;GAEG;AACH,MAAM,UAAU,eAAe;IAC7B,OAAO,YAAY,CAAC,WAAW,EAAE,CAAC;AACpC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@defai.digital/ax-cli",
3
- "version": "2.2.1",
3
+ "version": "2.3.1",
4
4
  "description": "Enterprise-Class AI Command Line Interface - Primary support for GLM (General Language Model) with multi-provider AI orchestration powered by AutomatosX.",
5
5
  "type": "module",
6
6
  "workspaces": [