@loxtep/sdk 0.2.3 → 0.4.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/CHANGELOG.md +68 -0
- package/README.md +255 -4
- package/dist/authoring/agent.d.ts +164 -0
- package/dist/authoring/agent.d.ts.map +1 -0
- package/dist/authoring/agent.js +376 -0
- package/dist/authoring/agent.js.map +1 -0
- package/dist/authoring/compiler.d.ts +103 -0
- package/dist/authoring/compiler.d.ts.map +1 -0
- package/dist/authoring/compiler.js +305 -0
- package/dist/authoring/compiler.js.map +1 -0
- package/dist/authoring/define-data-workflow.d.ts +24 -0
- package/dist/authoring/define-data-workflow.d.ts.map +1 -0
- package/dist/authoring/define-data-workflow.js +93 -0
- package/dist/authoring/define-data-workflow.js.map +1 -0
- package/dist/authoring/index.d.ts +19 -0
- package/dist/authoring/index.d.ts.map +1 -0
- package/dist/authoring/index.js +15 -0
- package/dist/authoring/index.js.map +1 -0
- package/dist/authoring/toolbox.d.ts +133 -0
- package/dist/authoring/toolbox.d.ts.map +1 -0
- package/dist/authoring/toolbox.js +166 -0
- package/dist/authoring/toolbox.js.map +1 -0
- package/dist/authoring/triggers.d.ts +41 -0
- package/dist/authoring/triggers.d.ts.map +1 -0
- package/dist/authoring/triggers.js +60 -0
- package/dist/authoring/triggers.js.map +1 -0
- package/dist/authoring/types.d.ts +111 -0
- package/dist/authoring/types.d.ts.map +1 -0
- package/dist/authoring/types.js +9 -0
- package/dist/authoring/types.js.map +1 -0
- package/dist/cli/commands/activity-cmd.d.ts +28 -0
- package/dist/cli/commands/activity-cmd.d.ts.map +1 -0
- package/dist/cli/commands/activity-cmd.js +78 -0
- package/dist/cli/commands/activity-cmd.js.map +1 -0
- package/dist/cli/commands/attach-cmd.d.ts +38 -0
- package/dist/cli/commands/attach-cmd.d.ts.map +1 -0
- package/dist/cli/commands/attach-cmd.js +141 -0
- package/dist/cli/commands/attach-cmd.js.map +1 -0
- package/dist/cli/commands/data-contracts-cmd.d.ts +8 -0
- package/dist/cli/commands/data-contracts-cmd.d.ts.map +1 -1
- package/dist/cli/commands/data-contracts-cmd.js +11 -0
- package/dist/cli/commands/data-contracts-cmd.js.map +1 -1
- package/dist/cli/commands/data-products-cmd.d.ts +2 -0
- package/dist/cli/commands/data-products-cmd.d.ts.map +1 -1
- package/dist/cli/commands/data-products-cmd.js +35 -0
- package/dist/cli/commands/data-products-cmd.js.map +1 -1
- package/dist/cli/commands/deploy-cmd.d.ts +101 -0
- package/dist/cli/commands/deploy-cmd.d.ts.map +1 -0
- package/dist/cli/commands/deploy-cmd.js +461 -0
- package/dist/cli/commands/deploy-cmd.js.map +1 -0
- package/dist/cli/commands/generate-cmd.d.ts +35 -0
- package/dist/cli/commands/generate-cmd.d.ts.map +1 -0
- package/dist/cli/commands/generate-cmd.js +134 -0
- package/dist/cli/commands/generate-cmd.js.map +1 -0
- package/dist/cli/commands/improvements-cmd.d.ts +44 -0
- package/dist/cli/commands/improvements-cmd.d.ts.map +1 -0
- package/dist/cli/commands/improvements-cmd.js +215 -0
- package/dist/cli/commands/improvements-cmd.js.map +1 -0
- package/dist/cli/commands/init-cmd.d.ts +78 -0
- package/dist/cli/commands/init-cmd.d.ts.map +1 -0
- package/dist/cli/commands/init-cmd.js +250 -0
- package/dist/cli/commands/init-cmd.js.map +1 -0
- package/dist/cli/commands/instances-cmd.d.ts +37 -0
- package/dist/cli/commands/instances-cmd.d.ts.map +1 -0
- package/dist/cli/commands/instances-cmd.js +150 -0
- package/dist/cli/commands/instances-cmd.js.map +1 -0
- package/dist/cli/commands/test-cmd.d.ts +89 -0
- package/dist/cli/commands/test-cmd.d.ts.map +1 -0
- package/dist/cli/commands/test-cmd.js +378 -0
- package/dist/cli/commands/test-cmd.js.map +1 -0
- package/dist/cli/index.d.ts +5 -2
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +240 -8
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/project-context.d.ts +153 -0
- package/dist/cli/project-context.d.ts.map +1 -0
- package/dist/cli/project-context.js +190 -0
- package/dist/cli/project-context.js.map +1 -0
- package/dist/client/activity-types.d.ts +66 -0
- package/dist/client/activity-types.d.ts.map +1 -0
- package/dist/client/activity-types.js +9 -0
- package/dist/client/activity-types.js.map +1 -0
- package/dist/client/activity.d.ts +22 -0
- package/dist/client/activity.d.ts.map +1 -0
- package/dist/client/activity.js +43 -0
- package/dist/client/activity.js.map +1 -0
- package/dist/client/data-products-types.d.ts +23 -0
- package/dist/client/data-products-types.d.ts.map +1 -1
- package/dist/client/data-products.d.ts +3 -1
- package/dist/client/data-products.d.ts.map +1 -1
- package/dist/client/data-products.js +20 -98
- package/dist/client/data-products.js.map +1 -1
- package/dist/client/{consumptions-types.d.ts → delivery-types.d.ts} +25 -8
- package/dist/client/delivery-types.d.ts.map +1 -0
- package/dist/client/delivery-types.js +10 -0
- package/dist/client/delivery-types.js.map +1 -0
- package/dist/client/delivery.d.ts +23 -0
- package/dist/client/delivery.d.ts.map +1 -0
- package/dist/client/delivery.js +105 -0
- package/dist/client/delivery.js.map +1 -0
- package/dist/client/flow-types.d.ts +4 -2
- package/dist/client/flow-types.d.ts.map +1 -1
- package/dist/client/flows.d.ts +1 -1
- package/dist/client/flows.d.ts.map +1 -1
- package/dist/client/flows.js +49 -124
- package/dist/client/flows.js.map +1 -1
- package/dist/client/improvements-types.d.ts +55 -0
- package/dist/client/improvements-types.d.ts.map +1 -0
- package/dist/client/improvements-types.js +9 -0
- package/dist/client/improvements-types.js.map +1 -0
- package/dist/client/improvements.d.ts +29 -0
- package/dist/client/improvements.d.ts.map +1 -0
- package/dist/client/improvements.js +50 -0
- package/dist/client/improvements.js.map +1 -0
- package/dist/client/index.d.ts +8 -3
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js.map +1 -1
- package/dist/client/instances-types.d.ts +92 -0
- package/dist/client/instances-types.d.ts.map +1 -1
- package/dist/client/instances.d.ts +26 -4
- package/dist/client/instances.d.ts.map +1 -1
- package/dist/client/instances.js +94 -3
- package/dist/client/instances.js.map +1 -1
- package/dist/client/loxtep-client.d.ts +48 -3
- package/dist/client/loxtep-client.d.ts.map +1 -1
- package/dist/client/loxtep-client.js +73 -5
- package/dist/client/loxtep-client.js.map +1 -1
- package/dist/client/projects-types.d.ts +25 -0
- package/dist/client/projects-types.d.ts.map +1 -1
- package/dist/client/projects.d.ts +2 -1
- package/dist/client/projects.d.ts.map +1 -1
- package/dist/client/projects.js +17 -0
- package/dist/client/projects.js.map +1 -1
- package/dist/client/promises.d.ts +11 -0
- package/dist/client/promises.d.ts.map +1 -1
- package/dist/client/promises.js +11 -0
- package/dist/client/promises.js.map +1 -1
- package/dist/client/queue-types.d.ts +15 -2
- package/dist/client/queue-types.d.ts.map +1 -1
- package/dist/client/queues.d.ts.map +1 -1
- package/dist/client/queues.js +3 -14
- package/dist/client/queues.js.map +1 -1
- package/dist/client/schemas.d.ts +1 -0
- package/dist/client/schemas.d.ts.map +1 -1
- package/dist/client/schemas.js +4 -0
- package/dist/client/schemas.js.map +1 -1
- package/dist/client/thesaurus.d.ts +5 -0
- package/dist/client/thesaurus.d.ts.map +1 -1
- package/dist/client/thesaurus.js +12 -0
- package/dist/client/thesaurus.js.map +1 -1
- package/dist/codegen/emit.d.ts +25 -0
- package/dist/codegen/emit.d.ts.map +1 -0
- package/dist/codegen/emit.js +158 -0
- package/dist/codegen/emit.js.map +1 -0
- package/dist/codegen/index.d.ts +17 -0
- package/dist/codegen/index.d.ts.map +1 -0
- package/dist/codegen/index.js +16 -0
- package/dist/codegen/index.js.map +1 -0
- package/dist/codegen/load-workspace-context.d.ts +30 -0
- package/dist/codegen/load-workspace-context.d.ts.map +1 -0
- package/dist/codegen/load-workspace-context.js +127 -0
- package/dist/codegen/load-workspace-context.js.map +1 -0
- package/dist/codegen/normalize.d.ts +35 -0
- package/dist/codegen/normalize.d.ts.map +1 -0
- package/dist/codegen/normalize.js +77 -0
- package/dist/codegen/normalize.js.map +1 -0
- package/dist/codegen/types.d.ts +89 -0
- package/dist/codegen/types.d.ts.map +1 -0
- package/dist/codegen/types.js +9 -0
- package/dist/codegen/types.js.map +1 -0
- package/dist/codegen/write-artifact.d.ts +40 -0
- package/dist/codegen/write-artifact.d.ts.map +1 -0
- package/dist/codegen/write-artifact.js +74 -0
- package/dist/codegen/write-artifact.js.map +1 -0
- package/dist/config/index.d.ts +1 -0
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +1 -0
- package/dist/config/index.js.map +1 -1
- package/dist/config/workspace-config.d.ts +76 -0
- package/dist/config/workspace-config.d.ts.map +1 -0
- package/dist/config/workspace-config.js +129 -0
- package/dist/config/workspace-config.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/rstreams/event-bridge.d.ts +16 -2
- package/dist/rstreams/event-bridge.d.ts.map +1 -1
- package/dist/rstreams/event-bridge.js +38 -5
- package/dist/rstreams/event-bridge.js.map +1 -1
- package/dist/skills/check-scope.d.ts +42 -0
- package/dist/skills/check-scope.d.ts.map +1 -0
- package/dist/skills/check-scope.js +84 -0
- package/dist/skills/check-scope.js.map +1 -0
- package/dist/skills/index.d.ts +14 -0
- package/dist/skills/index.d.ts.map +1 -0
- package/dist/skills/index.js +12 -0
- package/dist/skills/index.js.map +1 -0
- package/dist/skills/loader.d.ts +79 -0
- package/dist/skills/loader.d.ts.map +1 -0
- package/dist/skills/loader.js +102 -0
- package/dist/skills/loader.js.map +1 -0
- package/dist/skills/types.d.ts +55 -0
- package/dist/skills/types.d.ts.map +1 -0
- package/dist/skills/types.js +9 -0
- package/dist/skills/types.js.map +1 -0
- package/dist/skills/validate-references.d.ts +54 -0
- package/dist/skills/validate-references.d.ts.map +1 -0
- package/dist/skills/validate-references.js +80 -0
- package/dist/skills/validate-references.js.map +1 -0
- package/docs/getting-started.md +7 -0
- package/package.json +7 -5
- package/dist/cli/commands/data-assets-cmd.d.ts +0 -12
- package/dist/cli/commands/data-assets-cmd.d.ts.map +0 -1
- package/dist/cli/commands/data-assets-cmd.js +0 -75
- package/dist/cli/commands/data-assets-cmd.js.map +0 -1
- package/dist/cli/commands/pipelines-cmd.d.ts +0 -17
- package/dist/cli/commands/pipelines-cmd.d.ts.map +0 -1
- package/dist/cli/commands/pipelines-cmd.js +0 -52
- package/dist/cli/commands/pipelines-cmd.js.map +0 -1
- package/dist/cli/commands/promises-cmd.d.ts +0 -11
- package/dist/cli/commands/promises-cmd.d.ts.map +0 -1
- package/dist/cli/commands/promises-cmd.js +0 -53
- package/dist/cli/commands/promises-cmd.js.map +0 -1
- package/dist/client/consumptions-types.d.ts.map +0 -1
- package/dist/client/consumptions-types.js +0 -5
- package/dist/client/consumptions-types.js.map +0 -1
- package/dist/client/consumptions.d.ts +0 -14
- package/dist/client/consumptions.d.ts.map +0 -1
- package/dist/client/consumptions.js +0 -47
- package/dist/client/consumptions.js.map +0 -1
- package/dist/client/data-assets-types.d.ts +0 -150
- package/dist/client/data-assets-types.d.ts.map +0 -1
- package/dist/client/data-assets-types.js +0 -5
- package/dist/client/data-assets-types.js.map +0 -1
- package/dist/client/data-assets.d.ts +0 -31
- package/dist/client/data-assets.d.ts.map +0 -1
- package/dist/client/data-assets.js +0 -182
- package/dist/client/data-assets.js.map +0 -1
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI: loxtep improvements list|apply|reject
|
|
3
|
+
*
|
|
4
|
+
* - `list` — list improvements for the authenticated org (R8.3)
|
|
5
|
+
* - `apply <id>` — write proposed_change into the module file atomically, set status to applied (R8.4, R8.7)
|
|
6
|
+
* - `reject <id>` — set status to rejected (R8.5)
|
|
7
|
+
* - Guard unknown-id/non-`proposed` with non-zero exit and no state change (R8.6)
|
|
8
|
+
*
|
|
9
|
+
* Requirements: 8.3, 8.4, 8.5, 8.6, 8.7
|
|
10
|
+
*/
|
|
11
|
+
import type { LoxtepClient } from '../../client/loxtep-client.js';
|
|
12
|
+
import { type CliResult } from '../project-context.js';
|
|
13
|
+
/**
|
|
14
|
+
* Execute `loxtep improvements list`.
|
|
15
|
+
*
|
|
16
|
+
* Lists improvements from the API and prints them in a readable format.
|
|
17
|
+
* Requires authentication but does NOT require an attached project.
|
|
18
|
+
*/
|
|
19
|
+
export declare function runImprovementsListCommand(client: LoxtepClient, options?: {
|
|
20
|
+
status?: string;
|
|
21
|
+
workflow_name?: string;
|
|
22
|
+
}): Promise<CliResult>;
|
|
23
|
+
/**
|
|
24
|
+
* Execute `loxtep improvements apply <id>`.
|
|
25
|
+
*
|
|
26
|
+
* 1. Fetches the improvement from the API (validates it exists and is `proposed`)
|
|
27
|
+
* 2. Resolves the target workflow module file
|
|
28
|
+
* 3. Writes the `proposed_change` into the file atomically (temp + rename)
|
|
29
|
+
* 4. Calls the API to set status to `applied`
|
|
30
|
+
* 5. On any file-write failure: file stays unchanged, status stays `proposed` (R8.7)
|
|
31
|
+
*
|
|
32
|
+
* Requirements: 8.4, 8.6, 8.7
|
|
33
|
+
*/
|
|
34
|
+
export declare function runImprovementsApplyCommand(client: LoxtepClient, id: string, cwd?: string): Promise<CliResult>;
|
|
35
|
+
/**
|
|
36
|
+
* Execute `loxtep improvements reject <id>`.
|
|
37
|
+
*
|
|
38
|
+
* Sets the improvement status to `rejected` on the server.
|
|
39
|
+
* Guards unknown-id and non-`proposed` status with non-zero exit (R8.6).
|
|
40
|
+
*
|
|
41
|
+
* Requirements: 8.5, 8.6
|
|
42
|
+
*/
|
|
43
|
+
export declare function runImprovementsRejectCommand(client: LoxtepClient, id: string): Promise<CliResult>;
|
|
44
|
+
//# sourceMappingURL=improvements-cmd.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"improvements-cmd.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/improvements-cmd.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAGL,KAAK,SAAS,EACf,MAAM,uBAAuB,CAAC;AAE/B;;;;;GAKG;AACH,wBAAsB,0BAA0B,CAC9C,MAAM,EAAE,YAAY,EACpB,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAAE,GACpD,OAAO,CAAC,SAAS,CAAC,CAsCpB;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,2BAA2B,CAC/C,MAAM,EAAE,YAAY,EACpB,EAAE,EAAE,MAAM,EACV,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC,SAAS,CAAC,CAuFpB;AAED;;;;;;;GAOG;AACH,wBAAsB,4BAA4B,CAChD,MAAM,EAAE,YAAY,EACpB,EAAE,EAAE,MAAM,GACT,OAAO,CAAC,SAAS,CAAC,CAmBpB"}
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI: loxtep improvements list|apply|reject
|
|
3
|
+
*
|
|
4
|
+
* - `list` — list improvements for the authenticated org (R8.3)
|
|
5
|
+
* - `apply <id>` — write proposed_change into the module file atomically, set status to applied (R8.4, R8.7)
|
|
6
|
+
* - `reject <id>` — set status to rejected (R8.5)
|
|
7
|
+
* - Guard unknown-id/non-`proposed` with non-zero exit and no state change (R8.6)
|
|
8
|
+
*
|
|
9
|
+
* Requirements: 8.3, 8.4, 8.5, 8.6, 8.7
|
|
10
|
+
*/
|
|
11
|
+
import { writeFile, rename, rm } from 'node:fs/promises';
|
|
12
|
+
import { existsSync } from 'node:fs';
|
|
13
|
+
import { join, dirname } from 'node:path';
|
|
14
|
+
import { requireProject, preconditionToCliResult, } from '../project-context.js';
|
|
15
|
+
/**
|
|
16
|
+
* Execute `loxtep improvements list`.
|
|
17
|
+
*
|
|
18
|
+
* Lists improvements from the API and prints them in a readable format.
|
|
19
|
+
* Requires authentication but does NOT require an attached project.
|
|
20
|
+
*/
|
|
21
|
+
export async function runImprovementsListCommand(client, options) {
|
|
22
|
+
try {
|
|
23
|
+
const filters = {};
|
|
24
|
+
if (options?.status) {
|
|
25
|
+
if (!['proposed', 'applied', 'rejected'].includes(options.status)) {
|
|
26
|
+
return {
|
|
27
|
+
exitCode: 1,
|
|
28
|
+
stdout: [],
|
|
29
|
+
stderr: [`Invalid status filter: '${options.status}'. Must be one of: proposed, applied, rejected.`],
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
filters.status = options.status;
|
|
33
|
+
}
|
|
34
|
+
if (options?.workflow_name) {
|
|
35
|
+
filters.workflow_name = options.workflow_name;
|
|
36
|
+
}
|
|
37
|
+
const result = await client.improvements.list(filters);
|
|
38
|
+
const { improvements } = result;
|
|
39
|
+
if (improvements.length === 0) {
|
|
40
|
+
return { exitCode: 0, stdout: ['No improvements found.'], stderr: [] };
|
|
41
|
+
}
|
|
42
|
+
const lines = [];
|
|
43
|
+
for (const imp of improvements) {
|
|
44
|
+
lines.push(`${imp.id} [${imp.status}] ${imp.workflow_name}`);
|
|
45
|
+
if (imp.rationale) {
|
|
46
|
+
lines.push(` Rationale: ${imp.rationale}`);
|
|
47
|
+
}
|
|
48
|
+
lines.push(` Created: ${imp.created_at}`);
|
|
49
|
+
lines.push('');
|
|
50
|
+
}
|
|
51
|
+
return { exitCode: 0, stdout: lines, stderr: [] };
|
|
52
|
+
}
|
|
53
|
+
catch (err) {
|
|
54
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
55
|
+
return { exitCode: 1, stdout: [], stderr: [`Failed to list improvements: ${message}`] };
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Execute `loxtep improvements apply <id>`.
|
|
60
|
+
*
|
|
61
|
+
* 1. Fetches the improvement from the API (validates it exists and is `proposed`)
|
|
62
|
+
* 2. Resolves the target workflow module file
|
|
63
|
+
* 3. Writes the `proposed_change` into the file atomically (temp + rename)
|
|
64
|
+
* 4. Calls the API to set status to `applied`
|
|
65
|
+
* 5. On any file-write failure: file stays unchanged, status stays `proposed` (R8.7)
|
|
66
|
+
*
|
|
67
|
+
* Requirements: 8.4, 8.6, 8.7
|
|
68
|
+
*/
|
|
69
|
+
export async function runImprovementsApplyCommand(client, id, cwd) {
|
|
70
|
+
const workingDir = cwd ?? process.cwd();
|
|
71
|
+
// Resolve the project directory (need it to locate workflow files)
|
|
72
|
+
const projectResult = requireProject(workingDir);
|
|
73
|
+
if (!projectResult.ok) {
|
|
74
|
+
return preconditionToCliResult(projectResult.failure);
|
|
75
|
+
}
|
|
76
|
+
const { projectDir } = projectResult;
|
|
77
|
+
// 1. Fetch the improvement from the list endpoint to get its details
|
|
78
|
+
let improvement;
|
|
79
|
+
try {
|
|
80
|
+
const result = await client.improvements.list();
|
|
81
|
+
improvement = result.improvements.find(imp => imp.id === id);
|
|
82
|
+
}
|
|
83
|
+
catch (err) {
|
|
84
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
85
|
+
return { exitCode: 1, stdout: [], stderr: [`Failed to fetch improvement: ${message}`] };
|
|
86
|
+
}
|
|
87
|
+
if (!improvement) {
|
|
88
|
+
return {
|
|
89
|
+
exitCode: 1,
|
|
90
|
+
stdout: [],
|
|
91
|
+
stderr: [`Error: Improvement '${id}' not found.`],
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
// R8.6: Guard non-proposed status
|
|
95
|
+
if (improvement.status !== 'proposed') {
|
|
96
|
+
return {
|
|
97
|
+
exitCode: 1,
|
|
98
|
+
stdout: [],
|
|
99
|
+
stderr: [
|
|
100
|
+
`Error: Improvement '${id}' is in status '${improvement.status}', not 'proposed'. Only proposed improvements can be applied.`,
|
|
101
|
+
],
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
// 2. Resolve the target workflow module file
|
|
105
|
+
const workflowFile = resolveWorkflowFilePath(projectDir, improvement.workflow_name);
|
|
106
|
+
if (!workflowFile) {
|
|
107
|
+
return {
|
|
108
|
+
exitCode: 1,
|
|
109
|
+
stdout: [],
|
|
110
|
+
stderr: [
|
|
111
|
+
`Error: Cannot locate workflow module file for '${improvement.workflow_name}'. Write failed — status remains 'proposed'.`,
|
|
112
|
+
],
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
// 3. Write the proposed_change atomically (R8.7: on failure, file unchanged + status stays proposed)
|
|
116
|
+
try {
|
|
117
|
+
await atomicWriteFile(workflowFile, improvement.proposed_change);
|
|
118
|
+
}
|
|
119
|
+
catch (err) {
|
|
120
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
121
|
+
return {
|
|
122
|
+
exitCode: 1,
|
|
123
|
+
stdout: [],
|
|
124
|
+
stderr: [
|
|
125
|
+
`Error: Failed to write proposed change to '${workflowFile}': ${message}. File unchanged — status remains 'proposed'.`,
|
|
126
|
+
],
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
// 4. Set status to 'applied' on the server
|
|
130
|
+
try {
|
|
131
|
+
await client.improvements.apply(id);
|
|
132
|
+
}
|
|
133
|
+
catch (err) {
|
|
134
|
+
// File was already written successfully, but API update failed.
|
|
135
|
+
// Per R8.4, the write happened; per R8.7 failure semantics are about write failure.
|
|
136
|
+
// Since the file was written, report the API error but the file change stands.
|
|
137
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
138
|
+
return {
|
|
139
|
+
exitCode: 1,
|
|
140
|
+
stdout: [],
|
|
141
|
+
stderr: [
|
|
142
|
+
`Warning: Proposed change was written to '${workflowFile}', but failed to update status on server: ${message}`,
|
|
143
|
+
],
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
return {
|
|
147
|
+
exitCode: 0,
|
|
148
|
+
stdout: [`Applied improvement '${id}' — wrote proposed change to '${workflowFile}' and set status to 'applied'.`],
|
|
149
|
+
stderr: [],
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Execute `loxtep improvements reject <id>`.
|
|
154
|
+
*
|
|
155
|
+
* Sets the improvement status to `rejected` on the server.
|
|
156
|
+
* Guards unknown-id and non-`proposed` status with non-zero exit (R8.6).
|
|
157
|
+
*
|
|
158
|
+
* Requirements: 8.5, 8.6
|
|
159
|
+
*/
|
|
160
|
+
export async function runImprovementsRejectCommand(client, id) {
|
|
161
|
+
try {
|
|
162
|
+
await client.improvements.reject(id);
|
|
163
|
+
}
|
|
164
|
+
catch (err) {
|
|
165
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
166
|
+
// The API returns 404 for unknown id and 409 for non-proposed status.
|
|
167
|
+
// Both are surfaced as errors — no state change (R8.6).
|
|
168
|
+
return {
|
|
169
|
+
exitCode: 1,
|
|
170
|
+
stdout: [],
|
|
171
|
+
stderr: [`Error: Failed to reject improvement '${id}': ${message}`],
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
return {
|
|
175
|
+
exitCode: 0,
|
|
176
|
+
stdout: [`Rejected improvement '${id}' — status set to 'rejected'.`],
|
|
177
|
+
stderr: [],
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Resolve the file path for a workflow module by name.
|
|
182
|
+
*
|
|
183
|
+
* Searches for `workflows/<workflow_name>.ts` relative to the project directory.
|
|
184
|
+
* Returns the full path if the file exists, or null if not found.
|
|
185
|
+
*/
|
|
186
|
+
function resolveWorkflowFilePath(projectDir, workflowName) {
|
|
187
|
+
// Primary: workflows/<name>.ts
|
|
188
|
+
const primary = join(projectDir, 'workflows', `${workflowName}.ts`);
|
|
189
|
+
if (existsSync(primary))
|
|
190
|
+
return primary;
|
|
191
|
+
// Fallback: workflows/<name>/index.ts
|
|
192
|
+
const indexPath = join(projectDir, 'workflows', workflowName, 'index.ts');
|
|
193
|
+
if (existsSync(indexPath))
|
|
194
|
+
return indexPath;
|
|
195
|
+
return null;
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Write content to a file atomically using a temp file + rename pattern.
|
|
199
|
+
*
|
|
200
|
+
* On any failure, the original file remains byte-unchanged (R8.7).
|
|
201
|
+
*/
|
|
202
|
+
async function atomicWriteFile(filePath, content) {
|
|
203
|
+
const dir = dirname(filePath);
|
|
204
|
+
const tmpPath = join(dir, `.tmp-${Date.now()}-${Math.random().toString(36).slice(2)}`);
|
|
205
|
+
try {
|
|
206
|
+
await writeFile(tmpPath, content, 'utf-8');
|
|
207
|
+
await rename(tmpPath, filePath);
|
|
208
|
+
}
|
|
209
|
+
catch (err) {
|
|
210
|
+
// Best-effort cleanup of temp file
|
|
211
|
+
await rm(tmpPath, { force: true }).catch(() => undefined);
|
|
212
|
+
throw err;
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
//# sourceMappingURL=improvements-cmd.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"improvements-cmd.js","sourceRoot":"","sources":["../../../src/cli/commands/improvements-cmd.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `loxtep init [--template <slug>] [--create-repo|--from-repo]`
|
|
3
|
+
*
|
|
4
|
+
* Scaffolds a new Loxtep project:
|
|
5
|
+
* - `.loxtep/project.json` + `domains/` + `connectors/` + `workflows/` + `data-products/`
|
|
6
|
+
* - With `--template <slug>`: resolves from the catalog and materializes full
|
|
7
|
+
* structure incl. `AGENTS.md` + default `.loxtep/skills/<slug>.yaml`.
|
|
8
|
+
* - Repo flags → `github_action` on `create_project`:
|
|
9
|
+
* `--create-repo` → `create_new` (private default),
|
|
10
|
+
* `--from-repo <url>` → `import_existing`,
|
|
11
|
+
* neither → `none`,
|
|
12
|
+
* both → reject (exit 1).
|
|
13
|
+
* - Always prints Getting Started + Quick Reference links (R11.7).
|
|
14
|
+
* - Auto-runs `generate` when authed+attached; fails the whole `init` if
|
|
15
|
+
* `generate` fails (R16.3, R16.4).
|
|
16
|
+
* - Prints login/attach/generate guidance otherwise (R16.5).
|
|
17
|
+
*
|
|
18
|
+
* Requirements: 1.1, 1.2, 11.7, 16.1, 16.2, 16.3, 16.4, 16.5, 17.4, 17.5, 17.6
|
|
19
|
+
*/
|
|
20
|
+
import type { CliResult } from '../project-context.js';
|
|
21
|
+
import type { LoxtepClient } from '../../client/loxtep-client.js';
|
|
22
|
+
export type GithubAction = 'create_new' | 'import_existing' | 'none';
|
|
23
|
+
export interface RepoFlagInput {
|
|
24
|
+
createRepo?: string | boolean;
|
|
25
|
+
fromRepo?: string;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Map CLI `--create-repo` / `--from-repo` flags to the `github_action` value
|
|
29
|
+
* for `create_project`.
|
|
30
|
+
*
|
|
31
|
+
* - `--create-repo` → `create_new` (private default) (R17.4)
|
|
32
|
+
* - `--from-repo <url>` → `import_existing` (R17.5)
|
|
33
|
+
* - neither → `none` (R17.6)
|
|
34
|
+
* - both → reject (returns an error string)
|
|
35
|
+
*/
|
|
36
|
+
export declare function repoFlagsToGithubAction(flags: RepoFlagInput): {
|
|
37
|
+
ok: true;
|
|
38
|
+
action: GithubAction;
|
|
39
|
+
repoName?: string;
|
|
40
|
+
importUrl?: string;
|
|
41
|
+
} | {
|
|
42
|
+
ok: false;
|
|
43
|
+
error: string;
|
|
44
|
+
};
|
|
45
|
+
export interface InitOptions {
|
|
46
|
+
/** Current working directory to scaffold into. */
|
|
47
|
+
cwd: string;
|
|
48
|
+
/** Template slug to use (`--template <slug>`). */
|
|
49
|
+
templateSlug?: string;
|
|
50
|
+
/** `--create-repo [name]` flag. */
|
|
51
|
+
createRepo?: string | boolean;
|
|
52
|
+
/** `--from-repo <url>` flag. */
|
|
53
|
+
fromRepo?: string;
|
|
54
|
+
/** Project name (defaults to directory basename). */
|
|
55
|
+
name?: string;
|
|
56
|
+
/**
|
|
57
|
+
* Optional pre-authenticated client. When provided and the project is
|
|
58
|
+
* attached, the init will auto-run generate.
|
|
59
|
+
*/
|
|
60
|
+
client?: LoxtepClient | null;
|
|
61
|
+
/**
|
|
62
|
+
* Optional instance_id. When provided together with `apiUrl`, the project is
|
|
63
|
+
* considered already attached, enabling auto-generate (R16.3).
|
|
64
|
+
*/
|
|
65
|
+
instanceId?: string;
|
|
66
|
+
/**
|
|
67
|
+
* Optional API URL. When provided together with `instanceId`, the project is
|
|
68
|
+
* considered already attached, enabling auto-generate (R16.3).
|
|
69
|
+
*/
|
|
70
|
+
apiUrl?: string;
|
|
71
|
+
/**
|
|
72
|
+
* Optional generate function (injected for testability). If provided, called
|
|
73
|
+
* after scaffold when authed+attached. Receives cwd and the client.
|
|
74
|
+
*/
|
|
75
|
+
runGenerate?: (cwd: string, client: LoxtepClient) => Promise<CliResult>;
|
|
76
|
+
}
|
|
77
|
+
export declare function runInitCommand(options: InitOptions): Promise<CliResult>;
|
|
78
|
+
//# sourceMappingURL=init-cmd.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init-cmd.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init-cmd.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAIH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAMvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAelE,MAAM,MAAM,YAAY,GAAG,YAAY,GAAG,iBAAiB,GAAG,MAAM,CAAC;AAErE,MAAM,WAAW,aAAa;IAC5B,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,aAAa,GACnB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,YAAY,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAkB1G;AAMD,MAAM,WAAW,WAAW;IAC1B,kDAAkD;IAClD,GAAG,EAAE,MAAM,CAAC;IACZ,kDAAkD;IAClD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,mCAAmC;IACnC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC9B,gCAAgC;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qDAAqD;IACrD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,MAAM,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;IAC7B;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;CACzE;AAqED,wBAAsB,cAAc,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC,CAyJ7E"}
|
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `loxtep init [--template <slug>] [--create-repo|--from-repo]`
|
|
3
|
+
*
|
|
4
|
+
* Scaffolds a new Loxtep project:
|
|
5
|
+
* - `.loxtep/project.json` + `domains/` + `connectors/` + `workflows/` + `data-products/`
|
|
6
|
+
* - With `--template <slug>`: resolves from the catalog and materializes full
|
|
7
|
+
* structure incl. `AGENTS.md` + default `.loxtep/skills/<slug>.yaml`.
|
|
8
|
+
* - Repo flags → `github_action` on `create_project`:
|
|
9
|
+
* `--create-repo` → `create_new` (private default),
|
|
10
|
+
* `--from-repo <url>` → `import_existing`,
|
|
11
|
+
* neither → `none`,
|
|
12
|
+
* both → reject (exit 1).
|
|
13
|
+
* - Always prints Getting Started + Quick Reference links (R11.7).
|
|
14
|
+
* - Auto-runs `generate` when authed+attached; fails the whole `init` if
|
|
15
|
+
* `generate` fails (R16.3, R16.4).
|
|
16
|
+
* - Prints login/attach/generate guidance otherwise (R16.5).
|
|
17
|
+
*
|
|
18
|
+
* Requirements: 1.1, 1.2, 11.7, 16.1, 16.2, 16.3, 16.4, 16.5, 17.4, 17.5, 17.6
|
|
19
|
+
*/
|
|
20
|
+
import { join } from 'node:path';
|
|
21
|
+
import { mkdir, writeFile } from 'node:fs/promises';
|
|
22
|
+
import { PROJECT_DIR_NAME, writeProjectConfig, } from '../project-context.js';
|
|
23
|
+
/* ------------------------------------------------------------------ */
|
|
24
|
+
/* Doc links (R11.7) */
|
|
25
|
+
/* ------------------------------------------------------------------ */
|
|
26
|
+
const GETTING_STARTED_URL = 'https://docs.loxtep.io/getting-started';
|
|
27
|
+
const QUICK_REFERENCE_URL = 'https://docs.loxtep.io/quick-reference';
|
|
28
|
+
/**
|
|
29
|
+
* Map CLI `--create-repo` / `--from-repo` flags to the `github_action` value
|
|
30
|
+
* for `create_project`.
|
|
31
|
+
*
|
|
32
|
+
* - `--create-repo` → `create_new` (private default) (R17.4)
|
|
33
|
+
* - `--from-repo <url>` → `import_existing` (R17.5)
|
|
34
|
+
* - neither → `none` (R17.6)
|
|
35
|
+
* - both → reject (returns an error string)
|
|
36
|
+
*/
|
|
37
|
+
export function repoFlagsToGithubAction(flags) {
|
|
38
|
+
const hasCreate = flags.createRepo !== undefined && flags.createRepo !== false;
|
|
39
|
+
const hasFrom = flags.fromRepo !== undefined && flags.fromRepo !== '';
|
|
40
|
+
if (hasCreate && hasFrom) {
|
|
41
|
+
return { ok: false, error: 'Cannot specify both --create-repo and --from-repo.' };
|
|
42
|
+
}
|
|
43
|
+
if (hasCreate) {
|
|
44
|
+
const repoName = typeof flags.createRepo === 'string' ? flags.createRepo : undefined;
|
|
45
|
+
return { ok: true, action: 'create_new', repoName };
|
|
46
|
+
}
|
|
47
|
+
if (hasFrom) {
|
|
48
|
+
return { ok: true, action: 'import_existing', importUrl: flags.fromRepo };
|
|
49
|
+
}
|
|
50
|
+
return { ok: true, action: 'none' };
|
|
51
|
+
}
|
|
52
|
+
/* ------------------------------------------------------------------ */
|
|
53
|
+
/* Scaffold helpers */
|
|
54
|
+
/* ------------------------------------------------------------------ */
|
|
55
|
+
const STANDARD_DIRS = ['domains', 'connectors', 'workflows', 'data-products'];
|
|
56
|
+
async function ensureDir(dir) {
|
|
57
|
+
await mkdir(dir, { recursive: true });
|
|
58
|
+
}
|
|
59
|
+
function buildDefaultAgentsMd(templateSlug, template) {
|
|
60
|
+
return `# AGENTS.md — ${template.name || templateSlug}
|
|
61
|
+
|
|
62
|
+
This project was scaffolded from the \`${templateSlug}\` template.
|
|
63
|
+
|
|
64
|
+
## MCP tools
|
|
65
|
+
|
|
66
|
+
Connect to the Loxtep MCP server for full platform access:
|
|
67
|
+
|
|
68
|
+
\`\`\`json
|
|
69
|
+
{ "mcpServers": { "loxtep": { "url": "https://mcp.loxtep.io/ai/mcp/stream" } } }
|
|
70
|
+
\`\`\`
|
|
71
|
+
|
|
72
|
+
## SDK methods
|
|
73
|
+
|
|
74
|
+
- \`LoxtepClient.fromWorkspace()\` — auto-configure from \`.loxtep/project.json\`
|
|
75
|
+
- \`defineDataWorkflow({ name, triggers, handler })\` — code-first workflow authoring
|
|
76
|
+
- \`workspace.dataProducts.*\` / \`workspace.connectors.*\` — typed constants (after \`loxtep generate\`)
|
|
77
|
+
|
|
78
|
+
## Skill scope
|
|
79
|
+
|
|
80
|
+
Default skill: \`.loxtep/skills/${templateSlug}.yaml\`
|
|
81
|
+
`;
|
|
82
|
+
}
|
|
83
|
+
function buildDefaultSkillYaml(templateSlug) {
|
|
84
|
+
return `# Default skill for the ${templateSlug} template.
|
|
85
|
+
# Edit scope and permissions to match your project's resources.
|
|
86
|
+
name: ${templateSlug}
|
|
87
|
+
description: Default skill scope for the ${templateSlug} template
|
|
88
|
+
scope:
|
|
89
|
+
data_products: []
|
|
90
|
+
connectors: []
|
|
91
|
+
workflows: []
|
|
92
|
+
domains: []
|
|
93
|
+
queues: []
|
|
94
|
+
permissions:
|
|
95
|
+
data_products:
|
|
96
|
+
- read
|
|
97
|
+
- write
|
|
98
|
+
connectors:
|
|
99
|
+
- read
|
|
100
|
+
workflows:
|
|
101
|
+
- read
|
|
102
|
+
- write
|
|
103
|
+
- create
|
|
104
|
+
domains:
|
|
105
|
+
- read
|
|
106
|
+
queues:
|
|
107
|
+
- read
|
|
108
|
+
`;
|
|
109
|
+
}
|
|
110
|
+
/* ------------------------------------------------------------------ */
|
|
111
|
+
/* Main init logic */
|
|
112
|
+
/* ------------------------------------------------------------------ */
|
|
113
|
+
export async function runInitCommand(options) {
|
|
114
|
+
const { cwd, templateSlug, createRepo, fromRepo, client } = options;
|
|
115
|
+
const stdout = [];
|
|
116
|
+
const stderr = [];
|
|
117
|
+
// --- Validate repo flags (R17.4/R17.5/R17.6: both → reject) ---
|
|
118
|
+
const repoResult = repoFlagsToGithubAction({ createRepo, fromRepo });
|
|
119
|
+
if (!repoResult.ok) {
|
|
120
|
+
return { exitCode: 1, stdout: [], stderr: [repoResult.error] };
|
|
121
|
+
}
|
|
122
|
+
// --- Resolve template when requested (R1.2, R16.1, R16.2) ---
|
|
123
|
+
let template;
|
|
124
|
+
if (templateSlug && client) {
|
|
125
|
+
try {
|
|
126
|
+
// Try to find by slug search first; the catalog may return by id or name
|
|
127
|
+
const templates = await client.templates.list({ search: templateSlug });
|
|
128
|
+
template = templates.items.find((t) => t.name === templateSlug ||
|
|
129
|
+
t.template_id === templateSlug ||
|
|
130
|
+
t.metadata?.slug === templateSlug);
|
|
131
|
+
if (!template) {
|
|
132
|
+
// Fallback: try direct get
|
|
133
|
+
try {
|
|
134
|
+
template = await client.templates.get(templateSlug);
|
|
135
|
+
}
|
|
136
|
+
catch {
|
|
137
|
+
// Could not resolve — proceed without template data but record the slug
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
catch {
|
|
142
|
+
// Template lookup failed — proceed without template metadata; scaffold still happens
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
// --- Create project on the platform if client is available ---
|
|
146
|
+
let projectId = `proj_local_${Date.now().toString(36)}`;
|
|
147
|
+
let organizationId;
|
|
148
|
+
if (client) {
|
|
149
|
+
try {
|
|
150
|
+
const projectName = options.name || cwd.split('/').pop() || 'loxtep-project';
|
|
151
|
+
const createBody = {
|
|
152
|
+
name: projectName,
|
|
153
|
+
template_slug: templateSlug,
|
|
154
|
+
github_action: repoResult.action,
|
|
155
|
+
};
|
|
156
|
+
if (repoResult.action === 'create_new' && repoResult.repoName) {
|
|
157
|
+
createBody.github_repo_name = repoResult.repoName;
|
|
158
|
+
}
|
|
159
|
+
if (repoResult.action === 'import_existing' && repoResult.importUrl) {
|
|
160
|
+
createBody.github_import_url = repoResult.importUrl;
|
|
161
|
+
}
|
|
162
|
+
const project = await client.projects.create(createBody);
|
|
163
|
+
projectId = project.project_id;
|
|
164
|
+
organizationId = project.organization_id;
|
|
165
|
+
}
|
|
166
|
+
catch (err) {
|
|
167
|
+
// If project creation fails, proceed with local-only scaffold
|
|
168
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
169
|
+
stderr.push(`Warning: Could not create project on platform: ${msg}`);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
// --- Scaffold standard directories (R1.1) ---
|
|
173
|
+
for (const dir of STANDARD_DIRS) {
|
|
174
|
+
await ensureDir(join(cwd, dir));
|
|
175
|
+
}
|
|
176
|
+
// --- Scaffold .loxtep/ directory + project.json ---
|
|
177
|
+
const loxtepDir = join(cwd, PROJECT_DIR_NAME);
|
|
178
|
+
await ensureDir(loxtepDir);
|
|
179
|
+
const config = {
|
|
180
|
+
project_id: projectId,
|
|
181
|
+
...(organizationId ? { organization_id: organizationId } : {}),
|
|
182
|
+
...(templateSlug ? { template_slug: templateSlug } : {}),
|
|
183
|
+
...(options.instanceId ? { instance_id: options.instanceId } : {}),
|
|
184
|
+
...(options.apiUrl ? { api_url: options.apiUrl } : {}),
|
|
185
|
+
};
|
|
186
|
+
const projectFilePath = join(loxtepDir, 'project.json');
|
|
187
|
+
await writeProjectConfig(projectFilePath, config);
|
|
188
|
+
// --- Template-specific scaffolding (R16.1, R16.2) ---
|
|
189
|
+
if (templateSlug) {
|
|
190
|
+
// AGENTS.md (R16.1)
|
|
191
|
+
const agentsMdContent = template
|
|
192
|
+
? buildDefaultAgentsMd(templateSlug, template)
|
|
193
|
+
: buildDefaultAgentsMd(templateSlug, {
|
|
194
|
+
template_id: templateSlug,
|
|
195
|
+
name: templateSlug,
|
|
196
|
+
description: null,
|
|
197
|
+
category: '',
|
|
198
|
+
version: '1.0.0',
|
|
199
|
+
configuration: {},
|
|
200
|
+
validation_rules: {},
|
|
201
|
+
metadata: {},
|
|
202
|
+
is_public: true,
|
|
203
|
+
is_active: true,
|
|
204
|
+
created_at: new Date().toISOString(),
|
|
205
|
+
updated_at: new Date().toISOString(),
|
|
206
|
+
});
|
|
207
|
+
await writeFile(join(cwd, 'AGENTS.md'), agentsMdContent, 'utf-8');
|
|
208
|
+
// Default skill (.loxtep/skills/<slug>.yaml) (R16.2)
|
|
209
|
+
const skillsDir = join(loxtepDir, 'skills');
|
|
210
|
+
await ensureDir(skillsDir);
|
|
211
|
+
await writeFile(join(skillsDir, `${templateSlug}.yaml`), buildDefaultSkillYaml(templateSlug), 'utf-8');
|
|
212
|
+
}
|
|
213
|
+
stdout.push(`Initialized Loxtep project in ${cwd}`);
|
|
214
|
+
if (templateSlug) {
|
|
215
|
+
stdout.push(` Template: ${templateSlug}`);
|
|
216
|
+
}
|
|
217
|
+
stdout.push('');
|
|
218
|
+
// --- Always print Getting Started + Quick Reference links (R11.7) ---
|
|
219
|
+
stdout.push(`Getting Started: ${GETTING_STARTED_URL}`);
|
|
220
|
+
stdout.push(`Quick Reference: ${QUICK_REFERENCE_URL}`);
|
|
221
|
+
stdout.push('');
|
|
222
|
+
// --- Auto-run generate when authed+attached (R16.3, R16.4, R16.5) ---
|
|
223
|
+
const isAttached = config.instance_id && config.api_url;
|
|
224
|
+
if (client && isAttached && options.runGenerate) {
|
|
225
|
+
// Project is authed + attached — run generate
|
|
226
|
+
const genResult = await options.runGenerate(cwd, client);
|
|
227
|
+
if (genResult.exitCode !== 0) {
|
|
228
|
+
// R16.4: if generate fails, the whole init fails
|
|
229
|
+
stderr.push(...genResult.stderr);
|
|
230
|
+
stderr.push('Init failed: generate step failed.');
|
|
231
|
+
return { exitCode: genResult.exitCode, stdout, stderr };
|
|
232
|
+
}
|
|
233
|
+
stdout.push(...genResult.stdout);
|
|
234
|
+
}
|
|
235
|
+
else if (!client) {
|
|
236
|
+
// R16.5: not authenticated — print guidance
|
|
237
|
+
stdout.push('Next steps:');
|
|
238
|
+
stdout.push(' 1. loxtep login');
|
|
239
|
+
stdout.push(' 2. loxtep attach --instance <instance-id>');
|
|
240
|
+
stdout.push(' 3. loxtep generate');
|
|
241
|
+
}
|
|
242
|
+
else if (!isAttached) {
|
|
243
|
+
// Authed but not attached — print attach + generate guidance
|
|
244
|
+
stdout.push('Next steps:');
|
|
245
|
+
stdout.push(' 1. loxtep attach --instance <instance-id>');
|
|
246
|
+
stdout.push(' 2. loxtep generate');
|
|
247
|
+
}
|
|
248
|
+
return { exitCode: 0, stdout, stderr };
|
|
249
|
+
}
|
|
250
|
+
//# sourceMappingURL=init-cmd.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init-cmd.js","sourceRoot":"","sources":["../../../src/cli/commands/init-cmd.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI: loxtep instances list | get <id> | create | deployment-urls | register | registration
|
|
3
|
+
*
|
|
4
|
+
* Wraps the `client.instances` SDK namespace. Lifecycle: `list` and `get` are
|
|
5
|
+
* read-only; `deployment-urls` + `register` + `registration` drive the
|
|
6
|
+
* self-hosted install flow alongside `create`.
|
|
7
|
+
*
|
|
8
|
+
* loxtep instances list
|
|
9
|
+
* loxtep instances get <id>
|
|
10
|
+
* loxtep instances create \
|
|
11
|
+
* --name <n> --region <region> --type <shared|managed|self-hosted> \
|
|
12
|
+
* [--plan-id <starter|pro|enterprise>] \
|
|
13
|
+
* [--payment-method-id <uuid>] \
|
|
14
|
+
* [--cross-account-role-arn <arn>] \
|
|
15
|
+
* [--rstreams-secret-arn <arn>] [--rstreams-auth-arn <arn>] \
|
|
16
|
+
* [--external-id <ext>]
|
|
17
|
+
*
|
|
18
|
+
* Self-hosted install:
|
|
19
|
+
* loxtep instances deployment-urls # step 1: get one-click URL / CLI / Terraform snippets + external ID
|
|
20
|
+
* loxtep instances register --cross-account-role-arn <arn> [--region <region>]
|
|
21
|
+
* # step 2: register the user's role ARN at the org level
|
|
22
|
+
* loxtep instances registration # optional check: read registered ARN + external ID
|
|
23
|
+
*/
|
|
24
|
+
import type { InstanceCreateInput } from '../../client/instances-types.js';
|
|
25
|
+
export interface InstancesCmdOptions {
|
|
26
|
+
configFilePath?: string;
|
|
27
|
+
credentialsPath?: string;
|
|
28
|
+
customerMcpPath?: string;
|
|
29
|
+
}
|
|
30
|
+
export declare function runInstancesList(options?: InstancesCmdOptions): Promise<void>;
|
|
31
|
+
export declare function runInstancesGet(instanceId: string, options?: InstancesCmdOptions): Promise<void>;
|
|
32
|
+
export declare function runInstancesCreate(input: InstanceCreateInput, options?: InstancesCmdOptions): Promise<void>;
|
|
33
|
+
export declare function runInstancesDeploymentUrls(options?: InstancesCmdOptions): Promise<void>;
|
|
34
|
+
export declare function runInstancesRegistration(options?: InstancesCmdOptions): Promise<void>;
|
|
35
|
+
export declare function runInstancesRegister(crossAccountRoleArn: string, region: string | undefined, options?: InstancesCmdOptions): Promise<void>;
|
|
36
|
+
export declare function parseCreateInstanceArgs(args: string[]): InstanceCreateInput;
|
|
37
|
+
//# sourceMappingURL=instances-cmd.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instances-cmd.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/instances-cmd.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAGH,OAAO,KAAK,EAAE,mBAAmB,EAAgB,MAAM,iCAAiC,CAAC;AAEzF,MAAM,WAAW,mBAAmB;IAClC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,wBAAsB,gBAAgB,CAAC,OAAO,GAAE,mBAAwB,GAAG,OAAO,CAAC,IAAI,CAAC,CASvF;AAED,wBAAsB,eAAe,CACnC,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,IAAI,CAAC,CASf;AAED,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,mBAAmB,EAC1B,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,IAAI,CAAC,CASf;AAED,wBAAsB,0BAA0B,CAC9C,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,IAAI,CAAC,CAYf;AAED,wBAAsB,wBAAwB,CAC5C,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,IAAI,CAAC,CASf;AAED,wBAAsB,oBAAoB,CACxC,mBAAmB,EAAE,MAAM,EAC3B,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,IAAI,CAAC,CAYf;AAID,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,mBAAmB,CA2D3E"}
|