@cspeach/cli 1.1.5 → 1.1.7
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.
|
@@ -108,7 +108,12 @@ export function formatFactBlock(facts, sapSystemBlock = '') {
|
|
|
108
108
|
if (facts.objectNames && facts.objectNames.length > 0) {
|
|
109
109
|
lines.push(` <object_names>${facts.objectNames.join(', ')}</object_names>`);
|
|
110
110
|
}
|
|
111
|
-
|
|
111
|
+
// 2026-09-16: the environment hint is a regex guess over the prompt text.
|
|
112
|
+
// When a real system block is present (live probe, or the standalone
|
|
113
|
+
// profile the user answered), that block is authoritative — a stray
|
|
114
|
+
// "ABAP Cloud" in the prompt must not contradict it. Only emit the hint
|
|
115
|
+
// when there is no <sap_system …/> element to defer to.
|
|
116
|
+
if (facts.environmentHint && !sapSystemBlock.includes('<sap_system')) {
|
|
112
117
|
lines.push(` <environment_hint>${facts.environmentHint}</environment_hint>`);
|
|
113
118
|
}
|
|
114
119
|
if (facts.createIntent)
|
|
@@ -218,12 +218,12 @@ export function renderStandaloneSapSystemBlock(profile) {
|
|
|
218
218
|
*/
|
|
219
219
|
export const STANDALONE_NOTE = '<standalone_note>No SAP system is connected (standalone mode). Do not call SAP tools. ' +
|
|
220
220
|
'Work from code the user pastes or describes; when a task needs system data (source, table definitions, ATC output, dumps), ask the user to paste it. ' +
|
|
221
|
-
'Target the platform and release in sap_system exactly — use only syntax and APIs available on that release. ' +
|
|
221
|
+
'Package, transport and system facts the user states are confirmed facts in standalone mode: record them, never re-validate them, and never treat "validated to exist" as a gate to check. When resuming a plan, do not re-open a phase whose gate only lacks a system check; note the waiver once and move to the next phase. Target the platform and release in sap_system exactly — use only syntax and APIs available on that release. ' +
|
|
222
222
|
'Because nothing can be created or activated here, every task that would normally write to SAP must instead end with a "Manual Implementation Guide": ' +
|
|
223
223
|
'numbered steps in dependency order, one object per step, each stating the object type and name, where to create it (ADT wizard path, or SE80/SE11/SE24/SE38 transaction for SE80 teams), ' +
|
|
224
224
|
'the exact source to paste, the activation step, and any prerequisite (package, transport, number range, message class). ' +
|
|
225
225
|
'Finish with a short verification checklist (syntax check, activation, ATC, unit test) the user can run themselves.\n' +
|
|
226
|
-
'File outputs: when file tools are available (local build is on), you MUST write every produced object to the working folder as ./cspeach-out/<yyyy-mm-dd>-<short-task-name>/NN-<OBJECT_NAME>.<abap|ddls|bdef|srvd|srvb|ddlx|dcls|txt> in dependency order, and you MUST write the Manual Implementation Guide to GUIDE.md in the same folder before finishing the reply — each step pointing at its file and carrying a status (pending, done, failed, fixed). Tell the user the folder path once. If file tools are not available, say so once and keep everything in the reply.\n' +
|
|
226
|
+
'File outputs: when file tools are available (local build is on), you MUST write every produced object to the working folder as ./cspeach-out/<yyyy-mm-dd>-<short-task-name>/NN-<OBJECT_NAME>.<abap|ddls|bdef|srvd|srvb|ddlx|dcls|txt> in dependency order, and you MUST write the Manual Implementation Guide to GUIDE.md in the same folder before finishing the reply — each step pointing at its file and carrying a status (pending, done, failed, fixed). Tell the user the folder path once. If file tools are not available, say so once and keep everything in the reply. Analysis outputs (spec-gap reports, designs, estimates, reviews, explanations) stay IN THE REPLY in their full standard structure — CSPeach saves their canonical envelope files itself from the reply; write them to a file only as an additional copy, never instead, and never hand-write a .cspeach.json envelope.\n' +
|
|
227
227
|
'Step failures: when the user reports a failure at a step ("step 3 failed" plus an error message or screenshot), first re-read GUIDE.md and the affected object file from disk so you work from the exact current state, then ask only for what is missing to diagnose it, fix only the affected object, rewrite its file, update that step in GUIDE.md (status and what changed), re-issue that step and any step that depends on it, and state which steps are unchanged. If the user pastes an error without naming a step, identify the object from the error and confirm it in one line. Never restart the whole guide.</standalone_note>';
|
|
228
228
|
/**
|
|
229
229
|
* The full standalone contribution to `<session_context>`: the sap_system
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// GENERATED FILE — bundled skills for local mode.
|
|
2
2
|
// Source: https://manifest.cspeach.dev/v1.json
|
|
3
|
-
// Generated: 2026-
|
|
3
|
+
// Generated: 2026-09-17T15:05:10.303Z
|
|
4
4
|
// Manifest signature verified at build time.
|
|
5
5
|
export const BUNDLED_SKILLS = {
|
|
6
6
|
"abap-atc-fix": {
|
package/package.json
CHANGED
|
@@ -1,109 +1,109 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@cspeach/cli",
|
|
3
|
-
"version": "1.1.
|
|
4
|
-
"description": "CSPeach — AI-assisted ABAP development CLI. Direct SAP access, 34 skills, safety gates.",
|
|
5
|
-
"keywords": [
|
|
6
|
-
"abap",
|
|
7
|
-
"sap",
|
|
8
|
-
"ai",
|
|
9
|
-
"cli",
|
|
10
|
-
"ai-assisted-development",
|
|
11
|
-
"s4hana",
|
|
12
|
-
"abap-development",
|
|
13
|
-
"claude",
|
|
14
|
-
"anthropic"
|
|
15
|
-
],
|
|
16
|
-
"homepage": "https://cspeach.dev",
|
|
17
|
-
"bugs": {
|
|
18
|
-
"email": "laeeq.siddique@cremencing.com"
|
|
19
|
-
},
|
|
20
|
-
"author": "Laeeq Siddique (Cremencing Solutions)",
|
|
21
|
-
"license": "SEE LICENSE IN LICENSE",
|
|
22
|
-
"private": false,
|
|
23
|
-
"publishConfig": {
|
|
24
|
-
"access": "public"
|
|
25
|
-
},
|
|
26
|
-
"type": "module",
|
|
27
|
-
"bin": {
|
|
28
|
-
"cspeach": "dist/index.js"
|
|
29
|
-
},
|
|
30
|
-
"scripts": {
|
|
31
|
-
"dev": "tsx src/index.ts",
|
|
32
|
-
"prebuild": "tsx scripts/prebuild.ts",
|
|
33
|
-
"build": "tsc && node scripts/make-bin-executable.js",
|
|
34
|
-
"install:global": "tsx scripts/install-global.ts",
|
|
35
|
-
"pretest": "tsx scripts/sync-signing-key.ts || node -e \"console.warn('WARN: sync-signing-key skipped — using stub')\"",
|
|
36
|
-
"start": "node dist/index.js",
|
|
37
|
-
"typecheck": "tsc --noEmit",
|
|
38
|
-
"test": "vitest run",
|
|
39
|
-
"test:watch": "vitest",
|
|
40
|
-
"adt:smoke": "tsx scripts/adt-smoke.ts",
|
|
41
|
-
"smoke:all": "pnpm zcspeach:smoke && pnpm adt:smoke",
|
|
42
|
-
"zcspeach:smoke": "tsx scripts/zcspeach-smoke.ts",
|
|
43
|
-
"bench:models": "tsx scripts/bench-models.ts",
|
|
44
|
-
"bench:audit": "tsx scripts/bench-audit-task.ts",
|
|
45
|
-
"fiori": "tsx src/tools/fiori/bin.ts",
|
|
46
|
-
"prepare": "husky",
|
|
47
|
-
"prepublishOnly": "node -e \"const d=(require('./package.json').dependencies||{})['@cspeach/sap-client']||''; if(d.startsWith('file:')||d.startsWith('link:')){console.error('publish blocked: @cspeach/sap-client is a local link ('+d+') — point it at the published version before npm publish'); process.exit(1)}\""
|
|
48
|
-
},
|
|
49
|
-
"engines": {
|
|
50
|
-
"node": ">=20.0.0"
|
|
51
|
-
},
|
|
52
|
-
"dependencies": {
|
|
53
|
-
"@anthropic-ai/sdk": "^0.90.0",
|
|
54
|
-
"@cspeach/sap-client": "^0.1.11",
|
|
55
|
-
"@iarna/toml": "^2.2.5",
|
|
56
|
-
"@inkjs/ui": "^2.0.0",
|
|
57
|
-
"@inquirer/prompts": "^7.0.0",
|
|
58
|
-
"@noble/ed25519": "2.1.0",
|
|
59
|
-
"@noble/hashes": "1.4.0",
|
|
60
|
-
"@sap-ux/fe-fpm-writer": "0.43.7",
|
|
61
|
-
"@sap-ux/fiori-elements-writer": "^3.0.39",
|
|
62
|
-
"@sap-ux/fiori-freestyle-writer": "3.0.12",
|
|
63
|
-
"chalk": "^5.3.0",
|
|
64
|
-
"cli-highlight": "^2.1.11",
|
|
65
|
-
"cli-table3": "^0.6.5",
|
|
66
|
-
"clipboardy": "^5.3.1",
|
|
67
|
-
"cross-spawn": "^7.0.6",
|
|
68
|
-
"diff": "^9.0.0",
|
|
69
|
-
"ejs": "3.1.10",
|
|
70
|
-
"fuse.js": "^7.0.0",
|
|
71
|
-
"ink": "^5.0.0",
|
|
72
|
-
"ink-text-input": "^6.0.0",
|
|
73
|
-
"jose": "^5.9.0",
|
|
74
|
-
"keytar": "^7.9.0",
|
|
75
|
-
"mammoth": "^1.8.0",
|
|
76
|
-
"marked": "^11.2.0",
|
|
77
|
-
"marked-terminal": "^6.2.0",
|
|
78
|
-
"mem-fs": "2.1.0",
|
|
79
|
-
"mem-fs-editor": "9.4.0",
|
|
80
|
-
"node-machine-id": "^1.1.12",
|
|
81
|
-
"openai": "
|
|
82
|
-
"puppeteer-core": "24.10.2",
|
|
83
|
-
"react": "^18.3.0",
|
|
84
|
-
"turndown": "^7.2.0",
|
|
85
|
-
"unpdf": "
|
|
86
|
-
"zod": "^3.23.0"
|
|
87
|
-
},
|
|
88
|
-
"devDependencies": {
|
|
89
|
-
"@types/cross-spawn": "^6.0.6",
|
|
90
|
-
"@types/diff": "^7.0.2",
|
|
91
|
-
"@types/ejs": "^3.1.5",
|
|
92
|
-
"@types/node": "^20.17.0",
|
|
93
|
-
"@types/react": "^18.3.0",
|
|
94
|
-
"@types/turndown": "^5.0.5",
|
|
95
|
-
"docx": "^9.0.2",
|
|
96
|
-
"husky": "^9.1.7",
|
|
97
|
-
"ink-testing-library": "^4.0.0",
|
|
98
|
-
"pdf-lib": "^1.17.1",
|
|
99
|
-
"tsx": "^4.19.0",
|
|
100
|
-
"typescript": "^5.7.0",
|
|
101
|
-
"vitest": "^2.1.0"
|
|
102
|
-
},
|
|
103
|
-
"pnpm": {
|
|
104
|
-
"onlyBuiltDependencies": [
|
|
105
|
-
"keytar",
|
|
106
|
-
"esbuild"
|
|
107
|
-
]
|
|
108
|
-
}
|
|
109
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "@cspeach/cli",
|
|
3
|
+
"version": "1.1.7",
|
|
4
|
+
"description": "CSPeach — AI-assisted ABAP development CLI. Direct SAP access, 34 skills, safety gates.",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"abap",
|
|
7
|
+
"sap",
|
|
8
|
+
"ai",
|
|
9
|
+
"cli",
|
|
10
|
+
"ai-assisted-development",
|
|
11
|
+
"s4hana",
|
|
12
|
+
"abap-development",
|
|
13
|
+
"claude",
|
|
14
|
+
"anthropic"
|
|
15
|
+
],
|
|
16
|
+
"homepage": "https://cspeach.dev",
|
|
17
|
+
"bugs": {
|
|
18
|
+
"email": "laeeq.siddique@cremencing.com"
|
|
19
|
+
},
|
|
20
|
+
"author": "Laeeq Siddique (Cremencing Solutions)",
|
|
21
|
+
"license": "SEE LICENSE IN LICENSE",
|
|
22
|
+
"private": false,
|
|
23
|
+
"publishConfig": {
|
|
24
|
+
"access": "public"
|
|
25
|
+
},
|
|
26
|
+
"type": "module",
|
|
27
|
+
"bin": {
|
|
28
|
+
"cspeach": "dist/index.js"
|
|
29
|
+
},
|
|
30
|
+
"scripts": {
|
|
31
|
+
"dev": "tsx src/index.ts",
|
|
32
|
+
"prebuild": "tsx scripts/prebuild.ts",
|
|
33
|
+
"build": "tsc && node scripts/make-bin-executable.js",
|
|
34
|
+
"install:global": "tsx scripts/install-global.ts",
|
|
35
|
+
"pretest": "tsx scripts/sync-signing-key.ts || node -e \"console.warn('WARN: sync-signing-key skipped — using stub')\"",
|
|
36
|
+
"start": "node dist/index.js",
|
|
37
|
+
"typecheck": "tsc --noEmit",
|
|
38
|
+
"test": "vitest run",
|
|
39
|
+
"test:watch": "vitest",
|
|
40
|
+
"adt:smoke": "tsx scripts/adt-smoke.ts",
|
|
41
|
+
"smoke:all": "pnpm zcspeach:smoke && pnpm adt:smoke",
|
|
42
|
+
"zcspeach:smoke": "tsx scripts/zcspeach-smoke.ts",
|
|
43
|
+
"bench:models": "tsx scripts/bench-models.ts",
|
|
44
|
+
"bench:audit": "tsx scripts/bench-audit-task.ts",
|
|
45
|
+
"fiori": "tsx src/tools/fiori/bin.ts",
|
|
46
|
+
"prepare": "husky",
|
|
47
|
+
"prepublishOnly": "node -e \"const d=(require('./package.json').dependencies||{})['@cspeach/sap-client']||''; if(d.startsWith('file:')||d.startsWith('link:')){console.error('publish blocked: @cspeach/sap-client is a local link ('+d+') — point it at the published version before npm publish'); process.exit(1)}\""
|
|
48
|
+
},
|
|
49
|
+
"engines": {
|
|
50
|
+
"node": ">=20.0.0"
|
|
51
|
+
},
|
|
52
|
+
"dependencies": {
|
|
53
|
+
"@anthropic-ai/sdk": "^0.90.0",
|
|
54
|
+
"@cspeach/sap-client": "^0.1.11",
|
|
55
|
+
"@iarna/toml": "^2.2.5",
|
|
56
|
+
"@inkjs/ui": "^2.0.0",
|
|
57
|
+
"@inquirer/prompts": "^7.0.0",
|
|
58
|
+
"@noble/ed25519": "2.1.0",
|
|
59
|
+
"@noble/hashes": "1.4.0",
|
|
60
|
+
"@sap-ux/fe-fpm-writer": "0.43.7",
|
|
61
|
+
"@sap-ux/fiori-elements-writer": "^3.0.39",
|
|
62
|
+
"@sap-ux/fiori-freestyle-writer": "3.0.12",
|
|
63
|
+
"chalk": "^5.3.0",
|
|
64
|
+
"cli-highlight": "^2.1.11",
|
|
65
|
+
"cli-table3": "^0.6.5",
|
|
66
|
+
"clipboardy": "^5.3.1",
|
|
67
|
+
"cross-spawn": "^7.0.6",
|
|
68
|
+
"diff": "^9.0.0",
|
|
69
|
+
"ejs": "3.1.10",
|
|
70
|
+
"fuse.js": "^7.0.0",
|
|
71
|
+
"ink": "^5.0.0",
|
|
72
|
+
"ink-text-input": "^6.0.0",
|
|
73
|
+
"jose": "^5.9.0",
|
|
74
|
+
"keytar": "^7.9.0",
|
|
75
|
+
"mammoth": "^1.8.0",
|
|
76
|
+
"marked": "^11.2.0",
|
|
77
|
+
"marked-terminal": "^6.2.0",
|
|
78
|
+
"mem-fs": "2.1.0",
|
|
79
|
+
"mem-fs-editor": "9.4.0",
|
|
80
|
+
"node-machine-id": "^1.1.12",
|
|
81
|
+
"openai": "^6.49.0",
|
|
82
|
+
"puppeteer-core": "24.10.2",
|
|
83
|
+
"react": "^18.3.0",
|
|
84
|
+
"turndown": "^7.2.0",
|
|
85
|
+
"unpdf": "1.7.0",
|
|
86
|
+
"zod": "^3.23.0"
|
|
87
|
+
},
|
|
88
|
+
"devDependencies": {
|
|
89
|
+
"@types/cross-spawn": "^6.0.6",
|
|
90
|
+
"@types/diff": "^7.0.2",
|
|
91
|
+
"@types/ejs": "^3.1.5",
|
|
92
|
+
"@types/node": "^20.17.0",
|
|
93
|
+
"@types/react": "^18.3.0",
|
|
94
|
+
"@types/turndown": "^5.0.5",
|
|
95
|
+
"docx": "^9.0.2",
|
|
96
|
+
"husky": "^9.1.7",
|
|
97
|
+
"ink-testing-library": "^4.0.0",
|
|
98
|
+
"pdf-lib": "^1.17.1",
|
|
99
|
+
"tsx": "^4.19.0",
|
|
100
|
+
"typescript": "^5.7.0",
|
|
101
|
+
"vitest": "^2.1.0"
|
|
102
|
+
},
|
|
103
|
+
"pnpm": {
|
|
104
|
+
"onlyBuiltDependencies": [
|
|
105
|
+
"keytar",
|
|
106
|
+
"esbuild"
|
|
107
|
+
]
|
|
108
|
+
}
|
|
109
|
+
}
|