@polka-codes/cli-shared 0.10.1 → 0.10.5
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/config.d.ts +13 -0
- package/dist/config.js +202 -0
- package/dist/config.js.map +1 -0
- package/dist/config.parameters.test.d.ts +1 -0
- package/dist/config.parameters.test.js +240 -0
- package/dist/config.parameters.test.js.map +1 -0
- package/dist/config.rules.test.d.ts +1 -0
- package/dist/config.rules.test.js +92 -0
- package/dist/config.rules.test.js.map +1 -0
- package/dist/config.test.d.ts +1 -0
- package/dist/config.test.js +311 -0
- package/dist/config.test.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.js +694 -70817
- package/dist/index.js.map +1 -0
- package/dist/memory-manager.d.ts +52 -0
- package/dist/memory-manager.js +76 -0
- package/dist/memory-manager.js.map +1 -0
- package/dist/project-scope.d.ts +10 -0
- package/dist/project-scope.js +67 -0
- package/dist/project-scope.js.map +1 -0
- package/dist/provider.d.ts +32 -0
- package/dist/provider.js +366 -0
- package/dist/provider.js.map +1 -0
- package/dist/provider.test.d.ts +1 -0
- package/dist/provider.test.js +21 -0
- package/dist/provider.test.js.map +1 -0
- package/dist/sqlite-memory-store.d.ts +112 -0
- package/dist/sqlite-memory-store.js +919 -0
- package/dist/sqlite-memory-store.js.map +1 -0
- package/dist/sqlite-memory-store.test.d.ts +1 -0
- package/dist/sqlite-memory-store.test.js +661 -0
- package/dist/sqlite-memory-store.test.js.map +1 -0
- package/dist/utils/__tests__/parameterSimplifier.test.d.ts +1 -0
- package/dist/utils/__tests__/parameterSimplifier.test.js +137 -0
- package/dist/utils/__tests__/parameterSimplifier.test.js.map +1 -0
- package/dist/utils/checkRipgrep.d.ts +5 -0
- package/dist/utils/checkRipgrep.js +22 -0
- package/dist/utils/checkRipgrep.js.map +1 -0
- package/dist/utils/eventHandler.d.ts +11 -0
- package/dist/utils/eventHandler.js +196 -0
- package/dist/utils/eventHandler.js.map +1 -0
- package/dist/utils/eventHandler.test.d.ts +1 -0
- package/dist/utils/eventHandler.test.js +31 -0
- package/dist/utils/eventHandler.test.js.map +1 -0
- package/dist/utils/index.d.ts +6 -0
- package/dist/utils/index.js +7 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/listFiles.d.ts +12 -0
- package/dist/utils/listFiles.js +136 -0
- package/dist/utils/listFiles.js.map +1 -0
- package/dist/utils/listFiles.test.d.ts +1 -0
- package/dist/utils/listFiles.test.js +64 -0
- package/dist/utils/listFiles.test.js.map +1 -0
- package/dist/utils/parameterSimplifier.d.ts +1 -0
- package/dist/utils/parameterSimplifier.js +65 -0
- package/dist/utils/parameterSimplifier.js.map +1 -0
- package/dist/utils/readMultiline.d.ts +1 -0
- package/dist/utils/readMultiline.js +19 -0
- package/dist/utils/readMultiline.js.map +1 -0
- package/dist/utils/search.constants.d.ts +7 -0
- package/dist/utils/search.constants.js +8 -0
- package/dist/utils/search.constants.js.map +1 -0
- package/dist/utils/searchFiles.d.ts +12 -0
- package/dist/utils/searchFiles.js +72 -0
- package/dist/utils/searchFiles.js.map +1 -0
- package/dist/utils/searchFiles.test.d.ts +1 -0
- package/dist/utils/searchFiles.test.js +140 -0
- package/dist/utils/searchFiles.test.js.map +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAA;AACxB,cAAc,kBAAkB,CAAA;AAChC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,YAAY,CAAA;AAC1B,cAAc,uBAAuB,CAAA;AACrC,cAAc,SAAS,CAAA"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { DatabaseStats, IMemoryStore, MemoryEntry, MemoryOperation, MemoryQuery, QueryOptions } from '@polka-codes/core';
|
|
2
|
+
/**
|
|
3
|
+
* Memory Manager
|
|
4
|
+
*
|
|
5
|
+
* This class provides core memory management logic that is independent
|
|
6
|
+
* of the storage backend. It implements the IMemoryStore interface and
|
|
7
|
+
* delegates storage operations to the provided store implementation.
|
|
8
|
+
*
|
|
9
|
+
* This allows the same business logic to be used with different storage
|
|
10
|
+
* backends (SQLite, PostgreSQL, Redis, etc.)
|
|
11
|
+
*/
|
|
12
|
+
export declare class MemoryManager implements IMemoryStore {
|
|
13
|
+
private store;
|
|
14
|
+
constructor(store: IMemoryStore);
|
|
15
|
+
/**
|
|
16
|
+
* Read memory by topic name
|
|
17
|
+
*/
|
|
18
|
+
readMemory(topic: string): Promise<string | undefined>;
|
|
19
|
+
/**
|
|
20
|
+
* Update memory with operation
|
|
21
|
+
*/
|
|
22
|
+
updateMemory(operation: 'append' | 'replace' | 'remove', topic: string, content: string | undefined, metadata?: {
|
|
23
|
+
entry_type?: string;
|
|
24
|
+
status?: string;
|
|
25
|
+
priority?: string;
|
|
26
|
+
tags?: string;
|
|
27
|
+
created_at?: number;
|
|
28
|
+
updated_at?: number;
|
|
29
|
+
last_accessed?: number;
|
|
30
|
+
}): Promise<void>;
|
|
31
|
+
/**
|
|
32
|
+
* Query memory with filters
|
|
33
|
+
*/
|
|
34
|
+
queryMemory(query?: MemoryQuery, options?: QueryOptions): Promise<MemoryEntry[] | number>;
|
|
35
|
+
/**
|
|
36
|
+
* Batch update memory
|
|
37
|
+
*/
|
|
38
|
+
batchUpdateMemory(operations: MemoryOperation[]): Promise<void>;
|
|
39
|
+
/**
|
|
40
|
+
* Get database statistics
|
|
41
|
+
*/
|
|
42
|
+
getStats(): Promise<DatabaseStats>;
|
|
43
|
+
/**
|
|
44
|
+
* Close the memory store
|
|
45
|
+
*/
|
|
46
|
+
close(): Promise<void>;
|
|
47
|
+
/**
|
|
48
|
+
* Execute a transaction
|
|
49
|
+
* Exposes the underlying store's transaction method if available
|
|
50
|
+
*/
|
|
51
|
+
transaction<T>(callback: () => Promise<T>): Promise<T>;
|
|
52
|
+
}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Memory Manager
|
|
3
|
+
*
|
|
4
|
+
* This class provides core memory management logic that is independent
|
|
5
|
+
* of the storage backend. It implements the IMemoryStore interface and
|
|
6
|
+
* delegates storage operations to the provided store implementation.
|
|
7
|
+
*
|
|
8
|
+
* This allows the same business logic to be used with different storage
|
|
9
|
+
* backends (SQLite, PostgreSQL, Redis, etc.)
|
|
10
|
+
*/
|
|
11
|
+
export class MemoryManager {
|
|
12
|
+
store;
|
|
13
|
+
constructor(store) {
|
|
14
|
+
this.store = store;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Read memory by topic name
|
|
18
|
+
*/
|
|
19
|
+
async readMemory(topic) {
|
|
20
|
+
return this.store.readMemory(topic);
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Update memory with operation
|
|
24
|
+
*/
|
|
25
|
+
async updateMemory(operation, topic, content, metadata) {
|
|
26
|
+
return this.store.updateMemory(operation, topic, content, metadata);
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Query memory with filters
|
|
30
|
+
*/
|
|
31
|
+
async queryMemory(query = {}, options) {
|
|
32
|
+
// Apply default safety limit if not specified
|
|
33
|
+
const finalQuery = {
|
|
34
|
+
...query,
|
|
35
|
+
};
|
|
36
|
+
// Only apply default limit for select operations, and if no explicit limit is set
|
|
37
|
+
// Skip for count, delete operations or when limit is explicitly set
|
|
38
|
+
const operation = options?.operation;
|
|
39
|
+
if ((operation === 'select' || !operation) && !finalQuery.limit) {
|
|
40
|
+
finalQuery.limit = 1000;
|
|
41
|
+
}
|
|
42
|
+
return this.store.queryMemory(finalQuery, options);
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Batch update memory
|
|
46
|
+
*/
|
|
47
|
+
async batchUpdateMemory(operations) {
|
|
48
|
+
return this.store.batchUpdateMemory(operations);
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Get database statistics
|
|
52
|
+
*/
|
|
53
|
+
async getStats() {
|
|
54
|
+
return this.store.getStats();
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Close the memory store
|
|
58
|
+
*/
|
|
59
|
+
async close() {
|
|
60
|
+
await this.store.close();
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Execute a transaction
|
|
64
|
+
* Exposes the underlying store's transaction method if available
|
|
65
|
+
*/
|
|
66
|
+
async transaction(callback) {
|
|
67
|
+
// Check if the underlying store supports transactions
|
|
68
|
+
const storeWithTransaction = this.store;
|
|
69
|
+
if (typeof storeWithTransaction.transaction === 'function') {
|
|
70
|
+
return storeWithTransaction.transaction(callback);
|
|
71
|
+
}
|
|
72
|
+
// If no transaction support, run the callback directly
|
|
73
|
+
return callback();
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=memory-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-manager.js","sourceRoot":"","sources":["../src/memory-manager.ts"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AACH,MAAM,OAAO,aAAa;IAChB,KAAK,CAAc;IAE3B,YAAY,KAAmB;QAC7B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;IACpB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU,CAAC,KAAa;QAC5B,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAA;IACrC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY,CAChB,SAA0C,EAC1C,KAAa,EACb,OAA2B,EAC3B,QAQC;QAED,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAA;IACrE,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW,CAAC,QAAqB,EAAE,EAAE,OAAsB;QAC/D,8CAA8C;QAC9C,MAAM,UAAU,GAAgB;YAC9B,GAAG,KAAK;SACT,CAAA;QACD,kFAAkF;QAClF,oEAAoE;QACpE,MAAM,SAAS,GAAG,OAAO,EAAE,SAAS,CAAA;QACpC,IAAI,CAAC,SAAS,KAAK,QAAQ,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;YAChE,UAAU,CAAC,KAAK,GAAG,IAAI,CAAA;QACzB,CAAC;QAED,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;IACpD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,iBAAiB,CAAC,UAA6B;QACnD,OAAO,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAA;IACjD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ;QACZ,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAA;IAC9B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK;QACT,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAA;IAC1B,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,WAAW,CAAI,QAA0B;QAC7C,sDAAsD;QACtD,MAAM,oBAAoB,GAAG,IAAI,CAAC,KAAqE,CAAA;QACvG,IAAI,OAAO,oBAAoB,CAAC,WAAW,KAAK,UAAU,EAAE,CAAC;YAC3D,OAAO,oBAAoB,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAA;QACnD,CAAC;QACD,uDAAuD;QACvD,OAAO,QAAQ,EAAE,CAAA;IACnB,CAAC;CACF"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Detect project scope from current working directory
|
|
3
|
+
*
|
|
4
|
+
* This function determines whether we're in a project directory or global scope.
|
|
5
|
+
* It looks for common project markers (.git, package.json, etc.) to identify the project root.
|
|
6
|
+
*
|
|
7
|
+
* @param cwd - Current working directory
|
|
8
|
+
* @returns A scope string ('global' or 'project:/absolute/path')
|
|
9
|
+
*/
|
|
10
|
+
export declare function detectProjectScope(cwd: string): string;
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { existsSync } from 'node:fs';
|
|
2
|
+
import { dirname, normalize, resolve, sep } from 'node:path';
|
|
3
|
+
/**
|
|
4
|
+
* Detect project scope from current working directory
|
|
5
|
+
*
|
|
6
|
+
* This function determines whether we're in a project directory or global scope.
|
|
7
|
+
* It looks for common project markers (.git, package.json, etc.) to identify the project root.
|
|
8
|
+
*
|
|
9
|
+
* @param cwd - Current working directory
|
|
10
|
+
* @returns A scope string ('global' or 'project:/absolute/path')
|
|
11
|
+
*/
|
|
12
|
+
export function detectProjectScope(cwd) {
|
|
13
|
+
const projectPath = findProjectRoot(cwd);
|
|
14
|
+
if (!projectPath) {
|
|
15
|
+
return 'global';
|
|
16
|
+
}
|
|
17
|
+
const normalizedPath = normalizePath(projectPath);
|
|
18
|
+
return `project:${normalizedPath}`;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Find the project root directory by looking for common project markers
|
|
22
|
+
*/
|
|
23
|
+
function findProjectRoot(dir) {
|
|
24
|
+
// Check if we're still in a valid directory
|
|
25
|
+
if (!existsSync(dir)) {
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
// Common project markers in priority order
|
|
29
|
+
const primaryMarkers = ['.git', 'package.json'];
|
|
30
|
+
const secondaryMarkers = [
|
|
31
|
+
'Cargo.toml', // Rust
|
|
32
|
+
'go.mod', // Go
|
|
33
|
+
'pyproject.toml', // Python
|
|
34
|
+
'requirements.txt', // Python
|
|
35
|
+
'setup.py', // Python
|
|
36
|
+
'Gemfile', // Ruby
|
|
37
|
+
'pom.xml', // Java Maven
|
|
38
|
+
'build.gradle', // Java Gradle
|
|
39
|
+
];
|
|
40
|
+
// Check primary markers first
|
|
41
|
+
for (const marker of primaryMarkers) {
|
|
42
|
+
if (existsSync(resolve(dir, marker))) {
|
|
43
|
+
return dir;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
// Check secondary markers
|
|
47
|
+
for (const marker of secondaryMarkers) {
|
|
48
|
+
if (existsSync(resolve(dir, marker))) {
|
|
49
|
+
return dir;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
// Check if we've reached the filesystem root
|
|
53
|
+
const parent = dirname(dir);
|
|
54
|
+
if (parent === dir) {
|
|
55
|
+
return null;
|
|
56
|
+
}
|
|
57
|
+
// Recurse up the directory tree
|
|
58
|
+
return findProjectRoot(parent);
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Normalize path to use forward slashes for consistency across platforms
|
|
62
|
+
*/
|
|
63
|
+
function normalizePath(path) {
|
|
64
|
+
// Normalize path separators to forward slashes for consistency
|
|
65
|
+
return normalize(path).split(sep).join('/');
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=project-scope.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-scope.js","sourceRoot":"","sources":["../src/project-scope.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AACpC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAA;AAE5D;;;;;;;;GAQG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAAW;IAC5C,MAAM,WAAW,GAAG,eAAe,CAAC,GAAG,CAAC,CAAA;IAExC,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO,QAAQ,CAAA;IACjB,CAAC;IAED,MAAM,cAAc,GAAG,aAAa,CAAC,WAAW,CAAC,CAAA;IACjD,OAAO,WAAW,cAAc,EAAE,CAAA;AACpC,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CAAC,GAAW;IAClC,4CAA4C;IAC5C,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACrB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,2CAA2C;IAC3C,MAAM,cAAc,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAA;IAC/C,MAAM,gBAAgB,GAAG;QACvB,YAAY,EAAE,OAAO;QACrB,QAAQ,EAAE,KAAK;QACf,gBAAgB,EAAE,SAAS;QAC3B,kBAAkB,EAAE,SAAS;QAC7B,UAAU,EAAE,SAAS;QACrB,SAAS,EAAE,OAAO;QAClB,SAAS,EAAE,aAAa;QACxB,cAAc,EAAE,cAAc;KAC/B,CAAA;IAED,8BAA8B;IAC9B,KAAK,MAAM,MAAM,IAAI,cAAc,EAAE,CAAC;QACpC,IAAI,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC;YACrC,OAAO,GAAG,CAAA;QACZ,CAAC;IACH,CAAC;IAED,0BAA0B;IAC1B,KAAK,MAAM,MAAM,IAAI,gBAAgB,EAAE,CAAC;QACtC,IAAI,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC;YACrC,OAAO,GAAG,CAAA;QACZ,CAAC;IACH,CAAC;IAED,6CAA6C;IAC7C,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAA;IAC3B,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;QACnB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,gCAAgC;IAChC,OAAO,eAAe,CAAC,MAAM,CAAC,CAAA;AAChC,CAAC;AAED;;GAEG;AACH,SAAS,aAAa,CAAC,IAAY;IACjC,+DAA+D;IAC/D,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AAC7C,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { LanguageModelV3 } from '@ai-sdk/provider';
|
|
2
|
+
import type { IMemoryStore, TodoItem, ToolProvider } from '@polka-codes/core';
|
|
3
|
+
export interface ProviderDataStore<T> {
|
|
4
|
+
read(): Promise<T | undefined>;
|
|
5
|
+
write(data: T): Promise<void>;
|
|
6
|
+
}
|
|
7
|
+
export interface TodoItemStore {
|
|
8
|
+
read(): Promise<TodoItem[]>;
|
|
9
|
+
write(data: TodoItem[]): Promise<void>;
|
|
10
|
+
}
|
|
11
|
+
export declare class InMemoryStore<T> implements ProviderDataStore<T> {
|
|
12
|
+
#private;
|
|
13
|
+
read(): Promise<T | undefined>;
|
|
14
|
+
write(data: T): Promise<void>;
|
|
15
|
+
}
|
|
16
|
+
export type ProviderOptions = {
|
|
17
|
+
command?: {
|
|
18
|
+
onStarted(command: string): void;
|
|
19
|
+
onStdout(data: string): void;
|
|
20
|
+
onStderr(data: string): void;
|
|
21
|
+
onExit(code: number): void;
|
|
22
|
+
onError(error: unknown): void;
|
|
23
|
+
};
|
|
24
|
+
excludeFiles?: string[];
|
|
25
|
+
summarizeOutput?: (stdout: string, stderr: string) => Promise<string | undefined>;
|
|
26
|
+
summaryThreshold?: number;
|
|
27
|
+
memoryStore?: ProviderDataStore<Record<string, string>> | IMemoryStore;
|
|
28
|
+
todoItemStore?: ProviderDataStore<TodoItem[]>;
|
|
29
|
+
getModel?: (command: string) => LanguageModelV3 | undefined;
|
|
30
|
+
yes?: boolean;
|
|
31
|
+
};
|
|
32
|
+
export declare const getProvider: (options?: ProviderOptions) => ToolProvider;
|
package/dist/provider.js
ADDED
|
@@ -0,0 +1,366 @@
|
|
|
1
|
+
import { spawn } from 'node:child_process';
|
|
2
|
+
import { mkdir, readFile, rename, unlink, writeFile } from 'node:fs/promises';
|
|
3
|
+
import { dirname, normalize, resolve } from 'node:path';
|
|
4
|
+
import { vertex } from '@ai-sdk/google-vertex';
|
|
5
|
+
import { input, select } from '@inquirer/prompts';
|
|
6
|
+
import { generateText, stepCountIs } from 'ai';
|
|
7
|
+
import ignore from 'ignore';
|
|
8
|
+
import { lookup } from 'mime-types';
|
|
9
|
+
import { checkRipgrep } from './utils/checkRipgrep';
|
|
10
|
+
import { listFiles } from './utils/listFiles';
|
|
11
|
+
import { searchFiles } from './utils/searchFiles';
|
|
12
|
+
export class InMemoryStore {
|
|
13
|
+
#data;
|
|
14
|
+
async read() {
|
|
15
|
+
return this.#data;
|
|
16
|
+
}
|
|
17
|
+
async write(data) {
|
|
18
|
+
this.#data = data;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Helper function to detect if memoryStore is an IMemoryStore
|
|
23
|
+
*/
|
|
24
|
+
function isIMemoryStore(store) {
|
|
25
|
+
return 'readMemory' in store && 'updateMemory' in store;
|
|
26
|
+
}
|
|
27
|
+
export const getProvider = (options = {}) => {
|
|
28
|
+
const ig = ignore().add(options.excludeFiles ?? []);
|
|
29
|
+
const memoryStore = options.memoryStore ?? new InMemoryStore();
|
|
30
|
+
const todoItemStore = options.todoItemStore ?? new InMemoryStore();
|
|
31
|
+
const defaultMemoryTopic = ':default:';
|
|
32
|
+
const searchModel = options.getModel?.('search');
|
|
33
|
+
// Helper functions for memory operations that work with both store types
|
|
34
|
+
const readMemoryKV = async (topic) => {
|
|
35
|
+
if (!isIMemoryStore(memoryStore)) {
|
|
36
|
+
const data = (await memoryStore.read()) ?? {};
|
|
37
|
+
return data[topic];
|
|
38
|
+
}
|
|
39
|
+
// For IMemoryStore, topic is the "name" parameter
|
|
40
|
+
return memoryStore.readMemory(topic);
|
|
41
|
+
};
|
|
42
|
+
const updateMemoryKV = async (operation, topic, content) => {
|
|
43
|
+
if (!isIMemoryStore(memoryStore)) {
|
|
44
|
+
const data = (await memoryStore.read()) ?? {};
|
|
45
|
+
switch (operation) {
|
|
46
|
+
case 'append':
|
|
47
|
+
if (content === undefined) {
|
|
48
|
+
throw new Error('Content is required for append operation.');
|
|
49
|
+
}
|
|
50
|
+
data[topic] = `${data[topic] || ''}\n${content}`;
|
|
51
|
+
break;
|
|
52
|
+
case 'replace':
|
|
53
|
+
if (content === undefined) {
|
|
54
|
+
throw new Error('Content is required for replace operation.');
|
|
55
|
+
}
|
|
56
|
+
data[topic] = content;
|
|
57
|
+
break;
|
|
58
|
+
case 'remove':
|
|
59
|
+
delete data[topic];
|
|
60
|
+
break;
|
|
61
|
+
}
|
|
62
|
+
await memoryStore.write(data);
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
// Use IMemoryStore API
|
|
66
|
+
await memoryStore.updateMemory(operation, topic, content);
|
|
67
|
+
};
|
|
68
|
+
const listMemoryTopicsKV = async () => {
|
|
69
|
+
if (!isIMemoryStore(memoryStore)) {
|
|
70
|
+
const data = (await memoryStore.read()) ?? {};
|
|
71
|
+
return Object.keys(data);
|
|
72
|
+
}
|
|
73
|
+
// For IMemoryStore, we need to query for all names in the current scope
|
|
74
|
+
const entries = await memoryStore.queryMemory({});
|
|
75
|
+
if (Array.isArray(entries)) {
|
|
76
|
+
return entries.map((e) => e.name);
|
|
77
|
+
}
|
|
78
|
+
return [];
|
|
79
|
+
};
|
|
80
|
+
const provider = {
|
|
81
|
+
listTodoItems: async (id, status) => {
|
|
82
|
+
const todoItems = (await todoItemStore.read()) ?? [];
|
|
83
|
+
let items;
|
|
84
|
+
if (!id) {
|
|
85
|
+
items = todoItems.filter((i) => !i.id.includes('.'));
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
const parent = todoItems.find((i) => i.id === id);
|
|
89
|
+
if (!parent) {
|
|
90
|
+
throw new Error(`To-do item with id ${id} not found`);
|
|
91
|
+
}
|
|
92
|
+
items = todoItems.filter((i) => i.id.startsWith(`${id}.`) && i.id.split('.').length === id.split('.').length + 1);
|
|
93
|
+
}
|
|
94
|
+
if (status) {
|
|
95
|
+
items = items.filter((item) => item.status === status);
|
|
96
|
+
}
|
|
97
|
+
items.sort((a, b) => {
|
|
98
|
+
const aParts = a.id.split('.');
|
|
99
|
+
const bParts = b.id.split('.');
|
|
100
|
+
const len = Math.min(aParts.length, bParts.length);
|
|
101
|
+
for (let i = 0; i < len; i++) {
|
|
102
|
+
const comparison = aParts[i].localeCompare(bParts[i], undefined, { numeric: true });
|
|
103
|
+
if (comparison !== 0) {
|
|
104
|
+
return comparison;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
return aParts.length - bParts.length;
|
|
108
|
+
});
|
|
109
|
+
return items;
|
|
110
|
+
},
|
|
111
|
+
getTodoItem: async (id) => {
|
|
112
|
+
const todoItems = (await todoItemStore.read()) ?? [];
|
|
113
|
+
const item = todoItems.find((i) => i.id === id);
|
|
114
|
+
if (!item) {
|
|
115
|
+
throw new Error(`To-do item with id ${id} not found`);
|
|
116
|
+
}
|
|
117
|
+
const subItems = todoItems
|
|
118
|
+
.filter((i) => i.id.startsWith(`${id}.`) && i.id.split('.').length === id.split('.').length + 1)
|
|
119
|
+
.map(({ id, title }) => ({ id, title }));
|
|
120
|
+
return { ...item, subItems };
|
|
121
|
+
},
|
|
122
|
+
updateTodoItem: async (input) => {
|
|
123
|
+
const todoItems = (await todoItemStore.read()) ?? [];
|
|
124
|
+
if (input.operation === 'add') {
|
|
125
|
+
const { parentId, title, description, status } = input;
|
|
126
|
+
if (!title) {
|
|
127
|
+
throw new Error('Title is required for add operation');
|
|
128
|
+
}
|
|
129
|
+
let newId;
|
|
130
|
+
if (parentId) {
|
|
131
|
+
const parent = todoItems.find((i) => i.id === parentId);
|
|
132
|
+
if (!parent) {
|
|
133
|
+
throw new Error(`Parent to-do item with id ${parentId} not found`);
|
|
134
|
+
}
|
|
135
|
+
const childItems = todoItems.filter((i) => i.id.startsWith(`${parentId}.`) && i.id.split('.').length === parentId.split('.').length + 1);
|
|
136
|
+
const maxId = childItems.reduce((max, item) => {
|
|
137
|
+
const parts = item.id.split('.');
|
|
138
|
+
const lastPart = parseInt(parts[parts.length - 1], 10);
|
|
139
|
+
return Math.max(max, lastPart);
|
|
140
|
+
}, 0);
|
|
141
|
+
newId = `${parentId}.${maxId + 1}`;
|
|
142
|
+
}
|
|
143
|
+
else {
|
|
144
|
+
const rootItems = todoItems.filter((i) => !i.id.includes('.'));
|
|
145
|
+
const maxId = rootItems.reduce((max, item) => {
|
|
146
|
+
const idNum = parseInt(item.id, 10);
|
|
147
|
+
return Math.max(max, idNum);
|
|
148
|
+
}, 0);
|
|
149
|
+
newId = `${maxId + 1}`;
|
|
150
|
+
}
|
|
151
|
+
const newItem = {
|
|
152
|
+
id: newId,
|
|
153
|
+
title,
|
|
154
|
+
description: description ?? '',
|
|
155
|
+
status: status ?? 'open',
|
|
156
|
+
};
|
|
157
|
+
await todoItemStore.write([...todoItems, newItem]);
|
|
158
|
+
return { id: newId };
|
|
159
|
+
}
|
|
160
|
+
else {
|
|
161
|
+
// update
|
|
162
|
+
const { id } = input;
|
|
163
|
+
if (!id) {
|
|
164
|
+
throw new Error('ID is required for update operation');
|
|
165
|
+
}
|
|
166
|
+
const item = todoItems.find((i) => i.id === id);
|
|
167
|
+
if (!item) {
|
|
168
|
+
throw new Error(`To-do item with id ${id} not found`);
|
|
169
|
+
}
|
|
170
|
+
if (input.title != null) {
|
|
171
|
+
item.title = input.title;
|
|
172
|
+
}
|
|
173
|
+
if (input.description != null) {
|
|
174
|
+
item.description = input.description ?? '';
|
|
175
|
+
}
|
|
176
|
+
if (input.status != null) {
|
|
177
|
+
item.status = input.status;
|
|
178
|
+
}
|
|
179
|
+
await todoItemStore.write(todoItems);
|
|
180
|
+
return { id };
|
|
181
|
+
}
|
|
182
|
+
},
|
|
183
|
+
listMemoryTopics: async () => {
|
|
184
|
+
return listMemoryTopicsKV();
|
|
185
|
+
},
|
|
186
|
+
readMemory: async (topic = defaultMemoryTopic) => {
|
|
187
|
+
return readMemoryKV(topic);
|
|
188
|
+
},
|
|
189
|
+
updateMemory: async (operation, topic, content) => {
|
|
190
|
+
const memoryTopic = topic ?? defaultMemoryTopic;
|
|
191
|
+
await updateMemoryKV(operation, memoryTopic, content);
|
|
192
|
+
},
|
|
193
|
+
readFile: async (path, includeIgnored) => {
|
|
194
|
+
if (!includeIgnored && ig.ignores(path)) {
|
|
195
|
+
throw new Error(`Not allow to access file ${path}`);
|
|
196
|
+
}
|
|
197
|
+
try {
|
|
198
|
+
return await readFile(path, 'utf8');
|
|
199
|
+
}
|
|
200
|
+
catch (_e) {
|
|
201
|
+
return undefined;
|
|
202
|
+
}
|
|
203
|
+
},
|
|
204
|
+
writeFile: async (path, content) => {
|
|
205
|
+
if (ig.ignores(path)) {
|
|
206
|
+
throw new Error(`Not allow to access file ${path}`);
|
|
207
|
+
}
|
|
208
|
+
// generate parent directories if they don't exist
|
|
209
|
+
await mkdir(dirname(path), { recursive: true });
|
|
210
|
+
return await writeFile(path, content, 'utf8');
|
|
211
|
+
},
|
|
212
|
+
removeFile: async (path) => {
|
|
213
|
+
if (ig.ignores(path)) {
|
|
214
|
+
throw new Error(`Not allow to access file ${path}`);
|
|
215
|
+
}
|
|
216
|
+
return await unlink(path);
|
|
217
|
+
},
|
|
218
|
+
renameFile: async (sourcePath, targetPath) => {
|
|
219
|
+
if (ig.ignores(sourcePath) || ig.ignores(targetPath)) {
|
|
220
|
+
throw new Error(`Not allow to access file ${sourcePath} or ${targetPath}`);
|
|
221
|
+
}
|
|
222
|
+
return await rename(sourcePath, targetPath);
|
|
223
|
+
},
|
|
224
|
+
listFiles: async (path, recursive, maxCount, includeIgnored) => {
|
|
225
|
+
return await listFiles(path, recursive, maxCount, process.cwd(), options.excludeFiles, includeIgnored);
|
|
226
|
+
},
|
|
227
|
+
readBinaryFile: async (url) => {
|
|
228
|
+
if (url.startsWith('file://')) {
|
|
229
|
+
const filePath = decodeURIComponent(url.substring('file://'.length));
|
|
230
|
+
const resolvedPath = normalize(resolve(process.cwd(), filePath));
|
|
231
|
+
if (!resolvedPath.startsWith(process.cwd())) {
|
|
232
|
+
throw new Error(`Access to file path "${filePath}" is restricted.`);
|
|
233
|
+
}
|
|
234
|
+
const data = await readFile(resolvedPath);
|
|
235
|
+
const mediaType = lookup(resolvedPath) || 'application/octet-stream';
|
|
236
|
+
return {
|
|
237
|
+
base64Data: data.toString('base64'),
|
|
238
|
+
mediaType,
|
|
239
|
+
};
|
|
240
|
+
}
|
|
241
|
+
const response = await fetch(url);
|
|
242
|
+
if (!response.ok) {
|
|
243
|
+
throw new Error(`HTTP error! status: ${response.status}`);
|
|
244
|
+
}
|
|
245
|
+
const data = await response.arrayBuffer();
|
|
246
|
+
const mediaType = lookup(url) || 'application/octet-stream';
|
|
247
|
+
return {
|
|
248
|
+
base64Data: Buffer.from(data).toString('base64'),
|
|
249
|
+
mediaType,
|
|
250
|
+
};
|
|
251
|
+
},
|
|
252
|
+
executeCommand: (command, _needApprove) => {
|
|
253
|
+
// TODO: add timeout
|
|
254
|
+
return new Promise((resolve, reject) => {
|
|
255
|
+
// spawn a shell to execute the command
|
|
256
|
+
options.command?.onStarted(command);
|
|
257
|
+
const child = spawn(command, [], {
|
|
258
|
+
shell: true,
|
|
259
|
+
stdio: 'pipe',
|
|
260
|
+
});
|
|
261
|
+
let stdoutText = '';
|
|
262
|
+
let stderrText = '';
|
|
263
|
+
child.stdout.on('data', (data) => {
|
|
264
|
+
const dataStr = data.toString();
|
|
265
|
+
options.command?.onStdout(dataStr);
|
|
266
|
+
stdoutText += dataStr;
|
|
267
|
+
});
|
|
268
|
+
child.stderr.on('data', (data) => {
|
|
269
|
+
const dataStr = data.toString();
|
|
270
|
+
options.command?.onStderr(dataStr);
|
|
271
|
+
stderrText += dataStr;
|
|
272
|
+
});
|
|
273
|
+
child.on('close', async (code) => {
|
|
274
|
+
options.command?.onExit(code ?? 0);
|
|
275
|
+
const totalLength = stdoutText.length + stderrText.length;
|
|
276
|
+
if (totalLength > (options.summaryThreshold ?? 5000) && options.summarizeOutput) {
|
|
277
|
+
try {
|
|
278
|
+
const summary = await options.summarizeOutput(stdoutText, stderrText);
|
|
279
|
+
if (summary) {
|
|
280
|
+
resolve({
|
|
281
|
+
summary,
|
|
282
|
+
stdout: stdoutText,
|
|
283
|
+
stderr: stderrText,
|
|
284
|
+
exitCode: code ?? 0,
|
|
285
|
+
});
|
|
286
|
+
return;
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
catch (_e) {
|
|
290
|
+
console.error('Summarization failed:', _e);
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
resolve({
|
|
294
|
+
stdout: stdoutText,
|
|
295
|
+
stderr: stderrText,
|
|
296
|
+
exitCode: code ?? 0,
|
|
297
|
+
});
|
|
298
|
+
});
|
|
299
|
+
child.on('error', (err) => {
|
|
300
|
+
options.command?.onError(err);
|
|
301
|
+
reject(err);
|
|
302
|
+
});
|
|
303
|
+
});
|
|
304
|
+
},
|
|
305
|
+
askFollowupQuestion: async (question, answerOptions) => {
|
|
306
|
+
if (options.yes) {
|
|
307
|
+
if (answerOptions.length > 0) {
|
|
308
|
+
return answerOptions[0];
|
|
309
|
+
}
|
|
310
|
+
return '';
|
|
311
|
+
}
|
|
312
|
+
if (answerOptions.length === 0) {
|
|
313
|
+
return await input({ message: question });
|
|
314
|
+
}
|
|
315
|
+
const otherMessage = 'Other (enter text)';
|
|
316
|
+
answerOptions.push(otherMessage);
|
|
317
|
+
const answer = await select({
|
|
318
|
+
message: question,
|
|
319
|
+
choices: answerOptions.map((option) => ({ name: option, value: option })),
|
|
320
|
+
});
|
|
321
|
+
if (answer === otherMessage) {
|
|
322
|
+
return await input({ message: 'Enter your answer:' });
|
|
323
|
+
}
|
|
324
|
+
return answer;
|
|
325
|
+
},
|
|
326
|
+
fetchUrl: async (url) => {
|
|
327
|
+
const isRaw = url.startsWith('https://raw.githubusercontent.com/');
|
|
328
|
+
const urlToFetch = isRaw ? url : `https://r.jina.ai/${url}`;
|
|
329
|
+
try {
|
|
330
|
+
const response = await fetch(urlToFetch);
|
|
331
|
+
if (!response.ok) {
|
|
332
|
+
throw new Error(`HTTP error! status: ${response.status}`);
|
|
333
|
+
}
|
|
334
|
+
return await response.text();
|
|
335
|
+
}
|
|
336
|
+
catch (error) {
|
|
337
|
+
console.error('Error fetching URL:', error);
|
|
338
|
+
throw error;
|
|
339
|
+
}
|
|
340
|
+
},
|
|
341
|
+
search: searchModel &&
|
|
342
|
+
(async (query) => {
|
|
343
|
+
const googleSearchTool = vertex.tools.googleSearch({});
|
|
344
|
+
const resp = await generateText({
|
|
345
|
+
model: searchModel,
|
|
346
|
+
system: 'You are a web search assistant. When searching for information, provide comprehensive and detailed results. Include relevant facts, statistics, dates, and key details from the search results. Synthesize information from multiple sources when available. Structure your response clearly with the most relevant information first. Reference or cite sources when presenting specific claims or data.',
|
|
347
|
+
tools: {
|
|
348
|
+
google_search: googleSearchTool,
|
|
349
|
+
},
|
|
350
|
+
prompt: query,
|
|
351
|
+
stopWhen: stepCountIs(5),
|
|
352
|
+
});
|
|
353
|
+
return resp.text;
|
|
354
|
+
}),
|
|
355
|
+
};
|
|
356
|
+
if (checkRipgrep()) {
|
|
357
|
+
provider.searchFiles = async (path, regex, filePattern) => {
|
|
358
|
+
return await searchFiles(path, regex, filePattern, process.cwd(), options.excludeFiles);
|
|
359
|
+
};
|
|
360
|
+
}
|
|
361
|
+
else {
|
|
362
|
+
console.error('Error: ripgrep (rg) is not installed. Search file tool is disabled. Please install it from https://github.com/BurntSushi/ripgrep#installation');
|
|
363
|
+
}
|
|
364
|
+
return provider;
|
|
365
|
+
};
|
|
366
|
+
//# sourceMappingURL=provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|