@loxtep/sdk 0.2.1 → 0.3.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/README.md +152 -5
- 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 +98 -0
- package/dist/authoring/compiler.d.ts.map +1 -0
- package/dist/authoring/compiler.js +156 -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 +64 -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/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/login.d.ts +4 -4
- package/dist/cli/commands/login.js +4 -4
- package/dist/cli/commands/login.js.map +1 -1
- 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 +1 -1
- package/dist/cli/index.js +150 -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.d.ts.map +1 -1
- package/dist/client/data-products.js +4 -98
- package/dist/client/data-products.js.map +1 -1
- 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 +6 -2
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js.map +1 -1
- package/dist/client/loxtep-client.d.ts +45 -0
- package/dist/client/loxtep-client.d.ts.map +1 -1
- package/dist/client/loxtep-client.js +68 -0
- 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/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/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/package.json +5 -3
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Types for the code-first data workflow authoring surface.
|
|
3
|
+
*
|
|
4
|
+
* A `DataWorkflowModule` is the developer-facing unit of authoring: it declares
|
|
5
|
+
* a trigger, an optional filter, and a handler that compiles down to the existing
|
|
6
|
+
* flow/workflow graph on deploy.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Trigger specification describing what event starts a workflow.
|
|
10
|
+
*/
|
|
11
|
+
export interface TriggerSpec {
|
|
12
|
+
kind: 'queue' | 'connector' | 'schedule' | 'webhook';
|
|
13
|
+
/** Typed constant reference from the generated artifact (queue or connector). */
|
|
14
|
+
ref?: {
|
|
15
|
+
id: string;
|
|
16
|
+
name?: string;
|
|
17
|
+
};
|
|
18
|
+
/** Cron expression, for kind:'schedule'. */
|
|
19
|
+
schedule?: string;
|
|
20
|
+
/** URL path, for kind:'webhook'. */
|
|
21
|
+
path?: string;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* A typed queue constant from the Generated_SDK_Artifact.
|
|
25
|
+
*/
|
|
26
|
+
export interface QueueRef {
|
|
27
|
+
id: string;
|
|
28
|
+
name: string;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* A typed connector constant from the Generated_SDK_Artifact.
|
|
32
|
+
*/
|
|
33
|
+
export interface ConnectorRef {
|
|
34
|
+
id: string;
|
|
35
|
+
type: string;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Context object passed to the handler function during execution.
|
|
39
|
+
*/
|
|
40
|
+
export interface HandlerContext {
|
|
41
|
+
/** The workflow name. */
|
|
42
|
+
workflowName: string;
|
|
43
|
+
/** The attached instance ID. */
|
|
44
|
+
instanceId: string;
|
|
45
|
+
/** The project ID. */
|
|
46
|
+
projectId: string;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* A code-first data workflow module declaration.
|
|
50
|
+
* Created via `defineDataWorkflow()`.
|
|
51
|
+
*/
|
|
52
|
+
export interface DataWorkflowModule {
|
|
53
|
+
/** Workflow name, 1–64 characters (R3.1, R3.8). */
|
|
54
|
+
name: string;
|
|
55
|
+
/** 1–10 triggers that start this workflow (R3.1, R3.8). */
|
|
56
|
+
triggers: TriggerSpec[];
|
|
57
|
+
/** Optional event filter predicate. */
|
|
58
|
+
filter?: (event: unknown) => boolean;
|
|
59
|
+
/** The workflow handler function. */
|
|
60
|
+
handler: (ctx: HandlerContext, event: unknown) => Promise<void> | void;
|
|
61
|
+
/** Operation names requiring human approval, ≤100 entries, each 1–256 chars (R6.1). */
|
|
62
|
+
requireApproval?: string[];
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/authoring/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,OAAO,GAAG,WAAW,GAAG,UAAU,GAAG,SAAS,CAAC;IACrD,iFAAiF;IACjF,GAAG,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACpC,4CAA4C;IAC5C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oCAAoC;IACpC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,yBAAyB;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,gCAAgC;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,sBAAsB;IACtB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,mDAAmD;IACnD,IAAI,EAAE,MAAM,CAAC;IACb,2DAA2D;IAC3D,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,uCAAuC;IACvC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC;IACrC,qCAAqC;IACrC,OAAO,EAAE,CAAC,GAAG,EAAE,cAAc,EAAE,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACvE,uFAAuF;IACvF,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;CAC5B"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Types for the code-first data workflow authoring surface.
|
|
3
|
+
*
|
|
4
|
+
* A `DataWorkflowModule` is the developer-facing unit of authoring: it declares
|
|
5
|
+
* a trigger, an optional filter, and a handler that compiles down to the existing
|
|
6
|
+
* flow/workflow graph on deploy.
|
|
7
|
+
*/
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/authoring/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI: loxtep activity list [--source <s>] [--actor <a>] [--resource-type <t>] [--from <date>] [--to <date>]
|
|
3
|
+
*
|
|
4
|
+
* Lists activity and audit entries from the unified Activity/Audit read-model API.
|
|
5
|
+
* Ordered by UTC timestamp DESC with stable entry_id tie-break.
|
|
6
|
+
* Applies source/actor/resource-type/time-range filters combined with AND (R7.4).
|
|
7
|
+
* Synchronous read — R18.6 carve-out.
|
|
8
|
+
*
|
|
9
|
+
* Requirements: 7.4, 18.5
|
|
10
|
+
*/
|
|
11
|
+
import type { LoxtepClient } from '../../client/loxtep-client.js';
|
|
12
|
+
import type { CliResult } from '../project-context.js';
|
|
13
|
+
export interface ActivityListOptions {
|
|
14
|
+
source?: string;
|
|
15
|
+
actor?: string;
|
|
16
|
+
resource_type?: string;
|
|
17
|
+
from?: string;
|
|
18
|
+
to?: string;
|
|
19
|
+
limit?: number;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Execute `loxtep activity list`.
|
|
23
|
+
*
|
|
24
|
+
* Lists activity and audit entries from the platform, applying optional filters.
|
|
25
|
+
* Does NOT require an attached project — operates at the organization level.
|
|
26
|
+
*/
|
|
27
|
+
export declare function runActivityListCommand(client: LoxtepClient, options?: ActivityListOptions): Promise<CliResult>;
|
|
28
|
+
//# sourceMappingURL=activity-cmd.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"activity-cmd.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/activity-cmd.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAElE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAIvD,MAAM,WAAW,mBAAmB;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;GAKG;AACH,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,YAAY,EACpB,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,SAAS,CAAC,CA0DpB"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI: loxtep activity list [--source <s>] [--actor <a>] [--resource-type <t>] [--from <date>] [--to <date>]
|
|
3
|
+
*
|
|
4
|
+
* Lists activity and audit entries from the unified Activity/Audit read-model API.
|
|
5
|
+
* Ordered by UTC timestamp DESC with stable entry_id tie-break.
|
|
6
|
+
* Applies source/actor/resource-type/time-range filters combined with AND (R7.4).
|
|
7
|
+
* Synchronous read — R18.6 carve-out.
|
|
8
|
+
*
|
|
9
|
+
* Requirements: 7.4, 18.5
|
|
10
|
+
*/
|
|
11
|
+
const VALID_SOURCES = ['cli', 'sdk', 'mcp', 'ui'];
|
|
12
|
+
/**
|
|
13
|
+
* Execute `loxtep activity list`.
|
|
14
|
+
*
|
|
15
|
+
* Lists activity and audit entries from the platform, applying optional filters.
|
|
16
|
+
* Does NOT require an attached project — operates at the organization level.
|
|
17
|
+
*/
|
|
18
|
+
export async function runActivityListCommand(client, options) {
|
|
19
|
+
try {
|
|
20
|
+
// Validate source filter
|
|
21
|
+
if (options?.source && !VALID_SOURCES.includes(options.source)) {
|
|
22
|
+
return {
|
|
23
|
+
exitCode: 1,
|
|
24
|
+
stdout: [],
|
|
25
|
+
stderr: [
|
|
26
|
+
`Invalid source filter: '${options.source}'. Must be one of: ${VALID_SOURCES.join(', ')}.`,
|
|
27
|
+
],
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
const filters = {};
|
|
31
|
+
if (options?.source)
|
|
32
|
+
filters.source = options.source;
|
|
33
|
+
if (options?.actor)
|
|
34
|
+
filters.actor = options.actor;
|
|
35
|
+
if (options?.resource_type)
|
|
36
|
+
filters.resource_type = options.resource_type;
|
|
37
|
+
if (options?.from)
|
|
38
|
+
filters.start = options.from;
|
|
39
|
+
if (options?.to)
|
|
40
|
+
filters.end = options.to;
|
|
41
|
+
if (options?.limit != null)
|
|
42
|
+
filters.limit = options.limit;
|
|
43
|
+
const result = await client.activity.list(filters);
|
|
44
|
+
const { entries } = result;
|
|
45
|
+
if (entries.length === 0) {
|
|
46
|
+
return { exitCode: 0, stdout: ['No activity entries found.'], stderr: [] };
|
|
47
|
+
}
|
|
48
|
+
const lines = [];
|
|
49
|
+
for (const entry of entries) {
|
|
50
|
+
const kindTag = entry.kind === 'action_trace' ? 'TRACE' : 'AUDIT';
|
|
51
|
+
const outcomeTag = entry.outcome ? ` [${entry.outcome}]` : '';
|
|
52
|
+
const sourceTag = entry.source ? ` (${entry.source})` : '';
|
|
53
|
+
lines.push(`${entry.timestamp} ${kindTag}${outcomeTag}${sourceTag} ${entry.operation_name}`);
|
|
54
|
+
if (entry.workflow_name) {
|
|
55
|
+
lines.push(` Workflow: ${entry.workflow_name}`);
|
|
56
|
+
}
|
|
57
|
+
if (entry.actor) {
|
|
58
|
+
lines.push(` Actor: ${entry.actor}`);
|
|
59
|
+
}
|
|
60
|
+
if (entry.target_resource) {
|
|
61
|
+
lines.push(` Target: ${entry.target_resource}`);
|
|
62
|
+
}
|
|
63
|
+
if (entry.resource_type && entry.resource_id) {
|
|
64
|
+
lines.push(` Resource: ${entry.resource_type}/${entry.resource_id}`);
|
|
65
|
+
}
|
|
66
|
+
if (entry.skill_name) {
|
|
67
|
+
lines.push(` Skill: ${entry.skill_name}`);
|
|
68
|
+
}
|
|
69
|
+
lines.push('');
|
|
70
|
+
}
|
|
71
|
+
return { exitCode: 0, stdout: lines, stderr: [] };
|
|
72
|
+
}
|
|
73
|
+
catch (err) {
|
|
74
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
75
|
+
return { exitCode: 1, stdout: [], stderr: [`Failed to list activity: ${message}`] };
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=activity-cmd.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"activity-cmd.js","sourceRoot":"","sources":["../../../src/cli/commands/activity-cmd.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `loxtep attach [--instance <id>]`
|
|
3
|
+
*
|
|
4
|
+
* Links the project to an existing Instance using the same connection mechanism
|
|
5
|
+
* the Platform_UI uses (client.projects + client.instances / update_project).
|
|
6
|
+
*
|
|
7
|
+
* On success: writes resolved `instance_id` + `api_url` atomically into
|
|
8
|
+
* `.loxtep/project.json`, including a `repository` block when the project is
|
|
9
|
+
* GitHub-bound (R17.2) and omitting it when unbound (R17.3).
|
|
10
|
+
*
|
|
11
|
+
* On failure: exits non-zero, prints the failure reason, and leaves
|
|
12
|
+
* `.loxtep/project.json` byte-unchanged (R1.9).
|
|
13
|
+
*/
|
|
14
|
+
import type { LoxtepClient } from '../../client/loxtep-client.js';
|
|
15
|
+
import type { Project } from '../../client/projects-types.js';
|
|
16
|
+
import { type CliResult, type ProjectRepository } from '../project-context.js';
|
|
17
|
+
export interface AttachOptions {
|
|
18
|
+
/** Explicit instance ID from `--instance <id>`. When omitted, the org's sole instance is used. */
|
|
19
|
+
instanceId?: string;
|
|
20
|
+
/** Working directory override (defaults to `process.cwd()`). */
|
|
21
|
+
cwd?: string;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Project the GitHub binding fields from a project record into a
|
|
25
|
+
* {@link ProjectRepository} block, or `undefined` when the project is unbound.
|
|
26
|
+
*
|
|
27
|
+
* A project is considered bound when it has both `github_repo_url` and
|
|
28
|
+
* `github_repo_name` present and non-empty.
|
|
29
|
+
*/
|
|
30
|
+
export declare function projectToRepository(project: Project): ProjectRepository | undefined;
|
|
31
|
+
/**
|
|
32
|
+
* Core attach logic, separated from CLI wiring for testability.
|
|
33
|
+
*
|
|
34
|
+
* Returns a {@link CliResult} so the thin CLI `main()` can map `exitCode` to
|
|
35
|
+
* `process.exitCode` without spawning a process.
|
|
36
|
+
*/
|
|
37
|
+
export declare function runAttach(client: LoxtepClient, options?: AttachOptions): Promise<CliResult>;
|
|
38
|
+
//# sourceMappingURL=attach-cmd.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attach-cmd.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/attach-cmd.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAElE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAC;AAC9D,OAAO,EAIL,KAAK,SAAS,EAEd,KAAK,iBAAiB,EACvB,MAAM,uBAAuB,CAAC;AAE/B,MAAM,WAAW,aAAa;IAC5B,kGAAkG;IAClG,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gEAAgE;IAChE,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,iBAAiB,GAAG,SAAS,CAoBnF;AAED;;;;;GAKG;AACH,wBAAsB,SAAS,CAC7B,MAAM,EAAE,YAAY,EACpB,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,SAAS,CAAC,CAwEpB"}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `loxtep attach [--instance <id>]`
|
|
3
|
+
*
|
|
4
|
+
* Links the project to an existing Instance using the same connection mechanism
|
|
5
|
+
* the Platform_UI uses (client.projects + client.instances / update_project).
|
|
6
|
+
*
|
|
7
|
+
* On success: writes resolved `instance_id` + `api_url` atomically into
|
|
8
|
+
* `.loxtep/project.json`, including a `repository` block when the project is
|
|
9
|
+
* GitHub-bound (R17.2) and omitting it when unbound (R17.3).
|
|
10
|
+
*
|
|
11
|
+
* On failure: exits non-zero, prints the failure reason, and leaves
|
|
12
|
+
* `.loxtep/project.json` byte-unchanged (R1.9).
|
|
13
|
+
*/
|
|
14
|
+
import { requireProject, writeProjectConfig, preconditionToCliResult, } from '../project-context.js';
|
|
15
|
+
/**
|
|
16
|
+
* Project the GitHub binding fields from a project record into a
|
|
17
|
+
* {@link ProjectRepository} block, or `undefined` when the project is unbound.
|
|
18
|
+
*
|
|
19
|
+
* A project is considered bound when it has both `github_repo_url` and
|
|
20
|
+
* `github_repo_name` present and non-empty.
|
|
21
|
+
*/
|
|
22
|
+
export function projectToRepository(project) {
|
|
23
|
+
const url = project.github_repo_url;
|
|
24
|
+
const name = project.github_repo_name;
|
|
25
|
+
if (!url || !name) {
|
|
26
|
+
return undefined;
|
|
27
|
+
}
|
|
28
|
+
const repo = {
|
|
29
|
+
url,
|
|
30
|
+
name,
|
|
31
|
+
branch: project.github_branch || 'main',
|
|
32
|
+
};
|
|
33
|
+
// Only include subpath when it's a non-empty string.
|
|
34
|
+
if (project.github_repo_path && project.github_repo_path.length > 0) {
|
|
35
|
+
repo.subpath = project.github_repo_path;
|
|
36
|
+
}
|
|
37
|
+
return repo;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Core attach logic, separated from CLI wiring for testability.
|
|
41
|
+
*
|
|
42
|
+
* Returns a {@link CliResult} so the thin CLI `main()` can map `exitCode` to
|
|
43
|
+
* `process.exitCode` without spawning a process.
|
|
44
|
+
*/
|
|
45
|
+
export async function runAttach(client, options = {}) {
|
|
46
|
+
const cwd = options.cwd ?? process.cwd();
|
|
47
|
+
// 1. Resolve the project config (precondition: .loxtep/project.json must exist).
|
|
48
|
+
const projectResult = requireProject(cwd);
|
|
49
|
+
if (!projectResult.ok) {
|
|
50
|
+
return preconditionToCliResult(projectResult.failure);
|
|
51
|
+
}
|
|
52
|
+
const { project, projectFilePath } = projectResult;
|
|
53
|
+
// 2. Resolve the target instance.
|
|
54
|
+
let instance;
|
|
55
|
+
try {
|
|
56
|
+
instance = await resolveInstance(client, options.instanceId);
|
|
57
|
+
}
|
|
58
|
+
catch (err) {
|
|
59
|
+
const reason = err instanceof Error ? err.message : String(err);
|
|
60
|
+
return {
|
|
61
|
+
exitCode: 1,
|
|
62
|
+
stdout: [],
|
|
63
|
+
stderr: [`Attach failed: ${reason}`],
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
// 3. Fetch the project record to read github_* binding fields.
|
|
67
|
+
let projectRecord;
|
|
68
|
+
try {
|
|
69
|
+
projectRecord = await client.projects.get(project.project_id);
|
|
70
|
+
}
|
|
71
|
+
catch (err) {
|
|
72
|
+
const reason = err instanceof Error ? err.message : String(err);
|
|
73
|
+
return {
|
|
74
|
+
exitCode: 1,
|
|
75
|
+
stdout: [],
|
|
76
|
+
stderr: [`Attach failed: could not fetch project record: ${reason}`],
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
// 4. Build the new config with instance_id + api_url and optional repository block.
|
|
80
|
+
const repository = projectToRepository(projectRecord);
|
|
81
|
+
const newConfig = {
|
|
82
|
+
...project,
|
|
83
|
+
instance_id: instance.instance_id,
|
|
84
|
+
api_url: instance.api_url,
|
|
85
|
+
};
|
|
86
|
+
// Include the repository block only when bound (R17.2); omit entirely when unbound (R17.3).
|
|
87
|
+
if (repository) {
|
|
88
|
+
newConfig.repository = repository;
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
delete newConfig.repository;
|
|
92
|
+
}
|
|
93
|
+
// 5. Atomic write via writeProjectConfig (build → validate → write-once).
|
|
94
|
+
try {
|
|
95
|
+
await writeProjectConfig(projectFilePath, newConfig);
|
|
96
|
+
}
|
|
97
|
+
catch (err) {
|
|
98
|
+
const reason = err instanceof Error ? err.message : String(err);
|
|
99
|
+
return {
|
|
100
|
+
exitCode: 1,
|
|
101
|
+
stdout: [],
|
|
102
|
+
stderr: [`Attach failed: could not write project config: ${reason}`],
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
// 6. Success output.
|
|
106
|
+
const lines = [
|
|
107
|
+
`Attached to instance "${instance.name}" (${instance.instance_id}).`,
|
|
108
|
+
` api_url: ${instance.api_url}`,
|
|
109
|
+
];
|
|
110
|
+
if (repository) {
|
|
111
|
+
lines.push(` repository: ${repository.url} (${repository.branch})`);
|
|
112
|
+
}
|
|
113
|
+
return { exitCode: 0, stdout: lines, stderr: [] };
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Resolve the target instance. If `instanceId` is given, fetch it directly.
|
|
117
|
+
* Otherwise list all instances for the org and use the sole one (or error if
|
|
118
|
+
* there are 0 or >1).
|
|
119
|
+
*/
|
|
120
|
+
async function resolveInstance(client, instanceId) {
|
|
121
|
+
if (instanceId) {
|
|
122
|
+
try {
|
|
123
|
+
return await client.instances.get(instanceId);
|
|
124
|
+
}
|
|
125
|
+
catch (err) {
|
|
126
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
127
|
+
throw new Error(`Instance "${instanceId}" could not be resolved: ${msg}`);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
// No explicit ID — list all instances and auto-select the sole one.
|
|
131
|
+
const { items } = await client.instances.list();
|
|
132
|
+
if (items.length === 0) {
|
|
133
|
+
throw new Error('No instances found in your organization. Create one first or specify --instance <id>.');
|
|
134
|
+
}
|
|
135
|
+
if (items.length > 1) {
|
|
136
|
+
const ids = items.map(i => ` ${i.instance_id} — ${i.name}`).join('\n');
|
|
137
|
+
throw new Error(`Multiple instances found. Specify one with --instance <id>:\n${ids}`);
|
|
138
|
+
}
|
|
139
|
+
return items[0];
|
|
140
|
+
}
|
|
141
|
+
//# sourceMappingURL=attach-cmd.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attach-cmd.js","sourceRoot":"","sources":["../../../src/cli/commands/attach-cmd.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI: loxtep deploy — compile and deploy Data_Workflow_Modules.
|
|
3
|
+
*
|
|
4
|
+
* Steps:
|
|
5
|
+
* 1. Call requireAttachedProject() to verify preconditions (R1.7, R1.10)
|
|
6
|
+
* 2. Load all workflow modules from `workflows/` directory
|
|
7
|
+
* 3. Compile all modules via compileModule (R1.11: collect compile errors with file:line)
|
|
8
|
+
* 4. On compile errors: reject, print each error with file:line, exit non-zero
|
|
9
|
+
* 5. Validate referenced resources exist against the instance (R1.8)
|
|
10
|
+
* 6. On missing refs: reject, print each with file:line, leave running unchanged, exit non-zero
|
|
11
|
+
* 7. Resolve deploy target by instance type (R14.4, R14.5)
|
|
12
|
+
* 8. For repo-bound projects: deploy from the synced S3 Code_Bundle (R17.11)
|
|
13
|
+
* 9. For each compiled module: drive in-place update or create via the workflows microservice
|
|
14
|
+
* 10. Compute removal set and remove absent workflows (R3.7)
|
|
15
|
+
* 11. Surface async deploy status via `async_runs` tracking handle (R18.5)
|
|
16
|
+
*
|
|
17
|
+
* Requirements: 1.6, 1.8, 1.11, 3.4, 3.5, 3.6, 3.7, 14.4, 14.5, 17.11, 18.5
|
|
18
|
+
*/
|
|
19
|
+
import { type CliResult } from '../project-context.js';
|
|
20
|
+
import type { CompiledWorkflow } from '../../authoring/compiler.js';
|
|
21
|
+
import type { NormalizedContext } from '../../codegen/types.js';
|
|
22
|
+
import type { Instance } from '../../client/instances-types.js';
|
|
23
|
+
/** A compile error with source location. */
|
|
24
|
+
export interface CompileError {
|
|
25
|
+
file: string;
|
|
26
|
+
line: number;
|
|
27
|
+
message: string;
|
|
28
|
+
}
|
|
29
|
+
/** A missing resource reference with source location. */
|
|
30
|
+
export interface MissingRefError {
|
|
31
|
+
file: string;
|
|
32
|
+
line: number;
|
|
33
|
+
type: string;
|
|
34
|
+
id: string;
|
|
35
|
+
name?: string;
|
|
36
|
+
}
|
|
37
|
+
/** The deploy target resolved from instance type. */
|
|
38
|
+
export type DeployTarget = {
|
|
39
|
+
kind: 'loxtep_infra';
|
|
40
|
+
instanceType: 'shared' | 'managed';
|
|
41
|
+
} | {
|
|
42
|
+
kind: 'customer_data_plane';
|
|
43
|
+
instanceType: 'customer';
|
|
44
|
+
};
|
|
45
|
+
/** Async deploy tracking handle (R18.5). */
|
|
46
|
+
export interface DeployTrackingHandle {
|
|
47
|
+
run_id: string;
|
|
48
|
+
status: string;
|
|
49
|
+
}
|
|
50
|
+
/** Result of a single workflow deployment. */
|
|
51
|
+
export interface WorkflowDeployResult {
|
|
52
|
+
name: string;
|
|
53
|
+
workflow_id: string;
|
|
54
|
+
status: 'created' | 'updated' | 'failed';
|
|
55
|
+
error?: string;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Discover all .ts/.js workflow module files in the `workflows/` directory.
|
|
59
|
+
* Returns an array of { filename, path } entries.
|
|
60
|
+
*/
|
|
61
|
+
export declare function discoverModuleFiles(projectDir: string): Array<{
|
|
62
|
+
filename: string;
|
|
63
|
+
path: string;
|
|
64
|
+
}>;
|
|
65
|
+
/**
|
|
66
|
+
* Resolve the deploy target from the instance type.
|
|
67
|
+
*
|
|
68
|
+
* - shared/managed → Loxtep-operated infrastructure (R14.4)
|
|
69
|
+
* - self-hosted (backend: 'customer') → customer data plane (R14.5)
|
|
70
|
+
*
|
|
71
|
+
* Instance type is determined from metadata or connection_details on the instance.
|
|
72
|
+
*/
|
|
73
|
+
export declare function resolveDeployTarget(instance: Instance): DeployTarget;
|
|
74
|
+
/**
|
|
75
|
+
* Validate that all referenced resources from compiled modules exist in the
|
|
76
|
+
* normalized workspace context. Returns missing references with file:line info.
|
|
77
|
+
*/
|
|
78
|
+
export declare function validateReferencedResources(compiledModules: Array<{
|
|
79
|
+
compiled: CompiledWorkflow;
|
|
80
|
+
file: string;
|
|
81
|
+
}>, ctx: NormalizedContext): MissingRefError[];
|
|
82
|
+
export interface DeployCommandOptions {
|
|
83
|
+
/** Working directory (defaults to process.cwd()). */
|
|
84
|
+
cwd?: string;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Execute the `loxtep deploy` command.
|
|
88
|
+
*
|
|
89
|
+
* Compiles all modules, validates resources, resolves deploy target, then drives
|
|
90
|
+
* in-place update/create/removal via the workflows microservice + deployWorkflow().
|
|
91
|
+
*
|
|
92
|
+
* @param options - Command options.
|
|
93
|
+
* @returns Structured CLI result for testability.
|
|
94
|
+
*/
|
|
95
|
+
export declare function runDeployCommand(options?: DeployCommandOptions): Promise<CliResult>;
|
|
96
|
+
/**
|
|
97
|
+
* CLI entry point for `loxtep deploy`.
|
|
98
|
+
* Prints output and sets process.exitCode from the structured result.
|
|
99
|
+
*/
|
|
100
|
+
export declare function runDeploy(): Promise<void>;
|
|
101
|
+
//# sourceMappingURL=deploy-cmd.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deploy-cmd.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/deploy-cmd.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAIH,OAAO,EAGL,KAAK,SAAS,EACf,MAAM,uBAAuB,CAAC;AAK/B,OAAO,KAAK,EAAE,gBAAgB,EAAe,MAAM,6BAA6B,CAAC;AAGjF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAMhE,4CAA4C;AAC5C,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,yDAAyD;AACzD,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,qDAAqD;AACrD,MAAM,MAAM,YAAY,GACpB;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,YAAY,EAAE,QAAQ,GAAG,SAAS,CAAA;CAAE,GAC5D;IAAE,IAAI,EAAE,qBAAqB,CAAC;IAAC,YAAY,EAAE,UAAU,CAAA;CAAE,CAAC;AAE9D,4CAA4C;AAC5C,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,8CAA8C;AAC9C,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;IACzC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAMD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,KAAK,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAYjG;AAwBD;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,GAAG,YAAY,CAgBpE;AAMD;;;GAGG;AACH,wBAAgB,2BAA2B,CACzC,eAAe,EAAE,KAAK,CAAC;IAAE,QAAQ,EAAE,gBAAgB,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,EACpE,GAAG,EAAE,iBAAiB,GACrB,eAAe,EAAE,CA2CnB;AAiFD,MAAM,WAAW,oBAAoB;IACnC,qDAAqD;IACrD,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;;;;;;;GAQG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,GAAE,oBAAyB,GAAG,OAAO,CAAC,SAAS,CAAC,CA0Q7F;AAED;;;GAGG;AACH,wBAAsB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAW/C"}
|