@d3ara1n/pi-session-namer 0.1.1 → 0.1.3

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/README.md CHANGED
@@ -47,9 +47,7 @@ Project-level `.pi/settings.json` overrides global settings.
47
47
 
48
48
  ## Dependencies
49
49
 
50
- - `@earendil-works/pi-ai` — `complete()` for LLM calls
51
- - `@earendil-works/pi-coding-agent` — Extension API
52
- - `@d3ara1n/pi-model-roles` — Model role resolution
50
+ - [`@d3ara1n/pi-model-roles`](../pi-model-roles)model role resolution
53
51
 
54
52
  ## Install
55
53
 
package/package.json CHANGED
@@ -1,6 +1,7 @@
1
1
  {
2
2
  "name": "@d3ara1n/pi-session-namer",
3
- "version": "0.1.1",
3
+ "version": "0.1.3",
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/config.ts CHANGED
@@ -21,8 +21,7 @@ function readSettingsFile(filePath: string): any {
21
21
  try {
22
22
  if (!fs.existsSync(filePath)) return {};
23
23
  const content = fs.readFileSync(filePath, "utf-8");
24
- const stripped = content.replace(/\/\/.*$/gm, "").replace(/\/\*[\s\S]*?\*\//g, "");
25
- return JSON.parse(stripped);
24
+ return JSON.parse(content);
26
25
  } catch {
27
26
  return {};
28
27
  }
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
- // 如果会话已有名称(resume/fork/用户手动命名),不再自动命名
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 (!config.enabled || hasNamed) return;
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
- let rolesApi;
48
- try {
49
- rolesApi = getModelRolesAPI();
50
- } catch {
51
- console.warn("[pi-session-namer] pi-model-roles not initialized — skipping");
52
- return;
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
- const resolved = await rolesApi.resolveRoleAsync(config.sideAgentRole);
56
- if (!resolved.model) {
57
- console.warn(`[pi-session-namer] Side agent role "${config.sideAgentRole}" not available — skipping`);
58
- return;
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
- const name = await generateSessionName(
62
- resolved.model,
63
- resolved.apiKey,
64
- resolved.headers,
65
- config,
66
- event.prompt,
67
- );
63
+ const name = await generateSessionName(
64
+ resolved.model,
65
+ resolved.apiKey,
66
+ resolved.headers,
67
+ config,
68
+ event.prompt,
69
+ );
68
70
 
69
- pi.setSessionName(name);
70
- console.log(`[pi-session-namer] Session named: ${name}`);
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