xibecode 1.0.3 → 1.0.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/commands/chat.d.ts.map +1 -1
- package/dist/commands/chat.js +10 -7
- package/dist/commands/chat.js.map +1 -1
- package/dist/commands/diagnostics.js +1 -1
- package/dist/commands/diagnostics.js.map +1 -1
- package/dist/commands/mcp.js +1 -1
- package/dist/commands/mcp.js.map +1 -1
- package/dist/commands/resume.js +1 -1
- package/dist/commands/resume.js.map +1 -1
- package/dist/commands/run-pr.d.ts.map +1 -1
- package/dist/commands/run-pr.js +10 -9
- package/dist/commands/run-pr.js.map +1 -1
- package/dist/commands/run.d.ts.map +1 -1
- package/dist/commands/run.js +14 -13
- package/dist/commands/run.js.map +1 -1
- package/dist/commands/skills.d.ts.map +1 -1
- package/dist/commands/skills.js +3 -2
- package/dist/commands/skills.js.map +1 -1
- package/dist/components/AssistantMarkdown.js +1 -1
- package/dist/components/AssistantMarkdown.js.map +1 -1
- package/dist/ui/claude-style-chat.d.ts.map +1 -1
- package/dist/ui/claude-style-chat.js +12 -10
- package/dist/ui/claude-style-chat.js.map +1 -1
- package/dist/utils/built-in-skills-dir.d.ts +7 -0
- package/dist/utils/built-in-skills-dir.d.ts.map +1 -0
- package/dist/utils/built-in-skills-dir.js +11 -0
- package/dist/utils/built-in-skills-dir.js.map +1 -0
- package/dist/utils/config.d.ts +2 -119
- package/dist/utils/config.d.ts.map +1 -1
- package/dist/utils/config.js +3 -88
- package/dist/utils/config.js.map +1 -1
- package/package.json +11 -17
- package/dist/commands/punycode.d.ts +0 -5
- package/dist/commands/punycode.d.ts.map +0 -1
- package/dist/commands/punycode.js +0 -48
- package/dist/commands/punycode.js.map +0 -1
- package/dist/commands/tui.d.ts +0 -9
- package/dist/commands/tui.d.ts.map +0 -1
- package/dist/commands/tui.js +0 -83
- package/dist/commands/tui.js.map +0 -1
- package/dist/core/agent-tool-policies.d.ts +0 -5
- package/dist/core/agent-tool-policies.d.ts.map +0 -1
- package/dist/core/agent-tool-policies.js +0 -18
- package/dist/core/agent-tool-policies.js.map +0 -1
- package/dist/core/agent.d.ts +0 -181
- package/dist/core/agent.d.ts.map +0 -1
- package/dist/core/agent.js +0 -1777
- package/dist/core/agent.js.map +0 -1
- package/dist/core/background-agent.d.ts +0 -23
- package/dist/core/background-agent.d.ts.map +0 -1
- package/dist/core/background-agent.js +0 -175
- package/dist/core/background-agent.js.map +0 -1
- package/dist/core/code-graph.d.ts +0 -18
- package/dist/core/code-graph.d.ts.map +0 -1
- package/dist/core/code-graph.js +0 -105
- package/dist/core/code-graph.js.map +0 -1
- package/dist/core/conflict-solver.d.ts +0 -26
- package/dist/core/conflict-solver.d.ts.map +0 -1
- package/dist/core/conflict-solver.js +0 -108
- package/dist/core/conflict-solver.js.map +0 -1
- package/dist/core/context-compactor.d.ts +0 -10
- package/dist/core/context-compactor.d.ts.map +0 -1
- package/dist/core/context-compactor.js +0 -158
- package/dist/core/context-compactor.js.map +0 -1
- package/dist/core/context-pruner.d.ts +0 -19
- package/dist/core/context-pruner.d.ts.map +0 -1
- package/dist/core/context-pruner.js +0 -103
- package/dist/core/context-pruner.js.map +0 -1
- package/dist/core/context.d.ts +0 -82
- package/dist/core/context.d.ts.map +0 -1
- package/dist/core/context.js +0 -273
- package/dist/core/context.js.map +0 -1
- package/dist/core/conversation-recovery.d.ts +0 -9
- package/dist/core/conversation-recovery.d.ts.map +0 -1
- package/dist/core/conversation-recovery.js +0 -15
- package/dist/core/conversation-recovery.js.map +0 -1
- package/dist/core/debug-workflow.d.ts +0 -9
- package/dist/core/debug-workflow.d.ts.map +0 -1
- package/dist/core/debug-workflow.js +0 -19
- package/dist/core/debug-workflow.js.map +0 -1
- package/dist/core/docs-scraper.d.ts +0 -40
- package/dist/core/docs-scraper.d.ts.map +0 -1
- package/dist/core/docs-scraper.js +0 -386
- package/dist/core/docs-scraper.js.map +0 -1
- package/dist/core/editor.d.ts +0 -87
- package/dist/core/editor.d.ts.map +0 -1
- package/dist/core/editor.js +0 -377
- package/dist/core/editor.js.map +0 -1
- package/dist/core/export.d.ts +0 -11
- package/dist/core/export.d.ts.map +0 -1
- package/dist/core/export.js +0 -54
- package/dist/core/export.js.map +0 -1
- package/dist/core/history-manager.d.ts +0 -75
- package/dist/core/history-manager.d.ts.map +0 -1
- package/dist/core/history-manager.js +0 -146
- package/dist/core/history-manager.js.map +0 -1
- package/dist/core/marketplace-client.d.ts +0 -52
- package/dist/core/marketplace-client.d.ts.map +0 -1
- package/dist/core/marketplace-client.js +0 -71
- package/dist/core/marketplace-client.js.map +0 -1
- package/dist/core/mcp/mcp-config.d.ts +0 -10
- package/dist/core/mcp/mcp-config.d.ts.map +0 -1
- package/dist/core/mcp/mcp-config.js +0 -70
- package/dist/core/mcp/mcp-config.js.map +0 -1
- package/dist/core/mcp/mcp-policy.d.ts +0 -17
- package/dist/core/mcp/mcp-policy.d.ts.map +0 -1
- package/dist/core/mcp/mcp-policy.js +0 -56
- package/dist/core/mcp/mcp-policy.js.map +0 -1
- package/dist/core/mcp/oauth-flow.d.ts +0 -30
- package/dist/core/mcp/oauth-flow.d.ts.map +0 -1
- package/dist/core/mcp/oauth-flow.js +0 -230
- package/dist/core/mcp/oauth-flow.js.map +0 -1
- package/dist/core/mcp/oauth-store.d.ts +0 -13
- package/dist/core/mcp/oauth-store.d.ts.map +0 -1
- package/dist/core/mcp/oauth-store.js +0 -68
- package/dist/core/mcp/oauth-store.js.map +0 -1
- package/dist/core/mcp/resolve-mcp-servers.d.ts +0 -16
- package/dist/core/mcp/resolve-mcp-servers.d.ts.map +0 -1
- package/dist/core/mcp/resolve-mcp-servers.js +0 -83
- package/dist/core/mcp/resolve-mcp-servers.js.map +0 -1
- package/dist/core/mcp-client.d.ts +0 -99
- package/dist/core/mcp-client.d.ts.map +0 -1
- package/dist/core/mcp-client.js +0 -317
- package/dist/core/mcp-client.js.map +0 -1
- package/dist/core/memory-promotions.d.ts +0 -15
- package/dist/core/memory-promotions.d.ts.map +0 -1
- package/dist/core/memory-promotions.js +0 -38
- package/dist/core/memory-promotions.js.map +0 -1
- package/dist/core/memory.d.ts +0 -32
- package/dist/core/memory.d.ts.map +0 -1
- package/dist/core/memory.js +0 -121
- package/dist/core/memory.js.map +0 -1
- package/dist/core/modes.d.ts +0 -432
- package/dist/core/modes.d.ts.map +0 -1
- package/dist/core/modes.js +0 -1094
- package/dist/core/modes.js.map +0 -1
- package/dist/core/pattern-miner.d.ts +0 -43
- package/dist/core/pattern-miner.d.ts.map +0 -1
- package/dist/core/pattern-miner.js +0 -123
- package/dist/core/pattern-miner.js.map +0 -1
- package/dist/core/permission-store.d.ts +0 -15
- package/dist/core/permission-store.d.ts.map +0 -1
- package/dist/core/permission-store.js +0 -30
- package/dist/core/permission-store.js.map +0 -1
- package/dist/core/permissions.d.ts +0 -33
- package/dist/core/permissions.d.ts.map +0 -1
- package/dist/core/permissions.js +0 -141
- package/dist/core/permissions.js.map +0 -1
- package/dist/core/plan-artifacts.d.ts +0 -10
- package/dist/core/plan-artifacts.d.ts.map +0 -1
- package/dist/core/plan-artifacts.js +0 -60
- package/dist/core/plan-artifacts.js.map +0 -1
- package/dist/core/plan-session.d.ts +0 -25
- package/dist/core/plan-session.d.ts.map +0 -1
- package/dist/core/plan-session.js +0 -99
- package/dist/core/plan-session.js.map +0 -1
- package/dist/core/planMode.d.ts +0 -51
- package/dist/core/planMode.d.ts.map +0 -1
- package/dist/core/planMode.js +0 -245
- package/dist/core/planMode.js.map +0 -1
- package/dist/core/plugins.d.ts +0 -96
- package/dist/core/plugins.d.ts.map +0 -1
- package/dist/core/plugins.js +0 -204
- package/dist/core/plugins.js.map +0 -1
- package/dist/core/session-bridge.d.ts +0 -128
- package/dist/core/session-bridge.d.ts.map +0 -1
- package/dist/core/session-bridge.js +0 -328
- package/dist/core/session-bridge.js.map +0 -1
- package/dist/core/session-manager.d.ts +0 -80
- package/dist/core/session-manager.d.ts.map +0 -1
- package/dist/core/session-manager.js +0 -166
- package/dist/core/session-manager.js.map +0 -1
- package/dist/core/session-memory.d.ts +0 -45
- package/dist/core/session-memory.d.ts.map +0 -1
- package/dist/core/session-memory.js +0 -103
- package/dist/core/session-memory.js.map +0 -1
- package/dist/core/skill-selection.d.ts +0 -36
- package/dist/core/skill-selection.d.ts.map +0 -1
- package/dist/core/skill-selection.js +0 -172
- package/dist/core/skill-selection.js.map +0 -1
- package/dist/core/skills-sh-client.d.ts +0 -19
- package/dist/core/skills-sh-client.d.ts.map +0 -1
- package/dist/core/skills-sh-client.js +0 -75
- package/dist/core/skills-sh-client.js.map +0 -1
- package/dist/core/skills.d.ts +0 -97
- package/dist/core/skills.d.ts.map +0 -1
- package/dist/core/skills.js +0 -339
- package/dist/core/skills.js.map +0 -1
- package/dist/core/swarm.d.ts +0 -34
- package/dist/core/swarm.d.ts.map +0 -1
- package/dist/core/swarm.js +0 -111
- package/dist/core/swarm.js.map +0 -1
- package/dist/core/task-status.d.ts +0 -13
- package/dist/core/task-status.d.ts.map +0 -1
- package/dist/core/task-status.js +0 -17
- package/dist/core/task-status.js.map +0 -1
- package/dist/core/tool-orchestrator.d.ts +0 -30
- package/dist/core/tool-orchestrator.d.ts.map +0 -1
- package/dist/core/tool-orchestrator.js +0 -89
- package/dist/core/tool-orchestrator.js.map +0 -1
- package/dist/core/tools.d.ts +0 -462
- package/dist/core/tools.d.ts.map +0 -1
- package/dist/core/tools.js +0 -2916
- package/dist/core/tools.js.map +0 -1
- package/dist/core/transcript-cleanup.d.ts +0 -8
- package/dist/core/transcript-cleanup.d.ts.map +0 -1
- package/dist/core/transcript-cleanup.js +0 -52
- package/dist/core/transcript-cleanup.js.map +0 -1
- package/dist/core/visual-feedback.d.ts +0 -20
- package/dist/core/visual-feedback.d.ts.map +0 -1
- package/dist/core/visual-feedback.js +0 -117
- package/dist/core/visual-feedback.js.map +0 -1
- package/dist/tools/browser.d.ts +0 -120
- package/dist/tools/browser.d.ts.map +0 -1
- package/dist/tools/browser.js +0 -439
- package/dist/tools/browser.js.map +0 -1
- package/dist/tools/test-generator.d.ts +0 -157
- package/dist/tools/test-generator.d.ts.map +0 -1
- package/dist/tools/test-generator.js +0 -893
- package/dist/tools/test-generator.js.map +0 -1
- package/dist/tui/InkApp.d.ts +0 -21
- package/dist/tui/InkApp.d.ts.map +0 -1
- package/dist/tui/InkApp.js +0 -146
- package/dist/tui/InkApp.js.map +0 -1
- package/dist/tui/MarkdownMessage.d.ts +0 -16
- package/dist/tui/MarkdownMessage.d.ts.map +0 -1
- package/dist/tui/MarkdownMessage.js +0 -63
- package/dist/tui/MarkdownMessage.js.map +0 -1
- package/dist/tui/blessed-chat.d.ts +0 -9
- package/dist/tui/blessed-chat.d.ts.map +0 -1
- package/dist/tui/blessed-chat.js +0 -887
- package/dist/tui/blessed-chat.js.map +0 -1
- package/dist/tui/markdown-to-blessed.d.ts +0 -6
- package/dist/tui/markdown-to-blessed.d.ts.map +0 -1
- package/dist/tui/markdown-to-blessed.js +0 -26
- package/dist/tui/markdown-to-blessed.js.map +0 -1
- package/dist/ui/ink/App.d.ts +0 -25
- package/dist/ui/ink/App.d.ts.map +0 -1
- package/dist/ui/ink/App.js +0 -372
- package/dist/ui/ink/App.js.map +0 -1
- package/dist/utils/at-references.d.ts +0 -14
- package/dist/utils/at-references.d.ts.map +0 -1
- package/dist/utils/at-references.js +0 -47
- package/dist/utils/at-references.js.map +0 -1
- package/dist/utils/auto-memory.d.ts +0 -24
- package/dist/utils/auto-memory.d.ts.map +0 -1
- package/dist/utils/auto-memory.js +0 -153
- package/dist/utils/auto-memory.js.map +0 -1
- package/dist/utils/git.d.ts +0 -89
- package/dist/utils/git.d.ts.map +0 -1
- package/dist/utils/git.js +0 -444
- package/dist/utils/git.js.map +0 -1
- package/dist/utils/mcp-servers-file.d.ts +0 -46
- package/dist/utils/mcp-servers-file.d.ts.map +0 -1
- package/dist/utils/mcp-servers-file.js +0 -212
- package/dist/utils/mcp-servers-file.js.map +0 -1
- package/dist/utils/safety.d.ts +0 -60
- package/dist/utils/safety.d.ts.map +0 -1
- package/dist/utils/safety.js +0 -254
- package/dist/utils/safety.js.map +0 -1
- package/dist/utils/smithery.d.ts +0 -25
- package/dist/utils/smithery.d.ts.map +0 -1
- package/dist/utils/smithery.js +0 -50
- package/dist/utils/smithery.js.map +0 -1
- package/dist/utils/testRunner.d.ts +0 -44
- package/dist/utils/testRunner.d.ts.map +0 -1
- package/dist/utils/testRunner.js +0 -270
- package/dist/utils/testRunner.js.map +0 -1
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
import type { MessageParam } from '@anthropic-ai/sdk/resources/messages';
|
|
2
|
-
export interface SessionStats {
|
|
3
|
-
iterations: number;
|
|
4
|
-
toolCalls: number;
|
|
5
|
-
filesChanged: number;
|
|
6
|
-
changedFiles?: string[];
|
|
7
|
-
}
|
|
8
|
-
export interface SessionMetadata {
|
|
9
|
-
id: string;
|
|
10
|
-
title: string;
|
|
11
|
-
model: string;
|
|
12
|
-
cwd: string;
|
|
13
|
-
parentSessionId?: string;
|
|
14
|
-
created: string;
|
|
15
|
-
updated: string;
|
|
16
|
-
}
|
|
17
|
-
export interface ChatSession extends SessionMetadata {
|
|
18
|
-
messages: MessageParam[];
|
|
19
|
-
stats?: SessionStats;
|
|
20
|
-
}
|
|
21
|
-
/**
|
|
22
|
-
* JSON-based session persistence for chat conversations.
|
|
23
|
-
*
|
|
24
|
-
* Sessions are stored under:
|
|
25
|
-
* ~/.xibecode/sessions/<session-id>.json
|
|
26
|
-
*/
|
|
27
|
-
export declare class SessionManager {
|
|
28
|
-
private readonly sessionsDir;
|
|
29
|
-
constructor(baseDir?: string);
|
|
30
|
-
/**
|
|
31
|
-
* Ensure the sessions directory exists.
|
|
32
|
-
*/
|
|
33
|
-
private ensureDir;
|
|
34
|
-
/**
|
|
35
|
-
* Generate a stable path for a given session id.
|
|
36
|
-
*/
|
|
37
|
-
private getSessionPath;
|
|
38
|
-
/**
|
|
39
|
-
* Create a new session with an optional title.
|
|
40
|
-
*/
|
|
41
|
-
createSession(options: {
|
|
42
|
-
title?: string;
|
|
43
|
-
model: string;
|
|
44
|
-
cwd?: string;
|
|
45
|
-
parentSessionId?: string;
|
|
46
|
-
}): Promise<ChatSession>;
|
|
47
|
-
/**
|
|
48
|
-
* Load a full session by id.
|
|
49
|
-
*/
|
|
50
|
-
loadSession(id: string): Promise<ChatSession | null>;
|
|
51
|
-
/**
|
|
52
|
-
* Save an existing session (updates timestamp automatically).
|
|
53
|
-
*/
|
|
54
|
-
saveSession(session: ChatSession): Promise<void>;
|
|
55
|
-
/**
|
|
56
|
-
* Update a session's messages and stats in one call.
|
|
57
|
-
*/
|
|
58
|
-
saveMessagesAndStats(params: {
|
|
59
|
-
id: string;
|
|
60
|
-
messages: MessageParam[];
|
|
61
|
-
stats?: SessionStats;
|
|
62
|
-
titleFromFirstMessage?: boolean;
|
|
63
|
-
}): Promise<ChatSession | null>;
|
|
64
|
-
/**
|
|
65
|
-
* List all sessions (metadata only), sorted by most recently updated.
|
|
66
|
-
*/
|
|
67
|
-
listSessions(): Promise<SessionMetadata[]>;
|
|
68
|
-
/**
|
|
69
|
-
* Delete a session permanently.
|
|
70
|
-
*/
|
|
71
|
-
deleteSession(id: string): Promise<boolean>;
|
|
72
|
-
/**
|
|
73
|
-
* Utility for callers that want to know where sessions live.
|
|
74
|
-
*/
|
|
75
|
-
getSessionsDirectory(): string;
|
|
76
|
-
private writeSessionFile;
|
|
77
|
-
private generateId;
|
|
78
|
-
private deriveTitleFromText;
|
|
79
|
-
}
|
|
80
|
-
//# sourceMappingURL=session-manager.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"session-manager.d.ts","sourceRoot":"","sources":["../../src/core/session-manager.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AAGzE,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAY,SAAQ,eAAe;IAClD,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,KAAK,CAAC,EAAE,YAAY,CAAC;CACtB;AAED;;;;;GAKG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;gBAEzB,OAAO,CAAC,EAAE,MAAM;IAK5B;;OAEG;YACW,SAAS;IAIvB;;OAEG;IACH,OAAO,CAAC,cAAc;IAItB;;OAEG;IACG,aAAa,CAAC,OAAO,EAAE;QAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;QACd,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,eAAe,CAAC,EAAE,MAAM,CAAC;KAC1B,GAAG,OAAO,CAAC,WAAW,CAAC;IAqBxB;;OAEG;IACG,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAU1D;;OAEG;IACG,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAQtD;;OAEG;IACG,oBAAoB,CAAC,MAAM,EAAE;QACjC,EAAE,EAAE,MAAM,CAAC;QACX,QAAQ,EAAE,YAAY,EAAE,CAAC;QACzB,KAAK,CAAC,EAAE,YAAY,CAAC;QACrB,qBAAqB,CAAC,EAAE,OAAO,CAAC;KACjC,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAsB/B;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;IAqChD;;OAEG;IACG,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IASjD;;OAEG;IACH,oBAAoB,IAAI,MAAM;YAMhB,gBAAgB;IAO9B,OAAO,CAAC,UAAU;IAMlB,OAAO,CAAC,mBAAmB;CAM5B"}
|
|
@@ -1,166 +0,0 @@
|
|
|
1
|
-
import * as fs from 'fs/promises';
|
|
2
|
-
import * as path from 'path';
|
|
3
|
-
import * as os from 'os';
|
|
4
|
-
import { recoverConversation } from './conversation-recovery.js';
|
|
5
|
-
/**
|
|
6
|
-
* JSON-based session persistence for chat conversations.
|
|
7
|
-
*
|
|
8
|
-
* Sessions are stored under:
|
|
9
|
-
* ~/.xibecode/sessions/<session-id>.json
|
|
10
|
-
*/
|
|
11
|
-
export class SessionManager {
|
|
12
|
-
sessionsDir;
|
|
13
|
-
constructor(baseDir) {
|
|
14
|
-
const defaultDir = path.join(os.homedir(), '.xibecode', 'sessions');
|
|
15
|
-
this.sessionsDir = baseDir || defaultDir;
|
|
16
|
-
}
|
|
17
|
-
/**
|
|
18
|
-
* Ensure the sessions directory exists.
|
|
19
|
-
*/
|
|
20
|
-
async ensureDir() {
|
|
21
|
-
await fs.mkdir(this.sessionsDir, { recursive: true });
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* Generate a stable path for a given session id.
|
|
25
|
-
*/
|
|
26
|
-
getSessionPath(id) {
|
|
27
|
-
return path.join(this.sessionsDir, `${id}.json`);
|
|
28
|
-
}
|
|
29
|
-
/**
|
|
30
|
-
* Create a new session with an optional title.
|
|
31
|
-
*/
|
|
32
|
-
async createSession(options) {
|
|
33
|
-
await this.ensureDir();
|
|
34
|
-
const now = new Date().toISOString();
|
|
35
|
-
const id = this.generateId();
|
|
36
|
-
const session = {
|
|
37
|
-
id,
|
|
38
|
-
title: options.title?.trim() || 'Untitled Session',
|
|
39
|
-
model: options.model,
|
|
40
|
-
cwd: options.cwd || process.cwd(),
|
|
41
|
-
parentSessionId: options.parentSessionId,
|
|
42
|
-
created: now,
|
|
43
|
-
updated: now,
|
|
44
|
-
messages: [],
|
|
45
|
-
};
|
|
46
|
-
await this.writeSessionFile(session);
|
|
47
|
-
return session;
|
|
48
|
-
}
|
|
49
|
-
/**
|
|
50
|
-
* Load a full session by id.
|
|
51
|
-
*/
|
|
52
|
-
async loadSession(id) {
|
|
53
|
-
try {
|
|
54
|
-
const raw = await fs.readFile(this.getSessionPath(id), 'utf-8');
|
|
55
|
-
const data = JSON.parse(raw);
|
|
56
|
-
return recoverConversation(data).session;
|
|
57
|
-
}
|
|
58
|
-
catch {
|
|
59
|
-
return null;
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
/**
|
|
63
|
-
* Save an existing session (updates timestamp automatically).
|
|
64
|
-
*/
|
|
65
|
-
async saveSession(session) {
|
|
66
|
-
const updated = {
|
|
67
|
-
...session,
|
|
68
|
-
updated: new Date().toISOString(),
|
|
69
|
-
};
|
|
70
|
-
await this.writeSessionFile(updated);
|
|
71
|
-
}
|
|
72
|
-
/**
|
|
73
|
-
* Update a session's messages and stats in one call.
|
|
74
|
-
*/
|
|
75
|
-
async saveMessagesAndStats(params) {
|
|
76
|
-
const existing = await this.loadSession(params.id);
|
|
77
|
-
if (!existing)
|
|
78
|
-
return null;
|
|
79
|
-
const updated = {
|
|
80
|
-
...existing,
|
|
81
|
-
messages: params.messages,
|
|
82
|
-
stats: params.stats ?? existing.stats,
|
|
83
|
-
};
|
|
84
|
-
// Optionally derive title from the very first user message
|
|
85
|
-
if (params.titleFromFirstMessage && updated.messages.length > 0) {
|
|
86
|
-
const first = updated.messages[0];
|
|
87
|
-
if (first.role === 'user' && typeof first.content === 'string') {
|
|
88
|
-
updated.title = this.deriveTitleFromText(first.content, existing.title);
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
await this.saveSession(updated);
|
|
92
|
-
return updated;
|
|
93
|
-
}
|
|
94
|
-
/**
|
|
95
|
-
* List all sessions (metadata only), sorted by most recently updated.
|
|
96
|
-
*/
|
|
97
|
-
async listSessions() {
|
|
98
|
-
await this.ensureDir();
|
|
99
|
-
let files;
|
|
100
|
-
try {
|
|
101
|
-
files = await fs.readdir(this.sessionsDir);
|
|
102
|
-
}
|
|
103
|
-
catch {
|
|
104
|
-
return [];
|
|
105
|
-
}
|
|
106
|
-
const metas = [];
|
|
107
|
-
const jsonFiles = files.filter((file) => file.endsWith('.json'));
|
|
108
|
-
// Bounded concurrency (chunks of 20) to prevent EMFILE errors while speeding up IO
|
|
109
|
-
const CONCURRENCY_LIMIT = 20;
|
|
110
|
-
for (let i = 0; i < jsonFiles.length; i += CONCURRENCY_LIMIT) {
|
|
111
|
-
const chunk = jsonFiles.slice(i, i + CONCURRENCY_LIMIT);
|
|
112
|
-
await Promise.all(chunk.map(async (file) => {
|
|
113
|
-
const fullPath = path.join(this.sessionsDir, file);
|
|
114
|
-
try {
|
|
115
|
-
const raw = await fs.readFile(fullPath, 'utf-8');
|
|
116
|
-
const data = JSON.parse(raw);
|
|
117
|
-
const { messages: _messages, stats: _stats, ...meta } = data;
|
|
118
|
-
metas.push(meta);
|
|
119
|
-
}
|
|
120
|
-
catch {
|
|
121
|
-
// Ignore malformed files
|
|
122
|
-
}
|
|
123
|
-
}));
|
|
124
|
-
}
|
|
125
|
-
metas.sort((a, b) => b.updated.localeCompare(a.updated));
|
|
126
|
-
return metas;
|
|
127
|
-
}
|
|
128
|
-
/**
|
|
129
|
-
* Delete a session permanently.
|
|
130
|
-
*/
|
|
131
|
-
async deleteSession(id) {
|
|
132
|
-
try {
|
|
133
|
-
await fs.unlink(this.getSessionPath(id));
|
|
134
|
-
return true;
|
|
135
|
-
}
|
|
136
|
-
catch {
|
|
137
|
-
return false;
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
/**
|
|
141
|
-
* Utility for callers that want to know where sessions live.
|
|
142
|
-
*/
|
|
143
|
-
getSessionsDirectory() {
|
|
144
|
-
return this.sessionsDir;
|
|
145
|
-
}
|
|
146
|
-
// ─── Internal helpers ─────────────────────────────────────────
|
|
147
|
-
async writeSessionFile(session) {
|
|
148
|
-
await this.ensureDir();
|
|
149
|
-
const filePath = this.getSessionPath(session.id);
|
|
150
|
-
const payload = JSON.stringify(session, null, 2);
|
|
151
|
-
await fs.writeFile(filePath, payload, 'utf-8');
|
|
152
|
-
}
|
|
153
|
-
generateId() {
|
|
154
|
-
const ts = Date.now().toString(36);
|
|
155
|
-
const rnd = Math.random().toString(36).slice(2, 8);
|
|
156
|
-
return `session-${ts}-${rnd}`;
|
|
157
|
-
}
|
|
158
|
-
deriveTitleFromText(text, fallback) {
|
|
159
|
-
const cleaned = text.trim().replace(/\s+/g, ' ');
|
|
160
|
-
if (!cleaned)
|
|
161
|
-
return fallback;
|
|
162
|
-
const maxLen = 80;
|
|
163
|
-
return cleaned.length <= maxLen ? cleaned : cleaned.slice(0, maxLen - 1) + '…';
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
//# sourceMappingURL=session-manager.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"session-manager.js","sourceRoot":"","sources":["../../src/core/session-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Persistent session memory for a single run (and optionally across runs).
|
|
3
|
-
* Records tool attempts, failures, and "what we learned" to avoid repeating mistakes.
|
|
4
|
-
* Used by the agent to inject a compact summary into the system prompt.
|
|
5
|
-
*/
|
|
6
|
-
export interface AttemptRecord {
|
|
7
|
-
tool: string;
|
|
8
|
-
success: boolean;
|
|
9
|
-
message?: string;
|
|
10
|
-
ts: number;
|
|
11
|
-
}
|
|
12
|
-
export interface SessionMemoryData {
|
|
13
|
-
sessionId: string;
|
|
14
|
-
startedAt: number;
|
|
15
|
-
attempts: AttemptRecord[];
|
|
16
|
-
learnings: string[];
|
|
17
|
-
}
|
|
18
|
-
/**
|
|
19
|
-
* Session memory: persists for the run and optionally to .xibecode/sessions/
|
|
20
|
-
* so future runs can load "what we learned" and recent failures.
|
|
21
|
-
*/
|
|
22
|
-
export declare class SessionMemory {
|
|
23
|
-
private workingDir;
|
|
24
|
-
private sessionId;
|
|
25
|
-
private startedAt;
|
|
26
|
-
private attempts;
|
|
27
|
-
private learnings;
|
|
28
|
-
private persistDir;
|
|
29
|
-
constructor(workingDir: string, sessionId?: string);
|
|
30
|
-
getSessionId(): string;
|
|
31
|
-
/** Record a tool attempt (success or failure). */
|
|
32
|
-
recordAttempt(tool: string, success: boolean, message?: string): void;
|
|
33
|
-
/** Record a short "what we learned" note (e.g. after a failure or retry). */
|
|
34
|
-
recordLearning(summary: string): void;
|
|
35
|
-
/**
|
|
36
|
-
* Compact summary for the system prompt: recent failures + learnings
|
|
37
|
-
* so the agent can avoid repeating the same mistakes.
|
|
38
|
-
*/
|
|
39
|
-
getSummary(): string;
|
|
40
|
-
/** Persist session to .xibecode/sessions/<sessionId>.json for optional cross-run loading. */
|
|
41
|
-
persist(): Promise<void>;
|
|
42
|
-
/** Load a previous session's learnings (e.g. last run) to prime this run. */
|
|
43
|
-
loadPreviousLearnings(limit?: number): Promise<void>;
|
|
44
|
-
}
|
|
45
|
-
//# sourceMappingURL=session-memory.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"session-memory.d.ts","sourceRoot":"","sources":["../../src/core/session-memory.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAMD;;;GAGG;AACH,qBAAa,aAAa;IAQtB,OAAO,CAAC,UAAU;IAPpB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,QAAQ,CAAuB;IACvC,OAAO,CAAC,SAAS,CAAgB;IACjC,OAAO,CAAC,UAAU,CAAS;gBAGjB,UAAU,EAAE,MAAM,EAC1B,SAAS,CAAC,EAAE,MAAM;IAOpB,YAAY,IAAI,MAAM;IAItB,kDAAkD;IAClD,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI;IASrE,6EAA6E;IAC7E,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAKrC;;;OAGG;IACH,UAAU,IAAI,MAAM;IAmBpB,6FAA6F;IACvF,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAgB9B,6EAA6E;IACvE,qBAAqB,CAAC,KAAK,GAAE,MAAiC,GAAG,OAAO,CAAC,IAAI,CAAC;CAgBrF"}
|
|
@@ -1,103 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Persistent session memory for a single run (and optionally across runs).
|
|
3
|
-
* Records tool attempts, failures, and "what we learned" to avoid repeating mistakes.
|
|
4
|
-
* Used by the agent to inject a compact summary into the system prompt.
|
|
5
|
-
*/
|
|
6
|
-
import * as fs from 'fs/promises';
|
|
7
|
-
import * as path from 'path';
|
|
8
|
-
const MAX_ATTEMPTS_IN_SUMMARY = 15;
|
|
9
|
-
const MAX_LEARNINGS_IN_SUMMARY = 5;
|
|
10
|
-
const SUMMARY_FAILURE_CAP = 8;
|
|
11
|
-
/**
|
|
12
|
-
* Session memory: persists for the run and optionally to .xibecode/sessions/
|
|
13
|
-
* so future runs can load "what we learned" and recent failures.
|
|
14
|
-
*/
|
|
15
|
-
export class SessionMemory {
|
|
16
|
-
workingDir;
|
|
17
|
-
sessionId;
|
|
18
|
-
startedAt;
|
|
19
|
-
attempts = [];
|
|
20
|
-
learnings = [];
|
|
21
|
-
persistDir;
|
|
22
|
-
constructor(workingDir, sessionId) {
|
|
23
|
-
this.workingDir = workingDir;
|
|
24
|
-
this.sessionId = sessionId ?? `run_${Date.now()}`;
|
|
25
|
-
this.startedAt = Date.now();
|
|
26
|
-
this.persistDir = path.join(workingDir, '.xibecode', 'sessions');
|
|
27
|
-
}
|
|
28
|
-
getSessionId() {
|
|
29
|
-
return this.sessionId;
|
|
30
|
-
}
|
|
31
|
-
/** Record a tool attempt (success or failure). */
|
|
32
|
-
recordAttempt(tool, success, message) {
|
|
33
|
-
this.attempts.push({
|
|
34
|
-
tool,
|
|
35
|
-
success,
|
|
36
|
-
message: message && message.slice(0, 500),
|
|
37
|
-
ts: Date.now(),
|
|
38
|
-
});
|
|
39
|
-
}
|
|
40
|
-
/** Record a short "what we learned" note (e.g. after a failure or retry). */
|
|
41
|
-
recordLearning(summary) {
|
|
42
|
-
const s = summary.trim().slice(0, 500);
|
|
43
|
-
if (s)
|
|
44
|
-
this.learnings.push(s);
|
|
45
|
-
}
|
|
46
|
-
/**
|
|
47
|
-
* Compact summary for the system prompt: recent failures + learnings
|
|
48
|
-
* so the agent can avoid repeating the same mistakes.
|
|
49
|
-
*/
|
|
50
|
-
getSummary() {
|
|
51
|
-
const failures = this.attempts
|
|
52
|
-
.filter(a => !a.success)
|
|
53
|
-
.slice(-SUMMARY_FAILURE_CAP)
|
|
54
|
-
.map(a => `- ${a.tool}${a.message ? `: ${a.message}` : ''}`);
|
|
55
|
-
const recentLearnings = this.learnings.slice(-MAX_LEARNINGS_IN_SUMMARY);
|
|
56
|
-
const parts = [];
|
|
57
|
-
if (failures.length > 0) {
|
|
58
|
-
parts.push('Recent failures to avoid repeating:\n' + failures.join('\n'));
|
|
59
|
-
}
|
|
60
|
-
if (recentLearnings.length > 0) {
|
|
61
|
-
parts.push('Session learnings:\n' + recentLearnings.map(l => `- ${l}`).join('\n'));
|
|
62
|
-
}
|
|
63
|
-
if (parts.length === 0)
|
|
64
|
-
return '';
|
|
65
|
-
return '\n## Session memory (this run)\n\n' + parts.join('\n\n') + '\n';
|
|
66
|
-
}
|
|
67
|
-
/** Persist session to .xibecode/sessions/<sessionId>.json for optional cross-run loading. */
|
|
68
|
-
async persist() {
|
|
69
|
-
try {
|
|
70
|
-
await fs.mkdir(this.persistDir, { recursive: true });
|
|
71
|
-
const data = {
|
|
72
|
-
sessionId: this.sessionId,
|
|
73
|
-
startedAt: this.startedAt,
|
|
74
|
-
attempts: this.attempts.slice(-MAX_ATTEMPTS_IN_SUMMARY * 2),
|
|
75
|
-
learnings: this.learnings,
|
|
76
|
-
};
|
|
77
|
-
const file = path.join(this.persistDir, `${this.sessionId}.json`);
|
|
78
|
-
await fs.writeFile(file, JSON.stringify(data, null, 2), 'utf-8');
|
|
79
|
-
}
|
|
80
|
-
catch {
|
|
81
|
-
// Non-fatal
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
/** Load a previous session's learnings (e.g. last run) to prime this run. */
|
|
85
|
-
async loadPreviousLearnings(limit = MAX_LEARNINGS_IN_SUMMARY) {
|
|
86
|
-
try {
|
|
87
|
-
const entries = await fs.readdir(this.persistDir).catch(() => []);
|
|
88
|
-
const jsonFiles = entries.filter(f => f.endsWith('.json')).sort().reverse();
|
|
89
|
-
for (const f of jsonFiles.slice(0, 3)) {
|
|
90
|
-
const content = await fs.readFile(path.join(this.persistDir, f), 'utf-8');
|
|
91
|
-
const data = JSON.parse(content);
|
|
92
|
-
if (data.learnings?.length) {
|
|
93
|
-
this.learnings.push(...data.learnings.slice(-limit));
|
|
94
|
-
break;
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
catch {
|
|
99
|
-
// Non-fatal
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
//# sourceMappingURL=session-memory.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"session-memory.js","sourceRoot":"","sources":["../../src/core/session-memory.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAgB7B,MAAM,uBAAuB,GAAG,EAAE,CAAC;AACnC,MAAM,wBAAwB,GAAG,CAAC,CAAC;AACnC,MAAM,mBAAmB,GAAG,CAAC,CAAC;AAE9B;;;GAGG;AACH,MAAM,OAAO,aAAa;IAQd;IAPF,SAAS,CAAS;IAClB,SAAS,CAAS;IAClB,QAAQ,GAAoB,EAAE,CAAC;IAC/B,SAAS,GAAa,EAAE,CAAC;IACzB,UAAU,CAAS;IAE3B,YACU,UAAkB,EAC1B,SAAkB;QADV,eAAU,GAAV,UAAU,CAAQ;QAG1B,IAAI,CAAC,SAAS,GAAG,SAAS,IAAI,OAAO,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;QAClD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC5B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC;IACnE,CAAC;IAED,YAAY;QACV,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,kDAAkD;IAClD,aAAa,CAAC,IAAY,EAAE,OAAgB,EAAE,OAAgB;QAC5D,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YACjB,IAAI;YACJ,OAAO;YACP,OAAO,EAAE,OAAO,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;YACzC,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;SACf,CAAC,CAAC;IACL,CAAC;IAED,6EAA6E;IAC7E,cAAc,CAAC,OAAe;QAC5B,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACvC,IAAI,CAAC;YAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAChC,CAAC;IAED;;;OAGG;IACH,UAAU;QACR,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ;aAC3B,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;aACvB,KAAK,CAAC,CAAC,mBAAmB,CAAC;aAC3B,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAE/D,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,wBAAwB,CAAC,CAAC;QAExE,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,KAAK,CAAC,IAAI,CAAC,uCAAuC,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC5E,CAAC;QACD,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/B,KAAK,CAAC,IAAI,CAAC,sBAAsB,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACrF,CAAC;QACD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAClC,OAAO,oCAAoC,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;IAC1E,CAAC;IAED,6FAA6F;IAC7F,KAAK,CAAC,OAAO;QACX,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACrD,MAAM,IAAI,GAAsB;gBAC9B,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,uBAAuB,GAAG,CAAC,CAAC;gBAC3D,SAAS,EAAE,IAAI,CAAC,SAAS;aAC1B,CAAC;YACF,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,SAAS,OAAO,CAAC,CAAC;YAClE,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QACnE,CAAC;QAAC,MAAM,CAAC;YACP,YAAY;QACd,CAAC;IACH,CAAC;IAED,6EAA6E;IAC7E,KAAK,CAAC,qBAAqB,CAAC,QAAgB,wBAAwB;QAClE,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;YAClE,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;YAC5E,KAAK,MAAM,CAAC,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;gBACtC,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;gBAC1E,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAsB,CAAC;gBACtD,IAAI,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC;oBAC3B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;oBACrD,MAAM;gBACR,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,YAAY;QACd,CAAC;IACH,CAAC;CACF"}
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
/** Minimal skill shape for selection (matches `Skill` from skills.ts). */
|
|
2
|
-
export interface SkillLike {
|
|
3
|
-
name: string;
|
|
4
|
-
description: string;
|
|
5
|
-
tags?: string[];
|
|
6
|
-
instructions: string;
|
|
7
|
-
}
|
|
8
|
-
/** Always injected — safe CLI/automation habits regardless of task wording. */
|
|
9
|
-
export declare const CORE_BUNDLED_SKILL_NAMES: readonly ["sandbox-autonomous"];
|
|
10
|
-
export interface SkillSelectionOptions {
|
|
11
|
-
/** Max skills including core (default 12). */
|
|
12
|
-
maxSkills?: number;
|
|
13
|
-
/** Minimum skills when the catalog has enough entries (pads with next-best scores). Default 5. */
|
|
14
|
-
minSkills?: number;
|
|
15
|
-
/** Include skills at or above this relevance score before padding (default 2). */
|
|
16
|
-
minScore?: number;
|
|
17
|
-
}
|
|
18
|
-
export declare function tokenizeTaskPrompt(taskPrompt: string): string[];
|
|
19
|
-
/** dependency + devDependency names (and scoped short names) from package.json */
|
|
20
|
-
export declare function extractDepTokens(pkg: {
|
|
21
|
-
dependencies?: Record<string, string>;
|
|
22
|
-
devDependencies?: Record<string, string>;
|
|
23
|
-
peerDependencies?: Record<string, string>;
|
|
24
|
-
optionalDependencies?: Record<string, string>;
|
|
25
|
-
}): Set<string>;
|
|
26
|
-
/**
|
|
27
|
-
* Score how relevant a bundled skill is to the task prompt and dependency tokens.
|
|
28
|
-
*/
|
|
29
|
-
export declare function scoreSkillRelevance(skill: SkillLike, promptTokens: string[], depTokens: Set<string>): number;
|
|
30
|
-
/**
|
|
31
|
-
* Pick a subset of bundled skills: core names first, then prompt/dependency matches (score ≥ threshold),
|
|
32
|
-
* then pad to minSkills with next-best entries. Does not fill to maxSkills with unrelated skills.
|
|
33
|
-
*/
|
|
34
|
-
export declare function selectRelevantBuiltInSkills(builtInSkills: SkillLike[], taskPrompt: string, depTokens: Set<string>, options?: SkillSelectionOptions): SkillLike[];
|
|
35
|
-
export declare function formatSelectionSummary(selected: SkillLike[], totalBundled: number): string;
|
|
36
|
-
//# sourceMappingURL=skill-selection.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"skill-selection.d.ts","sourceRoot":"","sources":["../../src/core/skill-selection.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,MAAM,WAAW,SAAS;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;CACxB;AAED,+EAA+E;AAC/E,eAAO,MAAM,wBAAwB,iCAAkC,CAAC;AAqDxE,MAAM,WAAW,qBAAqB;IAClC,8CAA8C;IAC9C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kGAAkG;IAClG,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kFAAkF;IAClF,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,CAK/D;AAED,kFAAkF;AAClF,wBAAgB,gBAAgB,CAAC,GAAG,EAAE;IAClC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1C,oBAAoB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjD,GAAG,GAAG,CAAC,MAAM,CAAC,CAqBd;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,MAAM,CAwB5G;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,CACvC,aAAa,EAAE,SAAS,EAAE,EAC1B,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,EACtB,OAAO,CAAC,EAAE,qBAAqB,GAChC,SAAS,EAAE,CAgDb;AAED,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,SAAS,EAAE,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAG1F"}
|
|
@@ -1,172 +0,0 @@
|
|
|
1
|
-
/** Always injected — safe CLI/automation habits regardless of task wording. */
|
|
2
|
-
export const CORE_BUNDLED_SKILL_NAMES = ['sandbox-autonomous'];
|
|
3
|
-
const PROMPT_STOPWORDS = new Set([
|
|
4
|
-
'the',
|
|
5
|
-
'and',
|
|
6
|
-
'for',
|
|
7
|
-
'with',
|
|
8
|
-
'this',
|
|
9
|
-
'that',
|
|
10
|
-
'from',
|
|
11
|
-
'your',
|
|
12
|
-
'have',
|
|
13
|
-
'has',
|
|
14
|
-
'are',
|
|
15
|
-
'was',
|
|
16
|
-
'were',
|
|
17
|
-
'will',
|
|
18
|
-
'can',
|
|
19
|
-
'not',
|
|
20
|
-
'you',
|
|
21
|
-
'into',
|
|
22
|
-
'about',
|
|
23
|
-
'when',
|
|
24
|
-
'what',
|
|
25
|
-
'which',
|
|
26
|
-
'their',
|
|
27
|
-
'them',
|
|
28
|
-
'then',
|
|
29
|
-
'than',
|
|
30
|
-
'also',
|
|
31
|
-
'just',
|
|
32
|
-
'add',
|
|
33
|
-
'all',
|
|
34
|
-
'get',
|
|
35
|
-
'use',
|
|
36
|
-
'using',
|
|
37
|
-
'new',
|
|
38
|
-
'how',
|
|
39
|
-
'out',
|
|
40
|
-
'our',
|
|
41
|
-
'but',
|
|
42
|
-
'any',
|
|
43
|
-
'its',
|
|
44
|
-
'may',
|
|
45
|
-
'now',
|
|
46
|
-
'one',
|
|
47
|
-
'two',
|
|
48
|
-
'way',
|
|
49
|
-
'who',
|
|
50
|
-
'did',
|
|
51
|
-
'let',
|
|
52
|
-
]);
|
|
53
|
-
export function tokenizeTaskPrompt(taskPrompt) {
|
|
54
|
-
const lower = taskPrompt.toLowerCase();
|
|
55
|
-
return lower
|
|
56
|
-
.split(/[^a-z0-9]+/g)
|
|
57
|
-
.filter((t) => t.length >= 3 && !PROMPT_STOPWORDS.has(t));
|
|
58
|
-
}
|
|
59
|
-
/** dependency + devDependency names (and scoped short names) from package.json */
|
|
60
|
-
export function extractDepTokens(pkg) {
|
|
61
|
-
const out = new Set();
|
|
62
|
-
const addKey = (k) => {
|
|
63
|
-
const key = k.toLowerCase();
|
|
64
|
-
out.add(key);
|
|
65
|
-
if (key.startsWith('@')) {
|
|
66
|
-
const parts = key.split('/');
|
|
67
|
-
const short = parts[parts.length - 1];
|
|
68
|
-
if (short && short.length > 1)
|
|
69
|
-
out.add(short);
|
|
70
|
-
if (parts.length >= 2)
|
|
71
|
-
out.add(parts.slice(0, 2).join('/'));
|
|
72
|
-
}
|
|
73
|
-
};
|
|
74
|
-
const merge = (obj) => {
|
|
75
|
-
if (!obj)
|
|
76
|
-
return;
|
|
77
|
-
for (const k of Object.keys(obj))
|
|
78
|
-
addKey(k);
|
|
79
|
-
};
|
|
80
|
-
merge(pkg.dependencies);
|
|
81
|
-
merge(pkg.devDependencies);
|
|
82
|
-
merge(pkg.peerDependencies);
|
|
83
|
-
merge(pkg.optionalDependencies);
|
|
84
|
-
return out;
|
|
85
|
-
}
|
|
86
|
-
/**
|
|
87
|
-
* Score how relevant a bundled skill is to the task prompt and dependency tokens.
|
|
88
|
-
*/
|
|
89
|
-
export function scoreSkillRelevance(skill, promptTokens, depTokens) {
|
|
90
|
-
const text = [skill.name, skill.description, ...(skill.tags || [])].join(' ').toLowerCase();
|
|
91
|
-
const nameLower = skill.name.toLowerCase().replace(/-/g, ' ');
|
|
92
|
-
let score = 0;
|
|
93
|
-
for (const t of promptTokens) {
|
|
94
|
-
if (t.length < 3)
|
|
95
|
-
continue;
|
|
96
|
-
if (text.includes(t) || nameLower.includes(t))
|
|
97
|
-
score += 3;
|
|
98
|
-
}
|
|
99
|
-
for (const d of depTokens) {
|
|
100
|
-
if (d.length < 2)
|
|
101
|
-
continue;
|
|
102
|
-
if (text.includes(d))
|
|
103
|
-
score += 5;
|
|
104
|
-
if (skill.name.toLowerCase().includes(d.replace(/[@/]/g, '-')))
|
|
105
|
-
score += 4;
|
|
106
|
-
}
|
|
107
|
-
// Light synonym hints when deps are empty but prompt mentions stacks
|
|
108
|
-
if (depTokens.size === 0 && promptTokens.length > 0) {
|
|
109
|
-
const joined = promptTokens.join(' ');
|
|
110
|
-
if (joined.includes('react') && (skill.name.includes('react') || text.includes('react')))
|
|
111
|
-
score += 2;
|
|
112
|
-
if (joined.includes('next') && skill.name.includes('next'))
|
|
113
|
-
score += 2;
|
|
114
|
-
}
|
|
115
|
-
return score;
|
|
116
|
-
}
|
|
117
|
-
/**
|
|
118
|
-
* Pick a subset of bundled skills: core names first, then prompt/dependency matches (score ≥ threshold),
|
|
119
|
-
* then pad to minSkills with next-best entries. Does not fill to maxSkills with unrelated skills.
|
|
120
|
-
*/
|
|
121
|
-
export function selectRelevantBuiltInSkills(builtInSkills, taskPrompt, depTokens, options) {
|
|
122
|
-
const maxSkills = Math.max(1, options?.maxSkills ?? 12);
|
|
123
|
-
const minSkills = Math.min(maxSkills, Math.max(1, options?.minSkills ?? 5));
|
|
124
|
-
const minScore = options?.minScore ?? 2;
|
|
125
|
-
if (builtInSkills.length === 0)
|
|
126
|
-
return [];
|
|
127
|
-
const byName = new Map(builtInSkills.map((s) => [s.name, s]));
|
|
128
|
-
const promptTokens = tokenizeTaskPrompt(taskPrompt);
|
|
129
|
-
const scored = builtInSkills.map((s) => ({
|
|
130
|
-
skill: s,
|
|
131
|
-
score: scoreSkillRelevance(s, promptTokens, depTokens),
|
|
132
|
-
}));
|
|
133
|
-
scored.sort((a, b) => {
|
|
134
|
-
if (b.score !== a.score)
|
|
135
|
-
return b.score - a.score;
|
|
136
|
-
return a.skill.name.localeCompare(b.skill.name);
|
|
137
|
-
});
|
|
138
|
-
const selected = [];
|
|
139
|
-
const seen = new Set();
|
|
140
|
-
for (const name of CORE_BUNDLED_SKILL_NAMES) {
|
|
141
|
-
const sk = byName.get(name);
|
|
142
|
-
if (sk && !seen.has(sk.name)) {
|
|
143
|
-
selected.push(sk);
|
|
144
|
-
seen.add(sk.name);
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
for (const { skill, score } of scored) {
|
|
148
|
-
if (seen.has(skill.name))
|
|
149
|
-
continue;
|
|
150
|
-
if (selected.length >= maxSkills)
|
|
151
|
-
break;
|
|
152
|
-
if (score >= minScore) {
|
|
153
|
-
selected.push(skill);
|
|
154
|
-
seen.add(skill.name);
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
for (const { skill } of scored) {
|
|
158
|
-
if (selected.length >= minSkills || selected.length >= maxSkills)
|
|
159
|
-
break;
|
|
160
|
-
if (seen.has(skill.name))
|
|
161
|
-
continue;
|
|
162
|
-
selected.push(skill);
|
|
163
|
-
seen.add(skill.name);
|
|
164
|
-
}
|
|
165
|
-
return selected.slice(0, maxSkills);
|
|
166
|
-
}
|
|
167
|
-
export function formatSelectionSummary(selected, totalBundled) {
|
|
168
|
-
if (totalBundled === 0)
|
|
169
|
-
return '';
|
|
170
|
-
return `Selected **${selected.length}** of **${totalBundled}** bundled skills for this run (from your task wording and \`package.json\` dependencies).`;
|
|
171
|
-
}
|
|
172
|
-
//# sourceMappingURL=skill-selection.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"skill-selection.js","sourceRoot":"","sources":["../../src/core/skill-selection.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
export interface SkillsShResult {
|
|
2
|
-
id: string;
|
|
3
|
-
url: string;
|
|
4
|
-
}
|
|
5
|
-
export declare class SkillsShClient {
|
|
6
|
-
/**
|
|
7
|
-
* Search for skills using `npx skills find`
|
|
8
|
-
*/
|
|
9
|
-
search(query: string): Promise<SkillsShResult[]>;
|
|
10
|
-
/**
|
|
11
|
-
* Install a skill using `npx skills add`
|
|
12
|
-
* Note: This CLI installs skills to the local project or global scope.
|
|
13
|
-
* We'll try to detect where it went or just let it install to the cwd by default
|
|
14
|
-
* and then move it if necessary, but for now we trust `npx skills add` to do its thing.
|
|
15
|
-
*/
|
|
16
|
-
install(skillId: string, targetDir: string): Promise<string | null>;
|
|
17
|
-
private parseSearchResults;
|
|
18
|
-
}
|
|
19
|
-
//# sourceMappingURL=skills-sh-client.d.ts.map
|