@loxtep/sdk 0.9.6 → 0.9.7
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 +34 -0
- package/README.md +4 -4
- package/dist/cli/commands/approvals-cmd.d.ts +39 -9
- package/dist/cli/commands/approvals-cmd.d.ts.map +1 -1
- package/dist/cli/commands/approvals-cmd.js +112 -48
- package/dist/cli/commands/approvals-cmd.js.map +1 -1
- package/dist/cli/commands/candidates-cmd.d.ts +24 -0
- package/dist/cli/commands/candidates-cmd.d.ts.map +1 -0
- package/dist/cli/commands/candidates-cmd.js +138 -0
- package/dist/cli/commands/candidates-cmd.js.map +1 -0
- package/dist/cli/commands/cdlc-cmd.d.ts +23 -0
- package/dist/cli/commands/cdlc-cmd.d.ts.map +1 -0
- package/dist/cli/commands/cdlc-cmd.js +110 -0
- package/dist/cli/commands/cdlc-cmd.js.map +1 -0
- package/dist/cli/commands/packs-cmd.d.ts +14 -0
- package/dist/cli/commands/packs-cmd.d.ts.map +1 -0
- package/dist/cli/commands/packs-cmd.js +86 -0
- package/dist/cli/commands/packs-cmd.js.map +1 -0
- package/dist/cli/help.d.ts.map +1 -1
- package/dist/cli/help.js +16 -2
- package/dist/cli/help.js.map +1 -1
- package/dist/cli/index.js +143 -10
- package/dist/cli/index.js.map +1 -1
- package/dist/client/agent-workspace-types.d.ts +74 -0
- package/dist/client/agent-workspace-types.d.ts.map +1 -0
- package/dist/client/agent-workspace-types.js +7 -0
- package/dist/client/agent-workspace-types.js.map +1 -0
- package/dist/client/agent-workspace.d.ts +45 -0
- package/dist/client/agent-workspace.d.ts.map +1 -0
- package/dist/client/agent-workspace.js +142 -0
- package/dist/client/agent-workspace.js.map +1 -0
- package/dist/client/approvals-types.d.ts +18 -0
- package/dist/client/approvals-types.d.ts.map +1 -1
- package/dist/client/approvals.d.ts +4 -4
- package/dist/client/approvals.d.ts.map +1 -1
- package/dist/client/approvals.js +31 -8
- package/dist/client/approvals.js.map +1 -1
- package/dist/client/cdlc-types.d.ts +147 -0
- package/dist/client/cdlc-types.d.ts.map +1 -0
- package/dist/client/cdlc-types.js +16 -0
- package/dist/client/cdlc-types.js.map +1 -0
- package/dist/client/cdlc.d.ts +27 -0
- package/dist/client/cdlc.d.ts.map +1 -0
- package/dist/client/cdlc.js +174 -0
- package/dist/client/cdlc.js.map +1 -0
- package/dist/client/context.d.ts +8 -1
- package/dist/client/context.d.ts.map +1 -1
- package/dist/client/context.js +4 -1
- package/dist/client/context.js.map +1 -1
- package/dist/client/index.d.ts +19 -3
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +2 -0
- package/dist/client/index.js.map +1 -1
- package/dist/client/loxtep-client.d.ts +2 -2
- package/dist/client/loxtep-client.d.ts.map +1 -1
- package/dist/client/loxtep-client.js +42 -5
- package/dist/client/loxtep-client.js.map +1 -1
- package/dist/client/meaning.d.ts +10 -1
- package/dist/client/meaning.d.ts.map +1 -1
- package/dist/client/meaning.js +4 -1
- package/dist/client/meaning.js.map +1 -1
- package/dist/client/mining-types.d.ts +81 -0
- package/dist/client/mining-types.d.ts.map +1 -0
- package/dist/client/mining-types.js +14 -0
- package/dist/client/mining-types.js.map +1 -0
- package/dist/client/mining.d.ts +17 -0
- package/dist/client/mining.d.ts.map +1 -0
- package/dist/client/mining.js +115 -0
- package/dist/client/mining.js.map +1 -0
- package/dist/client/ontology-types.d.ts +91 -0
- package/dist/client/ontology-types.d.ts.map +1 -0
- package/dist/client/ontology-types.js +6 -0
- package/dist/client/ontology-types.js.map +1 -0
- package/dist/client/ontology.d.ts +27 -0
- package/dist/client/ontology.d.ts.map +1 -0
- package/dist/client/ontology.js +146 -0
- package/dist/client/ontology.js.map +1 -0
- package/dist/client/packs-types.d.ts +48 -0
- package/dist/client/packs-types.d.ts.map +1 -0
- package/dist/client/packs-types.js +7 -0
- package/dist/client/packs-types.js.map +1 -0
- package/dist/client/packs.d.ts +27 -0
- package/dist/client/packs.d.ts.map +1 -0
- package/dist/client/packs.js +122 -0
- package/dist/client/packs.js.map +1 -0
- package/dist/client/procedures-types.d.ts +147 -6
- package/dist/client/procedures-types.d.ts.map +1 -1
- package/dist/client/procedures-types.js +3 -2
- package/dist/client/procedures-types.js.map +1 -1
- package/dist/client/procedures.d.ts +27 -13
- package/dist/client/procedures.d.ts.map +1 -1
- package/dist/client/procedures.js +180 -20
- package/dist/client/procedures.js.map +1 -1
- package/dist/client/process-intelligence-types.d.ts +94 -2
- package/dist/client/process-intelligence-types.d.ts.map +1 -1
- package/dist/client/process-intelligence-types.js +15 -3
- package/dist/client/process-intelligence-types.js.map +1 -1
- package/dist/client/process-intelligence.d.ts +18 -5
- package/dist/client/process-intelligence.d.ts.map +1 -1
- package/dist/client/process-intelligence.js +47 -5
- package/dist/client/process-intelligence.js.map +1 -1
- package/dist/client/review.d.ts +7 -1
- package/dist/client/review.d.ts.map +1 -1
- package/dist/client/review.js +3 -1
- package/dist/client/review.js.map +1 -1
- package/dist/client/semantic-layer-types.d.ts +65 -0
- package/dist/client/semantic-layer-types.d.ts.map +1 -0
- package/dist/client/semantic-layer-types.js +7 -0
- package/dist/client/semantic-layer-types.js.map +1 -0
- package/dist/client/semantic-layer.d.ts +25 -0
- package/dist/client/semantic-layer.d.ts.map +1 -0
- package/dist/client/semantic-layer.js +100 -0
- package/dist/client/semantic-layer.js.map +1 -0
- package/docs/sdk-mcp-mapping.md +157 -3
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -8,6 +8,40 @@ and this project adheres to
|
|
|
8
8
|
|
|
9
9
|
## [Unreleased]
|
|
10
10
|
|
|
11
|
+
## [0.9.7] - 2026-08-10
|
|
12
|
+
|
|
13
|
+
### Added
|
|
14
|
+
|
|
15
|
+
- **Phase A SDK/CLI surface parity** — typed REST under the existing 10 MCP
|
|
16
|
+
facades (no new hosted tools):
|
|
17
|
+
- **`client.meaning.ontology`** — ontology concepts CRUD + relationships
|
|
18
|
+
(`list/get/create/update/delete_concept`, `create/get_relationships`).
|
|
19
|
+
- **`client.meaning.packs`** + CLI `loxtep packs list|activate|status` —
|
|
20
|
+
vocabulary pack recommend / enable / activation-state.
|
|
21
|
+
- **`client.meaning.semantic`** — `search_semantic_layer`,
|
|
22
|
+
`get_semantic_artifact`, `get_semantic_completeness`.
|
|
23
|
+
- **`client.review.cdlc`** + CLI `loxtep cdlc transition|review-queue` —
|
|
24
|
+
lifecycle get/transition, propagate, lineage, deps, steward review queue.
|
|
25
|
+
- **`client.review.mining`** + CLI `loxtep candidates list|act` —
|
|
26
|
+
`run_mining_pass`, `list_candidates`, `act_on_candidate`.
|
|
27
|
+
- **`client.context.procedures`** — graph procedures CRUD +
|
|
28
|
+
`import_process_graph` / `export_process_graph` (list path now targets
|
|
29
|
+
authored graph procedures, not PI discovery).
|
|
30
|
+
- **`client.context.process_intelligence.decisionTraces`** — causal chain,
|
|
31
|
+
similar decisions, and create-with-links (LOX-1226 / LOX-1248).
|
|
32
|
+
- **`client.context.issues` / `.goals` / `.workstreams`** — thin agent-
|
|
33
|
+
orchestration **reads** (`list`/`get`); writes remain MCP-only.
|
|
34
|
+
- **Docs** — `docs/sdk-mcp-mapping.md` + `AGENTS.md` updated for the Phase A
|
|
35
|
+
surface (ontology/packs/semantic, CDLC/mining/candidates, procedures,
|
|
36
|
+
decisionTraces, agent-workspace reads).
|
|
37
|
+
|
|
38
|
+
### Changed
|
|
39
|
+
|
|
40
|
+
- **`client.context.procedures.list`** — now targets authored graph procedures
|
|
41
|
+
(`GET /graph/organizations/{org}/procedures`) instead of the
|
|
42
|
+
process-intelligence discovery list. Filters match MCP (`status`, `name`,
|
|
43
|
+
`domain_id`, …); pagination args from the old PI wrapper are removed.
|
|
44
|
+
|
|
11
45
|
## [0.9.6] - 2026-08-10
|
|
12
46
|
|
|
13
47
|
### Fixed
|
package/README.md
CHANGED
|
@@ -10,11 +10,11 @@ Client for the Loxtep API. `LoxtepClient` groups platform APIs under
|
|
|
10
10
|
| Workspace | `client.workspace` | `.projects.*`, `.instances.*` |
|
|
11
11
|
| Build & deploy | `client.build` | `.workflows.*`, `.triggers.*`, `.data_products.*`, `.targets.*` |
|
|
12
12
|
| Governance | `client.define` | `.schemas.*`, `.quality.*`, `.domains.*`, … |
|
|
13
|
-
| Semantics | `client.meaning` | `.thesaurus.*` |
|
|
13
|
+
| Semantics | `client.meaning` | `.thesaurus.*`, `.ontology.*`, `.packs.*`, `.semantic.*` |
|
|
14
14
|
| Review | `client.review` | `.approvals.*`, `.improvements.*` |
|
|
15
15
|
| Analytics | `client.query` | `.catalog.*`, `.discovery.*`, `.query()` |
|
|
16
16
|
| Observe | `client.observe` | `.stream_config()`, `.open_reader()` |
|
|
17
|
-
| Context | `client.context` | `.procedures.*`, `.
|
|
17
|
+
| Context | `client.context` | `.procedures.*`, `.issues.*`, `.goals.*`, `.workstreams.*`, … |
|
|
18
18
|
|
|
19
19
|
**Stream I/O** uses top-level helpers on the client:
|
|
20
20
|
`await client.get_writer('data-product-name')` and
|
|
@@ -228,9 +228,9 @@ Every method is `snake_case`. APIs live on **namespaced areas** of
|
|
|
228
228
|
### Authentication, semantics, review, and context
|
|
229
229
|
|
|
230
230
|
- **`client.session`** — `get_current_user`, `get_current_organization`, `logout`
|
|
231
|
-
- **`client.meaning`** — `.thesaurus.*`
|
|
231
|
+
- **`client.meaning`** — `.thesaurus.*`, `.ontology.*`, `.packs.*`, `.semantic.*`
|
|
232
232
|
- **`client.review`** — `.approvals.*`, `.improvements.*`
|
|
233
|
-
- **`client.context`** — `.procedures.*`, `.activity.*`, `.process_intelligence.*`
|
|
233
|
+
- **`client.context`** — `.procedures.*`, `.activity.*`, `.process_intelligence.*`, `.issues.*`, `.goals.*`, `.workstreams.*`
|
|
234
234
|
- **`client.metrics`** — `log`, `get_reporter` (stub until metrics wiring lands)
|
|
235
235
|
|
|
236
236
|
## Data product writer and reader
|
|
@@ -1,21 +1,51 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* CLI: loxtep approvals list|approve|reject
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
* `
|
|
4
|
+
* Mirrors MCP `loxtep_review.list_pending` / `resolve` plus REST body fields
|
|
5
|
+
* (`response`, `form_response`) for criteria_schema gates.
|
|
6
|
+
*
|
|
7
|
+
* loxtep approvals list [--status pending|approved|rejected|expired] [--page N] [--page-size N] [--organization-id <id>]
|
|
8
|
+
* loxtep approvals approve <id> [--response <val>] [--form-response <json>] [--organization-id <id>]
|
|
9
|
+
* loxtep approvals reject <id> [--response <val>] [--form-response <json>] [--organization-id <id>]
|
|
10
|
+
*
|
|
11
|
+
* `list` defaults to `pending` (MCP list_pending parity). Auth required; no project attach.
|
|
6
12
|
*/
|
|
7
13
|
import type { LoxtepClient } from '../../client/loxtep-client.js';
|
|
8
14
|
import type { CliResult } from '../project-context.js';
|
|
9
|
-
export
|
|
15
|
+
export interface ApprovalsListOptions {
|
|
10
16
|
status?: string;
|
|
11
|
-
organization_id?: string;
|
|
12
17
|
page?: number;
|
|
13
18
|
page_size?: number;
|
|
14
|
-
}): Promise<CliResult>;
|
|
15
|
-
export declare function runApprovalsApproveCommand(client: LoxtepClient, approval_request_id: string, options?: {
|
|
16
19
|
organization_id?: string;
|
|
17
|
-
}
|
|
18
|
-
export
|
|
20
|
+
}
|
|
21
|
+
export interface ApprovalsDecideOptions {
|
|
22
|
+
response?: string;
|
|
23
|
+
form_response_json?: string;
|
|
19
24
|
organization_id?: string;
|
|
20
|
-
}
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Execute `loxtep approvals list`.
|
|
28
|
+
* Defaults status to pending when --status is omitted (MCP list_pending parity).
|
|
29
|
+
*/
|
|
30
|
+
export declare function runApprovalsListCommand(client: LoxtepClient, options?: ApprovalsListOptions): Promise<CliResult>;
|
|
31
|
+
/**
|
|
32
|
+
* Execute `loxtep approvals approve <id>`.
|
|
33
|
+
*/
|
|
34
|
+
export declare function runApprovalsApproveCommand(client: LoxtepClient, id: string, options?: ApprovalsDecideOptions): Promise<CliResult>;
|
|
35
|
+
/**
|
|
36
|
+
* Execute `loxtep approvals reject <id>`.
|
|
37
|
+
*/
|
|
38
|
+
export declare function runApprovalsRejectCommand(client: LoxtepClient, id: string, options?: ApprovalsDecideOptions): Promise<CliResult>;
|
|
39
|
+
/** Parse CLI flag strings into list numeric options (used by index.ts). */
|
|
40
|
+
export declare function parseApprovalsListNumericFlags(flags: {
|
|
41
|
+
page?: string;
|
|
42
|
+
page_size?: string;
|
|
43
|
+
}): {
|
|
44
|
+
ok: true;
|
|
45
|
+
page?: number;
|
|
46
|
+
page_size?: number;
|
|
47
|
+
} | {
|
|
48
|
+
ok: false;
|
|
49
|
+
error: string;
|
|
50
|
+
};
|
|
21
51
|
//# sourceMappingURL=approvals-cmd.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"approvals-cmd.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/approvals-cmd.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"approvals-cmd.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/approvals-cmd.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAMlE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAIvD,MAAM,WAAW,oBAAoB;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAkCD;;;GAGG;AACH,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,YAAY,EACpB,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAAC,SAAS,CAAC,CAkDpB;AAED;;GAEG;AACH,wBAAsB,0BAA0B,CAC9C,MAAM,EAAE,YAAY,EACpB,EAAE,EAAE,MAAM,EACV,OAAO,CAAC,EAAE,sBAAsB,GAC/B,OAAO,CAAC,SAAS,CAAC,CAoBpB;AAED;;GAEG;AACH,wBAAsB,yBAAyB,CAC7C,MAAM,EAAE,YAAY,EACpB,EAAE,EAAE,MAAM,EACV,OAAO,CAAC,EAAE,sBAAsB,GAC/B,OAAO,CAAC,SAAS,CAAC,CAoBpB;AAED,2EAA2E;AAC3E,wBAAgB,8BAA8B,CAAC,KAAK,EAAE;IACpD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAMjF"}
|
|
@@ -1,50 +1,90 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* CLI: loxtep approvals list|approve|reject
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
* `
|
|
4
|
+
* Mirrors MCP `loxtep_review.list_pending` / `resolve` plus REST body fields
|
|
5
|
+
* (`response`, `form_response`) for criteria_schema gates.
|
|
6
|
+
*
|
|
7
|
+
* loxtep approvals list [--status pending|approved|rejected|expired] [--page N] [--page-size N] [--organization-id <id>]
|
|
8
|
+
* loxtep approvals approve <id> [--response <val>] [--form-response <json>] [--organization-id <id>]
|
|
9
|
+
* loxtep approvals reject <id> [--response <val>] [--form-response <json>] [--organization-id <id>]
|
|
10
|
+
*
|
|
11
|
+
* `list` defaults to `pending` (MCP list_pending parity). Auth required; no project attach.
|
|
6
12
|
*/
|
|
7
13
|
const VALID_STATUSES = ['pending', 'approved', 'rejected', 'expired'];
|
|
8
|
-
|
|
9
|
-
if (
|
|
10
|
-
return { ok: true,
|
|
14
|
+
function parsePositiveInt(raw, flag) {
|
|
15
|
+
if (raw == null || raw === '')
|
|
16
|
+
return { ok: true, value: undefined };
|
|
17
|
+
const n = Number(raw);
|
|
18
|
+
if (!Number.isInteger(n) || n < 1) {
|
|
19
|
+
return { ok: false, error: `Invalid ${flag}: '${raw}'. Must be a positive integer.` };
|
|
11
20
|
}
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
21
|
+
return { ok: true, value: n };
|
|
22
|
+
}
|
|
23
|
+
function parseDecideOptions(options) {
|
|
24
|
+
const body = {};
|
|
25
|
+
if (options?.organization_id !== undefined)
|
|
26
|
+
body.organization_id = options.organization_id;
|
|
27
|
+
if (options?.response !== undefined)
|
|
28
|
+
body.response = options.response;
|
|
29
|
+
if (options?.form_response_json !== undefined) {
|
|
30
|
+
try {
|
|
31
|
+
const parsed = JSON.parse(options.form_response_json);
|
|
32
|
+
if (parsed !== null && (typeof parsed !== 'object' || Array.isArray(parsed))) {
|
|
33
|
+
return {
|
|
34
|
+
ok: false,
|
|
35
|
+
error: 'Invalid --form-response: must be a JSON object (or null).',
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
body.form_response = parsed;
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
return { ok: false, error: 'Invalid --form-response: must be valid JSON.' };
|
|
16
42
|
}
|
|
17
43
|
}
|
|
18
|
-
|
|
19
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
20
|
-
return { ok: false, error: `Failed to resolve organization_id: ${message}` };
|
|
21
|
-
}
|
|
22
|
-
return {
|
|
23
|
-
ok: false,
|
|
24
|
-
error: 'organization_id is required. Set it in .loxtep/project.json or pass --organization-id <id>.',
|
|
25
|
-
};
|
|
44
|
+
return { ok: true, body };
|
|
26
45
|
}
|
|
46
|
+
/**
|
|
47
|
+
* Execute `loxtep approvals list`.
|
|
48
|
+
* Defaults status to pending when --status is omitted (MCP list_pending parity).
|
|
49
|
+
*/
|
|
27
50
|
export async function runApprovalsListCommand(client, options) {
|
|
28
|
-
if (options?.status && !VALID_STATUSES.includes(options.status)) {
|
|
29
|
-
return {
|
|
30
|
-
exitCode: 1,
|
|
31
|
-
stdout: [],
|
|
32
|
-
stderr: [
|
|
33
|
-
`Invalid status filter: '${options.status}'. Must be one of: ${VALID_STATUSES.join(', ')}.`,
|
|
34
|
-
],
|
|
35
|
-
};
|
|
36
|
-
}
|
|
37
|
-
const org = await resolveOrganizationId(client, options?.organization_id);
|
|
38
|
-
if (!org.ok) {
|
|
39
|
-
return { exitCode: 1, stdout: [], stderr: [org.error] };
|
|
40
|
-
}
|
|
41
51
|
try {
|
|
42
|
-
const
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
52
|
+
const filters = {};
|
|
53
|
+
const status = options?.status ?? 'pending';
|
|
54
|
+
if (!VALID_STATUSES.includes(status)) {
|
|
55
|
+
return {
|
|
56
|
+
exitCode: 1,
|
|
57
|
+
stdout: [],
|
|
58
|
+
stderr: [
|
|
59
|
+
`Invalid status filter: '${status}'. Must be one of: ${VALID_STATUSES.join(', ')}.`,
|
|
60
|
+
],
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
filters.status = status;
|
|
64
|
+
if (options?.organization_id) {
|
|
65
|
+
filters.organization_id = options.organization_id;
|
|
66
|
+
}
|
|
67
|
+
if (options?.page != null) {
|
|
68
|
+
if (!Number.isInteger(options.page) || options.page < 1) {
|
|
69
|
+
return {
|
|
70
|
+
exitCode: 1,
|
|
71
|
+
stdout: [],
|
|
72
|
+
stderr: [`Invalid --page: '${options.page}'. Must be a positive integer.`],
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
filters.page = options.page;
|
|
76
|
+
}
|
|
77
|
+
if (options?.page_size != null) {
|
|
78
|
+
if (!Number.isInteger(options.page_size) || options.page_size < 1) {
|
|
79
|
+
return {
|
|
80
|
+
exitCode: 1,
|
|
81
|
+
stdout: [],
|
|
82
|
+
stderr: [`Invalid --page-size: '${options.page_size}'. Must be a positive integer.`],
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
filters.page_size = options.page_size;
|
|
86
|
+
}
|
|
87
|
+
const result = await client.review.approvals.list(filters);
|
|
48
88
|
return {
|
|
49
89
|
exitCode: 0,
|
|
50
90
|
stdout: [JSON.stringify(result, null, 2)],
|
|
@@ -56,13 +96,16 @@ export async function runApprovalsListCommand(client, options) {
|
|
|
56
96
|
return { exitCode: 1, stdout: [], stderr: [`Failed to list approvals: ${message}`] };
|
|
57
97
|
}
|
|
58
98
|
}
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
99
|
+
/**
|
|
100
|
+
* Execute `loxtep approvals approve <id>`.
|
|
101
|
+
*/
|
|
102
|
+
export async function runApprovalsApproveCommand(client, id, options) {
|
|
103
|
+
const parsed = parseDecideOptions(options);
|
|
104
|
+
if (!parsed.ok) {
|
|
105
|
+
return { exitCode: 1, stdout: [], stderr: [parsed.error] };
|
|
63
106
|
}
|
|
64
107
|
try {
|
|
65
|
-
const result = await client.review.approvals.approve(
|
|
108
|
+
const result = await client.review.approvals.approve(id, parsed.body);
|
|
66
109
|
return {
|
|
67
110
|
exitCode: 0,
|
|
68
111
|
stdout: [JSON.stringify(result, null, 2)],
|
|
@@ -71,16 +114,23 @@ export async function runApprovalsApproveCommand(client, approval_request_id, op
|
|
|
71
114
|
}
|
|
72
115
|
catch (err) {
|
|
73
116
|
const message = err instanceof Error ? err.message : String(err);
|
|
74
|
-
return {
|
|
117
|
+
return {
|
|
118
|
+
exitCode: 1,
|
|
119
|
+
stdout: [],
|
|
120
|
+
stderr: [`Error: Failed to approve approval '${id}': ${message}`],
|
|
121
|
+
};
|
|
75
122
|
}
|
|
76
123
|
}
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
124
|
+
/**
|
|
125
|
+
* Execute `loxtep approvals reject <id>`.
|
|
126
|
+
*/
|
|
127
|
+
export async function runApprovalsRejectCommand(client, id, options) {
|
|
128
|
+
const parsed = parseDecideOptions(options);
|
|
129
|
+
if (!parsed.ok) {
|
|
130
|
+
return { exitCode: 1, stdout: [], stderr: [parsed.error] };
|
|
81
131
|
}
|
|
82
132
|
try {
|
|
83
|
-
const result = await client.review.approvals.reject(
|
|
133
|
+
const result = await client.review.approvals.reject(id, parsed.body);
|
|
84
134
|
return {
|
|
85
135
|
exitCode: 0,
|
|
86
136
|
stdout: [JSON.stringify(result, null, 2)],
|
|
@@ -89,7 +139,21 @@ export async function runApprovalsRejectCommand(client, approval_request_id, opt
|
|
|
89
139
|
}
|
|
90
140
|
catch (err) {
|
|
91
141
|
const message = err instanceof Error ? err.message : String(err);
|
|
92
|
-
return {
|
|
142
|
+
return {
|
|
143
|
+
exitCode: 1,
|
|
144
|
+
stdout: [],
|
|
145
|
+
stderr: [`Error: Failed to reject approval '${id}': ${message}`],
|
|
146
|
+
};
|
|
93
147
|
}
|
|
94
148
|
}
|
|
149
|
+
/** Parse CLI flag strings into list numeric options (used by index.ts). */
|
|
150
|
+
export function parseApprovalsListNumericFlags(flags) {
|
|
151
|
+
const page = parsePositiveInt(flags.page, '--page');
|
|
152
|
+
if (!page.ok)
|
|
153
|
+
return page;
|
|
154
|
+
const pageSize = parsePositiveInt(flags.page_size, '--page-size');
|
|
155
|
+
if (!pageSize.ok)
|
|
156
|
+
return pageSize;
|
|
157
|
+
return { ok: true, page: page.value, page_size: pageSize.value };
|
|
158
|
+
}
|
|
95
159
|
//# sourceMappingURL=approvals-cmd.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"approvals-cmd.js","sourceRoot":"","sources":["../../../src/cli/commands/approvals-cmd.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"approvals-cmd.js","sourceRoot":"","sources":["../../../src/cli/commands/approvals-cmd.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI: loxtep candidates list|act
|
|
3
|
+
*
|
|
4
|
+
* Context-mining candidates on `client.review.mining`:
|
|
5
|
+
* - list_candidates
|
|
6
|
+
* - act_on_candidate (approve → CDLC in_review; reject → discard)
|
|
7
|
+
*
|
|
8
|
+
* Does not require an attached project.
|
|
9
|
+
*/
|
|
10
|
+
import type { LoxtepClient } from '../../client/loxtep-client.js';
|
|
11
|
+
import type { CliResult } from '../project-context.js';
|
|
12
|
+
export declare function runCandidatesListCommand(client: LoxtepClient, options?: {
|
|
13
|
+
candidate_type?: string;
|
|
14
|
+
status?: string;
|
|
15
|
+
mining_run_id?: string;
|
|
16
|
+
organization_id?: string;
|
|
17
|
+
}): Promise<CliResult>;
|
|
18
|
+
export declare function runCandidatesActCommand(client: LoxtepClient, candidate_id: string, options: {
|
|
19
|
+
action?: string;
|
|
20
|
+
organization_id?: string;
|
|
21
|
+
rationale?: string;
|
|
22
|
+
actor?: string;
|
|
23
|
+
}): Promise<CliResult>;
|
|
24
|
+
//# sourceMappingURL=candidates-cmd.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"candidates-cmd.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/candidates-cmd.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAMlE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAkCvD,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE,YAAY,EACpB,OAAO,CAAC,EAAE;IACR,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,GACA,OAAO,CAAC,SAAS,CAAC,CA8CpB;AAED,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,YAAY,EACpB,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE;IACP,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GACA,OAAO,CAAC,SAAS,CAAC,CAyDpB"}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI: loxtep candidates list|act
|
|
3
|
+
*
|
|
4
|
+
* Context-mining candidates on `client.review.mining`:
|
|
5
|
+
* - list_candidates
|
|
6
|
+
* - act_on_candidate (approve → CDLC in_review; reject → discard)
|
|
7
|
+
*
|
|
8
|
+
* Does not require an attached project.
|
|
9
|
+
*/
|
|
10
|
+
const VALID_STATUSES = ['candidate', 'approved', 'rejected'];
|
|
11
|
+
const VALID_ACTIONS = ['approve', 'reject'];
|
|
12
|
+
const KNOWN_TYPES = [
|
|
13
|
+
'semantic_conflict',
|
|
14
|
+
'procedure',
|
|
15
|
+
'promotion',
|
|
16
|
+
'entity_fact',
|
|
17
|
+
];
|
|
18
|
+
async function resolveOrganizationId(client, override) {
|
|
19
|
+
if (override) {
|
|
20
|
+
return { ok: true, organization_id: override };
|
|
21
|
+
}
|
|
22
|
+
try {
|
|
23
|
+
const user = await client.session.get_current_user();
|
|
24
|
+
if (user.organization_id) {
|
|
25
|
+
return { ok: true, organization_id: user.organization_id };
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
catch (err) {
|
|
29
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
30
|
+
return { ok: false, error: `Failed to resolve organization_id: ${message}` };
|
|
31
|
+
}
|
|
32
|
+
return {
|
|
33
|
+
ok: false,
|
|
34
|
+
error: 'organization_id is required. Set it in .loxtep/project.json or pass --organization-id <id>.',
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
export async function runCandidatesListCommand(client, options) {
|
|
38
|
+
if (options?.status && !VALID_STATUSES.includes(options.status)) {
|
|
39
|
+
return {
|
|
40
|
+
exitCode: 1,
|
|
41
|
+
stdout: [],
|
|
42
|
+
stderr: [
|
|
43
|
+
`Invalid status filter: '${options.status}'. Must be one of: ${VALID_STATUSES.join(', ')}.`,
|
|
44
|
+
],
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
if (options?.candidate_type &&
|
|
48
|
+
!KNOWN_TYPES.includes(options.candidate_type)) {
|
|
49
|
+
return {
|
|
50
|
+
exitCode: 1,
|
|
51
|
+
stdout: [],
|
|
52
|
+
stderr: [
|
|
53
|
+
`Invalid --type: '${options.candidate_type}'. Known types: ${KNOWN_TYPES.join(', ')}.`,
|
|
54
|
+
],
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
const org = await resolveOrganizationId(client, options?.organization_id);
|
|
58
|
+
if (!org.ok) {
|
|
59
|
+
return { exitCode: 1, stdout: [], stderr: [org.error] };
|
|
60
|
+
}
|
|
61
|
+
try {
|
|
62
|
+
const result = await client.review.mining.list_candidates({
|
|
63
|
+
organization_id: org.organization_id,
|
|
64
|
+
...(options?.candidate_type
|
|
65
|
+
? { candidate_type: options.candidate_type }
|
|
66
|
+
: {}),
|
|
67
|
+
...(options?.status ? { status: options.status } : {}),
|
|
68
|
+
...(options?.mining_run_id ? { mining_run_id: options.mining_run_id } : {}),
|
|
69
|
+
});
|
|
70
|
+
return {
|
|
71
|
+
exitCode: 0,
|
|
72
|
+
stdout: [JSON.stringify(result, null, 2)],
|
|
73
|
+
stderr: [],
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
catch (err) {
|
|
77
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
78
|
+
return { exitCode: 1, stdout: [], stderr: [`Failed to list candidates: ${message}`] };
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
export async function runCandidatesActCommand(client, candidate_id, options) {
|
|
82
|
+
if (!candidate_id) {
|
|
83
|
+
return {
|
|
84
|
+
exitCode: 1,
|
|
85
|
+
stdout: [],
|
|
86
|
+
stderr: ['candidate_id is required.'],
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
if (!options.action) {
|
|
90
|
+
return {
|
|
91
|
+
exitCode: 1,
|
|
92
|
+
stdout: [],
|
|
93
|
+
stderr: [
|
|
94
|
+
`--action is required. Must be one of: ${VALID_ACTIONS.join(', ')}. ` +
|
|
95
|
+
'approve routes the candidate into CDLC in_review; reject discards it.',
|
|
96
|
+
],
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
if (!VALID_ACTIONS.includes(options.action)) {
|
|
100
|
+
return {
|
|
101
|
+
exitCode: 1,
|
|
102
|
+
stdout: [],
|
|
103
|
+
stderr: [
|
|
104
|
+
`Invalid --action: '${options.action}'. Must be one of: ${VALID_ACTIONS.join(', ')}. ` +
|
|
105
|
+
'approve routes the candidate into CDLC in_review; reject discards it.',
|
|
106
|
+
],
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
const org = await resolveOrganizationId(client, options.organization_id);
|
|
110
|
+
if (!org.ok) {
|
|
111
|
+
return { exitCode: 1, stdout: [], stderr: [org.error] };
|
|
112
|
+
}
|
|
113
|
+
try {
|
|
114
|
+
const result = await client.review.mining.act_on_candidate({
|
|
115
|
+
candidate_id,
|
|
116
|
+
action: options.action,
|
|
117
|
+
organization_id: org.organization_id,
|
|
118
|
+
...(options.rationale != null ? { rationale: options.rationale } : {}),
|
|
119
|
+
...(options.actor != null ? { actor: options.actor } : {}),
|
|
120
|
+
});
|
|
121
|
+
return {
|
|
122
|
+
exitCode: 0,
|
|
123
|
+
stdout: [JSON.stringify(result, null, 2)],
|
|
124
|
+
stderr: [],
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
catch (err) {
|
|
128
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
129
|
+
return {
|
|
130
|
+
exitCode: 1,
|
|
131
|
+
stdout: [],
|
|
132
|
+
stderr: [
|
|
133
|
+
`Failed to act on candidate '${candidate_id}' (${options.action}): ${message}`,
|
|
134
|
+
],
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=candidates-cmd.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"candidates-cmd.js","sourceRoot":"","sources":["../../../src/cli/commands/candidates-cmd.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAUH,MAAM,cAAc,GAA4B,CAAC,WAAW,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;AACtF,MAAM,aAAa,GAA4B,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;AACrE,MAAM,WAAW,GAA0B;IACzC,mBAAmB;IACnB,WAAW;IACX,WAAW;IACX,aAAa;CACd,CAAC;AAEF,KAAK,UAAU,qBAAqB,CAClC,MAAoB,EACpB,QAAiB;IAEjB,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,CAAC;IACjD,CAAC;IACD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC;QACrD,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACzB,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC;QAC7D,CAAC;IACH,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,sCAAsC,OAAO,EAAE,EAAE,CAAC;IAC/E,CAAC;IACD,OAAO;QACL,EAAE,EAAE,KAAK;QACT,KAAK,EACH,6FAA6F;KAChG,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,MAAoB,EACpB,OAKC;IAED,IAAI,OAAO,EAAE,MAAM,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,MAA+B,CAAC,EAAE,CAAC;QACzF,OAAO;YACL,QAAQ,EAAE,CAAC;YACX,MAAM,EAAE,EAAE;YACV,MAAM,EAAE;gBACN,2BAA2B,OAAO,CAAC,MAAM,sBAAsB,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;aAC5F;SACF,CAAC;IACJ,CAAC;IACD,IACE,OAAO,EAAE,cAAc;QACvB,CAAC,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,cAAqC,CAAC,EACpE,CAAC;QACD,OAAO;YACL,QAAQ,EAAE,CAAC;YACX,MAAM,EAAE,EAAE;YACV,MAAM,EAAE;gBACN,oBAAoB,OAAO,CAAC,cAAc,mBAAmB,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;aACvF;SACF,CAAC;IACJ,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,qBAAqB,CAAC,MAAM,EAAE,OAAO,EAAE,eAAe,CAAC,CAAC;IAC1E,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;IAC1D,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC;YACxD,eAAe,EAAE,GAAG,CAAC,eAAe;YACpC,GAAG,CAAC,OAAO,EAAE,cAAc;gBACzB,CAAC,CAAC,EAAE,cAAc,EAAE,OAAO,CAAC,cAAqC,EAAE;gBACnE,CAAC,CAAC,EAAE,CAAC;YACP,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAA+B,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/E,GAAG,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC5E,CAAC,CAAC;QACH,OAAO;YACL,QAAQ,EAAE,CAAC;YACX,MAAM,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YACzC,MAAM,EAAE,EAAE;SACX,CAAC;IACJ,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,8BAA8B,OAAO,EAAE,CAAC,EAAE,CAAC;IACxF,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,MAAoB,EACpB,YAAoB,EACpB,OAKC;IAED,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,OAAO;YACL,QAAQ,EAAE,CAAC;YACX,MAAM,EAAE,EAAE;YACV,MAAM,EAAE,CAAC,2BAA2B,CAAC;SACtC,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QACpB,OAAO;YACL,QAAQ,EAAE,CAAC;YACX,MAAM,EAAE,EAAE;YACV,MAAM,EAAE;gBACN,yCAAyC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;oBACnE,uEAAuE;aAC1E;SACF,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,MAA+B,CAAC,EAAE,CAAC;QACrE,OAAO;YACL,QAAQ,EAAE,CAAC;YACX,MAAM,EAAE,EAAE;YACV,MAAM,EAAE;gBACN,sBAAsB,OAAO,CAAC,MAAM,sBAAsB,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;oBACpF,uEAAuE;aAC1E;SACF,CAAC;IACJ,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,qBAAqB,CAAC,MAAM,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;IACzE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;IAC1D,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC;YACzD,YAAY;YACZ,MAAM,EAAE,OAAO,CAAC,MAA+B;YAC/C,eAAe,EAAE,GAAG,CAAC,eAAe;YACpC,GAAG,CAAC,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACtE,GAAG,CAAC,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC3D,CAAC,CAAC;QACH,OAAO;YACL,QAAQ,EAAE,CAAC;YACX,MAAM,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YACzC,MAAM,EAAE,EAAE;SACX,CAAC;IACJ,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,OAAO;YACL,QAAQ,EAAE,CAAC;YACX,MAAM,EAAE,EAAE;YACV,MAAM,EAAE;gBACN,+BAA+B,YAAY,MAAM,OAAO,CAAC,MAAM,MAAM,OAAO,EAAE;aAC/E;SACF,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI: loxtep cdlc transition|review-queue
|
|
3
|
+
*
|
|
4
|
+
* Steward-critical CDLC paths on `client.review.cdlc`:
|
|
5
|
+
* - transition_lifecycle
|
|
6
|
+
* - list_review_queue
|
|
7
|
+
*
|
|
8
|
+
* Does not require an attached project.
|
|
9
|
+
*/
|
|
10
|
+
import type { LoxtepClient } from '../../client/loxtep-client.js';
|
|
11
|
+
import type { CliResult } from '../project-context.js';
|
|
12
|
+
export declare function runCdlcTransitionCommand(client: LoxtepClient, artifact_ref: string, options: {
|
|
13
|
+
from?: string;
|
|
14
|
+
to?: string;
|
|
15
|
+
organization_id?: string;
|
|
16
|
+
actor?: string;
|
|
17
|
+
owner?: string;
|
|
18
|
+
}): Promise<CliResult>;
|
|
19
|
+
export declare function runCdlcReviewQueueCommand(client: LoxtepClient, options?: {
|
|
20
|
+
organization_id?: string;
|
|
21
|
+
domain_id?: string;
|
|
22
|
+
}): Promise<CliResult>;
|
|
23
|
+
//# sourceMappingURL=cdlc-cmd.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cdlc-cmd.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/cdlc-cmd.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAElE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAqCvD,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE,YAAY,EACpB,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE;IACP,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GACA,OAAO,CAAC,SAAS,CAAC,CAkDpB;AAED,wBAAsB,yBAAyB,CAC7C,MAAM,EAAE,YAAY,EACpB,OAAO,CAAC,EAAE;IAAE,eAAe,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GACzD,OAAO,CAAC,SAAS,CAAC,CAoBpB"}
|