@staticpayload/zai-code 1.0.0
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/LICENSE +678 -0
- package/README.md +115 -0
- package/bin/zcode +3 -0
- package/dist/apply.d.ts +44 -0
- package/dist/apply.d.ts.map +1 -0
- package/dist/apply.js +307 -0
- package/dist/apply.js.map +1 -0
- package/dist/auth.d.ts +9 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/auth.js +170 -0
- package/dist/auth.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +179 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands.d.ts +15 -0
- package/dist/commands.d.ts.map +1 -0
- package/dist/commands.js +560 -0
- package/dist/commands.js.map +1 -0
- package/dist/config.d.ts +9 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +97 -0
- package/dist/config.js.map +1 -0
- package/dist/context/context_builder.d.ts +29 -0
- package/dist/context/context_builder.d.ts.map +1 -0
- package/dist/context/context_builder.js +307 -0
- package/dist/context/context_builder.js.map +1 -0
- package/dist/context/project_memory.d.ts +14 -0
- package/dist/context/project_memory.d.ts.map +1 -0
- package/dist/context/project_memory.js +142 -0
- package/dist/context/project_memory.js.map +1 -0
- package/dist/doctor.d.ts +2 -0
- package/dist/doctor.d.ts.map +1 -0
- package/dist/doctor.js +3 -0
- package/dist/doctor.js.map +1 -0
- package/dist/git.d.ts +10 -0
- package/dist/git.d.ts.map +1 -0
- package/dist/git.js +90 -0
- package/dist/git.js.map +1 -0
- package/dist/history.d.ts +14 -0
- package/dist/history.d.ts.map +1 -0
- package/dist/history.js +103 -0
- package/dist/history.js.map +1 -0
- package/dist/interactive.d.ts +6 -0
- package/dist/interactive.d.ts.map +1 -0
- package/dist/interactive.js +83 -0
- package/dist/interactive.js.map +1 -0
- package/dist/orchestrator.d.ts +11 -0
- package/dist/orchestrator.d.ts.map +1 -0
- package/dist/orchestrator.js +135 -0
- package/dist/orchestrator.js.map +1 -0
- package/dist/planner.d.ts +22 -0
- package/dist/planner.d.ts.map +1 -0
- package/dist/planner.js +259 -0
- package/dist/planner.js.map +1 -0
- package/dist/profiles.d.ts +16 -0
- package/dist/profiles.d.ts.map +1 -0
- package/dist/profiles.js +80 -0
- package/dist/profiles.js.map +1 -0
- package/dist/rollback.d.ts +27 -0
- package/dist/rollback.d.ts.map +1 -0
- package/dist/rollback.js +154 -0
- package/dist/rollback.js.map +1 -0
- package/dist/runtime.d.ts +131 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/runtime.js +374 -0
- package/dist/runtime.js.map +1 -0
- package/dist/session.d.ts +95 -0
- package/dist/session.d.ts.map +1 -0
- package/dist/session.js +174 -0
- package/dist/session.js.map +1 -0
- package/dist/settings.d.ts +41 -0
- package/dist/settings.d.ts.map +1 -0
- package/dist/settings.js +225 -0
- package/dist/settings.js.map +1 -0
- package/dist/settings_menu.d.ts +2 -0
- package/dist/settings_menu.d.ts.map +1 -0
- package/dist/settings_menu.js +265 -0
- package/dist/settings_menu.js.map +1 -0
- package/dist/shell.d.ts +18 -0
- package/dist/shell.d.ts.map +1 -0
- package/dist/shell.js +128 -0
- package/dist/shell.js.map +1 -0
- package/dist/task_runner.d.ts +22 -0
- package/dist/task_runner.d.ts.map +1 -0
- package/dist/task_runner.js +230 -0
- package/dist/task_runner.js.map +1 -0
- package/dist/ui.d.ts +15 -0
- package/dist/ui.d.ts.map +1 -0
- package/dist/ui.js +160 -0
- package/dist/ui.js.map +1 -0
- package/dist/workspace.d.ts +17 -0
- package/dist/workspace.d.ts.map +1 -0
- package/dist/workspace.js +134 -0
- package/dist/workspace.js.map +1 -0
- package/dist/workspace_model.d.ts +45 -0
- package/dist/workspace_model.d.ts.map +1 -0
- package/dist/workspace_model.js +253 -0
- package/dist/workspace_model.js.map +1 -0
- package/package.json +45 -0
package/dist/config.js
ADDED
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.STATE_PATH = exports.CONFIG_PATH = exports.CONFIG_DIR = void 0;
|
|
37
|
+
exports.ensureConfigDir = ensureConfigDir;
|
|
38
|
+
exports.loadConfig = loadConfig;
|
|
39
|
+
exports.saveConfig = saveConfig;
|
|
40
|
+
exports.loadState = loadState;
|
|
41
|
+
exports.saveState = saveState;
|
|
42
|
+
const fs = __importStar(require("fs"));
|
|
43
|
+
const path = __importStar(require("path"));
|
|
44
|
+
const os = __importStar(require("os"));
|
|
45
|
+
exports.CONFIG_DIR = path.join(os.homedir(), '.zai');
|
|
46
|
+
exports.CONFIG_PATH = path.join(exports.CONFIG_DIR, 'config.json');
|
|
47
|
+
exports.STATE_PATH = path.join(exports.CONFIG_DIR, 'state.json');
|
|
48
|
+
const DEFAULT_CONFIG = {
|
|
49
|
+
api: {
|
|
50
|
+
baseUrl: 'https://api.z.ai/api/paas/v4/',
|
|
51
|
+
},
|
|
52
|
+
};
|
|
53
|
+
const DEFAULT_STATE = {
|
|
54
|
+
initialized: false,
|
|
55
|
+
};
|
|
56
|
+
function ensureConfigDir() {
|
|
57
|
+
if (!fs.existsSync(exports.CONFIG_DIR)) {
|
|
58
|
+
fs.mkdirSync(exports.CONFIG_DIR, { mode: 0o755 });
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
function loadConfig() {
|
|
62
|
+
ensureConfigDir();
|
|
63
|
+
if (!fs.existsSync(exports.CONFIG_PATH)) {
|
|
64
|
+
saveConfig(DEFAULT_CONFIG);
|
|
65
|
+
return { ...DEFAULT_CONFIG };
|
|
66
|
+
}
|
|
67
|
+
try {
|
|
68
|
+
const content = fs.readFileSync(exports.CONFIG_PATH, 'utf-8');
|
|
69
|
+
return JSON.parse(content);
|
|
70
|
+
}
|
|
71
|
+
catch (error) {
|
|
72
|
+
return { ...DEFAULT_CONFIG };
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
function saveConfig(config) {
|
|
76
|
+
ensureConfigDir();
|
|
77
|
+
fs.writeFileSync(exports.CONFIG_PATH, JSON.stringify(config, null, 2), 'utf-8');
|
|
78
|
+
}
|
|
79
|
+
function loadState() {
|
|
80
|
+
ensureConfigDir();
|
|
81
|
+
if (!fs.existsSync(exports.STATE_PATH)) {
|
|
82
|
+
saveState(DEFAULT_STATE);
|
|
83
|
+
return { ...DEFAULT_STATE };
|
|
84
|
+
}
|
|
85
|
+
try {
|
|
86
|
+
const content = fs.readFileSync(exports.STATE_PATH, 'utf-8');
|
|
87
|
+
return JSON.parse(content);
|
|
88
|
+
}
|
|
89
|
+
catch (error) {
|
|
90
|
+
return { ...DEFAULT_STATE };
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
function saveState(state) {
|
|
94
|
+
ensureConfigDir();
|
|
95
|
+
fs.writeFileSync(exports.STATE_PATH, JSON.stringify(state, null, 2), 'utf-8');
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkBA,0CAIC;AAED,gCAYC;AAED,gCAGC;AAED,8BAYC;AAED,8BAGC;AA5DD,uCAAyB;AACzB,2CAA6B;AAC7B,uCAAyB;AAEZ,QAAA,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,MAAM,CAAC,CAAC;AAC7C,QAAA,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,kBAAU,EAAE,aAAa,CAAC,CAAC;AACnD,QAAA,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,kBAAU,EAAE,YAAY,CAAC,CAAC;AAE9D,MAAM,cAAc,GAAG;IACrB,GAAG,EAAE;QACH,OAAO,EAAE,+BAA+B;KACzC;CACF,CAAC;AAEF,MAAM,aAAa,GAAG;IACpB,WAAW,EAAE,KAAK;CACnB,CAAC;AAEF,SAAgB,eAAe;IAC7B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,kBAAU,CAAC,EAAE,CAAC;QAC/B,EAAE,CAAC,SAAS,CAAC,kBAAU,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC5C,CAAC;AACH,CAAC;AAED,SAAgB,UAAU;IACxB,eAAe,EAAE,CAAC;IAClB,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,mBAAW,CAAC,EAAE,CAAC;QAChC,UAAU,CAAC,cAAc,CAAC,CAAC;QAC3B,OAAO,EAAE,GAAG,cAAc,EAAE,CAAC;IAC/B,CAAC;IACD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,mBAAW,EAAE,OAAO,CAAC,CAAC;QACtD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,EAAE,GAAG,cAAc,EAAE,CAAC;IAC/B,CAAC;AACH,CAAC;AAED,SAAgB,UAAU,CAAC,MAA+B;IACxD,eAAe,EAAE,CAAC;IAClB,EAAE,CAAC,aAAa,CAAC,mBAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AAC1E,CAAC;AAED,SAAgB,SAAS;IACvB,eAAe,EAAE,CAAC;IAClB,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,kBAAU,CAAC,EAAE,CAAC;QAC/B,SAAS,CAAC,aAAa,CAAC,CAAC;QACzB,OAAO,EAAE,GAAG,aAAa,EAAE,CAAC;IAC9B,CAAC;IACD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,kBAAU,EAAE,OAAO,CAAC,CAAC;QACrD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,EAAE,GAAG,aAAa,EAAE,CAAC;IAC9B,CAAC;AACH,CAAC;AAED,SAAgB,SAAS,CAAC,KAA8B;IACtD,eAAe,EAAE,CAAC;IAClB,EAAE,CAAC,aAAa,CAAC,kBAAU,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AACxE,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
declare const MAX_CONTEXT_TOKENS = 50000;
|
|
2
|
+
declare const MAX_FILE_SIZE = 50000;
|
|
3
|
+
declare const MAX_FILES = 50;
|
|
4
|
+
export interface FileScore {
|
|
5
|
+
path: string;
|
|
6
|
+
score: number;
|
|
7
|
+
size: number;
|
|
8
|
+
extension: string;
|
|
9
|
+
}
|
|
10
|
+
export interface ContextResult {
|
|
11
|
+
files: Array<{
|
|
12
|
+
path: string;
|
|
13
|
+
content: string;
|
|
14
|
+
truncated: boolean;
|
|
15
|
+
}>;
|
|
16
|
+
totalTokens: number;
|
|
17
|
+
fileCount: number;
|
|
18
|
+
truncatedCount: number;
|
|
19
|
+
}
|
|
20
|
+
export declare function indexWorkspace(rootPath: string): FileScore[];
|
|
21
|
+
export declare function scoreFileRelevance(file: FileScore, intent: string, intentType: string): number;
|
|
22
|
+
export declare function summarizeFile(content: string, maxChars: number): {
|
|
23
|
+
summary: string;
|
|
24
|
+
truncated: boolean;
|
|
25
|
+
};
|
|
26
|
+
export declare function buildContext(rootPath: string, intent: string, intentType: string, additionalFiles?: string[]): ContextResult;
|
|
27
|
+
export declare function formatContextForModel(context: ContextResult): string;
|
|
28
|
+
export { MAX_CONTEXT_TOKENS, MAX_FILE_SIZE, MAX_FILES };
|
|
29
|
+
//# sourceMappingURL=context_builder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context_builder.d.ts","sourceRoot":"","sources":["../../src/context/context_builder.ts"],"names":[],"mappings":"AAIA,QAAA,MAAM,kBAAkB,QAAQ,CAAC;AACjC,QAAA,MAAM,aAAa,QAAQ,CAAC;AAC5B,QAAA,MAAM,SAAS,KAAK,CAAC;AAIrB,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAGD,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,KAAK,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,OAAO,CAAC;KACpB,CAAC,CAAC;IACH,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;CACxB;AA6DD,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE,CAkD5D;AAGD,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,SAAS,EACf,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,GACjB,MAAM,CA+CR;AAGD,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAexG;AAGD,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,eAAe,GAAE,MAAM,EAAO,GAC7B,aAAa,CAkFf;AAGD,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CAkBpE;AAGD,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,SAAS,EAAE,CAAC"}
|
|
@@ -0,0 +1,307 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.MAX_FILES = exports.MAX_FILE_SIZE = exports.MAX_CONTEXT_TOKENS = void 0;
|
|
37
|
+
exports.indexWorkspace = indexWorkspace;
|
|
38
|
+
exports.scoreFileRelevance = scoreFileRelevance;
|
|
39
|
+
exports.summarizeFile = summarizeFile;
|
|
40
|
+
exports.buildContext = buildContext;
|
|
41
|
+
exports.formatContextForModel = formatContextForModel;
|
|
42
|
+
const fs = __importStar(require("fs"));
|
|
43
|
+
const path = __importStar(require("path"));
|
|
44
|
+
// Context size limits
|
|
45
|
+
const MAX_CONTEXT_TOKENS = 50000; // Approximate max tokens
|
|
46
|
+
exports.MAX_CONTEXT_TOKENS = MAX_CONTEXT_TOKENS;
|
|
47
|
+
const MAX_FILE_SIZE = 50000; // Max bytes per file
|
|
48
|
+
exports.MAX_FILE_SIZE = MAX_FILE_SIZE;
|
|
49
|
+
const MAX_FILES = 50; // Max files to include
|
|
50
|
+
exports.MAX_FILES = MAX_FILES;
|
|
51
|
+
const CHARS_PER_TOKEN = 4; // Approximate chars per token
|
|
52
|
+
// File extensions by priority
|
|
53
|
+
const EXTENSION_PRIORITY = {
|
|
54
|
+
'.ts': 10,
|
|
55
|
+
'.tsx': 10,
|
|
56
|
+
'.js': 9,
|
|
57
|
+
'.jsx': 9,
|
|
58
|
+
'.py': 9,
|
|
59
|
+
'.go': 9,
|
|
60
|
+
'.rs': 9,
|
|
61
|
+
'.java': 8,
|
|
62
|
+
'.c': 8,
|
|
63
|
+
'.cpp': 8,
|
|
64
|
+
'.h': 7,
|
|
65
|
+
'.hpp': 7,
|
|
66
|
+
'.json': 6,
|
|
67
|
+
'.yaml': 6,
|
|
68
|
+
'.yml': 6,
|
|
69
|
+
'.toml': 6,
|
|
70
|
+
'.md': 5,
|
|
71
|
+
'.txt': 4,
|
|
72
|
+
'.css': 4,
|
|
73
|
+
'.scss': 4,
|
|
74
|
+
'.html': 4,
|
|
75
|
+
'.sql': 5,
|
|
76
|
+
'.sh': 5,
|
|
77
|
+
'.bash': 5,
|
|
78
|
+
};
|
|
79
|
+
// Directories to always skip
|
|
80
|
+
const SKIP_DIRS = new Set([
|
|
81
|
+
'node_modules',
|
|
82
|
+
'.git',
|
|
83
|
+
'.svn',
|
|
84
|
+
'.hg',
|
|
85
|
+
'dist',
|
|
86
|
+
'build',
|
|
87
|
+
'out',
|
|
88
|
+
'target',
|
|
89
|
+
'__pycache__',
|
|
90
|
+
'.cache',
|
|
91
|
+
'.next',
|
|
92
|
+
'.nuxt',
|
|
93
|
+
'vendor',
|
|
94
|
+
'coverage',
|
|
95
|
+
'.nyc_output',
|
|
96
|
+
]);
|
|
97
|
+
// Files to always skip
|
|
98
|
+
const SKIP_FILES = new Set([
|
|
99
|
+
'package-lock.json',
|
|
100
|
+
'yarn.lock',
|
|
101
|
+
'pnpm-lock.yaml',
|
|
102
|
+
'composer.lock',
|
|
103
|
+
'Gemfile.lock',
|
|
104
|
+
'Cargo.lock',
|
|
105
|
+
'go.sum',
|
|
106
|
+
]);
|
|
107
|
+
// Index workspace and return file list with metadata
|
|
108
|
+
function indexWorkspace(rootPath) {
|
|
109
|
+
const files = [];
|
|
110
|
+
function walk(dir, depth = 0) {
|
|
111
|
+
if (depth > 10)
|
|
112
|
+
return; // Max depth
|
|
113
|
+
try {
|
|
114
|
+
const entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
115
|
+
for (const entry of entries) {
|
|
116
|
+
const fullPath = path.join(dir, entry.name);
|
|
117
|
+
const relativePath = path.relative(rootPath, fullPath);
|
|
118
|
+
if (entry.isDirectory()) {
|
|
119
|
+
if (!SKIP_DIRS.has(entry.name) && !entry.name.startsWith('.')) {
|
|
120
|
+
walk(fullPath, depth + 1);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
else if (entry.isFile()) {
|
|
124
|
+
if (SKIP_FILES.has(entry.name))
|
|
125
|
+
continue;
|
|
126
|
+
try {
|
|
127
|
+
const stats = fs.statSync(fullPath);
|
|
128
|
+
const ext = path.extname(entry.name).toLowerCase();
|
|
129
|
+
// Skip binary and very large files
|
|
130
|
+
if (stats.size > MAX_FILE_SIZE * 2)
|
|
131
|
+
continue;
|
|
132
|
+
const priority = EXTENSION_PRIORITY[ext] || 1;
|
|
133
|
+
// Score based on extension priority and inverse of depth
|
|
134
|
+
const score = priority * (10 - Math.min(depth, 9));
|
|
135
|
+
files.push({
|
|
136
|
+
path: relativePath,
|
|
137
|
+
score,
|
|
138
|
+
size: stats.size,
|
|
139
|
+
extension: ext,
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
catch {
|
|
143
|
+
// Skip files we can't stat
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
catch {
|
|
149
|
+
// Skip directories we can't read
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
walk(rootPath);
|
|
153
|
+
return files;
|
|
154
|
+
}
|
|
155
|
+
// Score file relevance to a task
|
|
156
|
+
function scoreFileRelevance(file, intent, intentType) {
|
|
157
|
+
let score = file.score;
|
|
158
|
+
const intentLower = intent.toLowerCase();
|
|
159
|
+
const pathLower = file.path.toLowerCase();
|
|
160
|
+
// Boost if path contains words from intent
|
|
161
|
+
const intentWords = intentLower.split(/\s+/).filter(w => w.length > 3);
|
|
162
|
+
for (const word of intentWords) {
|
|
163
|
+
if (pathLower.includes(word)) {
|
|
164
|
+
score += 5;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
// Boost based on intent type
|
|
168
|
+
switch (intentType) {
|
|
169
|
+
case 'DEBUG':
|
|
170
|
+
// Prefer test files and error-related files
|
|
171
|
+
if (pathLower.includes('test') || pathLower.includes('spec')) {
|
|
172
|
+
score += 3;
|
|
173
|
+
}
|
|
174
|
+
if (pathLower.includes('error') || pathLower.includes('exception')) {
|
|
175
|
+
score += 3;
|
|
176
|
+
}
|
|
177
|
+
break;
|
|
178
|
+
case 'REFACTOR':
|
|
179
|
+
// Prefer main source files
|
|
180
|
+
if (pathLower.includes('src/') || pathLower.includes('lib/')) {
|
|
181
|
+
score += 3;
|
|
182
|
+
}
|
|
183
|
+
break;
|
|
184
|
+
case 'REVIEW':
|
|
185
|
+
// Prefer config and doc files
|
|
186
|
+
if (file.extension === '.md' || file.extension === '.json') {
|
|
187
|
+
score += 2;
|
|
188
|
+
}
|
|
189
|
+
break;
|
|
190
|
+
}
|
|
191
|
+
// Penalize very large files
|
|
192
|
+
if (file.size > 10000) {
|
|
193
|
+
score -= 2;
|
|
194
|
+
}
|
|
195
|
+
if (file.size > 30000) {
|
|
196
|
+
score -= 3;
|
|
197
|
+
}
|
|
198
|
+
return score;
|
|
199
|
+
}
|
|
200
|
+
// Summarize a large file to fit in context
|
|
201
|
+
function summarizeFile(content, maxChars) {
|
|
202
|
+
if (content.length <= maxChars) {
|
|
203
|
+
return { summary: content, truncated: false };
|
|
204
|
+
}
|
|
205
|
+
// Include first portion and last portion
|
|
206
|
+
const headSize = Math.floor(maxChars * 0.7);
|
|
207
|
+
const tailSize = Math.floor(maxChars * 0.2);
|
|
208
|
+
const head = content.slice(0, headSize);
|
|
209
|
+
const tail = content.slice(-tailSize);
|
|
210
|
+
const summary = `${head}\n\n... [${content.length - headSize - tailSize} chars truncated] ...\n\n${tail}`;
|
|
211
|
+
return { summary, truncated: true };
|
|
212
|
+
}
|
|
213
|
+
// Build context for a task
|
|
214
|
+
function buildContext(rootPath, intent, intentType, additionalFiles = []) {
|
|
215
|
+
// Index workspace
|
|
216
|
+
const allFiles = indexWorkspace(rootPath);
|
|
217
|
+
// Score files by relevance
|
|
218
|
+
const scoredFiles = allFiles.map(f => ({
|
|
219
|
+
...f,
|
|
220
|
+
relevanceScore: scoreFileRelevance(f, intent, intentType),
|
|
221
|
+
}));
|
|
222
|
+
// Sort by relevance score descending
|
|
223
|
+
scoredFiles.sort((a, b) => b.relevanceScore - a.relevanceScore);
|
|
224
|
+
// Add additional files with high priority
|
|
225
|
+
const additionalSet = new Set(additionalFiles.map(f => path.relative(rootPath, f)));
|
|
226
|
+
// Select files within token budget
|
|
227
|
+
const result = {
|
|
228
|
+
files: [],
|
|
229
|
+
totalTokens: 0,
|
|
230
|
+
fileCount: 0,
|
|
231
|
+
truncatedCount: 0,
|
|
232
|
+
};
|
|
233
|
+
const maxChars = MAX_CONTEXT_TOKENS * CHARS_PER_TOKEN;
|
|
234
|
+
let currentChars = 0;
|
|
235
|
+
// First, add explicitly requested files
|
|
236
|
+
for (const relPath of additionalSet) {
|
|
237
|
+
const fullPath = path.join(rootPath, relPath);
|
|
238
|
+
try {
|
|
239
|
+
const content = fs.readFileSync(fullPath, 'utf-8');
|
|
240
|
+
const { summary, truncated } = summarizeFile(content, Math.min(content.length, MAX_FILE_SIZE));
|
|
241
|
+
if (currentChars + summary.length > maxChars)
|
|
242
|
+
break;
|
|
243
|
+
result.files.push({
|
|
244
|
+
path: relPath,
|
|
245
|
+
content: summary,
|
|
246
|
+
truncated,
|
|
247
|
+
});
|
|
248
|
+
currentChars += summary.length;
|
|
249
|
+
result.fileCount++;
|
|
250
|
+
if (truncated)
|
|
251
|
+
result.truncatedCount++;
|
|
252
|
+
}
|
|
253
|
+
catch {
|
|
254
|
+
// Skip files we can't read
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
// Then add scored files
|
|
258
|
+
for (const file of scoredFiles) {
|
|
259
|
+
if (result.fileCount >= MAX_FILES)
|
|
260
|
+
break;
|
|
261
|
+
if (currentChars >= maxChars)
|
|
262
|
+
break;
|
|
263
|
+
if (additionalSet.has(file.path))
|
|
264
|
+
continue;
|
|
265
|
+
const fullPath = path.join(rootPath, file.path);
|
|
266
|
+
try {
|
|
267
|
+
const content = fs.readFileSync(fullPath, 'utf-8');
|
|
268
|
+
const maxFileChars = Math.min(MAX_FILE_SIZE, Math.floor((maxChars - currentChars) / 2) // Leave room for other files
|
|
269
|
+
);
|
|
270
|
+
const { summary, truncated } = summarizeFile(content, maxFileChars);
|
|
271
|
+
if (currentChars + summary.length > maxChars)
|
|
272
|
+
break;
|
|
273
|
+
result.files.push({
|
|
274
|
+
path: file.path,
|
|
275
|
+
content: summary,
|
|
276
|
+
truncated,
|
|
277
|
+
});
|
|
278
|
+
currentChars += summary.length;
|
|
279
|
+
result.fileCount++;
|
|
280
|
+
if (truncated)
|
|
281
|
+
result.truncatedCount++;
|
|
282
|
+
}
|
|
283
|
+
catch {
|
|
284
|
+
// Skip files we can't read
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
result.totalTokens = Math.ceil(currentChars / CHARS_PER_TOKEN);
|
|
288
|
+
return result;
|
|
289
|
+
}
|
|
290
|
+
// Format context for model input
|
|
291
|
+
function formatContextForModel(context) {
|
|
292
|
+
if (context.files.length === 0) {
|
|
293
|
+
return 'No files in context.';
|
|
294
|
+
}
|
|
295
|
+
let output = `Context: ${context.fileCount} files (~${context.totalTokens} tokens)`;
|
|
296
|
+
if (context.truncatedCount > 0) {
|
|
297
|
+
output += ` [${context.truncatedCount} truncated]`;
|
|
298
|
+
}
|
|
299
|
+
output += '\n\n';
|
|
300
|
+
for (const file of context.files) {
|
|
301
|
+
output += `--- ${file.path}${file.truncated ? ' [truncated]' : ''} ---\n`;
|
|
302
|
+
output += file.content;
|
|
303
|
+
output += '\n\n';
|
|
304
|
+
}
|
|
305
|
+
return output;
|
|
306
|
+
}
|
|
307
|
+
//# sourceMappingURL=context_builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context_builder.js","sourceRoot":"","sources":["../../src/context/context_builder.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwFA,wCAkDC;AAGD,gDAmDC;AAGD,sCAeC;AAGD,oCAuFC;AAGD,sDAkBC;AAjUD,uCAAyB;AACzB,2CAA6B;AAE7B,sBAAsB;AACtB,MAAM,kBAAkB,GAAG,KAAK,CAAC,CAAE,yBAAyB;AAgUnD,gDAAkB;AA/T3B,MAAM,aAAa,GAAG,KAAK,CAAC,CAAO,qBAAqB;AA+T3B,sCAAa;AA9T1C,MAAM,SAAS,GAAG,EAAE,CAAC,CAAc,uBAAuB;AA8Td,8BAAS;AA7TrD,MAAM,eAAe,GAAG,CAAC,CAAC,CAAS,8BAA8B;AAsBjE,8BAA8B;AAC9B,MAAM,kBAAkB,GAA2B;IACjD,KAAK,EAAE,EAAE;IACT,MAAM,EAAE,EAAE;IACV,KAAK,EAAE,CAAC;IACR,MAAM,EAAE,CAAC;IACT,KAAK,EAAE,CAAC;IACR,KAAK,EAAE,CAAC;IACR,KAAK,EAAE,CAAC;IACR,OAAO,EAAE,CAAC;IACV,IAAI,EAAE,CAAC;IACP,MAAM,EAAE,CAAC;IACT,IAAI,EAAE,CAAC;IACP,MAAM,EAAE,CAAC;IACT,OAAO,EAAE,CAAC;IACV,OAAO,EAAE,CAAC;IACV,MAAM,EAAE,CAAC;IACT,OAAO,EAAE,CAAC;IACV,KAAK,EAAE,CAAC;IACR,MAAM,EAAE,CAAC;IACT,MAAM,EAAE,CAAC;IACT,OAAO,EAAE,CAAC;IACV,OAAO,EAAE,CAAC;IACV,MAAM,EAAE,CAAC;IACT,KAAK,EAAE,CAAC;IACR,OAAO,EAAE,CAAC;CACX,CAAC;AAEF,6BAA6B;AAC7B,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC;IACxB,cAAc;IACd,MAAM;IACN,MAAM;IACN,KAAK;IACL,MAAM;IACN,OAAO;IACP,KAAK;IACL,QAAQ;IACR,aAAa;IACb,QAAQ;IACR,OAAO;IACP,OAAO;IACP,QAAQ;IACR,UAAU;IACV,aAAa;CACd,CAAC,CAAC;AAEH,uBAAuB;AACvB,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC;IACzB,mBAAmB;IACnB,WAAW;IACX,gBAAgB;IAChB,eAAe;IACf,cAAc;IACd,YAAY;IACZ,QAAQ;CACT,CAAC,CAAC;AAEH,qDAAqD;AACrD,SAAgB,cAAc,CAAC,QAAgB;IAC7C,MAAM,KAAK,GAAgB,EAAE,CAAC;IAE9B,SAAS,IAAI,CAAC,GAAW,EAAE,QAAgB,CAAC;QAC1C,IAAI,KAAK,GAAG,EAAE;YAAE,OAAO,CAAC,YAAY;QAEpC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;YAE7D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;gBAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC5C,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;gBAEvD,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;oBACxB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;wBAC9D,IAAI,CAAC,QAAQ,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;oBAC5B,CAAC;gBACH,CAAC;qBAAM,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;oBAC1B,IAAI,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;wBAAE,SAAS;oBAEzC,IAAI,CAAC;wBACH,MAAM,KAAK,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;wBACpC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;wBAEnD,mCAAmC;wBACnC,IAAI,KAAK,CAAC,IAAI,GAAG,aAAa,GAAG,CAAC;4BAAE,SAAS;wBAE7C,MAAM,QAAQ,GAAG,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;wBAE9C,yDAAyD;wBACzD,MAAM,KAAK,GAAG,QAAQ,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;wBAEnD,KAAK,CAAC,IAAI,CAAC;4BACT,IAAI,EAAE,YAAY;4BAClB,KAAK;4BACL,IAAI,EAAE,KAAK,CAAC,IAAI;4BAChB,SAAS,EAAE,GAAG;yBACf,CAAC,CAAC;oBACL,CAAC;oBAAC,MAAM,CAAC;wBACP,2BAA2B;oBAC7B,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,iCAAiC;QACnC,CAAC;IACH,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,CAAC;IACf,OAAO,KAAK,CAAC;AACf,CAAC;AAED,iCAAiC;AACjC,SAAgB,kBAAkB,CAChC,IAAe,EACf,MAAc,EACd,UAAkB;IAElB,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;IACvB,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;IACzC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;IAE1C,2CAA2C;IAC3C,MAAM,WAAW,GAAG,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACvE,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;QAC/B,IAAI,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7B,KAAK,IAAI,CAAC,CAAC;QACb,CAAC;IACH,CAAC;IAED,6BAA6B;IAC7B,QAAQ,UAAU,EAAE,CAAC;QACnB,KAAK,OAAO;YACV,4CAA4C;YAC5C,IAAI,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC7D,KAAK,IAAI,CAAC,CAAC;YACb,CAAC;YACD,IAAI,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;gBACnE,KAAK,IAAI,CAAC,CAAC;YACb,CAAC;YACD,MAAM;QACR,KAAK,UAAU;YACb,2BAA2B;YAC3B,IAAI,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC7D,KAAK,IAAI,CAAC,CAAC;YACb,CAAC;YACD,MAAM;QACR,KAAK,QAAQ;YACX,8BAA8B;YAC9B,IAAI,IAAI,CAAC,SAAS,KAAK,KAAK,IAAI,IAAI,CAAC,SAAS,KAAK,OAAO,EAAE,CAAC;gBAC3D,KAAK,IAAI,CAAC,CAAC;YACb,CAAC;YACD,MAAM;IACV,CAAC;IAED,4BAA4B;IAC5B,IAAI,IAAI,CAAC,IAAI,GAAG,KAAK,EAAE,CAAC;QACtB,KAAK,IAAI,CAAC,CAAC;IACb,CAAC;IACD,IAAI,IAAI,CAAC,IAAI,GAAG,KAAK,EAAE,CAAC;QACtB,KAAK,IAAI,CAAC,CAAC;IACb,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,2CAA2C;AAC3C,SAAgB,aAAa,CAAC,OAAe,EAAE,QAAgB;IAC7D,IAAI,OAAO,CAAC,MAAM,IAAI,QAAQ,EAAE,CAAC;QAC/B,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;IAChD,CAAC;IAED,yCAAyC;IACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,GAAG,CAAC,CAAC;IAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,GAAG,CAAC,CAAC;IAE5C,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IACxC,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC;IAEtC,MAAM,OAAO,GAAG,GAAG,IAAI,YAAY,OAAO,CAAC,MAAM,GAAG,QAAQ,GAAG,QAAQ,4BAA4B,IAAI,EAAE,CAAC;IAE1G,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AACtC,CAAC;AAED,2BAA2B;AAC3B,SAAgB,YAAY,CAC1B,QAAgB,EAChB,MAAc,EACd,UAAkB,EAClB,kBAA4B,EAAE;IAE9B,kBAAkB;IAClB,MAAM,QAAQ,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;IAE1C,2BAA2B;IAC3B,MAAM,WAAW,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACrC,GAAG,CAAC;QACJ,cAAc,EAAE,kBAAkB,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC;KAC1D,CAAC,CAAC,CAAC;IAEJ,qCAAqC;IACrC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,GAAG,CAAC,CAAC,cAAc,CAAC,CAAC;IAEhE,0CAA0C;IAC1C,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAEpF,mCAAmC;IACnC,MAAM,MAAM,GAAkB;QAC5B,KAAK,EAAE,EAAE;QACT,WAAW,EAAE,CAAC;QACd,SAAS,EAAE,CAAC;QACZ,cAAc,EAAE,CAAC;KAClB,CAAC;IAEF,MAAM,QAAQ,GAAG,kBAAkB,GAAG,eAAe,CAAC;IACtD,IAAI,YAAY,GAAG,CAAC,CAAC;IAErB,wCAAwC;IACxC,KAAK,MAAM,OAAO,IAAI,aAAa,EAAE,CAAC;QACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC9C,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACnD,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC;YAE/F,IAAI,YAAY,GAAG,OAAO,CAAC,MAAM,GAAG,QAAQ;gBAAE,MAAM;YAEpD,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;gBAChB,IAAI,EAAE,OAAO;gBACb,OAAO,EAAE,OAAO;gBAChB,SAAS;aACV,CAAC,CAAC;YACH,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC;YAC/B,MAAM,CAAC,SAAS,EAAE,CAAC;YACnB,IAAI,SAAS;gBAAE,MAAM,CAAC,cAAc,EAAE,CAAC;QACzC,CAAC;QAAC,MAAM,CAAC;YACP,2BAA2B;QAC7B,CAAC;IACH,CAAC;IAED,wBAAwB;IACxB,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;QAC/B,IAAI,MAAM,CAAC,SAAS,IAAI,SAAS;YAAE,MAAM;QACzC,IAAI,YAAY,IAAI,QAAQ;YAAE,MAAM;QACpC,IAAI,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,SAAS;QAE3C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAChD,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACnD,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAC3B,aAAa,EACb,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,6BAA6B;aACxE,CAAC;YACF,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,aAAa,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;YAEpE,IAAI,YAAY,GAAG,OAAO,CAAC,MAAM,GAAG,QAAQ;gBAAE,MAAM;YAEpD,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;gBAChB,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,OAAO,EAAE,OAAO;gBAChB,SAAS;aACV,CAAC,CAAC;YACH,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC;YAC/B,MAAM,CAAC,SAAS,EAAE,CAAC;YACnB,IAAI,SAAS;gBAAE,MAAM,CAAC,cAAc,EAAE,CAAC;QACzC,CAAC;QAAC,MAAM,CAAC;YACP,2BAA2B;QAC7B,CAAC;IACH,CAAC;IAED,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,GAAG,eAAe,CAAC,CAAC;IAE/D,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,iCAAiC;AACjC,SAAgB,qBAAqB,CAAC,OAAsB;IAC1D,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,OAAO,sBAAsB,CAAC;IAChC,CAAC;IAED,IAAI,MAAM,GAAG,YAAY,OAAO,CAAC,SAAS,YAAY,OAAO,CAAC,WAAW,UAAU,CAAC;IACpF,IAAI,OAAO,CAAC,cAAc,GAAG,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,OAAO,CAAC,cAAc,aAAa,CAAC;IACrD,CAAC;IACD,MAAM,IAAI,MAAM,CAAC;IAEjB,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QACjC,MAAM,IAAI,OAAO,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC;QAC1E,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC;QACvB,MAAM,IAAI,MAAM,CAAC;IACnB,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
declare const MEMORY_FILE = ".zai/context.md";
|
|
2
|
+
declare const BASE_SYSTEM_PROMPT = "You are an execution engine. Follow these rules exactly:\n\nRULES:\n- Output ONLY what is explicitly requested\n- No explanations unless requested\n- No apologies or acknowledgments\n- No conversational language\n- No first-person references\n- No preamble or postamble\n- No markdown formatting unless requested\n- Raw output only\n\nBEHAVIOR:\n- Execute instructions literally\n- Be deterministic and consistent\n- If a schema is provided, output valid JSON matching that schema exactly\n- If output format is specified, follow it precisely\n\nVIOLATIONS:\n- Do not say \"I\", \"I'll\", \"I can\", \"Sure\", \"Certainly\", \"Of course\"\n- Do not say \"Here is\", \"Here's\", \"Let me\"\n- Do not apologize or explain limitations\n- Do not add commentary or suggestions unless requested";
|
|
3
|
+
export declare function loadProjectContext(workingDir?: string): string;
|
|
4
|
+
export declare function saveProjectContext(content: string, workingDir?: string): void;
|
|
5
|
+
export declare function appendProjectRule(rule: string, workingDir?: string): void;
|
|
6
|
+
export declare function getSystemPrompt(workingDir?: string): string;
|
|
7
|
+
export interface ProjectMemory {
|
|
8
|
+
load(): Promise<string>;
|
|
9
|
+
append(rule: string): Promise<void>;
|
|
10
|
+
getSystemPrompt(): Promise<string>;
|
|
11
|
+
}
|
|
12
|
+
export declare function createProjectMemory(workingDir?: string): ProjectMemory;
|
|
13
|
+
export { MEMORY_FILE, BASE_SYSTEM_PROMPT };
|
|
14
|
+
//# sourceMappingURL=project_memory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project_memory.d.ts","sourceRoot":"","sources":["../../src/context/project_memory.ts"],"names":[],"mappings":"AAKA,QAAA,MAAM,WAAW,oBAAoB,CAAC;AAGtC,QAAA,MAAM,kBAAkB,yxBAsBgC,CAAC;AAkBzD,wBAAgB,kBAAkB,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAW9D;AAGD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAQ7E;AAGD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAIzE;AAGD,wBAAgB,eAAe,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAY3D;AAGD,MAAM,WAAW,aAAa;IAC5B,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IACxB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpC,eAAe,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;CACpC;AAGD,wBAAgB,mBAAmB,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,aAAa,CAYtE;AAGD,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,CAAC"}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.BASE_SYSTEM_PROMPT = exports.MEMORY_FILE = void 0;
|
|
37
|
+
exports.loadProjectContext = loadProjectContext;
|
|
38
|
+
exports.saveProjectContext = saveProjectContext;
|
|
39
|
+
exports.appendProjectRule = appendProjectRule;
|
|
40
|
+
exports.getSystemPrompt = getSystemPrompt;
|
|
41
|
+
exports.createProjectMemory = createProjectMemory;
|
|
42
|
+
const fs = __importStar(require("fs"));
|
|
43
|
+
const path = __importStar(require("path"));
|
|
44
|
+
const os = __importStar(require("os"));
|
|
45
|
+
// Memory file location (relative to working directory)
|
|
46
|
+
const MEMORY_FILE = '.zai/context.md';
|
|
47
|
+
exports.MEMORY_FILE = MEMORY_FILE;
|
|
48
|
+
// Base system prompt (deterministic execution engine)
|
|
49
|
+
const BASE_SYSTEM_PROMPT = `You are an execution engine. Follow these rules exactly:
|
|
50
|
+
|
|
51
|
+
RULES:
|
|
52
|
+
- Output ONLY what is explicitly requested
|
|
53
|
+
- No explanations unless requested
|
|
54
|
+
- No apologies or acknowledgments
|
|
55
|
+
- No conversational language
|
|
56
|
+
- No first-person references
|
|
57
|
+
- No preamble or postamble
|
|
58
|
+
- No markdown formatting unless requested
|
|
59
|
+
- Raw output only
|
|
60
|
+
|
|
61
|
+
BEHAVIOR:
|
|
62
|
+
- Execute instructions literally
|
|
63
|
+
- Be deterministic and consistent
|
|
64
|
+
- If a schema is provided, output valid JSON matching that schema exactly
|
|
65
|
+
- If output format is specified, follow it precisely
|
|
66
|
+
|
|
67
|
+
VIOLATIONS:
|
|
68
|
+
- Do not say "I", "I'll", "I can", "Sure", "Certainly", "Of course"
|
|
69
|
+
- Do not say "Here is", "Here's", "Let me"
|
|
70
|
+
- Do not apologize or explain limitations
|
|
71
|
+
- Do not add commentary or suggestions unless requested`;
|
|
72
|
+
exports.BASE_SYSTEM_PROMPT = BASE_SYSTEM_PROMPT;
|
|
73
|
+
// Get the full path to memory file
|
|
74
|
+
function getMemoryPath(workingDir) {
|
|
75
|
+
const baseDir = workingDir || process.cwd();
|
|
76
|
+
return path.join(baseDir, MEMORY_FILE);
|
|
77
|
+
}
|
|
78
|
+
// Ensure .zai directory exists
|
|
79
|
+
function ensureMemoryDir(workingDir) {
|
|
80
|
+
const baseDir = workingDir || process.cwd();
|
|
81
|
+
const zaiDir = path.join(baseDir, '.zai');
|
|
82
|
+
if (!fs.existsSync(zaiDir)) {
|
|
83
|
+
fs.mkdirSync(zaiDir, { recursive: true });
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
// Load project context from .zai/context.md
|
|
87
|
+
function loadProjectContext(workingDir) {
|
|
88
|
+
try {
|
|
89
|
+
const memoryPath = getMemoryPath(workingDir);
|
|
90
|
+
if (fs.existsSync(memoryPath)) {
|
|
91
|
+
return fs.readFileSync(memoryPath, 'utf-8');
|
|
92
|
+
}
|
|
93
|
+
return '';
|
|
94
|
+
}
|
|
95
|
+
catch {
|
|
96
|
+
// Fail gracefully on permission errors
|
|
97
|
+
return '';
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
// Save project context to .zai/context.md
|
|
101
|
+
function saveProjectContext(content, workingDir) {
|
|
102
|
+
try {
|
|
103
|
+
ensureMemoryDir(workingDir);
|
|
104
|
+
const memoryPath = getMemoryPath(workingDir);
|
|
105
|
+
fs.writeFileSync(memoryPath, content, 'utf-8');
|
|
106
|
+
}
|
|
107
|
+
catch {
|
|
108
|
+
// Fail gracefully on permission errors
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
// Append a rule to project context
|
|
112
|
+
function appendProjectRule(rule, workingDir) {
|
|
113
|
+
const existing = loadProjectContext(workingDir);
|
|
114
|
+
const newContent = existing ? `${existing}\n${rule}` : rule;
|
|
115
|
+
saveProjectContext(newContent, workingDir);
|
|
116
|
+
}
|
|
117
|
+
// Get the complete system prompt with project rules
|
|
118
|
+
function getSystemPrompt(workingDir) {
|
|
119
|
+
const projectContext = loadProjectContext(workingDir);
|
|
120
|
+
const osInfo = `OS: ${process.platform} (${os.arch()})`;
|
|
121
|
+
let systemPrompt = BASE_SYSTEM_PROMPT;
|
|
122
|
+
systemPrompt += `\n\n${osInfo}`;
|
|
123
|
+
if (projectContext.trim()) {
|
|
124
|
+
systemPrompt += `\n\n<project_rules>\n${projectContext}\n</project_rules>`;
|
|
125
|
+
}
|
|
126
|
+
return systemPrompt;
|
|
127
|
+
}
|
|
128
|
+
// Create a ProjectMemory instance for a working directory
|
|
129
|
+
function createProjectMemory(workingDir) {
|
|
130
|
+
return {
|
|
131
|
+
async load() {
|
|
132
|
+
return loadProjectContext(workingDir);
|
|
133
|
+
},
|
|
134
|
+
async append(rule) {
|
|
135
|
+
appendProjectRule(rule, workingDir);
|
|
136
|
+
},
|
|
137
|
+
async getSystemPrompt() {
|
|
138
|
+
return getSystemPrompt(workingDir);
|
|
139
|
+
},
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
//# sourceMappingURL=project_memory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project_memory.js","sourceRoot":"","sources":["../../src/context/project_memory.ts"],"names":[],"mappings":"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"}
|
package/dist/doctor.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC"}
|
package/dist/doctor.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":""}
|
package/dist/git.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export interface GitInfo {
|
|
2
|
+
isRepo: boolean;
|
|
3
|
+
branch: string | null;
|
|
4
|
+
isDirty: boolean;
|
|
5
|
+
uncommittedFiles: number;
|
|
6
|
+
repoName: string | null;
|
|
7
|
+
}
|
|
8
|
+
export declare function getGitInfo(cwd: string): GitInfo;
|
|
9
|
+
export declare function formatGitStatus(info: GitInfo): string;
|
|
10
|
+
//# sourceMappingURL=git.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,OAAO;IACtB,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CA4C/C;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAIrD"}
|