@d3ara1n/pi-session-namer 0.1.0 → 0.1.2
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/package.json +2 -1
- package/src/index.ts +28 -26
- package/src/namer.ts +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@d3ara1n/pi-session-namer",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
|
+
"type": "module",
|
|
4
5
|
"description": "Auto-name pi sessions using a cheap side agent — generates concise titles from the first user message",
|
|
5
6
|
"main": "src/index.ts",
|
|
6
7
|
"keywords": [
|
package/src/index.ts
CHANGED
|
@@ -24,7 +24,7 @@ export default function sessionNamerExtension(pi: ExtensionAPI) {
|
|
|
24
24
|
hasNamed = false;
|
|
25
25
|
lastPrompt = "";
|
|
26
26
|
|
|
27
|
-
//
|
|
27
|
+
// If the session already has a name (resume/fork/user-set), don't auto-name
|
|
28
28
|
const existingName = pi.getSessionName();
|
|
29
29
|
if (existingName) {
|
|
30
30
|
hasNamed = true;
|
|
@@ -33,41 +33,43 @@ export default function sessionNamerExtension(pi: ExtensionAPI) {
|
|
|
33
33
|
|
|
34
34
|
// ── before_agent_start: auto-name on first prompt ───────────────
|
|
35
35
|
pi.on("before_agent_start", async (event, ctx) => {
|
|
36
|
-
if
|
|
37
|
-
|
|
38
|
-
// Cache prompt for /namer:rename
|
|
36
|
+
// Always cache the latest prompt for /namer:rename, even if auto-naming is done
|
|
39
37
|
lastPrompt = event.prompt;
|
|
40
38
|
|
|
39
|
+
if (!config.enabled || hasNamed) return;
|
|
40
|
+
|
|
41
41
|
// Skip empty prompts (e.g. image-only messages)
|
|
42
42
|
if (!event.prompt?.trim()) return;
|
|
43
43
|
|
|
44
|
-
//
|
|
44
|
+
// Mark as handled (no retry regardless of subsequent success/failure)
|
|
45
45
|
hasNamed = true;
|
|
46
46
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
rolesApi
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
47
|
+
// Name asynchronously so we don't block the main agent startup
|
|
48
|
+
(async () => {
|
|
49
|
+
let rolesApi;
|
|
50
|
+
try {
|
|
51
|
+
rolesApi = getModelRolesAPI();
|
|
52
|
+
} catch {
|
|
53
|
+
console.warn("[pi-session-namer] pi-model-roles not initialized — skipping");
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
54
56
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
57
|
+
const resolved = await rolesApi.resolveRoleAsync(config.sideAgentRole);
|
|
58
|
+
if (!resolved.model) {
|
|
59
|
+
console.warn(`[pi-session-namer] Side agent role "${config.sideAgentRole}" not available — skipping`);
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
60
62
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
63
|
+
const name = await generateSessionName(
|
|
64
|
+
resolved.model,
|
|
65
|
+
resolved.apiKey,
|
|
66
|
+
resolved.headers,
|
|
67
|
+
config,
|
|
68
|
+
event.prompt,
|
|
69
|
+
);
|
|
68
70
|
|
|
69
|
-
|
|
70
|
-
console.
|
|
71
|
+
pi.setSessionName(name);
|
|
72
|
+
})().catch((err) => console.warn("[pi-session-namer] naming failed:", err));
|
|
71
73
|
});
|
|
72
74
|
|
|
73
75
|
// ── /namer — show status ────────────────────────────────────────
|
package/src/namer.ts
CHANGED
|
@@ -52,7 +52,7 @@ export async function generateSessionName(
|
|
|
52
52
|
try {
|
|
53
53
|
const result = await complete(sideModel, {
|
|
54
54
|
systemPrompt,
|
|
55
|
-
messages: [{ role: "user", content: truncatedPrompt }],
|
|
55
|
+
messages: [{ role: "user", content: truncatedPrompt, timestamp: Date.now() }],
|
|
56
56
|
}, options);
|
|
57
57
|
|
|
58
58
|
const raw = result.content
|