@aigencydev/cli 0.3.4 → 0.3.6
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/api-client/auth.js +13 -0
- package/dist/commands/chat.js +21 -3
- package/dist/ui/WelcomeBox.js +45 -83
- package/dist/version.js +1 -1
- package/package.json +1 -1
package/dist/api-client/auth.js
CHANGED
|
@@ -23,6 +23,19 @@ export async function refreshAccessToken(refreshToken) {
|
|
|
23
23
|
});
|
|
24
24
|
return res.data;
|
|
25
25
|
}
|
|
26
|
+
export async function fetchMe(accessToken) {
|
|
27
|
+
try {
|
|
28
|
+
const res = await apiRequest("/api/cli/me", {
|
|
29
|
+
method: "GET",
|
|
30
|
+
bearer: accessToken,
|
|
31
|
+
maxRetries: 0,
|
|
32
|
+
});
|
|
33
|
+
return res.data;
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
26
39
|
export async function revokeSession(token, reason) {
|
|
27
40
|
await apiRequest("/api/cli/auth/revoke", {
|
|
28
41
|
method: "POST",
|
package/dist/commands/chat.js
CHANGED
|
@@ -2,11 +2,12 @@ import React from "react";
|
|
|
2
2
|
import fs from "node:fs/promises";
|
|
3
3
|
import path from "node:path";
|
|
4
4
|
import { render } from "ink";
|
|
5
|
-
import { requireActiveSession } from "../auth/session.js";
|
|
5
|
+
import { requireActiveSession, saveSession } from "../auth/session.js";
|
|
6
6
|
import { loadSettings } from "../config/settings.js";
|
|
7
7
|
import { loadMemorySnapshot } from "../agent/memory.js";
|
|
8
8
|
import { loadInstructions } from "../agent/instructions.js";
|
|
9
9
|
import { ensureProjectDataDirs } from "../config/bootstrap.js";
|
|
10
|
+
import { fetchMe } from "../api-client/auth.js";
|
|
10
11
|
import { App } from "../ui/App.js";
|
|
11
12
|
import { log } from "../utils/logger.js";
|
|
12
13
|
async function findProjectRoot(cwd) {
|
|
@@ -37,13 +38,30 @@ async function findProjectRoot(cwd) {
|
|
|
37
38
|
return cwd;
|
|
38
39
|
}
|
|
39
40
|
export async function runChatCommand(options = {}) {
|
|
40
|
-
|
|
41
|
+
let session = await requireActiveSession();
|
|
41
42
|
const cwd = process.cwd();
|
|
42
43
|
const projectRoot = await findProjectRoot(cwd);
|
|
43
44
|
const settings = await loadSettings({ cwd: projectRoot });
|
|
44
45
|
await ensureProjectDataDirs(projectRoot);
|
|
46
|
+
if (!session.user.tier) {
|
|
47
|
+
const me = await fetchMe(session.access_token);
|
|
48
|
+
if (me) {
|
|
49
|
+
session = {
|
|
50
|
+
...session,
|
|
51
|
+
user: {
|
|
52
|
+
...session.user,
|
|
53
|
+
name: me.name || session.user.name,
|
|
54
|
+
tier: me.tier,
|
|
55
|
+
monthly_tokens: me.monthly_tokens,
|
|
56
|
+
},
|
|
57
|
+
};
|
|
58
|
+
await saveSession(session);
|
|
59
|
+
log.debug(`Tier backend'den alındı: ${me.tier}`);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
45
62
|
const mode = options.mode || settings.mode;
|
|
46
|
-
const
|
|
63
|
+
const userTier = session.user.tier === "max" ? "max" : "pro";
|
|
64
|
+
const model = options.model || userTier;
|
|
47
65
|
const memory = await loadMemorySnapshot(projectRoot);
|
|
48
66
|
if (memory.entries.length > 0 || memory.indexContent) {
|
|
49
67
|
log.debug(`memory: ${memory.entries.length} kayıt, index ${memory.indexContent.length} karakter`);
|
package/dist/ui/WelcomeBox.js
CHANGED
|
@@ -2,52 +2,41 @@ import React, { useEffect, useState } from "react";
|
|
|
2
2
|
import { Box, Text } from "ink";
|
|
3
3
|
import path from "node:path";
|
|
4
4
|
import { palette, symbols } from "./theme.js";
|
|
5
|
-
import { listSessions } from "../agent/session-store.js";
|
|
5
|
+
import { listSessions, readSessionTranscript } from "../agent/session-store.js";
|
|
6
6
|
function relativeTime(date) {
|
|
7
7
|
const diff = Date.now() - date.getTime();
|
|
8
8
|
if (diff < 60_000)
|
|
9
9
|
return "az önce";
|
|
10
10
|
if (diff < 3_600_000)
|
|
11
|
-
return `${Math.floor(diff / 60_000)}
|
|
11
|
+
return `${Math.floor(diff / 60_000)}dk önce`;
|
|
12
12
|
if (diff < 86_400_000)
|
|
13
|
-
return `${Math.floor(diff / 3_600_000)}
|
|
13
|
+
return `${Math.floor(diff / 3_600_000)}sa önce`;
|
|
14
14
|
if (diff < 7 * 86_400_000)
|
|
15
|
-
return `${Math.floor(diff / 86_400_000)}
|
|
15
|
+
return `${Math.floor(diff / 86_400_000)}g önce`;
|
|
16
16
|
return date.toLocaleDateString("tr-TR");
|
|
17
17
|
}
|
|
18
|
-
async function buildActivityPreview(sessionId, cwd) {
|
|
19
|
-
try {
|
|
20
|
-
const { readSessionTranscript } = await import("../agent/session-store.js");
|
|
21
|
-
const events = await readSessionTranscript(sessionId, cwd);
|
|
22
|
-
const firstUser = events.find((e) => e.type === "user");
|
|
23
|
-
if (firstUser && firstUser.type === "user") {
|
|
24
|
-
return firstUser.content.slice(0, 80);
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
catch {
|
|
28
|
-
}
|
|
29
|
-
return "(geçmiş oturum)";
|
|
30
|
-
}
|
|
31
18
|
export function WelcomeBox({ userName, userEmail, modelLabel, cwd, cliVersion, projectRoot, }) {
|
|
32
|
-
const [recent, setRecent] = useState(
|
|
19
|
+
const [recent, setRecent] = useState(null);
|
|
33
20
|
useEffect(() => {
|
|
34
21
|
let cancelled = false;
|
|
35
22
|
(async () => {
|
|
36
23
|
try {
|
|
37
24
|
const sessions = await listSessions(projectRoot);
|
|
38
|
-
const prior = sessions.slice(1,
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
25
|
+
const prior = sessions.slice(1, 2);
|
|
26
|
+
if (prior.length === 0)
|
|
27
|
+
return;
|
|
28
|
+
const s = prior[0];
|
|
29
|
+
const events = await readSessionTranscript(s.sessionId, projectRoot);
|
|
30
|
+
const firstUser = events.find((e) => e.type === "user");
|
|
31
|
+
const preview = firstUser && firstUser.type === "user"
|
|
32
|
+
? firstUser.content.replace(/\s+/g, " ").trim().slice(0, 48)
|
|
33
|
+
: "önceki oturum";
|
|
34
|
+
if (!cancelled) {
|
|
35
|
+
setRecent({
|
|
43
36
|
sessionId: s.sessionId,
|
|
44
|
-
preview
|
|
45
|
-
whenLabel: relativeTime(s.lastActivityAt),
|
|
46
|
-
messageCount: s.userMessageCount,
|
|
37
|
+
text: `${relativeTime(s.lastActivityAt)}: ${preview}${preview.length >= 48 ? "…" : ""}`,
|
|
47
38
|
});
|
|
48
39
|
}
|
|
49
|
-
if (!cancelled)
|
|
50
|
-
setRecent(previews);
|
|
51
40
|
}
|
|
52
41
|
catch {
|
|
53
42
|
}
|
|
@@ -57,67 +46,40 @@ export function WelcomeBox({ userName, userEmail, modelLabel, cwd, cliVersion, p
|
|
|
57
46
|
};
|
|
58
47
|
}, [projectRoot]);
|
|
59
48
|
const projectName = path.basename(cwd) || cwd;
|
|
60
|
-
const displayName = userName.trim() || userEmail || "
|
|
61
|
-
|
|
49
|
+
const displayName = userName.trim() || userEmail || "";
|
|
50
|
+
const tierColor = modelLabel.includes("Max") ? palette.accent : palette.brand;
|
|
51
|
+
return (React.createElement(Box, { borderStyle: "round", borderColor: palette.brand, flexDirection: "column", paddingX: 1, marginBottom: 1 },
|
|
62
52
|
React.createElement(Box, null,
|
|
63
53
|
React.createElement(Text, { color: palette.brand, bold: true },
|
|
64
54
|
symbols.sparkle,
|
|
65
55
|
" AIGENCY CLI"),
|
|
66
56
|
React.createElement(Text, { color: palette.textFaint },
|
|
67
57
|
" v",
|
|
68
|
-
cliVersion)
|
|
69
|
-
|
|
70
|
-
React.createElement(
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
" Paket: "),
|
|
82
|
-
React.createElement(Text, { color: palette.brandBright, bold: true }, modelLabel)),
|
|
83
|
-
React.createElement(Box, null,
|
|
84
|
-
React.createElement(Text, { color: palette.textDim },
|
|
85
|
-
symbols.bullet,
|
|
86
|
-
" Dizin: "),
|
|
87
|
-
React.createElement(Text, { color: palette.textSecondary }, projectName)),
|
|
88
|
-
userEmail && (React.createElement(Box, null,
|
|
89
|
-
React.createElement(Text, { color: palette.textDim },
|
|
90
|
-
symbols.bullet,
|
|
91
|
-
" Hesap: "),
|
|
92
|
-
React.createElement(Text, { color: palette.textMuted }, userEmail)))),
|
|
93
|
-
React.createElement(Box, { flexDirection: "column", width: "50%", paddingLeft: 1 },
|
|
94
|
-
React.createElement(Text, { color: palette.accent, bold: true },
|
|
95
|
-
symbols.lightning,
|
|
96
|
-
" Ba\u015Flang\u0131\u00E7 ipu\u00E7lar\u0131"),
|
|
97
|
-
React.createElement(Box, { marginTop: 1, flexDirection: "column" },
|
|
98
|
-
React.createElement(Text, { color: palette.textMuted },
|
|
99
|
-
React.createElement(Text, { color: palette.brand }, "/init"),
|
|
100
|
-
" \u2014 proje i\u00E7in AIGENCY.md olu\u015Ftur"),
|
|
101
|
-
React.createElement(Text, { color: palette.textMuted },
|
|
102
|
-
React.createElement(Text, { color: palette.brand }, "/help"),
|
|
103
|
-
" \u2014 komut listesi"),
|
|
104
|
-
React.createElement(Text, { color: palette.textMuted },
|
|
105
|
-
React.createElement(Text, { color: palette.brand }, "Shift+Tab"),
|
|
106
|
-
" \u2014 izin modu de\u011Fi\u015Ftir"),
|
|
107
|
-
React.createElement(Text, { color: palette.textMuted },
|
|
108
|
-
React.createElement(Text, { color: palette.brand }, "ESC"),
|
|
109
|
-
" \u2014 aktif i\u015Flemi iptal et")))),
|
|
110
|
-
recent.length > 0 && (React.createElement(Box, { flexDirection: "column", marginTop: 1 },
|
|
111
|
-
React.createElement(Text, { color: palette.success, bold: true },
|
|
112
|
-
symbols.triangle,
|
|
113
|
-
" Son aktiviteler"),
|
|
114
|
-
recent.map((r) => (React.createElement(Box, { key: r.sessionId },
|
|
115
|
-
React.createElement(Text, { color: palette.textFaint }, r.whenLabel.padEnd(12)),
|
|
116
|
-
React.createElement(Text, { color: palette.textSecondary }, r.preview)))))),
|
|
117
|
-
React.createElement(Box, { marginTop: 1 },
|
|
58
|
+
cliVersion),
|
|
59
|
+
React.createElement(Text, { color: palette.textFaint }, " \u00B7 "),
|
|
60
|
+
React.createElement(Text, { color: tierColor, bold: true }, modelLabel)),
|
|
61
|
+
displayName && (React.createElement(Box, null,
|
|
62
|
+
React.createElement(Text, { color: palette.accent },
|
|
63
|
+
symbols.star,
|
|
64
|
+
" "),
|
|
65
|
+
React.createElement(Text, { color: palette.textPrimary },
|
|
66
|
+
"Ho\u015F geldin, ",
|
|
67
|
+
React.createElement(Text, { bold: true }, displayName)),
|
|
68
|
+
React.createElement(Text, { color: palette.textFaint }, " \u00B7 "),
|
|
69
|
+
React.createElement(Text, { color: palette.textMuted }, projectName))),
|
|
70
|
+
React.createElement(Box, null,
|
|
118
71
|
React.createElement(Text, { color: palette.textFaint },
|
|
119
72
|
symbols.arrow,
|
|
120
|
-
"
|
|
121
|
-
|
|
122
|
-
|
|
73
|
+
" "),
|
|
74
|
+
React.createElement(Text, { color: palette.brand }, "/help"),
|
|
75
|
+
React.createElement(Text, { color: palette.textFaint }, " yard\u0131m \u00B7 "),
|
|
76
|
+
React.createElement(Text, { color: palette.brand }, "Shift+Tab"),
|
|
77
|
+
React.createElement(Text, { color: palette.textFaint }, " mod \u00B7 "),
|
|
78
|
+
React.createElement(Text, { color: palette.brand }, "ESC"),
|
|
79
|
+
React.createElement(Text, { color: palette.textFaint }, " iptal")),
|
|
80
|
+
recent && (React.createElement(Box, null,
|
|
81
|
+
React.createElement(Text, { color: palette.success },
|
|
82
|
+
symbols.triangle,
|
|
83
|
+
" "),
|
|
84
|
+
React.createElement(Text, { color: palette.textFaint }, recent.text)))));
|
|
123
85
|
}
|
package/dist/version.js
CHANGED