@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
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Three-layer project / workspace status payload.
|
|
3
|
+
*
|
|
4
|
+
* Stable snake_case contract for:
|
|
5
|
+
* - CLI: `loxtep status`, enriched `loxtep projects list|get`
|
|
6
|
+
* - MCP: `get_project_workspace_status` (planned)
|
|
7
|
+
*
|
|
8
|
+
* Layers:
|
|
9
|
+
* - **local** — CWD / known-locals + `.loxtep/project.json`
|
|
10
|
+
* - **cloud** — org project + Studio/S3 workspace
|
|
11
|
+
* - **deployed** — instance bindings after `deploy`
|
|
12
|
+
*
|
|
13
|
+
* Unpublished = deltas Local→Cloud and Cloud→Deployed (not a vague draft flag).
|
|
14
|
+
*
|
|
15
|
+
* Cost guidance: see {@link PROJECT_WORKSPACE_STATUS_FIELD_COST} and
|
|
16
|
+
* `docs/project-workspace-status.md`. Prefer `population_depth: "summary"` when
|
|
17
|
+
* enriching list rows so list stays snappy.
|
|
18
|
+
*/
|
|
19
|
+
import { z } from 'zod';
|
|
20
|
+
// ---------------------------------------------------------------------------
|
|
21
|
+
// Enums / scalar vocab (stable for CLI tables + MCP)
|
|
22
|
+
// ---------------------------------------------------------------------------
|
|
23
|
+
/** How deeply the producer filled the payload. */
|
|
24
|
+
export const StatusPopulationDepthSchema = z.enum([
|
|
25
|
+
/** List-safe fields only (cheap disk + cheap cloud row columns). */
|
|
26
|
+
'summary',
|
|
27
|
+
/** Default for `loxtep status` / MCP get — layers + cheap/moderate deploys. */
|
|
28
|
+
'status',
|
|
29
|
+
/** Entity/file-level unpublished inventory (expensive). */
|
|
30
|
+
'unpublished',
|
|
31
|
+
]);
|
|
32
|
+
/** Relative cost to populate a field or nested group. */
|
|
33
|
+
export const PopulationCostSchema = z.enum(['cheap', 'moderate', 'expensive']);
|
|
34
|
+
/** GitHub Project_Repository binding for status surfaces. */
|
|
35
|
+
export const GithubLinkStateSchema = z.enum(['linked', 'unbound']);
|
|
36
|
+
/** Whether `.loxtep/project.json` has instance_id + api_url (loxtep attach). */
|
|
37
|
+
export const AttachStateSchema = z.enum(['unattached', 'attached']);
|
|
38
|
+
/**
|
|
39
|
+
* Deployed-layer badge.
|
|
40
|
+
* - `never_deployed` — no successful deployment known
|
|
41
|
+
* - `deployed` — cloud revision matches (or considered current) deployed runtime
|
|
42
|
+
* - `stale` — cloud ahead of deployed (Cloud→Deployed dirty)
|
|
43
|
+
* - `unknown` — not computed / API unavailable (do not invent success)
|
|
44
|
+
*/
|
|
45
|
+
export const DeployedLayerStateSchema = z.enum([
|
|
46
|
+
'never_deployed',
|
|
47
|
+
'deployed',
|
|
48
|
+
'stale',
|
|
49
|
+
'unknown',
|
|
50
|
+
]);
|
|
51
|
+
/**
|
|
52
|
+
* Suggested next CLI/MCP action for humans and agents.
|
|
53
|
+
* Distinct from runtime `observe status`.
|
|
54
|
+
*/
|
|
55
|
+
export const NextActionHintSchema = z.enum([
|
|
56
|
+
'init',
|
|
57
|
+
'link',
|
|
58
|
+
'attach',
|
|
59
|
+
'clone',
|
|
60
|
+
'push',
|
|
61
|
+
'deploy',
|
|
62
|
+
'none',
|
|
63
|
+
]);
|
|
64
|
+
/** Presence of a layer when the producer probed it. */
|
|
65
|
+
export const LayerPresenceSchema = z.enum(['present', 'absent', 'unknown']);
|
|
66
|
+
// ---------------------------------------------------------------------------
|
|
67
|
+
// Nested layer objects
|
|
68
|
+
// ---------------------------------------------------------------------------
|
|
69
|
+
export const LocalWorkspaceLayerSchema = z.object({
|
|
70
|
+
/** Whether a local workspace was resolved (cwd walk or known-locals). */
|
|
71
|
+
presence: LayerPresenceSchema,
|
|
72
|
+
/** Absolute path to the project root when known. */
|
|
73
|
+
path: z.string().nullable(),
|
|
74
|
+
/** Absolute path to `.loxtep/project.json` when known. */
|
|
75
|
+
project_file: z.string().nullable(),
|
|
76
|
+
/** True when path came from `~/.loxtep/workspaces.json`. */
|
|
77
|
+
known_local: z.boolean(),
|
|
78
|
+
/** attach state derived from local config (instance_id + api_url). */
|
|
79
|
+
attach_state: AttachStateSchema,
|
|
80
|
+
instance_id: z.string().nullable(),
|
|
81
|
+
api_url: z.string().nullable(),
|
|
82
|
+
/** Local project_id from `.loxtep/project.json` when present. */
|
|
83
|
+
project_id: z.string().nullable(),
|
|
84
|
+
});
|
|
85
|
+
export const GithubStatusSchema = z.object({
|
|
86
|
+
state: GithubLinkStateSchema,
|
|
87
|
+
url: z.string().nullable(),
|
|
88
|
+
name: z.string().nullable(),
|
|
89
|
+
branch: z.string().nullable(),
|
|
90
|
+
last_sync_at: z.string().nullable(),
|
|
91
|
+
});
|
|
92
|
+
export const CloudProjectLayerSchema = z.object({
|
|
93
|
+
presence: LayerPresenceSchema,
|
|
94
|
+
project_id: z.string().nullable(),
|
|
95
|
+
organization_id: z.string().nullable(),
|
|
96
|
+
name: z.string().nullable(),
|
|
97
|
+
/** Cloud project lifecycle status (`active` | `inactive` | `archived`). */
|
|
98
|
+
status: z.string().nullable(),
|
|
99
|
+
github: GithubStatusSchema,
|
|
100
|
+
/**
|
|
101
|
+
* Best-effort workspace / package revision marker when available
|
|
102
|
+
* (e.g. last push or S3 workspace etag/sha). Null when not populated.
|
|
103
|
+
*/
|
|
104
|
+
workspace_revision: z.string().nullable(),
|
|
105
|
+
workspace_updated_at: z.string().nullable(),
|
|
106
|
+
});
|
|
107
|
+
export const DeployedRuntimeLayerSchema = z.object({
|
|
108
|
+
presence: LayerPresenceSchema,
|
|
109
|
+
state: DeployedLayerStateSchema,
|
|
110
|
+
instance_id: z.string().nullable(),
|
|
111
|
+
deployment_id: z.string().nullable(),
|
|
112
|
+
/** Platform deployment status string when known (pending, deployed, failed, …). */
|
|
113
|
+
deployment_status: z.string().nullable(),
|
|
114
|
+
/** ISO-8601 UTC of last relevant deploy event when known. */
|
|
115
|
+
last_deployed_at: z.string().nullable(),
|
|
116
|
+
/** Seconds since `last_deployed_at` when both clock and timestamp known. */
|
|
117
|
+
age_seconds: z.number().int().nonnegative().nullable(),
|
|
118
|
+
});
|
|
119
|
+
/** Entity kinds in the push/deploy package inventory. */
|
|
120
|
+
export const UnpublishedEntityKindSchema = z.enum([
|
|
121
|
+
'workflow',
|
|
122
|
+
'connection',
|
|
123
|
+
'data_product',
|
|
124
|
+
'transformation',
|
|
125
|
+
'validation',
|
|
126
|
+
'schema',
|
|
127
|
+
'module',
|
|
128
|
+
]);
|
|
129
|
+
/** How a package path differs across a layer boundary. */
|
|
130
|
+
export const UnpublishedChangeKindSchema = z.enum([
|
|
131
|
+
'added',
|
|
132
|
+
'modified',
|
|
133
|
+
'removed',
|
|
134
|
+
'pending_push',
|
|
135
|
+
'pending_deploy',
|
|
136
|
+
'cloud_only',
|
|
137
|
+
]);
|
|
138
|
+
/** One actionable file/entity in an unpublished inventory. */
|
|
139
|
+
export const UnpublishedChangeItemSchema = z.object({
|
|
140
|
+
/** Repo-relative path (e.g. `workflows/wf_1/connections/src.json`). */
|
|
141
|
+
path: z.string(),
|
|
142
|
+
entity_kind: UnpublishedEntityKindSchema,
|
|
143
|
+
change: UnpublishedChangeKindSchema,
|
|
144
|
+
workflow_id: z.string().nullable(),
|
|
145
|
+
content_sha256: z.string().nullable().optional(),
|
|
146
|
+
});
|
|
147
|
+
/**
|
|
148
|
+
* One unpublished delta axis.
|
|
149
|
+
* `dirty: null` means "not computed at this population_depth" — not "clean".
|
|
150
|
+
*/
|
|
151
|
+
export const UnpublishedDeltaSchema = z.object({
|
|
152
|
+
dirty: z.boolean().nullable(),
|
|
153
|
+
/** Short human/agent summary suitable for CLI one-liners. */
|
|
154
|
+
summary: z.string().nullable(),
|
|
155
|
+
/** Count of changed entities/files when inventory was computed. */
|
|
156
|
+
changed_count: z.number().int().nonnegative().nullable(),
|
|
157
|
+
/**
|
|
158
|
+
* Entity/file inventory (population_depth `unpublished` only).
|
|
159
|
+
* Empty at summary/status depths.
|
|
160
|
+
*/
|
|
161
|
+
changes: z.array(UnpublishedChangeItemSchema).default([]),
|
|
162
|
+
});
|
|
163
|
+
export const UnpublishedStatusSchema = z.object({
|
|
164
|
+
local_to_cloud: UnpublishedDeltaSchema,
|
|
165
|
+
cloud_to_deployed: UnpublishedDeltaSchema,
|
|
166
|
+
});
|
|
167
|
+
// ---------------------------------------------------------------------------
|
|
168
|
+
// Full status payload + list enrichment
|
|
169
|
+
// ---------------------------------------------------------------------------
|
|
170
|
+
/**
|
|
171
|
+
* Full three-layer status. MCP `get_project_workspace_status` and CLI `status`
|
|
172
|
+
* should return this shape (optionally wrapped in `{ success, data }`).
|
|
173
|
+
*/
|
|
174
|
+
export const ProjectWorkspaceStatusSchema = z.object({
|
|
175
|
+
/** Schema version for forward-compatible clients. */
|
|
176
|
+
schema_version: z.literal(1),
|
|
177
|
+
population_depth: StatusPopulationDepthSchema,
|
|
178
|
+
/** Canonical project_id when any layer knows it. */
|
|
179
|
+
project_id: z.string().nullable(),
|
|
180
|
+
display_name: z.string().nullable(),
|
|
181
|
+
local: LocalWorkspaceLayerSchema,
|
|
182
|
+
cloud: CloudProjectLayerSchema,
|
|
183
|
+
deployed: DeployedRuntimeLayerSchema,
|
|
184
|
+
unpublished: UnpublishedStatusSchema,
|
|
185
|
+
next_action: NextActionHintSchema,
|
|
186
|
+
/** Optional free-form notes (warnings, "deploy API unavailable", etc.). */
|
|
187
|
+
notes: z.array(z.string()).default([]),
|
|
188
|
+
});
|
|
189
|
+
/**
|
|
190
|
+
* Lean enrichment for `projects list` / MCP `list_projects` rows.
|
|
191
|
+
* All fields beyond identity are optional so producers can omit expensive ones.
|
|
192
|
+
*/
|
|
193
|
+
export const ProjectListStatusEnrichmentSchema = z.object({
|
|
194
|
+
project_id: z.string(),
|
|
195
|
+
name: z.string().optional(),
|
|
196
|
+
local_present: z.boolean().optional(),
|
|
197
|
+
local_path: z.string().nullable().optional(),
|
|
198
|
+
attach_state: AttachStateSchema.optional(),
|
|
199
|
+
github_state: GithubLinkStateSchema.optional(),
|
|
200
|
+
deployed_state: DeployedLayerStateSchema.optional(),
|
|
201
|
+
/** Local→Cloud dirty; omit or null when not computed. */
|
|
202
|
+
local_to_cloud_dirty: z.boolean().nullable().optional(),
|
|
203
|
+
/** Cloud→Deployed dirty; omit or null when not computed. */
|
|
204
|
+
cloud_to_deployed_dirty: z.boolean().nullable().optional(),
|
|
205
|
+
});
|
|
206
|
+
/** MCP / REST envelope helpers (match SDK successResponse patterns). */
|
|
207
|
+
export const ProjectWorkspaceStatusResponseSchema = z.object({
|
|
208
|
+
success: z.literal(true),
|
|
209
|
+
data: ProjectWorkspaceStatusSchema,
|
|
210
|
+
});
|
|
211
|
+
// ---------------------------------------------------------------------------
|
|
212
|
+
// Population cost map (implementer guide; not emitted on the wire)
|
|
213
|
+
// ---------------------------------------------------------------------------
|
|
214
|
+
/**
|
|
215
|
+
* Cost of filling fields so list enrichment can stay snappy.
|
|
216
|
+
*
|
|
217
|
+
* - **cheap** — OK per list row (disk + columns already on project list row)
|
|
218
|
+
* - **moderate** — OK for status/get (one extra call or small join)
|
|
219
|
+
* - **expensive** — only for `--unpublished` / depth `unpublished`
|
|
220
|
+
*/
|
|
221
|
+
export const PROJECT_WORKSPACE_STATUS_FIELD_COST = {
|
|
222
|
+
'local.presence': 'cheap',
|
|
223
|
+
'local.path': 'cheap',
|
|
224
|
+
'local.project_file': 'cheap',
|
|
225
|
+
'local.known_local': 'cheap',
|
|
226
|
+
'local.attach_state': 'cheap',
|
|
227
|
+
'local.instance_id': 'cheap',
|
|
228
|
+
'local.api_url': 'cheap',
|
|
229
|
+
'local.project_id': 'cheap',
|
|
230
|
+
'cloud.presence': 'cheap',
|
|
231
|
+
'cloud.project_id': 'cheap',
|
|
232
|
+
'cloud.organization_id': 'cheap',
|
|
233
|
+
'cloud.name': 'cheap',
|
|
234
|
+
'cloud.status': 'cheap',
|
|
235
|
+
'cloud.github': 'cheap',
|
|
236
|
+
'cloud.workspace_revision': 'moderate',
|
|
237
|
+
'cloud.workspace_updated_at': 'moderate',
|
|
238
|
+
'deployed.presence': 'moderate',
|
|
239
|
+
'deployed.state': 'moderate',
|
|
240
|
+
'deployed.instance_id': 'moderate',
|
|
241
|
+
'deployed.deployment_id': 'moderate',
|
|
242
|
+
'deployed.deployment_status': 'moderate',
|
|
243
|
+
'deployed.last_deployed_at': 'moderate',
|
|
244
|
+
'deployed.age_seconds': 'cheap', // derived from last_deployed_at once known
|
|
245
|
+
'unpublished.local_to_cloud.dirty': 'moderate',
|
|
246
|
+
'unpublished.local_to_cloud.summary': 'moderate',
|
|
247
|
+
'unpublished.local_to_cloud.changed_count': 'expensive',
|
|
248
|
+
'unpublished.local_to_cloud.changes': 'expensive',
|
|
249
|
+
'unpublished.cloud_to_deployed.dirty': 'moderate',
|
|
250
|
+
'unpublished.cloud_to_deployed.summary': 'moderate',
|
|
251
|
+
'unpublished.cloud_to_deployed.changed_count': 'expensive',
|
|
252
|
+
'unpublished.cloud_to_deployed.changes': 'expensive',
|
|
253
|
+
next_action: 'cheap',
|
|
254
|
+
notes: 'cheap',
|
|
255
|
+
};
|
|
256
|
+
/**
|
|
257
|
+
* Depth → allowed cost ceiling. Producers SHOULD omit or set null for fields
|
|
258
|
+
* above the ceiling rather than blocking on expensive work.
|
|
259
|
+
*/
|
|
260
|
+
export const STATUS_POPULATION_DEPTH_COST_CEILING = {
|
|
261
|
+
summary: 'cheap',
|
|
262
|
+
status: 'moderate',
|
|
263
|
+
unpublished: 'expensive',
|
|
264
|
+
};
|
|
265
|
+
//# sourceMappingURL=project-workspace-status-types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-workspace-status-types.js","sourceRoot":"","sources":["../../src/client/project-workspace-status-types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Project workspace status producer + rendering.
|
|
3
|
+
*
|
|
4
|
+
* Builds {@link ProjectWorkspaceStatus} from cwd-local config, cloud project row,
|
|
5
|
+
* and optional deployments list. List enrichment stays at `summary` cost ceiling.
|
|
6
|
+
* Local→Cloud dirty prefers push-manifest compare (same discovery as `loxtep push`).
|
|
7
|
+
*/
|
|
8
|
+
import type { Project } from './projects-types.js';
|
|
9
|
+
import type { Deployment } from './deployments-types.js';
|
|
10
|
+
import type { AttachState, DeployedLayerState, GithubLinkState, NextActionHint, ProjectListStatusEnrichment, ProjectWorkspaceStatus, StatusPopulationDepth, UnpublishedDelta } from './project-workspace-status-types.js';
|
|
11
|
+
export interface LocalProjectSnapshot {
|
|
12
|
+
project_id: string;
|
|
13
|
+
path: string;
|
|
14
|
+
project_file: string;
|
|
15
|
+
instance_id: string | null;
|
|
16
|
+
api_url: string | null;
|
|
17
|
+
}
|
|
18
|
+
export interface BuildProjectWorkspaceStatusInput {
|
|
19
|
+
population_depth?: StatusPopulationDepth;
|
|
20
|
+
/** Absolute or relative cwd used for local resolution. */
|
|
21
|
+
cwd?: string;
|
|
22
|
+
local?: LocalProjectSnapshot | null;
|
|
23
|
+
cloud?: Project | null;
|
|
24
|
+
/** When provided, used for deployed layer (status depth). Empty array = never deployed. */
|
|
25
|
+
deployments?: Deployment[] | null;
|
|
26
|
+
/** True when deployments probe failed (use unknown + note). */
|
|
27
|
+
deployments_unavailable?: boolean;
|
|
28
|
+
/** Override clock for age_seconds (tests). */
|
|
29
|
+
now_ms?: number;
|
|
30
|
+
/**
|
|
31
|
+
* Test override for Local→Cloud dirty.
|
|
32
|
+
* When unset, uses push-manifest inventory against `local.path`.
|
|
33
|
+
*/
|
|
34
|
+
local_git_dirty?: boolean | null;
|
|
35
|
+
/** Precomputed Local→Cloud inventory (status --unpublished / projects changes). */
|
|
36
|
+
local_to_cloud_inventory?: UnpublishedDelta | null;
|
|
37
|
+
/** Cloud workflow ids for inventory escalate (optional). */
|
|
38
|
+
cloud_workflow_ids?: string[] | null;
|
|
39
|
+
cloud_list_unavailable?: boolean;
|
|
40
|
+
notes?: string[];
|
|
41
|
+
/** True when path came from `~/.loxtep/workspaces.json`. */
|
|
42
|
+
known_local?: boolean;
|
|
43
|
+
}
|
|
44
|
+
export declare function githubStateFromProject(project: Project | null | undefined): GithubLinkState;
|
|
45
|
+
export declare function deriveNextAction(input: {
|
|
46
|
+
local_present: boolean;
|
|
47
|
+
attach_state: AttachState;
|
|
48
|
+
github_state: GithubLinkState;
|
|
49
|
+
deployed_state: DeployedLayerState;
|
|
50
|
+
local_to_cloud_dirty: boolean | null;
|
|
51
|
+
cloud_to_deployed_dirty: boolean | null;
|
|
52
|
+
}): NextActionHint;
|
|
53
|
+
/**
|
|
54
|
+
* Pure builder for {@link ProjectWorkspaceStatus}. Callers supply already-loaded
|
|
55
|
+
* local/cloud/deployments so this stays unit-testable without IO.
|
|
56
|
+
*/
|
|
57
|
+
export declare function buildProjectWorkspaceStatus(input: BuildProjectWorkspaceStatusInput): ProjectWorkspaceStatus;
|
|
58
|
+
/** Lean list/get row enrichment from a full (or summary) status payload. */
|
|
59
|
+
export declare function toProjectListStatusEnrichment(status: ProjectWorkspaceStatus): ProjectListStatusEnrichment;
|
|
60
|
+
/**
|
|
61
|
+
* Cheap list-row enrichment without a per-project deploy call.
|
|
62
|
+
* Marks local when `cwd_project_id` matches or when present in known-locals;
|
|
63
|
+
* github from project columns. `deployed_state` only when provided in
|
|
64
|
+
* `deployed_by_project`.
|
|
65
|
+
*/
|
|
66
|
+
export declare function enrichProjectListSummary(project: Project, opts?: {
|
|
67
|
+
cwd_project_id?: string | null;
|
|
68
|
+
cwd_path?: string | null;
|
|
69
|
+
cwd_attach_state?: AttachState;
|
|
70
|
+
deployed_by_project?: Map<string, DeployedLayerState>;
|
|
71
|
+
/** project_id → absolute path from `~/.loxtep/workspaces.json`. */
|
|
72
|
+
known_local_paths?: Map<string, string>;
|
|
73
|
+
}): ProjectListStatusEnrichment;
|
|
74
|
+
/** One-screen human rendering for `loxtep status` (not observe status). */
|
|
75
|
+
export declare function formatProjectWorkspaceStatusLines(status: ProjectWorkspaceStatus): string[];
|
|
76
|
+
//# sourceMappingURL=project-workspace-status.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-workspace-status.d.ts","sourceRoot":"","sources":["../../src/client/project-workspace-status.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAMzD,OAAO,KAAK,EACV,WAAW,EACX,kBAAkB,EAClB,eAAe,EACf,cAAc,EACd,2BAA2B,EAC3B,sBAAsB,EACtB,qBAAqB,EAErB,gBAAgB,EACjB,MAAM,qCAAqC,CAAC;AAG7C,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAED,MAAM,WAAW,gCAAgC;IAC/C,gBAAgB,CAAC,EAAE,qBAAqB,CAAC;IACzC,0DAA0D;IAC1D,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,oBAAoB,GAAG,IAAI,CAAC;IACpC,KAAK,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IACvB,2FAA2F;IAC3F,WAAW,CAAC,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC;IAClC,+DAA+D;IAC/D,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,8CAA8C;IAC9C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,eAAe,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IACjC,mFAAmF;IACnF,wBAAwB,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACnD,4DAA4D;IAC5D,kBAAkB,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACrC,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,4DAA4D;IAC5D,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAOD,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,GAAG,SAAS,GAAG,eAAe,CAG3F;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE;IACtC,aAAa,EAAE,OAAO,CAAC;IACvB,YAAY,EAAE,WAAW,CAAC;IAC1B,YAAY,EAAE,eAAe,CAAC;IAC9B,cAAc,EAAE,kBAAkB,CAAC;IACnC,oBAAoB,EAAE,OAAO,GAAG,IAAI,CAAC;IACrC,uBAAuB,EAAE,OAAO,GAAG,IAAI,CAAC;CACzC,GAAG,cAAc,CAWjB;AAsJD;;;GAGG;AACH,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,gCAAgC,GACtC,sBAAsB,CAyIxB;AAED,4EAA4E;AAC5E,wBAAgB,6BAA6B,CAC3C,MAAM,EAAE,sBAAsB,GAC7B,2BAA2B,CAY7B;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,OAAO,EAChB,IAAI,GAAE;IACJ,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,gBAAgB,CAAC,EAAE,WAAW,CAAC;IAC/B,mBAAmB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IACtD,mEAAmE;IACnE,iBAAiB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACpC,GACL,2BAA2B,CAiB7B;AAED,2EAA2E;AAC3E,wBAAgB,iCAAiC,CAAC,MAAM,EAAE,sBAAsB,GAAG,MAAM,EAAE,CAsD1F"}
|