@voxgig/create-sdkgen 0.16.2 → 0.16.3
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/create-sdkgen.js +49 -72
- package/dist/create-sdkgen.js.map +1 -1
- package/dist/project/standard/CreateRoot.js +4 -1
- package/dist/project/standard/CreateRoot.js.map +1 -1
- package/dist/project/standard/ModelSdk.js +1 -1
- package/dist/project/standard/ModelSdk.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/project/standard/.sdk/build/sdkgen.js +5 -1
- package/project/standard/.sdk/src/Root.ts +14 -5
- package/project/standard/.sdk/src/Top.ts +6 -0
- package/src/create-sdkgen.ts +53 -83
- package/src/project/standard/CreateRoot.ts +4 -1
- package/src/project/standard/ModelSdk.ts +1 -1
package/dist/create-sdkgen.js
CHANGED
|
@@ -83,9 +83,16 @@ function CreateSdkGen(opts) {
|
|
|
83
83
|
folder,
|
|
84
84
|
log: log.child({ cmp: 'jostraca' }),
|
|
85
85
|
meta: { spec },
|
|
86
|
+
// Overwrite the scaffolded project (.sdk components, templates, build
|
|
87
|
+
// config) rather than 3-way merge. The scaffold is toolchain-derived and
|
|
88
|
+
// not hand-edited; merging against a drifting .jostraca base keeps STALE
|
|
89
|
+
// components/templates on a toolchain bump (so a fix never propagates) and
|
|
90
|
+
// can inject <<<<<<< markers. See @voxgig/sdkgen
|
|
91
|
+
// docs/explanation/regeneration-overwrite.md.
|
|
86
92
|
existing: {
|
|
87
93
|
txt: {
|
|
88
|
-
|
|
94
|
+
write: true,
|
|
95
|
+
merge: false
|
|
89
96
|
}
|
|
90
97
|
},
|
|
91
98
|
control: {
|
|
@@ -170,44 +177,40 @@ function CreateSdkGen(opts) {
|
|
|
170
177
|
generate,
|
|
171
178
|
};
|
|
172
179
|
}
|
|
180
|
+
// Run `npm <args>` to completion, rejecting on spawn error or non-zero exit.
|
|
181
|
+
function runNpm(args, spawn_opts) {
|
|
182
|
+
return new Promise((resolve, reject) => {
|
|
183
|
+
const child = (0, child_process_1.spawn)('npm', args, spawn_opts);
|
|
184
|
+
child.on('error', (err) => reject(new Error(`Failed to start npm: ${err.message}`)));
|
|
185
|
+
child.on('close', (code) => {
|
|
186
|
+
if (code !== 0) {
|
|
187
|
+
reject(new Error(`npm ${args.join(' ')} exited with code ${code}`));
|
|
188
|
+
}
|
|
189
|
+
else {
|
|
190
|
+
resolve(null);
|
|
191
|
+
}
|
|
192
|
+
});
|
|
193
|
+
});
|
|
194
|
+
}
|
|
173
195
|
async function installNpm(spec, opts, model) {
|
|
174
196
|
const folder = opts.folder;
|
|
175
197
|
const log = opts.log;
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
};
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
if (spec.install) {
|
|
193
|
-
log.info({ point: 'generate-install', note: 'running npm install in ' + cwd });
|
|
194
|
-
const child = (0, child_process_1.spawn)('npm', args, spawn_opts);
|
|
195
|
-
child.on('error', (err) => reject(new Error(`Failed to start npm: ${err.message}`)));
|
|
196
|
-
child.on('close', async (code) => {
|
|
197
|
-
if (code !== 0) {
|
|
198
|
-
reject(new Error(`npm install exited with code ${code}`));
|
|
199
|
-
}
|
|
200
|
-
else {
|
|
201
|
-
await postInstall();
|
|
202
|
-
return resolve(null);
|
|
203
|
-
}
|
|
204
|
-
});
|
|
205
|
-
}
|
|
206
|
-
else {
|
|
207
|
-
await postInstall();
|
|
208
|
-
return resolve(null);
|
|
209
|
-
}
|
|
210
|
-
});
|
|
198
|
+
const cwd = node_path_1.default.resolve(folder, SDK_FOLDER);
|
|
199
|
+
const env = {
|
|
200
|
+
...process.env,
|
|
201
|
+
PATH: `${node_path_1.default.dirname(process.execPath)}${node_path_1.default.delimiter}${process.env.PATH}`,
|
|
202
|
+
};
|
|
203
|
+
const spawn_opts = {
|
|
204
|
+
cwd,
|
|
205
|
+
env,
|
|
206
|
+
stdio: 'inherit', // Direct passthrough for real-time output
|
|
207
|
+
};
|
|
208
|
+
if (spec.install) {
|
|
209
|
+
log.info({ point: 'generate-install', note: 'running npm install in ' + cwd });
|
|
210
|
+
await runNpm(['install'], spawn_opts);
|
|
211
|
+
}
|
|
212
|
+
await installTargets(spec, opts, model, spawn_opts);
|
|
213
|
+
await installFeatures(spec, opts, model, spawn_opts);
|
|
211
214
|
}
|
|
212
215
|
async function installTargets(spec, opts, model, spawn_opts) {
|
|
213
216
|
const target = spec.target;
|
|
@@ -215,25 +218,12 @@ async function installTargets(spec, opts, model, spawn_opts) {
|
|
|
215
218
|
return;
|
|
216
219
|
}
|
|
217
220
|
const log = opts.log;
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
note: 'npm run target-add ' + targetlist
|
|
223
|
-
});
|
|
224
|
-
const args = ['run', 'add-target', targetlist];
|
|
225
|
-
log.info({ point: 'generate-target', note: 'adding targets: ' + targetlist });
|
|
226
|
-
const child = (0, child_process_1.spawn)('npm', args, spawn_opts);
|
|
227
|
-
child.on('error', (err) => reject(new Error(`Failed to start npm: ${err.message}`)));
|
|
228
|
-
child.on('close', async (code) => {
|
|
229
|
-
if (code !== 0) {
|
|
230
|
-
reject(new Error(`npm exited with code ${code}`));
|
|
231
|
-
}
|
|
232
|
-
else {
|
|
233
|
-
resolve(null);
|
|
234
|
-
}
|
|
235
|
-
});
|
|
221
|
+
const targetlist = target.join(',');
|
|
222
|
+
log.info({
|
|
223
|
+
point: 'generate-target', target: targetlist,
|
|
224
|
+
note: 'adding targets: ' + targetlist
|
|
236
225
|
});
|
|
226
|
+
await runNpm(['run', 'add-target', targetlist], spawn_opts);
|
|
237
227
|
}
|
|
238
228
|
async function installFeatures(spec, opts, model, spawn_opts) {
|
|
239
229
|
const feature = spec.feature;
|
|
@@ -241,24 +231,11 @@ async function installFeatures(spec, opts, model, spawn_opts) {
|
|
|
241
231
|
return;
|
|
242
232
|
}
|
|
243
233
|
const log = opts.log;
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
note: 'npm run feature-add ' + featurelist
|
|
249
|
-
});
|
|
250
|
-
const args = ['run', 'add-feature', featurelist];
|
|
251
|
-
log.info({ point: 'generate-feature', note: 'adding features: ' + featurelist });
|
|
252
|
-
const child = (0, child_process_1.spawn)('npm', args, spawn_opts);
|
|
253
|
-
child.on('error', (err) => reject(new Error(`Failed to start npm: ${err.message}`)));
|
|
254
|
-
child.on('close', async (code) => {
|
|
255
|
-
if (code !== 0) {
|
|
256
|
-
reject(new Error(`npm exited with code ${code}`));
|
|
257
|
-
}
|
|
258
|
-
else {
|
|
259
|
-
resolve(null);
|
|
260
|
-
}
|
|
261
|
-
});
|
|
234
|
+
const featurelist = feature.join(',');
|
|
235
|
+
log.info({
|
|
236
|
+
point: 'generate-feature', feature: featurelist,
|
|
237
|
+
note: 'adding features: ' + featurelist
|
|
262
238
|
});
|
|
239
|
+
await runNpm(['run', 'add-feature', featurelist], spawn_opts);
|
|
263
240
|
}
|
|
264
241
|
//# sourceMappingURL=create-sdkgen.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-sdkgen.js","sourceRoot":"","sources":["../src/create-sdkgen.ts"],"names":[],"mappings":";AAAA,yDAAyD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"create-sdkgen.js","sourceRoot":"","sources":["../src/create-sdkgen.ts"],"names":[],"mappings":"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"}
|
|
@@ -53,9 +53,12 @@ const CreateRoot = (0, jostraca_1.cmp)(function CreateRoot(props) {
|
|
|
53
53
|
model.const = { name: model.name };
|
|
54
54
|
(0, jostraca_1.names)(model.const, model.name);
|
|
55
55
|
model.const.year = new Date().getFullYear();
|
|
56
|
+
// Scaffold is MIT-licensed (matches the emitted LICENSE and tm/LICENSE);
|
|
57
|
+
// set directly rather than via names() so the value stays 'MIT', not 'Mit'.
|
|
58
|
+
model.const.License = 'MIT';
|
|
56
59
|
ctx$.model = model;
|
|
57
60
|
(0, jostraca_1.Project)({ folder }, () => {
|
|
58
|
-
const from = node_path_1.default.resolve(node_path_1.default.join(__dirname
|
|
61
|
+
const from = node_path_1.default.resolve(node_path_1.default.join(__dirname, '..', '..', '..', 'project', 'standard'));
|
|
59
62
|
// console.log('FROM', from)
|
|
60
63
|
(0, jostraca_1.Copy)({
|
|
61
64
|
from,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CreateRoot.js","sourceRoot":"","sources":["../../../src/project/standard/CreateRoot.ts"],"names":[],"mappings":";;;;;;AAEA,0DAA4B;AAC5B,gCAAgC;AAEhC,uCAUiB;AAGjB,yCAAqC;AAGrC,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;CAiBrB,CAAA;AAGD,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;CAkBrB,CAAA;AAGD,0BAA0B;AAC1B,MAAM,UAAU,GAAG,IAAA,cAAG,EAAC,SAAS,UAAU,CAAC,KAAU;IACnD,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,KAAK,CAAA;IACrD,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE,CAAA;IAEpB,2CAA2C;IAC3C,KAAK,CAAC,KAAK,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAA;IAClC,IAAA,gBAAK,EAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;IAC9B,KAAK,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;
|
|
1
|
+
{"version":3,"file":"CreateRoot.js","sourceRoot":"","sources":["../../../src/project/standard/CreateRoot.ts"],"names":[],"mappings":";;;;;;AAEA,0DAA4B;AAC5B,gCAAgC;AAEhC,uCAUiB;AAGjB,yCAAqC;AAGrC,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;CAiBrB,CAAA;AAGD,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;CAkBrB,CAAA;AAGD,0BAA0B;AAC1B,MAAM,UAAU,GAAG,IAAA,cAAG,EAAC,SAAS,UAAU,CAAC,KAAU;IACnD,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,KAAK,CAAA;IACrD,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE,CAAA;IAEpB,2CAA2C;IAC3C,KAAK,CAAC,KAAK,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAA;IAClC,IAAA,gBAAK,EAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;IAC9B,KAAK,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;IAC3C,yEAAyE;IACzE,4EAA4E;IAC5E,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAA;IAE3B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;IAElB,IAAA,kBAAO,EAAC,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE;QACvB,MAAM,IAAI,GACR,mBAAI,CAAC,OAAO,CAAC,mBAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC,CAAA;QAE7E,4BAA4B;QAE5B,IAAA,eAAI,EAAC;YACH,IAAI;YACJ,OAAO,EAAE,CAAC,cAAc,CAAC;SAC1B,CAAC,CAAA;QAEF,IAAA,eAAI,EAAC,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,GAAG,EAAE;YAChC,IAAA,kBAAO,EAAC,aAAa,CAAC,CAAA;QACxB,CAAC,CAAC,CAAA;QAEF,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAA;QACxB,MAAM,OAAO,GAAG,mBAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;QACtC,IAAI,CAAC,GAAG,GAAG,OAAO,CAAA;QAElB,IAAA,iBAAM,EAAC,EAAE,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,EAAE,GAAG,EAAE;YACrC,IAAA,eAAI,EAAC,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,GAAG,EAAE;gBAChC,IAAA,kBAAO,EAAC,aAAa,CAAC,CAAA;YACxB,CAAC,CAAC,CAAA;YAEF,IAAA,iBAAM,EAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE;gBAC3B,qDAAqD;gBACrD,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;oBAC3B,IAAA,eAAI,EAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAA;gBACtC,CAAC;qBACI,CAAC;oBACJ,IAAA,eAAI,EAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,GAAG,EAAE;wBAC3B,IAAA,kBAAO,EAAC,sBAAsB,CAAC,CAAA;oBACjC,CAAC,CAAC,CAAA;gBACJ,CAAC;YACH,CAAC,CAAC,CAAA;YAEF,IAAA,iBAAM,EAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,GAAG,EAAE;gBAC7B,IAAA,mBAAQ,EAAC,EAAE,IAAI,EAAE,CAAC,CAAA;YACpB,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;IAEJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAIA,gCAAU"}
|
|
@@ -8,7 +8,7 @@ const node_path_1 = __importDefault(require("node:path"));
|
|
|
8
8
|
const jostraca_1 = require("jostraca");
|
|
9
9
|
const ModelSdk = (0, jostraca_1.cmp)(function ModelSdk(props) {
|
|
10
10
|
const { spec } = props;
|
|
11
|
-
const from = node_path_1.default.resolve(node_path_1.default.join(__dirname
|
|
11
|
+
const from = node_path_1.default.resolve(node_path_1.default.join(__dirname, '..', '..', '..', 'project', 'standard'));
|
|
12
12
|
(0, jostraca_1.File)({ name: 'sdk.aontu' }, () => {
|
|
13
13
|
(0, jostraca_1.Fragment)({
|
|
14
14
|
from: node_path_1.default.join(from, spec.sdk_folder, 'model', 'sdk.fragment.aontu'),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ModelSdk.js","sourceRoot":"","sources":["../../../src/project/standard/ModelSdk.ts"],"names":[],"mappings":";;;;;;AACA,0DAA4B;AAG5B,uCAKiB;AAIjB,MAAM,QAAQ,GAAG,IAAA,cAAG,EAAC,SAAS,QAAQ,CAAC,KAAU;IAC/C,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,CAAA;IAEtB,MAAM,IAAI,GACR,mBAAI,CAAC,OAAO,CAAC,mBAAI,CAAC,IAAI,CAAC,SAAS,
|
|
1
|
+
{"version":3,"file":"ModelSdk.js","sourceRoot":"","sources":["../../../src/project/standard/ModelSdk.ts"],"names":[],"mappings":";;;;;;AACA,0DAA4B;AAG5B,uCAKiB;AAIjB,MAAM,QAAQ,GAAG,IAAA,cAAG,EAAC,SAAS,QAAQ,CAAC,KAAU;IAC/C,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,CAAA;IAEtB,MAAM,IAAI,GACR,mBAAI,CAAC,OAAO,CAAC,mBAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC,CAAA;IAE7E,IAAA,eAAI,EAAC,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,GAAG,EAAE;QAC/B,IAAA,mBAAQ,EAAC;YACP,IAAI,EAAE,mBAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,oBAAoB,CAAC;YACrE,OAAO,EAAE;gBACP,WAAW,EAAE,IAAI,CAAC,IAAI;gBACtB,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,GAAG,EAAE,IAAI,CAAC,GAAG;aACd;SACF,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AAEJ,CAAC,CAAC,CAAA;AAIA,4BAAQ"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"root":["../src/create-sdkgen.ts","../src/project/standard/
|
|
1
|
+
{"root":["../src/create-sdkgen.ts","../src/project/standard/CreateRoot.ts","../src/project/standard/ModelSdk.ts"],"version":"6.0.3"}
|
package/package.json
CHANGED
|
@@ -10,7 +10,11 @@ const config = {
|
|
|
10
10
|
model: {
|
|
11
11
|
folder: __dirname+'/../model',
|
|
12
12
|
},
|
|
13
|
-
|
|
13
|
+
// Overwrite generated SDK output, never 3-way merge: output is fully
|
|
14
|
+
// model-derived and never hand-edited, and merging against a drifting
|
|
15
|
+
// .jostraca base keeps stale files / injects <<<<<<< markers on toolchain
|
|
16
|
+
// bumps. See @voxgig/sdkgen docs/explanation/regeneration-overwrite.md.
|
|
17
|
+
existing: { txt: { write: true, merge: false } },
|
|
14
18
|
}
|
|
15
19
|
|
|
16
20
|
module.exports = SdkGen.makeBuild(config)
|
|
@@ -12,6 +12,7 @@ import {
|
|
|
12
12
|
Entity,
|
|
13
13
|
Feature,
|
|
14
14
|
Readme,
|
|
15
|
+
AgentGuide,
|
|
15
16
|
Test,
|
|
16
17
|
|
|
17
18
|
} from '@voxgig/sdkgen'
|
|
@@ -87,16 +88,17 @@ const Root = cmp(function Root(props: any) {
|
|
|
87
88
|
// a `phase` map mirroring the feature pattern:
|
|
88
89
|
//
|
|
89
90
|
// phase: {
|
|
90
|
-
// entity:
|
|
91
|
-
// feature:
|
|
92
|
-
// readme:
|
|
93
|
-
//
|
|
91
|
+
// entity: { active: false }
|
|
92
|
+
// feature: { active: false }
|
|
93
|
+
// readme: { active: false }
|
|
94
|
+
// agentguide: { active: false }
|
|
95
|
+
// test: { active: false }
|
|
94
96
|
// }
|
|
95
97
|
//
|
|
96
98
|
// Defaults are inclusive — when a phase entry is absent (or
|
|
97
99
|
// active is not explicitly false), the phase runs. Existing
|
|
98
100
|
// standard targets don't declare `phase` and keep current
|
|
99
|
-
// behaviour. A CLI-style target switches all
|
|
101
|
+
// behaviour. A CLI-style target switches all five off and
|
|
100
102
|
// only emits Main.
|
|
101
103
|
const phase = target.phase || {}
|
|
102
104
|
const phaseActive = (name: string): boolean =>
|
|
@@ -122,6 +124,13 @@ const Root = cmp(function Root(props: any) {
|
|
|
122
124
|
Readme({ target })
|
|
123
125
|
}
|
|
124
126
|
|
|
127
|
+
// Per-target agent guides: <lang>/AGENTS.md + CLAUDE.md, and (driven
|
|
128
|
+
// internally by AgentGuide) a guide per active feature under
|
|
129
|
+
// <lang>/src/feature/<name>/. Placement mirrors Readme.
|
|
130
|
+
if (phaseActive('agentguide')) {
|
|
131
|
+
AgentGuide({ target })
|
|
132
|
+
}
|
|
133
|
+
|
|
125
134
|
if (phaseActive('test')) {
|
|
126
135
|
Test({ target })
|
|
127
136
|
}
|
|
@@ -4,6 +4,7 @@ import {
|
|
|
4
4
|
cmp,
|
|
5
5
|
Deploy,
|
|
6
6
|
ReadmeTop,
|
|
7
|
+
AgentGuideTop,
|
|
7
8
|
License,
|
|
8
9
|
Security,
|
|
9
10
|
Changelog,
|
|
@@ -13,6 +14,11 @@ import {
|
|
|
13
14
|
const Top = cmp(function Top(props: any) {
|
|
14
15
|
ReadmeTop({})
|
|
15
16
|
|
|
17
|
+
// Agent onboarding guides at the project root: AGENTS.md + a thin CLAUDE.md,
|
|
18
|
+
// populated with the real target / feature / entity lists. Emitted outside
|
|
19
|
+
// any target Folder (same placement rule as ReadmeTop / Deploy).
|
|
20
|
+
AgentGuideTop({})
|
|
21
|
+
|
|
16
22
|
// Root governance files for a publishable, unofficial generated SDK:
|
|
17
23
|
// an MIT LICENSE (held by Voxgig), a SECURITY.md disclosure policy, and a
|
|
18
24
|
// seed CHANGELOG. Emitted at repo root, before the per-target folders.
|
package/src/create-sdkgen.ts
CHANGED
|
@@ -94,9 +94,16 @@ function CreateSdkGen(opts: FullCreateSdkGenOptions) {
|
|
|
94
94
|
folder,
|
|
95
95
|
log: log.child({ cmp: 'jostraca' }),
|
|
96
96
|
meta: { spec },
|
|
97
|
+
// Overwrite the scaffolded project (.sdk components, templates, build
|
|
98
|
+
// config) rather than 3-way merge. The scaffold is toolchain-derived and
|
|
99
|
+
// not hand-edited; merging against a drifting .jostraca base keeps STALE
|
|
100
|
+
// components/templates on a toolchain bump (so a fix never propagates) and
|
|
101
|
+
// can inject <<<<<<< markers. See @voxgig/sdkgen
|
|
102
|
+
// docs/explanation/regeneration-overwrite.md.
|
|
97
103
|
existing: {
|
|
98
104
|
txt: {
|
|
99
|
-
|
|
105
|
+
write: true,
|
|
106
|
+
merge: false
|
|
100
107
|
}
|
|
101
108
|
},
|
|
102
109
|
control: {
|
|
@@ -214,53 +221,49 @@ function CreateSdkGen(opts: FullCreateSdkGenOptions) {
|
|
|
214
221
|
|
|
215
222
|
|
|
216
223
|
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
224
|
+
// Run `npm <args>` to completion, rejecting on spawn error or non-zero exit.
|
|
225
|
+
function runNpm(args: string[], spawn_opts: any): Promise<null> {
|
|
226
|
+
return new Promise((resolve, reject) => {
|
|
227
|
+
const child = spawn('npm', args, spawn_opts)
|
|
220
228
|
|
|
221
|
-
|
|
222
|
-
const cwd = Path.resolve(folder, SDK_FOLDER)
|
|
229
|
+
child.on('error', (err) => reject(new Error(`Failed to start npm: ${err.message}`)))
|
|
223
230
|
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
231
|
+
child.on('close', (code) => {
|
|
232
|
+
if (code !== 0) {
|
|
233
|
+
reject(new Error(`npm ${args.join(' ')} exited with code ${code}`))
|
|
234
|
+
}
|
|
235
|
+
else {
|
|
236
|
+
resolve(null)
|
|
237
|
+
}
|
|
238
|
+
})
|
|
239
|
+
})
|
|
240
|
+
}
|
|
228
241
|
|
|
229
|
-
const args = ['install']
|
|
230
242
|
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
stdio: 'inherit', // Direct passthrough for real-time output
|
|
235
|
-
}
|
|
243
|
+
async function installNpm(spec: GenerateSpec, opts: any, model: any) {
|
|
244
|
+
const folder = opts.folder
|
|
245
|
+
const log = opts.log
|
|
236
246
|
|
|
237
|
-
|
|
238
|
-
await installTargets(spec, opts, model, spawn_opts)
|
|
239
|
-
await installFeatures(spec, opts, model, spawn_opts)
|
|
240
|
-
}
|
|
247
|
+
const cwd = Path.resolve(folder, SDK_FOLDER)
|
|
241
248
|
|
|
242
|
-
|
|
243
|
-
|
|
249
|
+
const env = {
|
|
250
|
+
...process.env,
|
|
251
|
+
PATH: `${Path.dirname(process.execPath)}${Path.delimiter}${process.env.PATH}`,
|
|
252
|
+
}
|
|
244
253
|
|
|
245
|
-
|
|
254
|
+
const spawn_opts: any = {
|
|
255
|
+
cwd,
|
|
256
|
+
env,
|
|
257
|
+
stdio: 'inherit', // Direct passthrough for real-time output
|
|
258
|
+
}
|
|
246
259
|
|
|
247
|
-
|
|
260
|
+
if (spec.install) {
|
|
261
|
+
log.info({ point: 'generate-install', note: 'running npm install in ' + cwd })
|
|
262
|
+
await runNpm(['install'], spawn_opts)
|
|
263
|
+
}
|
|
248
264
|
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
reject(new Error(`npm install exited with code ${code}`))
|
|
252
|
-
}
|
|
253
|
-
else {
|
|
254
|
-
await postInstall()
|
|
255
|
-
return resolve(null)
|
|
256
|
-
}
|
|
257
|
-
})
|
|
258
|
-
}
|
|
259
|
-
else {
|
|
260
|
-
await postInstall()
|
|
261
|
-
return resolve(null)
|
|
262
|
-
}
|
|
263
|
-
})
|
|
265
|
+
await installTargets(spec, opts, model, spawn_opts)
|
|
266
|
+
await installFeatures(spec, opts, model, spawn_opts)
|
|
264
267
|
}
|
|
265
268
|
|
|
266
269
|
|
|
@@ -272,30 +275,14 @@ async function installTargets(spec: GenerateSpec, opts: any, model: any, spawn_o
|
|
|
272
275
|
}
|
|
273
276
|
|
|
274
277
|
const log = opts.log
|
|
275
|
-
|
|
276
|
-
const targetlist = target.join(',')
|
|
278
|
+
const targetlist = target.join(',')
|
|
277
279
|
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
})
|
|
282
|
-
|
|
283
|
-
const args = ['run', 'add-target', targetlist]
|
|
284
|
-
|
|
285
|
-
log.info({ point: 'generate-target', note: 'adding targets: ' + targetlist })
|
|
286
|
-
const child = spawn('npm', args, spawn_opts)
|
|
287
|
-
|
|
288
|
-
child.on('error', (err) => reject(new Error(`Failed to start npm: ${err.message}`)))
|
|
289
|
-
|
|
290
|
-
child.on('close', async (code) => {
|
|
291
|
-
if (code !== 0) {
|
|
292
|
-
reject(new Error(`npm exited with code ${code}`))
|
|
293
|
-
}
|
|
294
|
-
else {
|
|
295
|
-
resolve(null)
|
|
296
|
-
}
|
|
297
|
-
})
|
|
280
|
+
log.info({
|
|
281
|
+
point: 'generate-target', target: targetlist,
|
|
282
|
+
note: 'adding targets: ' + targetlist
|
|
298
283
|
})
|
|
284
|
+
|
|
285
|
+
await runNpm(['run', 'add-target', targetlist], spawn_opts)
|
|
299
286
|
}
|
|
300
287
|
|
|
301
288
|
|
|
@@ -307,31 +294,14 @@ async function installFeatures(spec: GenerateSpec, opts: any, model: any, spawn_
|
|
|
307
294
|
}
|
|
308
295
|
|
|
309
296
|
const log = opts.log
|
|
310
|
-
|
|
311
|
-
const featurelist = feature.join(',')
|
|
297
|
+
const featurelist = feature.join(',')
|
|
312
298
|
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
})
|
|
317
|
-
|
|
318
|
-
const args = ['run', 'add-feature', featurelist]
|
|
319
|
-
|
|
320
|
-
log.info({ point: 'generate-feature', note: 'adding features: ' + featurelist })
|
|
321
|
-
const child = spawn('npm', args, spawn_opts)
|
|
322
|
-
|
|
323
|
-
child.on('error', (err) => reject(new Error(`Failed to start npm: ${err.message}`)))
|
|
324
|
-
|
|
325
|
-
child.on('close', async (code) => {
|
|
326
|
-
if (code !== 0) {
|
|
327
|
-
reject(new Error(`npm exited with code ${code}`))
|
|
328
|
-
}
|
|
329
|
-
else {
|
|
330
|
-
resolve(null)
|
|
331
|
-
}
|
|
332
|
-
})
|
|
299
|
+
log.info({
|
|
300
|
+
point: 'generate-feature', feature: featurelist,
|
|
301
|
+
note: 'adding features: ' + featurelist
|
|
333
302
|
})
|
|
334
303
|
|
|
304
|
+
await runNpm(['run', 'add-feature', featurelist], spawn_opts)
|
|
335
305
|
}
|
|
336
306
|
|
|
337
307
|
|
|
@@ -69,12 +69,15 @@ const CreateRoot = cmp(function CreateRoot(props: any) {
|
|
|
69
69
|
model.const = { name: model.name }
|
|
70
70
|
names(model.const, model.name)
|
|
71
71
|
model.const.year = new Date().getFullYear()
|
|
72
|
+
// Scaffold is MIT-licensed (matches the emitted LICENSE and tm/LICENSE);
|
|
73
|
+
// set directly rather than via names() so the value stays 'MIT', not 'Mit'.
|
|
74
|
+
model.const.License = 'MIT'
|
|
72
75
|
|
|
73
76
|
ctx$.model = model
|
|
74
77
|
|
|
75
78
|
Project({ folder }, () => {
|
|
76
79
|
const from =
|
|
77
|
-
Path.resolve(Path.join(__dirname
|
|
80
|
+
Path.resolve(Path.join(__dirname, '..', '..', '..', 'project', 'standard'))
|
|
78
81
|
|
|
79
82
|
// console.log('FROM', from)
|
|
80
83
|
|
|
@@ -15,7 +15,7 @@ const ModelSdk = cmp(function ModelSdk(props: any) {
|
|
|
15
15
|
const { spec } = props
|
|
16
16
|
|
|
17
17
|
const from =
|
|
18
|
-
Path.resolve(Path.join(__dirname
|
|
18
|
+
Path.resolve(Path.join(__dirname, '..', '..', '..', 'project', 'standard'))
|
|
19
19
|
|
|
20
20
|
File({ name: 'sdk.aontu' }, () => {
|
|
21
21
|
Fragment({
|