psycgod-sage 1.0.25 → 1.1.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/dist/cli/index.js
CHANGED
|
@@ -1,14 +1,87 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
2
|
+
import { spawnSync } from 'node:child_process';
|
|
3
|
+
import { readFileSync } from 'node:fs';
|
|
4
|
+
function packageVersion() {
|
|
5
|
+
try {
|
|
6
|
+
const packageUrl = new URL('../../package.json', import.meta.url);
|
|
7
|
+
const metadata = JSON.parse(readFileSync(packageUrl, 'utf8'));
|
|
8
|
+
return metadata.version || 'unknown';
|
|
9
|
+
}
|
|
10
|
+
catch {
|
|
11
|
+
return 'unknown';
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
function usage() {
|
|
15
|
+
console.log('Usage: sage <command> [args...]');
|
|
16
|
+
console.log(' sage run -- <command> [args...]');
|
|
17
|
+
}
|
|
18
|
+
function runPythonSage(args) {
|
|
19
|
+
const candidates = process.platform === 'win32'
|
|
20
|
+
? ['py', 'python']
|
|
21
|
+
: ['python3', 'python'];
|
|
22
|
+
for (const executable of candidates) {
|
|
23
|
+
const probe = spawnSync(executable, ['-c', 'import sage'], {
|
|
24
|
+
cwd: process.cwd(),
|
|
25
|
+
env: process.env,
|
|
26
|
+
stdio: 'ignore',
|
|
27
|
+
shell: false,
|
|
28
|
+
});
|
|
29
|
+
if (probe.error || probe.status !== 0)
|
|
30
|
+
continue;
|
|
31
|
+
const result = spawnSync(executable, ['-m', 'sage', ...args], {
|
|
32
|
+
cwd: process.cwd(),
|
|
33
|
+
env: process.env,
|
|
34
|
+
stdio: 'inherit',
|
|
35
|
+
shell: false,
|
|
36
|
+
});
|
|
37
|
+
if (result.error) {
|
|
38
|
+
console.error(`[SAGE npm] ${result.error.message}`);
|
|
39
|
+
return 1;
|
|
40
|
+
}
|
|
41
|
+
return result.status ?? 1;
|
|
42
|
+
}
|
|
43
|
+
console.error('[SAGE npm] The full SAGE CLI requires the Python package.');
|
|
44
|
+
console.error('[SAGE npm] Install it with: pip install psycgod-sage');
|
|
45
|
+
return 1;
|
|
46
|
+
}
|
|
47
|
+
function main(args) {
|
|
48
|
+
if (args.length === 1 && (args[0] === '--version' || args[0] === '-V')) {
|
|
49
|
+
console.log(packageVersion());
|
|
50
|
+
return 0;
|
|
51
|
+
}
|
|
52
|
+
if (args[0] !== 'run') {
|
|
53
|
+
return runPythonSage(args);
|
|
54
|
+
}
|
|
55
|
+
const separator = args.indexOf('--');
|
|
56
|
+
const commandParts = separator >= 0 ? args.slice(separator + 1) : args.slice(1);
|
|
57
|
+
if (commandParts.length === 0) {
|
|
58
|
+
usage();
|
|
59
|
+
return 1;
|
|
60
|
+
}
|
|
61
|
+
const [command, ...commandArgs] = commandParts;
|
|
62
|
+
const stdinFile = process.env.SAGE_STDIN_FILE?.trim();
|
|
63
|
+
let input;
|
|
64
|
+
if (stdinFile) {
|
|
65
|
+
try {
|
|
66
|
+
input = readFileSync(stdinFile);
|
|
67
|
+
}
|
|
68
|
+
catch (error) {
|
|
69
|
+
console.error(`[SAGE npm] Could not read SAGE_STDIN_FILE: ${error instanceof Error ? error.message : String(error)}`);
|
|
70
|
+
return 1;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
const result = spawnSync(command, commandArgs, {
|
|
74
|
+
cwd: process.cwd(),
|
|
75
|
+
env: process.env,
|
|
76
|
+
stdio: input ? ['pipe', 'inherit', 'inherit'] : 'inherit',
|
|
77
|
+
input,
|
|
78
|
+
shell: process.platform === 'win32',
|
|
79
|
+
});
|
|
80
|
+
if (result.error) {
|
|
81
|
+
console.error(`[SAGE npm] ${result.error.message}`);
|
|
82
|
+
return 1;
|
|
83
|
+
}
|
|
84
|
+
return result.status ?? 1;
|
|
85
|
+
}
|
|
86
|
+
process.exit(main(process.argv.slice(2)));
|
|
14
87
|
//# sourceMappingURL=index.js.map
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AACA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,8 +2,8 @@ export declare const SAGE_RUN_PREFIX = "npx -y psycgod-sage run --";
|
|
|
2
2
|
export declare const PYPI_RUN_PREFIX = "sage run --";
|
|
3
3
|
export declare const SAGE_BLOCK_START = "# SAGE MANAGED BLOCK START";
|
|
4
4
|
export declare const SAGE_BLOCK_END = "# SAGE MANAGED BLOCK END";
|
|
5
|
-
export declare const SAGE_INSTRUCTION = "# SAGE MANAGED BLOCK START\n## SAGE Integration - MANDATORY\n\nWhen a user asks for any coding, repo, file, debugging, documentation, or project task, start through SAGE automatically. The user should not need to type `sage`.\n\nFirst actions for normal repo work:\n-
|
|
6
|
-
export declare const SAGE_INSTRUCTION_SHORT = "# SAGE MANAGED BLOCK START\n# SAGE Integration - MANDATORY\n#
|
|
5
|
+
export declare const SAGE_INSTRUCTION = "# SAGE MANAGED BLOCK START\n## SAGE Integration - MANDATORY\n\nWhen a user asks for any coding, repo, file, debugging, documentation, or project task, start through SAGE automatically. The user should not need to type `sage`.\n\nFirst actions for normal repo work:\n- Use native file/search/edit tools normally.\n- Route every terminal command through the npm SAGE wrapper: `npx -y psycgod-sage run -- <command>`.\n\nRoute every shell command through SAGE. Do not run bare terminal commands.\n\nAllowed wrappers:\n- `npx -y psycgod-sage run -- <command>`\n- Backup when npm/npx is unavailable: `sage run -- <command>`\n\nRules:\n- Python: `npx -y psycgod-sage run -- python script.py`\n- Packages: `npx -y psycgod-sage run -- npm install`\n- Tests: `npx -y psycgod-sage run -- pytest`\n- If the wrapper fails before the target command starts, stop and report the wrapper failure.\n\nWhy:\n- npm/npx SAGE delegates to the canonical SAGE core, so behavior matches `psycgod-sage`.\n- Tracks local command history for the user.\n- Compresses noisy output before it reaches AI context.\n- Captures safe proof metrics for token savings and ML V1 prediction.\n- Keeps raw commands and output local unless the user enables higher telemetry.\n\nExamples:\n- Wrong: `python test.py`\n- Correct: `npx -y psycgod-sage run -- python test.py`\n- Backup: `sage run -- python test.py`\n- Wrong: `git status`\n- Correct: `npx -y psycgod-sage run -- git status`\n\nExample user request:\n- User: \"Please help me with my general book in this folder\"\n- Correct agent start: inspect/read/edit files with available native tools, then use `npx -y psycgod-sage run -- <command>` only when a terminal command is needed.\n- Wrong agent start: bare `python`, `git`, `npm`, or `ls`.\n\nML V1 is included. Optional ML V2 can be installed later by the user with:\n`npx -y psycgod-sage ml setup`\n# SAGE MANAGED BLOCK END\n";
|
|
6
|
+
export declare const SAGE_INSTRUCTION_SHORT = "# SAGE MANAGED BLOCK START\n# SAGE Integration - MANDATORY\n# Route all shell commands through: npx -y psycgod-sage run -- <command>\n# Backup when npm/npx is unavailable: sage run -- <command>\n# SAGE MANAGED BLOCK END\n";
|
|
7
7
|
export interface AgentTarget {
|
|
8
8
|
name: string;
|
|
9
9
|
path: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"targets.d.ts","sourceRoot":"","sources":["../../src/install/targets.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,eAAe,+BAA+B,CAAC;AAC5D,eAAO,MAAM,eAAe,gBAAgB,CAAC;AAC7C,eAAO,MAAM,gBAAgB,+BAA+B,CAAC;AAC7D,eAAO,MAAM,cAAc,6BAA6B,CAAC;AAEzD,eAAO,MAAM,gBAAgB,
|
|
1
|
+
{"version":3,"file":"targets.d.ts","sourceRoot":"","sources":["../../src/install/targets.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,eAAe,+BAA+B,CAAC;AAC5D,eAAO,MAAM,eAAe,gBAAgB,CAAC;AAC7C,eAAO,MAAM,gBAAgB,+BAA+B,CAAC;AAC7D,eAAO,MAAM,cAAc,6BAA6B,CAAC;AAEzD,eAAO,MAAM,gBAAgB,42DA2C5B,CAAC;AAEF,eAAO,MAAM,sBAAsB,kOAKlC,CAAC;AAEF,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,OAAO,CAAC;IACzB,QAAQ,EAAE,UAAU,GAAG,MAAM,GAAG,MAAM,CAAC;CACxC;AAED,eAAO,MAAM,aAAa,EAAE,WAAW,EA+BtC,CAAC"}
|
package/dist/install/targets.js
CHANGED
|
@@ -9,24 +9,23 @@ export const SAGE_INSTRUCTION = `${SAGE_BLOCK_START}
|
|
|
9
9
|
When a user asks for any coding, repo, file, debugging, documentation, or project task, start through SAGE automatically. The user should not need to type \`sage\`.
|
|
10
10
|
|
|
11
11
|
First actions for normal repo work:
|
|
12
|
-
-
|
|
13
|
-
-
|
|
14
|
-
- Route every terminal command through a SAGE wrapper
|
|
12
|
+
- Use native file/search/edit tools normally.
|
|
13
|
+
- Route every terminal command through the npm SAGE wrapper: \`${SAGE_RUN_PREFIX} <command>\`.
|
|
15
14
|
|
|
16
15
|
Route every shell command through SAGE. Do not run bare terminal commands.
|
|
17
16
|
|
|
18
17
|
Allowed wrappers:
|
|
19
|
-
-
|
|
20
|
-
-
|
|
18
|
+
- \`${SAGE_RUN_PREFIX} <command>\`
|
|
19
|
+
- Backup when npm/npx is unavailable: \`${PYPI_RUN_PREFIX} <command>\`
|
|
21
20
|
|
|
22
21
|
Rules:
|
|
23
|
-
- Python: \`${SAGE_RUN_PREFIX} python script.py\`
|
|
24
|
-
- Packages: \`${SAGE_RUN_PREFIX} npm install\`
|
|
25
|
-
- Tests: \`${SAGE_RUN_PREFIX} pytest\`
|
|
22
|
+
- Python: \`${SAGE_RUN_PREFIX} python script.py\`
|
|
23
|
+
- Packages: \`${SAGE_RUN_PREFIX} npm install\`
|
|
24
|
+
- Tests: \`${SAGE_RUN_PREFIX} pytest\`
|
|
26
25
|
- If the wrapper fails before the target command starts, stop and report the wrapper failure.
|
|
27
26
|
|
|
28
27
|
Why:
|
|
29
|
-
- npm/npx SAGE delegates to the canonical
|
|
28
|
+
- npm/npx SAGE delegates to the canonical SAGE core, so behavior matches \`psycgod-sage\`.
|
|
30
29
|
- Tracks local command history for the user.
|
|
31
30
|
- Compresses noisy output before it reaches AI context.
|
|
32
31
|
- Captures safe proof metrics for token savings and ML V1 prediction.
|
|
@@ -35,21 +34,14 @@ Why:
|
|
|
35
34
|
Examples:
|
|
36
35
|
- Wrong: \`python test.py\`
|
|
37
36
|
- Correct: \`${SAGE_RUN_PREFIX} python test.py\`
|
|
38
|
-
-
|
|
37
|
+
- Backup: \`${PYPI_RUN_PREFIX} python test.py\`
|
|
39
38
|
- Wrong: \`git status\`
|
|
40
39
|
- Correct: \`${SAGE_RUN_PREFIX} git status\`
|
|
41
40
|
|
|
42
|
-
For agents with native file/search/edit tools, shell wrapping is not enough. Use SAGE MCP tools for repository work:
|
|
43
|
-
- \`mcp__sage__sage_read_file\` instead of direct \`Read\`
|
|
44
|
-
- \`mcp__sage__sage_grep\` instead of direct \`Grep\`
|
|
45
|
-
- \`mcp__sage__sage_glob\` instead of direct \`Glob\`
|
|
46
|
-
- \`mcp__sage__sage_tree\` instead of direct tree/listing tools
|
|
47
|
-
- \`mcp__sage__sage_write_file\` and \`mcp__sage__sage_edit_file\` instead of direct \`Write\` or \`Edit\`
|
|
48
|
-
|
|
49
41
|
Example user request:
|
|
50
42
|
- User: "Please help me with my general book in this folder"
|
|
51
|
-
- Correct agent start:
|
|
52
|
-
- Wrong agent start:
|
|
43
|
+
- Correct agent start: inspect/read/edit files with available native tools, then use \`${SAGE_RUN_PREFIX} <command>\` only when a terminal command is needed.
|
|
44
|
+
- Wrong agent start: bare \`python\`, \`git\`, \`npm\`, or \`ls\`.
|
|
53
45
|
|
|
54
46
|
ML V1 is included. Optional ML V2 can be installed later by the user with:
|
|
55
47
|
\`npx -y psycgod-sage ml setup\`
|
|
@@ -57,9 +49,8 @@ ${SAGE_BLOCK_END}
|
|
|
57
49
|
`;
|
|
58
50
|
export const SAGE_INSTRUCTION_SHORT = `${SAGE_BLOCK_START}
|
|
59
51
|
# SAGE Integration - MANDATORY
|
|
60
|
-
# Start user repo/file/debugging tasks with SAGE MCP tools when available.
|
|
61
52
|
# Route all shell commands through: ${SAGE_RUN_PREFIX} <command>
|
|
62
|
-
#
|
|
53
|
+
# Backup when npm/npx is unavailable: ${PYPI_RUN_PREFIX} <command>
|
|
63
54
|
${SAGE_BLOCK_END}
|
|
64
55
|
`;
|
|
65
56
|
export const AGENT_TARGETS = [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"targets.js","sourceRoot":"","sources":["../../src/install/targets.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAE9C,MAAM,CAAC,MAAM,eAAe,GAAG,4BAA4B,CAAC;AAC5D,MAAM,CAAC,MAAM,eAAe,GAAG,aAAa,CAAC;AAC7C,MAAM,CAAC,MAAM,gBAAgB,GAAG,4BAA4B,CAAC;AAC7D,MAAM,CAAC,MAAM,cAAc,GAAG,0BAA0B,CAAC;AAEzD,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,gBAAgB
|
|
1
|
+
{"version":3,"file":"targets.js","sourceRoot":"","sources":["../../src/install/targets.ts"],"names":[],"mappings":"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"}
|