@cleocode/contracts 2026.9.22 → 2026.9.24
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/dist/__tests__/evidence-atom-schema.test.js +3 -2
- package/dist/__tests__/evidence-atom-schema.test.js.map +1 -1
- package/dist/acceptance-gate-schema.d.ts.map +1 -1
- package/dist/acceptance-gate-schema.js +4 -1
- package/dist/acceptance-gate-schema.js.map +1 -1
- package/dist/branch-lock.d.ts +9 -0
- package/dist/branch-lock.d.ts.map +1 -1
- package/dist/branch-lock.js +25 -3
- package/dist/branch-lock.js.map +1 -1
- package/dist/cloud/api.d.ts +1 -1
- package/dist/data-accessor.d.ts +209 -16
- package/dist/data-accessor.d.ts.map +1 -1
- package/dist/data-accessor.js.map +1 -1
- package/dist/decide-sites.d.ts +157 -0
- package/dist/decide-sites.d.ts.map +1 -0
- package/dist/decide-sites.js +28 -0
- package/dist/decide-sites.js.map +1 -0
- package/dist/decide.d.ts +214 -0
- package/dist/decide.d.ts.map +1 -1
- package/dist/decide.js +54 -0
- package/dist/decide.js.map +1 -1
- package/dist/dispatch/operations-registry.d.ts.map +1 -1
- package/dist/dispatch/operations-registry.js +174 -8
- package/dist/dispatch/operations-registry.js.map +1 -1
- package/dist/doctor.d.ts +9 -0
- package/dist/doctor.d.ts.map +1 -1
- package/dist/evidence-atom-schema.d.ts.map +1 -1
- package/dist/evidence-atom-schema.js +3 -0
- package/dist/evidence-atom-schema.js.map +1 -1
- package/dist/exit-codes.d.ts +7 -0
- package/dist/exit-codes.d.ts.map +1 -1
- package/dist/exit-codes.js +7 -0
- package/dist/exit-codes.js.map +1 -1
- package/dist/index.d.ts +12 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/knowledge-health.d.ts +21 -0
- package/dist/knowledge-health.d.ts.map +1 -1
- package/dist/nexus-account.d.ts +160 -0
- package/dist/nexus-account.d.ts.map +1 -0
- package/dist/nexus-account.js +68 -0
- package/dist/nexus-account.js.map +1 -0
- package/dist/operations/admin.d.ts +5 -0
- package/dist/operations/admin.d.ts.map +1 -1
- package/dist/operations/focus.d.ts +7 -3
- package/dist/operations/focus.d.ts.map +1 -1
- package/dist/operations/nexus-scope-map.d.ts +8 -0
- package/dist/operations/nexus-scope-map.d.ts.map +1 -1
- package/dist/operations/nexus-scope-map.js +8 -0
- package/dist/operations/nexus-scope-map.js.map +1 -1
- package/dist/operations/nexus.d.ts +265 -0
- package/dist/operations/nexus.d.ts.map +1 -1
- package/dist/operations/nexus.js +9 -1
- package/dist/operations/nexus.js.map +1 -1
- package/dist/operations/orchestrate.d.ts +6 -1
- package/dist/operations/orchestrate.d.ts.map +1 -1
- package/dist/operations/output-contracts-data.d.ts.map +1 -1
- package/dist/operations/output-contracts-data.js +115 -1
- package/dist/operations/output-contracts-data.js.map +1 -1
- package/dist/operations/tasks.d.ts +97 -9
- package/dist/operations/tasks.d.ts.map +1 -1
- package/dist/operations/tasks.js.map +1 -1
- package/dist/project-lifecycle.d.ts +6 -2
- package/dist/project-lifecycle.d.ts.map +1 -1
- package/dist/session.d.ts +19 -1
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +9 -2
- package/dist/session.js.map +1 -1
- package/dist/task.d.ts +49 -1
- package/dist/task.d.ts.map +1 -1
- package/dist/tools/index.d.ts +1 -1
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/score-task-priority.d.ts +28 -3
- package/dist/tools/score-task-priority.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/__tests__/__snapshots__/operations-registry.test.ts.snap +1 -1
- package/src/__tests__/evidence-atom-schema.test.ts +3 -2
- package/src/acceptance-gate-schema.ts +4 -1
- package/src/branch-lock.ts +38 -3
- package/src/data-accessor.ts +215 -16
- package/src/decide-sites.ts +179 -0
- package/src/decide.ts +235 -0
- package/src/dispatch/operations-registry.ts +183 -8
- package/src/doctor.ts +9 -0
- package/src/evidence-atom-schema.ts +3 -0
- package/src/exit-codes.ts +7 -0
- package/src/index.ts +72 -0
- package/src/knowledge-health.ts +22 -0
- package/src/nexus-account.ts +181 -0
- package/src/operations/admin.ts +5 -0
- package/src/operations/focus.ts +7 -3
- package/src/operations/nexus-scope-map.ts +9 -0
- package/src/operations/nexus.ts +281 -0
- package/src/operations/orchestrate.ts +6 -2
- package/src/operations/output-contracts-data.ts +125 -1
- package/src/operations/tasks.ts +104 -12
- package/src/project-lifecycle.ts +6 -2
- package/src/session.ts +20 -2
- package/src/task.ts +51 -1
- package/src/tools/index.ts +1 -0
- package/src/tools/score-task-priority.ts +29 -3
package/src/index.ts
CHANGED
|
@@ -362,6 +362,12 @@ export type {
|
|
|
362
362
|
QueryTasksResult,
|
|
363
363
|
TaskAuditLogQuery,
|
|
364
364
|
TaskAuditLogRow,
|
|
365
|
+
TaskClaimedDetails,
|
|
366
|
+
TaskClaimGuard,
|
|
367
|
+
TaskClaimMode,
|
|
368
|
+
TaskClaimRequest,
|
|
369
|
+
TaskConflictChange,
|
|
370
|
+
TaskConflictDetails,
|
|
365
371
|
TaskFieldUpdates,
|
|
366
372
|
TaskPopulation,
|
|
367
373
|
TaskQueryFilters,
|
|
@@ -808,6 +814,7 @@ export type {
|
|
|
808
814
|
KnowledgeEvidenceRef,
|
|
809
815
|
KnowledgeFileEvidence,
|
|
810
816
|
KnowledgeHealth,
|
|
817
|
+
KnowledgeHealthSummary,
|
|
811
818
|
KnowledgeRepairAction,
|
|
812
819
|
KnowledgeRepairClass,
|
|
813
820
|
KnowledgeRepairFinding,
|
|
@@ -1492,6 +1499,12 @@ export type {
|
|
|
1492
1499
|
NexusDiscoverHit,
|
|
1493
1500
|
NexusDiscoverParams,
|
|
1494
1501
|
NexusDiscoverResult,
|
|
1502
|
+
NexusFleetDevice,
|
|
1503
|
+
NexusFleetDeviceSummary,
|
|
1504
|
+
NexusFleetFlag,
|
|
1505
|
+
NexusFleetGitSummary,
|
|
1506
|
+
NexusFleetLocation,
|
|
1507
|
+
NexusFleetProject,
|
|
1495
1508
|
NexusFlowEntry,
|
|
1496
1509
|
NexusFlowsParams,
|
|
1497
1510
|
NexusFlowsResult,
|
|
@@ -1541,6 +1554,8 @@ export type {
|
|
|
1541
1554
|
NexusProjectsCleanRemoval,
|
|
1542
1555
|
NexusProjectsCleanResult,
|
|
1543
1556
|
NexusProjectsCleanUnreadable,
|
|
1557
|
+
NexusProjectsFleetParams,
|
|
1558
|
+
NexusProjectsFleetResult,
|
|
1544
1559
|
NexusProjectsListParams,
|
|
1545
1560
|
NexusProjectsListResult,
|
|
1546
1561
|
NexusProjectsRegisterParams,
|
|
@@ -1621,6 +1636,7 @@ export type {
|
|
|
1621
1636
|
NexusWhyResult,
|
|
1622
1637
|
NexusWikiParams,
|
|
1623
1638
|
} from './operations/nexus.js';
|
|
1639
|
+
export { NEXUS_FLEET_SCHEMA_VERSION } from './operations/nexus.js';
|
|
1624
1640
|
// === Nexus Scope Contracts (T9145 + T9146) ===
|
|
1625
1641
|
export type {
|
|
1626
1642
|
MetaWithNexusScope,
|
|
@@ -2500,6 +2516,7 @@ export type {
|
|
|
2500
2516
|
SeverityAttestation,
|
|
2501
2517
|
SignedSeverityAttestation,
|
|
2502
2518
|
Task,
|
|
2519
|
+
TaskClaim,
|
|
2503
2520
|
TaskCreate,
|
|
2504
2521
|
// T944 new axes (T9072: renamed TaskRole → TaskKind)
|
|
2505
2522
|
TaskKind,
|
|
@@ -2703,6 +2720,7 @@ export type {
|
|
|
2703
2720
|
ScoreFactor,
|
|
2704
2721
|
ScoreTaskContext,
|
|
2705
2722
|
ScoreTaskInput,
|
|
2723
|
+
ScoreTaskKey,
|
|
2706
2724
|
ScoreTaskResult,
|
|
2707
2725
|
} from './tools/score-task-priority.js';
|
|
2708
2726
|
// === Transport (low-level wire protocol) ===
|
|
@@ -2889,12 +2907,22 @@ export {
|
|
|
2889
2907
|
export type {
|
|
2890
2908
|
ChoiceDecisionAnswer,
|
|
2891
2909
|
ChoiceDecisionQuestion,
|
|
2910
|
+
DecideProfileConnection,
|
|
2911
|
+
DecideProfileListResult,
|
|
2912
|
+
DecideProfileProbe,
|
|
2913
|
+
DecideProfileSummary,
|
|
2914
|
+
DecideProfileUrlSource,
|
|
2915
|
+
DecideProviderState,
|
|
2892
2916
|
DecisionAnswer,
|
|
2917
|
+
DecisionBatchItem,
|
|
2893
2918
|
DecisionInstructions,
|
|
2894
2919
|
DecisionJsonValue,
|
|
2895
2920
|
DecisionOutcome,
|
|
2896
2921
|
DecisionOutcomeSource,
|
|
2922
|
+
DecisionProviderCapabilities,
|
|
2897
2923
|
DecisionProviderConfig,
|
|
2924
|
+
DecisionProviderKind,
|
|
2925
|
+
DecisionProviderUsage,
|
|
2898
2926
|
DecisionQuestion,
|
|
2899
2927
|
DecisionQuestionType,
|
|
2900
2928
|
DecisionRequest,
|
|
@@ -2907,7 +2935,11 @@ export type {
|
|
|
2907
2935
|
export {
|
|
2908
2936
|
choiceDecisionAnswerSchema,
|
|
2909
2937
|
choiceDecisionQuestionSchema,
|
|
2938
|
+
DECIDE_DEFAULT_PROFILE_NAME,
|
|
2939
|
+
DECIDE_PROFILE_DEFAULT_URL,
|
|
2940
|
+
DECIDE_PROFILE_NAME_PATTERN,
|
|
2910
2941
|
DECISION_OUTCOME_SOURCES,
|
|
2942
|
+
DECISION_PROVIDER_KINDS,
|
|
2911
2943
|
DECISION_QUESTION_TYPES,
|
|
2912
2944
|
DECISION_REQUEST_LIMITS,
|
|
2913
2945
|
decisionAnswerSchema,
|
|
@@ -2915,14 +2947,54 @@ export {
|
|
|
2915
2947
|
decisionOutcomeSchema,
|
|
2916
2948
|
decisionOutcomeSourceSchema,
|
|
2917
2949
|
decisionProviderConfigSchema,
|
|
2950
|
+
decisionProviderKindSchema,
|
|
2918
2951
|
decisionQuestionSchema,
|
|
2919
2952
|
decisionQuestionTypeSchema,
|
|
2920
2953
|
decisionRequestSchema,
|
|
2921
2954
|
decisionStateSchema,
|
|
2955
|
+
JEV_DEFAULT_BASE_URL,
|
|
2956
|
+
JEV_MINIMUM_CAPABILITIES,
|
|
2957
|
+
LAYAHOST_BASE_URL,
|
|
2958
|
+
LAYAHOST_DEFAULT_MODEL,
|
|
2922
2959
|
noulDecisionAnswerSchema,
|
|
2923
2960
|
noulDecisionQuestionSchema,
|
|
2924
2961
|
scoreDecisionAnswerSchema,
|
|
2925
2962
|
scoreDecisionQuestionSchema,
|
|
2926
2963
|
} from './decide.js';
|
|
2964
|
+
// T12662: decision-site registry (the decision ladder as code).
|
|
2965
|
+
export type {
|
|
2966
|
+
DecisionRung,
|
|
2967
|
+
DecisionSiteActivity,
|
|
2968
|
+
DecisionSiteDefinition,
|
|
2969
|
+
DecisionSiteGoLive,
|
|
2970
|
+
DecisionSiteModeValue,
|
|
2971
|
+
DecisionSiteOwnerEscalation,
|
|
2972
|
+
DecisionSiteQuestionType,
|
|
2973
|
+
DecisionSiteSummary,
|
|
2974
|
+
DecisionSitesListResult,
|
|
2975
|
+
DecisionSiteTextClass,
|
|
2976
|
+
} from './decide-sites.js';
|
|
2977
|
+
export { DECISION_RUNGS, DECISION_SITE_MODES } from './decide-sites.js';
|
|
2927
2978
|
|
|
2979
|
+
export type {
|
|
2980
|
+
NexusAccountErrorCode,
|
|
2981
|
+
NexusAccountMe,
|
|
2982
|
+
NexusAccountOrganization,
|
|
2983
|
+
NexusAccountStatus,
|
|
2984
|
+
NexusAccountUser,
|
|
2985
|
+
NexusLoginResult,
|
|
2986
|
+
NexusLogoutResult,
|
|
2987
|
+
NexusProjectLink,
|
|
2988
|
+
NexusProjectLinkResult,
|
|
2989
|
+
NexusSessionState,
|
|
2990
|
+
} from './nexus-account.js';
|
|
2991
|
+
export {
|
|
2992
|
+
NEXUS_ACCOUNT_ERROR_CODES,
|
|
2993
|
+
NEXUS_CLI_CLIENT_ID,
|
|
2994
|
+
NEXUS_DEFAULT_API_URL,
|
|
2995
|
+
NEXUS_LOGIN_TARGET,
|
|
2996
|
+
nexusAccountMeSchema,
|
|
2997
|
+
nexusAccountOrganizationSchema,
|
|
2998
|
+
nexusAccountUserSchema,
|
|
2999
|
+
} from './nexus-account.js';
|
|
2928
3000
|
export { isStorableTaskId, isTaskId, TASK_ID_REGEX, type TaskId } from './task-id.js';
|
package/src/knowledge-health.ts
CHANGED
|
@@ -258,6 +258,28 @@ export interface KnowledgeHealth {
|
|
|
258
258
|
findings: KnowledgeRepairFinding[];
|
|
259
259
|
}
|
|
260
260
|
|
|
261
|
+
/**
|
|
262
|
+
* Orientation summary of {@link KnowledgeHealth} for envelopes that already
|
|
263
|
+
* carry the coverage object at their top level (`briefing.show`'s
|
|
264
|
+
* `knowledgeCoverage`, `focus.show`'s `coverage`).
|
|
265
|
+
*
|
|
266
|
+
* The coverage object is emitted once per envelope; this summary points at it
|
|
267
|
+
* through {@link KnowledgeHealthSummary.coverageRef} instead of repeating it
|
|
268
|
+
* (T12522). Every other field keeps the {@link KnowledgeHealth} meaning. The
|
|
269
|
+
* full assessment, coverage included, remains available from
|
|
270
|
+
* `cleo doctor knowledge`.
|
|
271
|
+
*
|
|
272
|
+
* @task T12522
|
|
273
|
+
*/
|
|
274
|
+
export interface KnowledgeHealthSummary extends Omit<KnowledgeHealth, 'coverage'> {
|
|
275
|
+
/**
|
|
276
|
+
* JSON Pointer, relative to the envelope's `data`, of the coverage object
|
|
277
|
+
* this summary describes — e.g. `/knowledgeCoverage` (briefing) or
|
|
278
|
+
* `/coverage` (focus). Prefix `/data` for `cleo ... --field`.
|
|
279
|
+
*/
|
|
280
|
+
coverageRef: string;
|
|
281
|
+
}
|
|
282
|
+
|
|
261
283
|
/** Responsibility for resolving a knowledge defect. */
|
|
262
284
|
export type KnowledgeRepairClass = 'automatic' | 'agent-resolvable' | 'owner-decision';
|
|
263
285
|
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cleo Nexus account contracts: the CLI's signed-in session with the Cleo
|
|
3
|
+
* Nexus API (device-code login, logout, status, project link).
|
|
4
|
+
*
|
|
5
|
+
* The API is a better-auth app: the device-code grant (RFC 8628) issues a
|
|
6
|
+
* session token that the bearer plugin accepts on every `/v1` route. These
|
|
7
|
+
* types describe what CLEO emits and persists about that session. None of
|
|
8
|
+
* them carries the token: results and status rows are secret-free by
|
|
9
|
+
* construction, so they are safe in LAFS envelopes and logs.
|
|
10
|
+
*
|
|
11
|
+
* Not part of `./cloud`: that directory mirrors the server's
|
|
12
|
+
* `@cleo-nexus/shared` contract one-to-one. The `/v1/account/me` subset
|
|
13
|
+
* below is read-only and client-side.
|
|
14
|
+
*
|
|
15
|
+
* This file is types + zod schemas + const data only (arch gate 10).
|
|
16
|
+
*
|
|
17
|
+
* @task T12712
|
|
18
|
+
* @epic T12322
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
import { z } from 'zod';
|
|
22
|
+
|
|
23
|
+
/** Production Cleo Nexus API origin. */
|
|
24
|
+
export const NEXUS_DEFAULT_API_URL = 'https://api.cleocode.dev';
|
|
25
|
+
|
|
26
|
+
/** The OAuth client id the Nexus API accepts for the device-code grant. */
|
|
27
|
+
export const NEXUS_CLI_CLIENT_ID = 'cleo-cli';
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* The reserved `cleo login` target for a Cleo Nexus account. It is checked
|
|
31
|
+
* before the LLM provider registry, so no provider can shadow it.
|
|
32
|
+
*/
|
|
33
|
+
export const NEXUS_LOGIN_TARGET = 'nexus';
|
|
34
|
+
|
|
35
|
+
/** Stable error codes of the Nexus account flows. */
|
|
36
|
+
export const NEXUS_ACCOUNT_ERROR_CODES = [
|
|
37
|
+
'E_NEXUS_INVALID_API_URL',
|
|
38
|
+
'E_NEXUS_NOT_SIGNED_IN',
|
|
39
|
+
'E_NEXUS_SESSION_EXPIRED',
|
|
40
|
+
'E_NEXUS_DEVICE_CODE_START_FAILED',
|
|
41
|
+
'E_NEXUS_UNTRUSTED_VERIFICATION_URI',
|
|
42
|
+
'E_NEXUS_DEVICE_CODE_EXPIRED',
|
|
43
|
+
'E_NEXUS_ACCESS_DENIED',
|
|
44
|
+
'E_NEXUS_DEVICE_CODE_FAILED',
|
|
45
|
+
'E_NEXUS_REVOKE_FAILED',
|
|
46
|
+
'E_NEXUS_REQUEST_FAILED',
|
|
47
|
+
'E_NEXUS_NOT_A_PROJECT',
|
|
48
|
+
'E_NEXUS_INVALID_LABEL',
|
|
49
|
+
] as const;
|
|
50
|
+
|
|
51
|
+
/** One of {@link NEXUS_ACCOUNT_ERROR_CODES}. */
|
|
52
|
+
export type NexusAccountErrorCode = (typeof NEXUS_ACCOUNT_ERROR_CODES)[number];
|
|
53
|
+
|
|
54
|
+
/** The signed-in user, as `/v1/account/me` reports it. */
|
|
55
|
+
export const nexusAccountUserSchema = z.object({
|
|
56
|
+
id: z.string(),
|
|
57
|
+
email: z.string(),
|
|
58
|
+
name: z.string().nullable().optional(),
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
/** A user's organization membership, as `/v1/account/me` reports it. */
|
|
62
|
+
export const nexusAccountOrganizationSchema = z.object({
|
|
63
|
+
id: z.string(),
|
|
64
|
+
name: z.string(),
|
|
65
|
+
slug: z.string().nullable().optional(),
|
|
66
|
+
role: z.string().optional(),
|
|
67
|
+
/** `true` for the personal organization created at sign-up. */
|
|
68
|
+
personal: z.boolean().optional(),
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* The subset of `GET /v1/account/me` the CLI reads. Unknown fields are
|
|
73
|
+
* ignored (zod strips them), so the server can grow the payload freely.
|
|
74
|
+
*/
|
|
75
|
+
export const nexusAccountMeSchema = z.object({
|
|
76
|
+
user: nexusAccountUserSchema,
|
|
77
|
+
organizations: z.array(nexusAccountOrganizationSchema).default([]),
|
|
78
|
+
});
|
|
79
|
+
|
|
80
|
+
/** Parsed `GET /v1/account/me` subset. */
|
|
81
|
+
export type NexusAccountMe = z.infer<typeof nexusAccountMeSchema>;
|
|
82
|
+
|
|
83
|
+
/** A signed-in user (no secrets). */
|
|
84
|
+
export type NexusAccountUser = z.infer<typeof nexusAccountUserSchema>;
|
|
85
|
+
|
|
86
|
+
/** An organization reference (no secrets). */
|
|
87
|
+
export type NexusAccountOrganization = z.infer<typeof nexusAccountOrganizationSchema>;
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Session state for one API origin.
|
|
91
|
+
*
|
|
92
|
+
* - `signed-in` — a token is stored and, when checked live, the API accepted it.
|
|
93
|
+
* - `unverified` — a token is stored but the API could not be reached.
|
|
94
|
+
* - `expired` — the API answered 401: the session expired or was revoked.
|
|
95
|
+
* - `not-signed-in` — no token is stored for the origin.
|
|
96
|
+
*/
|
|
97
|
+
export type NexusSessionState = 'signed-in' | 'unverified' | 'expired' | 'not-signed-in';
|
|
98
|
+
|
|
99
|
+
/** Secret-free status row for `cleo status` and `cleo auth list`. */
|
|
100
|
+
export interface NexusAccountStatus {
|
|
101
|
+
/** API origin the row describes, e.g. `https://api.cleocode.dev`. */
|
|
102
|
+
apiUrl: string;
|
|
103
|
+
/** Session state. */
|
|
104
|
+
state: NexusSessionState;
|
|
105
|
+
/** Signed-in user's email, when known. */
|
|
106
|
+
email: string | null;
|
|
107
|
+
/** Primary organization (the personal one, else the first), when known. */
|
|
108
|
+
organization: string | null;
|
|
109
|
+
/** ISO time the stored token expires, when the server said so. */
|
|
110
|
+
expiresAt: string | null;
|
|
111
|
+
/** One human line: "signed in as a@b.c (Org)", "session expired", "not signed in". */
|
|
112
|
+
summary: string;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/** Result of `cleo login nexus` (never carries the token). */
|
|
116
|
+
export interface NexusLoginResult {
|
|
117
|
+
/** API origin the session belongs to. */
|
|
118
|
+
apiUrl: string;
|
|
119
|
+
/** The signed-in user, when `/v1/account/me` answered. */
|
|
120
|
+
user: NexusAccountUser | null;
|
|
121
|
+
/** Primary organization, when known. */
|
|
122
|
+
organization: NexusAccountOrganization | null;
|
|
123
|
+
/** ISO time the token expires, when the server said so. */
|
|
124
|
+
expiresAt: string | null;
|
|
125
|
+
/** Absolute path of the credential store the token was written to. */
|
|
126
|
+
credentialsPath: string;
|
|
127
|
+
/** Non-fatal problems, e.g. the account lookup failed after a good login. */
|
|
128
|
+
warnings: string[];
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
/** Result of `cleo logout nexus`. */
|
|
132
|
+
export interface NexusLogoutResult {
|
|
133
|
+
/** API origin the session belonged to. */
|
|
134
|
+
apiUrl: string;
|
|
135
|
+
/** `true` when a stored token existed and was deleted locally. */
|
|
136
|
+
removedLocally: boolean;
|
|
137
|
+
/**
|
|
138
|
+
* Server-side revocation outcome: `revoked` (the API ended the session),
|
|
139
|
+
* `already-invalid` (the API reported it was already gone), `failed`
|
|
140
|
+
* (network or server error: the local token is deleted anyway), or
|
|
141
|
+
* `skipped` (nothing was stored).
|
|
142
|
+
*/
|
|
143
|
+
revocation: 'revoked' | 'already-invalid' | 'failed' | 'skipped';
|
|
144
|
+
/** Non-fatal problems. */
|
|
145
|
+
warnings: string[];
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
/**
|
|
149
|
+
* The binding of a local CLEO project to its Nexus registration, persisted in
|
|
150
|
+
* the project's machine-local `.cleo/nexus-link.json`, keyed by API origin.
|
|
151
|
+
*/
|
|
152
|
+
export interface NexusProjectLink {
|
|
153
|
+
/** API origin the project is registered with. */
|
|
154
|
+
apiUrl: string;
|
|
155
|
+
/** The local CLEO project id (the tracked `.cleo/project-id`). */
|
|
156
|
+
localProjectId: string;
|
|
157
|
+
/** The project id the server returned (the server keys projects by the CLEO id). */
|
|
158
|
+
remoteProjectId: string;
|
|
159
|
+
/** Owning organization id. */
|
|
160
|
+
organizationId: string;
|
|
161
|
+
/** Plaintext display-name label the server holds, or `null` when it has none. */
|
|
162
|
+
label: string | null;
|
|
163
|
+
/** Journal stream id for the project. */
|
|
164
|
+
streamId: string;
|
|
165
|
+
/** ISO time of the last successful link. */
|
|
166
|
+
linkedAt: string;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
/** Result of `cleo project link`. */
|
|
170
|
+
export interface NexusProjectLinkResult {
|
|
171
|
+
/** The persisted binding. */
|
|
172
|
+
link: NexusProjectLink;
|
|
173
|
+
/**
|
|
174
|
+
* `true` when the server already had this project id (HTTP 200; its label
|
|
175
|
+
* was updated to the one sent), `false` when this call registered it (201).
|
|
176
|
+
* Linking is idempotent either way.
|
|
177
|
+
*/
|
|
178
|
+
alreadyLinked: boolean;
|
|
179
|
+
/** Absolute path of the local binding file. */
|
|
180
|
+
linkPath: string;
|
|
181
|
+
}
|
package/src/operations/admin.ts
CHANGED
|
@@ -1648,6 +1648,11 @@ export interface AdminBackupMutateParams {
|
|
|
1648
1648
|
file?: string;
|
|
1649
1649
|
/** Preview the restore without writing (restore.file only). */
|
|
1650
1650
|
dryRun?: boolean;
|
|
1651
|
+
/**
|
|
1652
|
+
* Allow a restore run from inside a git worktree to overwrite the owning
|
|
1653
|
+
* project's live store (T12680). Without it such a restore is refused.
|
|
1654
|
+
*/
|
|
1655
|
+
confirmOwnerStore?: boolean;
|
|
1651
1656
|
}
|
|
1652
1657
|
|
|
1653
1658
|
/** Result of `admin.backup` mutate (create action). */
|
package/src/operations/focus.ts
CHANGED
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
import type {
|
|
16
16
|
KnowledgeCoverage,
|
|
17
17
|
KnowledgeDiagnostic,
|
|
18
|
-
|
|
18
|
+
KnowledgeHealthSummary,
|
|
19
19
|
} from '../knowledge-health.js';
|
|
20
20
|
import type { MviDigest } from '../mvi.js';
|
|
21
21
|
import type { AttentionScopeKind } from './attention.js';
|
|
@@ -195,8 +195,12 @@ export interface FocusBrainContext {
|
|
|
195
195
|
export interface FocusShowResult {
|
|
196
196
|
/** Assessed graph coverage; absence on legacy responses is not healthy coverage. */
|
|
197
197
|
coverage?: KnowledgeCoverage;
|
|
198
|
-
/**
|
|
199
|
-
|
|
198
|
+
/**
|
|
199
|
+
* Bounded deterministic maintenance and sourced repair findings for the
|
|
200
|
+
* foreground caller. Its coverage is not repeated: `coverageRef` is
|
|
201
|
+
* `/coverage`, the single coverage object of this result (T12522).
|
|
202
|
+
*/
|
|
203
|
+
knowledgeHealth?: KnowledgeHealthSummary;
|
|
200
204
|
/** Failed auxiliary reads are distinct from successfully empty sources. */
|
|
201
205
|
sourceDiagnostics?: Record<string, KnowledgeDiagnostic>;
|
|
202
206
|
/** Core identity of the focused entity. */
|
|
@@ -473,6 +473,15 @@ export const NEXUS_SCOPE_MAP = {
|
|
|
473
473
|
stores: ['nexus-registry'],
|
|
474
474
|
requiresProject: false,
|
|
475
475
|
},
|
|
476
|
+
'projects.fleet': {
|
|
477
|
+
op: 'projects.fleet',
|
|
478
|
+
description:
|
|
479
|
+
'Fleet view: every project, where it lives on each device, and its last recorded git state (read-only).',
|
|
480
|
+
scope: 'global',
|
|
481
|
+
effect: 'read',
|
|
482
|
+
stores: ['nexus-registry'],
|
|
483
|
+
requiresProject: false,
|
|
484
|
+
},
|
|
476
485
|
'projects.register': {
|
|
477
486
|
op: 'projects.register',
|
|
478
487
|
description: 'Register a project (alias: register).',
|