@loxtep/sdk 0.8.0 → 0.9.1
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 +51 -0
- package/README.md +2 -1
- package/dist/cli/commands/approvals-cmd.d.ts +21 -0
- package/dist/cli/commands/approvals-cmd.d.ts.map +1 -0
- package/dist/cli/commands/approvals-cmd.js +95 -0
- package/dist/cli/commands/approvals-cmd.js.map +1 -0
- package/dist/cli/commands/clone-cmd.d.ts +39 -0
- package/dist/cli/commands/clone-cmd.d.ts.map +1 -0
- package/dist/cli/commands/clone-cmd.js +291 -0
- package/dist/cli/commands/clone-cmd.js.map +1 -0
- package/dist/cli/commands/deploy-cmd.d.ts.map +1 -1
- package/dist/cli/commands/deploy-cmd.js +52 -19
- package/dist/cli/commands/deploy-cmd.js.map +1 -1
- package/dist/cli/commands/deployments-cmd.d.ts +22 -0
- package/dist/cli/commands/deployments-cmd.d.ts.map +1 -0
- package/dist/cli/commands/deployments-cmd.js +62 -0
- package/dist/cli/commands/deployments-cmd.js.map +1 -0
- package/dist/cli/commands/init-cmd.d.ts.map +1 -1
- package/dist/cli/commands/init-cmd.js +12 -1
- package/dist/cli/commands/init-cmd.js.map +1 -1
- package/dist/cli/commands/link-cmd.d.ts +33 -0
- package/dist/cli/commands/link-cmd.d.ts.map +1 -0
- package/dist/cli/commands/link-cmd.js +145 -0
- package/dist/cli/commands/link-cmd.js.map +1 -0
- package/dist/cli/commands/projects-cmd.d.ts +39 -1
- package/dist/cli/commands/projects-cmd.d.ts.map +1 -1
- package/dist/cli/commands/projects-cmd.js +231 -4
- package/dist/cli/commands/projects-cmd.js.map +1 -1
- package/dist/cli/commands/projects-github-cmd.d.ts +24 -0
- package/dist/cli/commands/projects-github-cmd.d.ts.map +1 -0
- package/dist/cli/commands/projects-github-cmd.js +108 -0
- package/dist/cli/commands/projects-github-cmd.js.map +1 -0
- package/dist/cli/commands/push-cmd.d.ts +3 -7
- package/dist/cli/commands/push-cmd.d.ts.map +1 -1
- package/dist/cli/commands/push-cmd.js +10 -39
- package/dist/cli/commands/push-cmd.js.map +1 -1
- package/dist/cli/commands/status-cmd.d.ts +21 -0
- package/dist/cli/commands/status-cmd.d.ts.map +1 -0
- package/dist/cli/commands/status-cmd.js +127 -0
- package/dist/cli/commands/status-cmd.js.map +1 -0
- package/dist/cli/help.d.ts.map +1 -1
- package/dist/cli/help.js +21 -3
- package/dist/cli/help.js.map +1 -1
- package/dist/cli/index.js +158 -3
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/known-locals-registry.d.ts +51 -0
- package/dist/cli/known-locals-registry.d.ts.map +1 -0
- package/dist/cli/known-locals-registry.js +94 -0
- package/dist/cli/known-locals-registry.js.map +1 -0
- package/dist/cli/project-context.d.ts +9 -0
- package/dist/cli/project-context.d.ts.map +1 -1
- package/dist/cli/project-context.js +21 -0
- package/dist/cli/project-context.js.map +1 -1
- package/dist/client/deployments-types.d.ts +51 -0
- package/dist/client/deployments-types.d.ts.map +1 -0
- package/dist/client/deployments-types.js +6 -0
- package/dist/client/deployments-types.js.map +1 -0
- package/dist/client/deployments.d.ts +20 -0
- package/dist/client/deployments.d.ts.map +1 -0
- package/dist/client/deployments.js +71 -0
- package/dist/client/deployments.js.map +1 -0
- package/dist/client/index.d.ts +11 -0
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +6 -0
- package/dist/client/index.js.map +1 -1
- package/dist/client/loxtep-client.d.ts.map +1 -1
- package/dist/client/loxtep-client.js +12 -2
- package/dist/client/loxtep-client.js.map +1 -1
- package/dist/client/observe-facade.d.ts +5 -1
- package/dist/client/observe-facade.d.ts.map +1 -1
- package/dist/client/observe-facade.js +3 -1
- package/dist/client/observe-facade.js.map +1 -1
- package/dist/client/project-workspace-inventory.d.ts +61 -0
- package/dist/client/project-workspace-inventory.d.ts.map +1 -0
- package/dist/client/project-workspace-inventory.js +300 -0
- package/dist/client/project-workspace-inventory.js.map +1 -0
- package/dist/client/project-workspace-status-types.d.ts +644 -0
- package/dist/client/project-workspace-status-types.d.ts.map +1 -0
- package/dist/client/project-workspace-status-types.js +265 -0
- package/dist/client/project-workspace-status-types.js.map +1 -0
- package/dist/client/project-workspace-status.d.ts +76 -0
- package/dist/client/project-workspace-status.d.ts.map +1 -0
- package/dist/client/project-workspace-status.js +368 -0
- package/dist/client/project-workspace-status.js.map +1 -0
- package/dist/client/projects.d.ts +53 -0
- package/dist/client/projects.d.ts.map +1 -1
- package/dist/client/projects.js +18 -0
- package/dist/client/projects.js.map +1 -1
- package/dist/client/versions-types.d.ts +3 -4
- package/dist/client/versions-types.d.ts.map +1 -1
- package/dist/client/versions-types.js +3 -4
- package/dist/client/versions-types.js.map +1 -1
- package/dist/client/workflows-types.d.ts +16 -3
- package/dist/client/workflows-types.d.ts.map +1 -1
- package/dist/client/workflows-types.js +47 -1
- package/dist/client/workflows-types.js.map +1 -1
- package/dist/client/workflows.d.ts.map +1 -1
- package/dist/client/workflows.js +2 -1
- package/dist/client/workflows.js.map +1 -1
- package/dist/client/workspace-package.d.ts +26 -0
- package/dist/client/workspace-package.d.ts.map +1 -0
- package/dist/client/workspace-package.js +85 -0
- package/dist/client/workspace-package.js.map +1 -0
- package/dist/client/workspace.d.ts +5 -1
- package/dist/client/workspace.d.ts.map +1 -1
- package/dist/client/workspace.js +3 -1
- package/dist/client/workspace.js.map +1 -1
- package/dist/config/platform-request-url.d.ts +2 -2
- package/dist/config/platform-request-url.js +4 -4
- package/docs/code-first-cli.md +28 -2
- package/docs/project-workspace-status.md +161 -0
- package/docs/sdk-mcp-mapping.md +2 -2
- package/package.json +1 -1
- package/schemas/entity-json-schemas/SCHEMA_SYNC.md +4 -3
- package/schemas/entity-json-schemas/data-product.json +1 -1
- package/schemas/entity-json-schemas/odps-product.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"observe-facade.js","sourceRoot":"","sources":["../../src/client/observe-facade.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"observe-facade.js","sourceRoot":"","sources":["../../src/client/observe-facade.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAYH,MAAM,UAAU,mBAAmB,CAAC,IAAuB;IAUzD,OAAO;QACL,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;QAC9C,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;QAC5D,kBAAkB,EAAE,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;QACpE,qBAAqB,EAAE,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;QAC1E,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;QACtD,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;QACtD,gBAAgB,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;QAC9D,cAAc,EAAE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;KAC5D,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unpublished package inventory (Local→Cloud / Cloud→Deployed).
|
|
3
|
+
*
|
|
4
|
+
* Cheap path: discover the same bundle layout as `loxtep push`, compare to
|
|
5
|
+
* `.loxtep/push-manifest.json`. Escalate with cloud workflow id set when linked.
|
|
6
|
+
*/
|
|
7
|
+
import type { DeployedLayerState, UnpublishedDelta, UnpublishedEntityKind } from './project-workspace-status-types.js';
|
|
8
|
+
export declare const PUSH_MANIFEST_RELATIVE_PATH = ".loxtep/push-manifest.json";
|
|
9
|
+
export interface PushManifest {
|
|
10
|
+
schema_version: 1;
|
|
11
|
+
project_id: string;
|
|
12
|
+
captured_at: string;
|
|
13
|
+
/** Repo-relative path → sha256 hex of stable JSON or raw file bytes. */
|
|
14
|
+
files: Record<string, string>;
|
|
15
|
+
}
|
|
16
|
+
export interface DiscoveredPackageFile {
|
|
17
|
+
path: string;
|
|
18
|
+
entity_kind: UnpublishedEntityKind;
|
|
19
|
+
workflow_id: string | null;
|
|
20
|
+
content_sha256: string;
|
|
21
|
+
}
|
|
22
|
+
/** Stable SHA-256 for JSON entities (key-sorted stringify). */
|
|
23
|
+
export declare function hashStableJson(value: unknown): string;
|
|
24
|
+
export declare function hashRawBytes(buf: Buffer | string): string;
|
|
25
|
+
/**
|
|
26
|
+
* Discover every path that would ship on next `loxtep push` (entity packages)
|
|
27
|
+
* plus schema package JSON and code-first workflow modules for deploy awareness.
|
|
28
|
+
*/
|
|
29
|
+
export declare function discoverLocalPackageFiles(projectDir: string): DiscoveredPackageFile[];
|
|
30
|
+
export declare function readPushManifest(projectDir: string): PushManifest | null;
|
|
31
|
+
export declare function writePushManifest(projectDir: string, manifest: PushManifest): void;
|
|
32
|
+
/** Snapshot current local package into `.loxtep/push-manifest.json`. */
|
|
33
|
+
export declare function writePushManifestFromProjectDir(projectDir: string, projectId: string, nowIso?: string): PushManifest;
|
|
34
|
+
export interface BuildLocalToCloudInventoryInput {
|
|
35
|
+
projectDir: string;
|
|
36
|
+
/** Cloud workflow ids when linked + API list succeeded (escalate). */
|
|
37
|
+
cloud_workflow_ids?: string[] | null;
|
|
38
|
+
/** When API list failed. */
|
|
39
|
+
cloud_list_unavailable?: boolean;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Cheap Local→Cloud inventory: local package vs last push manifest.
|
|
43
|
+
* Escalates with cloud workflow presence when ids are provided.
|
|
44
|
+
*/
|
|
45
|
+
export declare function buildLocalToCloudInventory(input: BuildLocalToCloudInventoryInput): UnpublishedDelta;
|
|
46
|
+
export interface BuildCloudToDeployedInventoryInput {
|
|
47
|
+
local_to_cloud: UnpublishedDelta;
|
|
48
|
+
deployed_state: DeployedLayerState;
|
|
49
|
+
cloud_to_deployed_dirty: boolean | null;
|
|
50
|
+
cloud_to_deployed_summary: string | null;
|
|
51
|
+
/** Local files (including modules) that would be on the next deploy story. */
|
|
52
|
+
projectDir: string;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Cloud→Deployed inventory. Cheap: reuse deploy-layer dirty + list pushable
|
|
56
|
+
* (or deployable module) paths when cloud is ahead / never deployed.
|
|
57
|
+
*/
|
|
58
|
+
export declare function buildCloudToDeployedInventory(input: BuildCloudToDeployedInventoryInput): UnpublishedDelta;
|
|
59
|
+
/** Pretty inventory lines for CLI text output. */
|
|
60
|
+
export declare function formatUnpublishedInventoryLines(local_to_cloud: UnpublishedDelta, cloud_to_deployed: UnpublishedDelta): string[];
|
|
61
|
+
//# sourceMappingURL=project-workspace-inventory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-workspace-inventory.d.ts","sourceRoot":"","sources":["../../src/client/project-workspace-inventory.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAWH,OAAO,KAAK,EACV,kBAAkB,EAElB,gBAAgB,EAChB,qBAAqB,EACtB,MAAM,qCAAqC,CAAC;AAE7C,eAAO,MAAM,2BAA2B,+BAA+B,CAAC;AAExE,MAAM,WAAW,YAAY;IAC3B,cAAc,EAAE,CAAC,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,wEAAwE;IACxE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,qBAAqB,CAAC;IACnC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,+DAA+D;AAC/D,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAGrD;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAEzD;AAuBD;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,UAAU,EAAE,MAAM,GAAG,qBAAqB,EAAE,CAsCrF;AAED,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAYxE;AAED,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,YAAY,GACrB,IAAI,CAIN;AAED,wEAAwE;AACxE,wBAAgB,+BAA+B,CAC7C,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,MAAM,GAAE,MAAiC,GACxC,YAAY,CAkBd;AAED,MAAM,WAAW,+BAA+B;IAC9C,UAAU,EAAE,MAAM,CAAC;IACnB,sEAAsE;IACtE,kBAAkB,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACrC,4BAA4B;IAC5B,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAClC;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,+BAA+B,GACrC,gBAAgB,CA6FlB;AAED,MAAM,WAAW,kCAAkC;IACjD,cAAc,EAAE,gBAAgB,CAAC;IACjC,cAAc,EAAE,kBAAkB,CAAC;IACnC,uBAAuB,EAAE,OAAO,GAAG,IAAI,CAAC;IACxC,yBAAyB,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,8EAA8E;IAC9E,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAgB,6BAA6B,CAC3C,KAAK,EAAE,kCAAkC,GACxC,gBAAgB,CAgDlB;AAeD,kDAAkD;AAClD,wBAAgB,+BAA+B,CAC7C,cAAc,EAAE,gBAAgB,EAChC,iBAAiB,EAAE,gBAAgB,GAClC,MAAM,EAAE,CAuBV"}
|
|
@@ -0,0 +1,300 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unpublished package inventory (Local→Cloud / Cloud→Deployed).
|
|
3
|
+
*
|
|
4
|
+
* Cheap path: discover the same bundle layout as `loxtep push`, compare to
|
|
5
|
+
* `.loxtep/push-manifest.json`. Escalate with cloud workflow id set when linked.
|
|
6
|
+
*/
|
|
7
|
+
import { createHash } from 'node:crypto';
|
|
8
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
9
|
+
import { dirname, join } from 'node:path';
|
|
10
|
+
import { collectFlatBundle, listLocalSchemaPackageFiles, listLocalWorkflowIds, listLocalWorkflowModuleFiles, } from './workspace-package.js';
|
|
11
|
+
export const PUSH_MANIFEST_RELATIVE_PATH = '.loxtep/push-manifest.json';
|
|
12
|
+
/** Stable SHA-256 for JSON entities (key-sorted stringify). */
|
|
13
|
+
export function hashStableJson(value) {
|
|
14
|
+
const canonical = stableStringify(value);
|
|
15
|
+
return createHash('sha256').update(canonical, 'utf8').digest('hex');
|
|
16
|
+
}
|
|
17
|
+
export function hashRawBytes(buf) {
|
|
18
|
+
return createHash('sha256').update(buf).digest('hex');
|
|
19
|
+
}
|
|
20
|
+
function stableStringify(value) {
|
|
21
|
+
if (value === null || typeof value !== 'object') {
|
|
22
|
+
return JSON.stringify(value);
|
|
23
|
+
}
|
|
24
|
+
if (Array.isArray(value)) {
|
|
25
|
+
return `[${value.map(stableStringify).join(',')}]`;
|
|
26
|
+
}
|
|
27
|
+
const obj = value;
|
|
28
|
+
const keys = Object.keys(obj).sort();
|
|
29
|
+
return `{${keys.map(k => `${JSON.stringify(k)}:${stableStringify(obj[k])}`).join(',')}}`;
|
|
30
|
+
}
|
|
31
|
+
function entityKindFromBundleRel(relWithinWorkflow) {
|
|
32
|
+
if (relWithinWorkflow === 'workflow.json')
|
|
33
|
+
return 'workflow';
|
|
34
|
+
if (relWithinWorkflow.startsWith('connections/'))
|
|
35
|
+
return 'connection';
|
|
36
|
+
if (relWithinWorkflow.startsWith('data-products/'))
|
|
37
|
+
return 'data_product';
|
|
38
|
+
if (relWithinWorkflow.startsWith('transformations/'))
|
|
39
|
+
return 'transformation';
|
|
40
|
+
if (relWithinWorkflow.startsWith('validations/'))
|
|
41
|
+
return 'validation';
|
|
42
|
+
return 'workflow';
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Discover every path that would ship on next `loxtep push` (entity packages)
|
|
46
|
+
* plus schema package JSON and code-first workflow modules for deploy awareness.
|
|
47
|
+
*/
|
|
48
|
+
export function discoverLocalPackageFiles(projectDir) {
|
|
49
|
+
const out = [];
|
|
50
|
+
for (const workflowId of listLocalWorkflowIds(projectDir)) {
|
|
51
|
+
const files = collectFlatBundle(projectDir, workflowId);
|
|
52
|
+
for (const [rel, entity] of Object.entries(files)) {
|
|
53
|
+
const path = `workflows/${workflowId}/${rel}`;
|
|
54
|
+
out.push({
|
|
55
|
+
path,
|
|
56
|
+
entity_kind: entityKindFromBundleRel(rel),
|
|
57
|
+
workflow_id: workflowId,
|
|
58
|
+
content_sha256: hashStableJson(entity),
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
for (const name of listLocalWorkflowModuleFiles(projectDir)) {
|
|
63
|
+
const path = `workflows/${name}`;
|
|
64
|
+
const abs = join(projectDir, path);
|
|
65
|
+
out.push({
|
|
66
|
+
path,
|
|
67
|
+
entity_kind: 'module',
|
|
68
|
+
workflow_id: name.replace(/\.(ts|js)$/, ''),
|
|
69
|
+
content_sha256: hashRawBytes(readFileSync(abs)),
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
for (const rel of listLocalSchemaPackageFiles(projectDir)) {
|
|
73
|
+
const abs = join(projectDir, rel);
|
|
74
|
+
out.push({
|
|
75
|
+
path: rel,
|
|
76
|
+
entity_kind: 'schema',
|
|
77
|
+
workflow_id: null,
|
|
78
|
+
content_sha256: hashRawBytes(readFileSync(abs)),
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
return out.sort((a, b) => a.path.localeCompare(b.path));
|
|
82
|
+
}
|
|
83
|
+
export function readPushManifest(projectDir) {
|
|
84
|
+
const abs = join(projectDir, PUSH_MANIFEST_RELATIVE_PATH);
|
|
85
|
+
if (!existsSync(abs))
|
|
86
|
+
return null;
|
|
87
|
+
try {
|
|
88
|
+
const raw = JSON.parse(readFileSync(abs, 'utf8'));
|
|
89
|
+
if (raw?.schema_version !== 1 || typeof raw.files !== 'object' || !raw.files) {
|
|
90
|
+
return null;
|
|
91
|
+
}
|
|
92
|
+
return raw;
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
return null;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
export function writePushManifest(projectDir, manifest) {
|
|
99
|
+
const abs = join(projectDir, PUSH_MANIFEST_RELATIVE_PATH);
|
|
100
|
+
mkdirSync(dirname(abs), { recursive: true });
|
|
101
|
+
writeFileSync(abs, `${JSON.stringify(manifest, null, 2)}\n`, 'utf8');
|
|
102
|
+
}
|
|
103
|
+
/** Snapshot current local package into `.loxtep/push-manifest.json`. */
|
|
104
|
+
export function writePushManifestFromProjectDir(projectDir, projectId, nowIso = new Date().toISOString()) {
|
|
105
|
+
const discovered = discoverLocalPackageFiles(projectDir);
|
|
106
|
+
const files = {};
|
|
107
|
+
for (const f of discovered) {
|
|
108
|
+
// Manifest tracks push bundle paths only (entity packages + schemas).
|
|
109
|
+
// Code-first modules are deploy-only and still inventory'd but not required
|
|
110
|
+
// for Local→Cloud push equality.
|
|
111
|
+
if (f.entity_kind === 'module')
|
|
112
|
+
continue;
|
|
113
|
+
files[f.path] = f.content_sha256;
|
|
114
|
+
}
|
|
115
|
+
const manifest = {
|
|
116
|
+
schema_version: 1,
|
|
117
|
+
project_id: projectId,
|
|
118
|
+
captured_at: nowIso,
|
|
119
|
+
files,
|
|
120
|
+
};
|
|
121
|
+
writePushManifest(projectDir, manifest);
|
|
122
|
+
return manifest;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Cheap Local→Cloud inventory: local package vs last push manifest.
|
|
126
|
+
* Escalates with cloud workflow presence when ids are provided.
|
|
127
|
+
*/
|
|
128
|
+
export function buildLocalToCloudInventory(input) {
|
|
129
|
+
const discovered = discoverLocalPackageFiles(input.projectDir).filter(f => f.entity_kind !== 'module');
|
|
130
|
+
const manifest = readPushManifest(input.projectDir);
|
|
131
|
+
const changes = [];
|
|
132
|
+
const localByPath = new Map(discovered.map(f => [f.path, f]));
|
|
133
|
+
if (!manifest) {
|
|
134
|
+
for (const f of discovered) {
|
|
135
|
+
changes.push({
|
|
136
|
+
path: f.path,
|
|
137
|
+
entity_kind: f.entity_kind,
|
|
138
|
+
change: 'pending_push',
|
|
139
|
+
workflow_id: f.workflow_id,
|
|
140
|
+
content_sha256: f.content_sha256,
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
|
+
const manifestPaths = new Set(Object.keys(manifest.files));
|
|
146
|
+
for (const f of discovered) {
|
|
147
|
+
const prev = manifest.files[f.path];
|
|
148
|
+
if (prev == null) {
|
|
149
|
+
changes.push({
|
|
150
|
+
path: f.path,
|
|
151
|
+
entity_kind: f.entity_kind,
|
|
152
|
+
change: 'added',
|
|
153
|
+
workflow_id: f.workflow_id,
|
|
154
|
+
content_sha256: f.content_sha256,
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
else if (prev !== f.content_sha256) {
|
|
158
|
+
changes.push({
|
|
159
|
+
path: f.path,
|
|
160
|
+
entity_kind: f.entity_kind,
|
|
161
|
+
change: 'modified',
|
|
162
|
+
workflow_id: f.workflow_id,
|
|
163
|
+
content_sha256: f.content_sha256,
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
for (const path of manifestPaths) {
|
|
168
|
+
if (!localByPath.has(path)) {
|
|
169
|
+
changes.push({
|
|
170
|
+
path,
|
|
171
|
+
entity_kind: entityKindFromFullPath(path),
|
|
172
|
+
change: 'removed',
|
|
173
|
+
workflow_id: workflowIdFromPath(path),
|
|
174
|
+
content_sha256: null,
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
// Escalate: cloud workflows with no local package (won't be in next push).
|
|
180
|
+
if (input.cloud_workflow_ids && input.cloud_workflow_ids.length > 0) {
|
|
181
|
+
const localWf = new Set(discovered.map(f => f.workflow_id).filter((id) => !!id));
|
|
182
|
+
for (const id of input.cloud_workflow_ids) {
|
|
183
|
+
if (!localWf.has(id)) {
|
|
184
|
+
changes.push({
|
|
185
|
+
path: `workflows/${id}`,
|
|
186
|
+
entity_kind: 'workflow',
|
|
187
|
+
change: 'cloud_only',
|
|
188
|
+
workflow_id: id,
|
|
189
|
+
content_sha256: null,
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
changes.sort((a, b) => a.path.localeCompare(b.path));
|
|
195
|
+
const dirty = changes.length > 0;
|
|
196
|
+
let summary;
|
|
197
|
+
if (!manifest && discovered.length === 0) {
|
|
198
|
+
summary = 'No local package files';
|
|
199
|
+
}
|
|
200
|
+
else if (!manifest) {
|
|
201
|
+
summary = `${changes.length} file(s) would push (no local push manifest yet)`;
|
|
202
|
+
}
|
|
203
|
+
else if (dirty) {
|
|
204
|
+
summary = `${changes.length} unpublished Local→Cloud change(s) vs last push`;
|
|
205
|
+
}
|
|
206
|
+
else {
|
|
207
|
+
summary = 'Local package matches last push manifest';
|
|
208
|
+
}
|
|
209
|
+
if (input.cloud_list_unavailable) {
|
|
210
|
+
summary = `${summary}; cloud workflow list unavailable`;
|
|
211
|
+
}
|
|
212
|
+
return {
|
|
213
|
+
dirty: discovered.length === 0 && !manifest ? false : dirty,
|
|
214
|
+
summary,
|
|
215
|
+
changed_count: changes.length,
|
|
216
|
+
changes,
|
|
217
|
+
};
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Cloud→Deployed inventory. Cheap: reuse deploy-layer dirty + list pushable
|
|
221
|
+
* (or deployable module) paths when cloud is ahead / never deployed.
|
|
222
|
+
*/
|
|
223
|
+
export function buildCloudToDeployedInventory(input) {
|
|
224
|
+
const dirty = input.cloud_to_deployed_dirty;
|
|
225
|
+
if (dirty === null) {
|
|
226
|
+
return {
|
|
227
|
+
dirty: null,
|
|
228
|
+
summary: input.cloud_to_deployed_summary,
|
|
229
|
+
changed_count: null,
|
|
230
|
+
changes: [],
|
|
231
|
+
};
|
|
232
|
+
}
|
|
233
|
+
if (dirty === false) {
|
|
234
|
+
return {
|
|
235
|
+
dirty: false,
|
|
236
|
+
summary: input.cloud_to_deployed_summary ?? 'Cloud matches deployed runtime',
|
|
237
|
+
changed_count: 0,
|
|
238
|
+
changes: [],
|
|
239
|
+
};
|
|
240
|
+
}
|
|
241
|
+
const changes = [];
|
|
242
|
+
// If Local→Cloud is still dirty, cloud may not have latest — still list local
|
|
243
|
+
// package as pending_deploy candidates after push.
|
|
244
|
+
const packageFiles = discoverLocalPackageFiles(input.projectDir);
|
|
245
|
+
for (const f of packageFiles) {
|
|
246
|
+
changes.push({
|
|
247
|
+
path: f.path,
|
|
248
|
+
entity_kind: f.entity_kind,
|
|
249
|
+
change: 'pending_deploy',
|
|
250
|
+
workflow_id: f.workflow_id,
|
|
251
|
+
content_sha256: f.content_sha256,
|
|
252
|
+
});
|
|
253
|
+
}
|
|
254
|
+
const summary = input.cloud_to_deployed_summary ??
|
|
255
|
+
(input.deployed_state === 'never_deployed'
|
|
256
|
+
? 'Never deployed'
|
|
257
|
+
: 'Cloud ahead of last deploy (stale)');
|
|
258
|
+
return {
|
|
259
|
+
dirty: true,
|
|
260
|
+
summary: changes.length > 0
|
|
261
|
+
? `${summary} — ${changes.length} file(s) would ship on next deploy`
|
|
262
|
+
: summary,
|
|
263
|
+
changed_count: changes.length,
|
|
264
|
+
changes,
|
|
265
|
+
};
|
|
266
|
+
}
|
|
267
|
+
function entityKindFromFullPath(path) {
|
|
268
|
+
if (path.startsWith('schemas/'))
|
|
269
|
+
return 'schema';
|
|
270
|
+
const m = path.match(/^workflows\/[^/]+\/(.+)$/);
|
|
271
|
+
if (m)
|
|
272
|
+
return entityKindFromBundleRel(m[1]);
|
|
273
|
+
if (path.startsWith('workflows/') && /\.(ts|js)$/.test(path))
|
|
274
|
+
return 'module';
|
|
275
|
+
return 'workflow';
|
|
276
|
+
}
|
|
277
|
+
function workflowIdFromPath(path) {
|
|
278
|
+
const m = path.match(/^workflows\/([^/]+)/);
|
|
279
|
+
return m?.[1] ?? null;
|
|
280
|
+
}
|
|
281
|
+
/** Pretty inventory lines for CLI text output. */
|
|
282
|
+
export function formatUnpublishedInventoryLines(local_to_cloud, cloud_to_deployed) {
|
|
283
|
+
const lines = [];
|
|
284
|
+
lines.push('— Local→Cloud —');
|
|
285
|
+
lines.push(` ${local_to_cloud.dirty ? 'dirty' : 'clean'}: ${local_to_cloud.summary ?? ''}`);
|
|
286
|
+
for (const c of local_to_cloud.changes ?? []) {
|
|
287
|
+
lines.push(` [${c.change}] ${c.path} (${c.entity_kind})`);
|
|
288
|
+
}
|
|
289
|
+
lines.push('— Cloud→Deployed —');
|
|
290
|
+
lines.push(` ${cloud_to_deployed.dirty === null
|
|
291
|
+
? 'not computed'
|
|
292
|
+
: cloud_to_deployed.dirty
|
|
293
|
+
? 'dirty'
|
|
294
|
+
: 'clean'}: ${cloud_to_deployed.summary ?? ''}`);
|
|
295
|
+
for (const c of cloud_to_deployed.changes ?? []) {
|
|
296
|
+
lines.push(` [${c.change}] ${c.path} (${c.entity_kind})`);
|
|
297
|
+
}
|
|
298
|
+
return lines;
|
|
299
|
+
}
|
|
300
|
+
//# sourceMappingURL=project-workspace-inventory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-workspace-inventory.js","sourceRoot":"","sources":["../../src/client/project-workspace-inventory.ts"],"names":[],"mappings":"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"}
|