@aui.io/apollo 0.1.84 → 0.1.87
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -4
- package/node_modules/@aui.io/apollo-cli/dist/src/commands/bundles.js +239 -33
- package/node_modules/@aui.io/apollo-cli/dist/src/commands/bundles.js.map +1 -1
- package/node_modules/@aui.io/apollo-cli/dist/src/commands/hierarchy.js +2 -2
- package/node_modules/@aui.io/apollo-cli/dist/src/commands/hierarchy.js.map +1 -1
- package/node_modules/@aui.io/apollo-cli/dist/src/commands/mockdb.js +9 -8
- package/node_modules/@aui.io/apollo-cli/dist/src/commands/mockdb.js.map +1 -1
- package/node_modules/@aui.io/apollo-cli/dist/src/commands/operate.js +31 -12
- package/node_modules/@aui.io/apollo-cli/dist/src/commands/operate.js.map +1 -1
- package/node_modules/@aui.io/apollo-cli/package.json +3 -3
- package/node_modules/@aui.io/apollo-core/dist/src/api/agent-settings.d.ts +17 -0
- package/node_modules/@aui.io/apollo-core/dist/src/api/agent-settings.js +4 -0
- package/node_modules/@aui.io/apollo-core/dist/src/api/agent-settings.js.map +1 -1
- package/node_modules/@aui.io/apollo-core/dist/src/api/builder-api.d.ts +36 -0
- package/node_modules/@aui.io/apollo-core/dist/src/api/builder-api.js +6 -0
- package/node_modules/@aui.io/apollo-core/dist/src/api/builder-api.js.map +1 -1
- package/node_modules/@aui.io/apollo-core/dist/src/api/management.d.ts +108 -4
- package/node_modules/@aui.io/apollo-core/dist/src/api/management.js +198 -18
- package/node_modules/@aui.io/apollo-core/dist/src/api/management.js.map +1 -1
- package/node_modules/@aui.io/apollo-core/dist/src/api/mock-db.d.ts +1 -5
- package/node_modules/@aui.io/apollo-core/dist/src/api/mock-db.js +4 -10
- package/node_modules/@aui.io/apollo-core/dist/src/api/mock-db.js.map +1 -1
- package/node_modules/@aui.io/apollo-core/dist/src/bundle/baseline.d.ts +12 -2
- package/node_modules/@aui.io/apollo-core/dist/src/bundle/baseline.js +67 -15
- package/node_modules/@aui.io/apollo-core/dist/src/bundle/baseline.js.map +1 -1
- package/node_modules/@aui.io/apollo-core/dist/src/bundle/files.d.ts +13 -0
- package/node_modules/@aui.io/apollo-core/dist/src/bundle/files.js +20 -0
- package/node_modules/@aui.io/apollo-core/dist/src/bundle/files.js.map +1 -1
- package/node_modules/@aui.io/apollo-core/dist/src/bundle/lineage.d.ts +29 -0
- package/node_modules/@aui.io/apollo-core/dist/src/bundle/lineage.js +65 -0
- package/node_modules/@aui.io/apollo-core/dist/src/bundle/lineage.js.map +1 -0
- package/node_modules/@aui.io/apollo-core/dist/src/bundle/materialize.d.ts +25 -4
- package/node_modules/@aui.io/apollo-core/dist/src/bundle/materialize.js +78 -8
- package/node_modules/@aui.io/apollo-core/dist/src/bundle/materialize.js.map +1 -1
- package/node_modules/@aui.io/apollo-core/dist/src/config/index.d.ts +2 -0
- package/node_modules/@aui.io/apollo-core/dist/src/config/index.js +7 -0
- package/node_modules/@aui.io/apollo-core/dist/src/config/index.js.map +1 -1
- package/node_modules/@aui.io/apollo-core/dist/src/config/mockdb-keys.d.ts +3 -0
- package/node_modules/@aui.io/apollo-core/dist/src/config/mockdb-keys.js +5 -0
- package/node_modules/@aui.io/apollo-core/dist/src/config/mockdb-keys.js.map +1 -1
- package/node_modules/@aui.io/apollo-core/dist/src/errors/index.d.ts +75 -0
- package/node_modules/@aui.io/apollo-core/dist/src/errors/index.js +109 -0
- package/node_modules/@aui.io/apollo-core/dist/src/errors/index.js.map +1 -1
- package/node_modules/@aui.io/apollo-core/dist/src/index.d.ts +1 -1
- package/node_modules/@aui.io/apollo-core/dist/src/index.js.map +1 -1
- package/node_modules/@aui.io/apollo-core/dist/src/output/index.d.ts +2 -0
- package/node_modules/@aui.io/apollo-core/dist/src/output/index.js +5 -1
- package/node_modules/@aui.io/apollo-core/dist/src/output/index.js.map +1 -1
- package/node_modules/@aui.io/apollo-core/dist/src/services/bundles.d.ts +76 -2
- package/node_modules/@aui.io/apollo-core/dist/src/services/bundles.js +225 -70
- package/node_modules/@aui.io/apollo-core/dist/src/services/bundles.js.map +1 -1
- package/node_modules/@aui.io/apollo-core/dist/src/services/doctor.js +4 -3
- package/node_modules/@aui.io/apollo-core/dist/src/services/doctor.js.map +1 -1
- package/node_modules/@aui.io/apollo-core/dist/src/services/hierarchy.d.ts +14 -21
- package/node_modules/@aui.io/apollo-core/dist/src/services/hierarchy.js +17 -27
- package/node_modules/@aui.io/apollo-core/dist/src/services/hierarchy.js.map +1 -1
- package/node_modules/@aui.io/apollo-core/dist/src/services/messaging.d.ts +15 -9
- package/node_modules/@aui.io/apollo-core/dist/src/services/messaging.js +41 -18
- package/node_modules/@aui.io/apollo-core/dist/src/services/messaging.js.map +1 -1
- package/node_modules/@aui.io/apollo-core/dist/src/services/mockdb.d.ts +4 -3
- package/node_modules/@aui.io/apollo-core/dist/src/services/mockdb.js +84 -117
- package/node_modules/@aui.io/apollo-core/dist/src/services/mockdb.js.map +1 -1
- package/node_modules/@aui.io/apollo-core/dist/src/services/versions.d.ts +88 -0
- package/node_modules/@aui.io/apollo-core/dist/src/services/versions.js +202 -0
- package/node_modules/@aui.io/apollo-core/dist/src/services/versions.js.map +1 -0
- package/node_modules/@aui.io/apollo-core/dist/src/skills/agents-page.js +2 -2
- package/node_modules/@aui.io/apollo-core/dist/src/skills/agents-page.js.map +1 -1
- package/node_modules/@aui.io/apollo-core/package.json +1 -1
- package/node_modules/@aui.io/apollo-tui/dist/src/actions/registry.js +13 -13
- package/node_modules/@aui.io/apollo-tui/dist/src/actions/registry.js.map +1 -1
- package/node_modules/@aui.io/apollo-tui/dist/src/activity/operationStore.js +2 -2
- package/node_modules/@aui.io/apollo-tui/dist/src/activity/operationStore.js.map +1 -1
- package/node_modules/@aui.io/apollo-tui/dist/src/author/data.js +3 -2
- package/node_modules/@aui.io/apollo-tui/dist/src/author/data.js.map +1 -1
- package/node_modules/@aui.io/apollo-tui/dist/src/lib/actions.d.ts +11 -19
- package/node_modules/@aui.io/apollo-tui/dist/src/lib/actions.js +90 -81
- package/node_modules/@aui.io/apollo-tui/dist/src/lib/actions.js.map +1 -1
- package/node_modules/@aui.io/apollo-tui/dist/src/lib/commands.d.ts +2 -0
- package/node_modules/@aui.io/apollo-tui/dist/src/lib/commands.js +6 -6
- package/node_modules/@aui.io/apollo-tui/dist/src/lib/commands.js.map +1 -1
- package/node_modules/@aui.io/apollo-tui/dist/src/opentui-app.js +21 -13
- package/node_modules/@aui.io/apollo-tui/dist/src/opentui-app.js.map +1 -1
- package/node_modules/@aui.io/apollo-tui/package.json +2 -2
- package/package.json +4 -4
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aui.io/apollo-cli",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.87",
|
|
4
4
|
"description": "Command-line client for the Apollo runtime",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"engines": {
|
|
@@ -33,12 +33,12 @@
|
|
|
33
33
|
"test": "vitest run"
|
|
34
34
|
},
|
|
35
35
|
"dependencies": {
|
|
36
|
-
"@aui.io/apollo-core": "0.1.
|
|
36
|
+
"@aui.io/apollo-core": "0.1.87",
|
|
37
37
|
"commander": "^14.0.3",
|
|
38
38
|
"picocolors": "^1.1.1"
|
|
39
39
|
},
|
|
40
40
|
"optionalDependencies": {
|
|
41
|
-
"@aui.io/apollo-tui": "0.1.
|
|
41
|
+
"@aui.io/apollo-tui": "0.1.87"
|
|
42
42
|
},
|
|
43
43
|
"devDependencies": {
|
|
44
44
|
"@eslint/js": "^9.39.5",
|
|
@@ -50,6 +50,8 @@ export interface BuildBundlePushResponse {
|
|
|
50
50
|
* what they uploaded instead. */
|
|
51
51
|
files_count?: number;
|
|
52
52
|
created_at: string;
|
|
53
|
+
/** The program commit this bundle was pinned to, when one was named. */
|
|
54
|
+
program_version_tag?: string | null;
|
|
53
55
|
}
|
|
54
56
|
/** The bundle document returned by `build-bundles/pull`. */
|
|
55
57
|
export interface BuildBundle {
|
|
@@ -60,6 +62,11 @@ export interface BuildBundle {
|
|
|
60
62
|
notes?: string | null;
|
|
61
63
|
created_at: string;
|
|
62
64
|
created_by: string;
|
|
65
|
+
/** The program COMMIT this material belongs with (`v3.12`), recorded at push
|
|
66
|
+
* time. Absent on a bundle pushed before the pin existed, or by a caller
|
|
67
|
+
* that named none — a pull asking for a commit reads this to see whether it
|
|
68
|
+
* got the material it asked for or a fallback. */
|
|
69
|
+
program_version_tag?: string | null;
|
|
63
70
|
}
|
|
64
71
|
/** 200 response body from `build-bundles/pull`. */
|
|
65
72
|
export interface BuildBundlePullResponse {
|
|
@@ -164,6 +171,10 @@ export declare class AgentSettingsClient {
|
|
|
164
171
|
pushBuildBundle(agentId: string, input: {
|
|
165
172
|
files: BundleUploadFile[];
|
|
166
173
|
createdBy: string;
|
|
174
|
+
/** The program commit this material belongs with (`v3.12`) — the tag the
|
|
175
|
+
* program push just returned. Omitted, the bundle is unpinned and a
|
|
176
|
+
* pull can only ask for the agent's latest. */
|
|
177
|
+
programVersionTag?: string;
|
|
167
178
|
notes?: string;
|
|
168
179
|
}): Promise<BuildBundlePushResponse>;
|
|
169
180
|
/**
|
|
@@ -173,6 +184,12 @@ export declare class AgentSettingsClient {
|
|
|
173
184
|
*/
|
|
174
185
|
pullBuildBundle(agentId: string, options?: {
|
|
175
186
|
version?: number;
|
|
187
|
+
/** Ask for the material that belongs with this program commit (`v3.12`)
|
|
188
|
+
* instead of the agent's latest push. No bundle carries that exact
|
|
189
|
+
* save → the newest one pinned to an earlier save of the same line;
|
|
190
|
+
* none there either → the latest. Ignored when `version` is given.
|
|
191
|
+
* The answer's own `program_version_tag` says which came back. */
|
|
192
|
+
programVersionTag?: string;
|
|
176
193
|
expiresIn?: number;
|
|
177
194
|
}): Promise<BuildBundlePullResponse>;
|
|
178
195
|
}
|
|
@@ -62,6 +62,9 @@ export class AgentSettingsClient {
|
|
|
62
62
|
fields: {
|
|
63
63
|
created_by: input.createdBy,
|
|
64
64
|
paths: JSON.stringify(input.files.map((file) => file.path)),
|
|
65
|
+
...(input.programVersionTag === undefined
|
|
66
|
+
? {}
|
|
67
|
+
: { program_version_tag: input.programVersionTag }),
|
|
65
68
|
...(input.notes === undefined ? {} : { notes: input.notes }),
|
|
66
69
|
},
|
|
67
70
|
},
|
|
@@ -76,6 +79,7 @@ export class AgentSettingsClient {
|
|
|
76
79
|
return this.http.request(`/v1/agents/${encodeURIComponent(agentId)}/build-bundles/pull`, {
|
|
77
80
|
query: {
|
|
78
81
|
version: options.version,
|
|
82
|
+
program_version_tag: options.programVersionTag,
|
|
79
83
|
expires_in: options.expiresIn,
|
|
80
84
|
},
|
|
81
85
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-settings.js","sourceRoot":"","sources":["../../../src/api/agent-settings.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"agent-settings.js","sourceRoot":"","sources":["../../../src/api/agent-settings.ts"],"names":[],"mappings":"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"}
|
|
@@ -417,6 +417,10 @@ export declare class BuilderApiClient {
|
|
|
417
417
|
validateTree(files: BuilderTree, agentId?: string, options?: {
|
|
418
418
|
fix?: boolean;
|
|
419
419
|
}): Promise<BuilderValidation>;
|
|
420
|
+
/** Bring `theirs` into `ours` over `base` — the mechanical half of
|
|
421
|
+
* `apollo merge-from`, computed by the builder's own merge so the CLI and
|
|
422
|
+
* the builder's `merge_from` tool agree on every hunk. Nothing is stored. */
|
|
423
|
+
merge(request: MergeTreesRequest): Promise<MergeTreesResult>;
|
|
420
424
|
/** Enqueue one advisor turn (202 immediately — the answer comes by poll). */
|
|
421
425
|
advise(ask: AdvisorAsk): Promise<AdvisorStarted>;
|
|
422
426
|
adviceView(turnId: string): Promise<AdvisorView>;
|
|
@@ -454,3 +458,35 @@ export declare class BuilderApiClient {
|
|
|
454
458
|
* names the rows that moved. Same 404 as `certificate`. */
|
|
455
459
|
certificateForTree(agentId: string, version: string, files: BuilderTree): Promise<CertificateView>;
|
|
456
460
|
}
|
|
461
|
+
/** `{path: text}` program trees; a `src/` prefix is accepted. */
|
|
462
|
+
export interface MergeTreesRequest {
|
|
463
|
+
ours: Record<string, string>;
|
|
464
|
+
theirs: Record<string, string>;
|
|
465
|
+
/** The save both lines were branched from; omitted = two-way. */
|
|
466
|
+
base?: Record<string, string>;
|
|
467
|
+
/** Narrow the merge to these files (a cherry-pick). */
|
|
468
|
+
paths?: string[];
|
|
469
|
+
}
|
|
470
|
+
export interface MergeRegion {
|
|
471
|
+
base: string;
|
|
472
|
+
ours: string;
|
|
473
|
+
theirs: string;
|
|
474
|
+
}
|
|
475
|
+
export interface MergeConflict {
|
|
476
|
+
path: string;
|
|
477
|
+
reason: string;
|
|
478
|
+
ours: string | null;
|
|
479
|
+
theirs: string | null;
|
|
480
|
+
/** The three-way hunks both sides changed differently; empty for a
|
|
481
|
+
* whole-file conflict (a deletion against a change, or a two-way merge). */
|
|
482
|
+
regions: MergeRegion[];
|
|
483
|
+
}
|
|
484
|
+
export interface MergeTreesResult {
|
|
485
|
+
/** The merged tree — every conflicting region kept at OURS. */
|
|
486
|
+
files: Record<string, string>;
|
|
487
|
+
/** Per touched path: `ours` | `theirs` | `both` | `conflict`. */
|
|
488
|
+
taken: Record<string, string>;
|
|
489
|
+
conflicts: MergeConflict[];
|
|
490
|
+
clean: boolean;
|
|
491
|
+
summary: string;
|
|
492
|
+
}
|
|
@@ -21,6 +21,12 @@ export class BuilderApiClient {
|
|
|
21
21
|
},
|
|
22
22
|
});
|
|
23
23
|
}
|
|
24
|
+
/** Bring `theirs` into `ours` over `base` — the mechanical half of
|
|
25
|
+
* `apollo merge-from`, computed by the builder's own merge so the CLI and
|
|
26
|
+
* the builder's `merge_from` tool agree on every hunk. Nothing is stored. */
|
|
27
|
+
merge(request) {
|
|
28
|
+
return this.http.request("/v1/builder/merge", { method: "POST", body: request });
|
|
29
|
+
}
|
|
24
30
|
/** Enqueue one advisor turn (202 immediately — the answer comes by poll). */
|
|
25
31
|
advise(ask) {
|
|
26
32
|
return this.http.request("/v1/builder/advisor", {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builder-api.js","sourceRoot":"","sources":["../../../src/api/builder-api.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"builder-api.js","sourceRoot":"","sources":["../../../src/api/builder-api.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,6 +22,9 @@ export interface AgentVersion {
|
|
|
22
22
|
version_tag: string;
|
|
23
23
|
status: VersionStatus;
|
|
24
24
|
parent_version_id?: string | null;
|
|
25
|
+
/** The exact COMMIT this branch was cut from (`v3.12`); absent for a
|
|
26
|
+
* first version or one created before lineage was recorded. */
|
|
27
|
+
parent_version_tag?: string | null;
|
|
25
28
|
label?: string | null;
|
|
26
29
|
tags: string[];
|
|
27
30
|
notes?: string | null;
|
|
@@ -47,7 +50,26 @@ export interface VersionPush {
|
|
|
47
50
|
created_at: string;
|
|
48
51
|
commit_message?: string | null;
|
|
49
52
|
}
|
|
53
|
+
/** One COMMIT on a branch, as the internal surface lists it. */
|
|
54
|
+
export interface AgentRevision {
|
|
55
|
+
id: string;
|
|
56
|
+
/** The commit's own tag, e.g. `v3.7`. */
|
|
57
|
+
version_tag: string;
|
|
58
|
+
caller: string;
|
|
59
|
+
commit_message?: string | null;
|
|
60
|
+
created_at: string;
|
|
61
|
+
created_by: string;
|
|
62
|
+
created_by_email?: string | null;
|
|
63
|
+
}
|
|
50
64
|
export type VersionSource = "version" | "agent-scope" | "template" | "empty";
|
|
65
|
+
/** Which COMMIT an agent serves, as apollo reads it back off the agent. */
|
|
66
|
+
export interface AgentLiveSave {
|
|
67
|
+
agent_id: string;
|
|
68
|
+
active_version_id?: string | null;
|
|
69
|
+
/** The exact commit that is live (`v3.7`). */
|
|
70
|
+
active_version_tag?: string | null;
|
|
71
|
+
}
|
|
72
|
+
export declare function isLiveRef(ref: string): boolean;
|
|
51
73
|
/**
|
|
52
74
|
* The version row `live_version_id` points at. The field's name says id,
|
|
53
75
|
* but the wire returns the version *tag* on some environments (staging
|
|
@@ -55,8 +77,22 @@ export type VersionSource = "version" | "agent-scope" | "template" | "empty";
|
|
|
55
77
|
* wild, so a live lookup must match either. Matching only one side made
|
|
56
78
|
* `agent import` report "no live version" for agents that had one
|
|
57
79
|
* (REPORTS-26), while sends assumed the tag shape and worked by luck.
|
|
80
|
+
*
|
|
81
|
+
* The tag names the live COMMIT, which its branch may have moved past
|
|
82
|
+
* (`v3.7` while the row reads `v3.9`), so a tag matches its branch by number.
|
|
58
83
|
*/
|
|
59
84
|
export declare function findLiveVersion(agent: Pick<Agent, "live_version_id">, versions: AgentVersion[]): AgentVersion | undefined;
|
|
85
|
+
/** The commit `live` (from `findLiveVersion`) serves: the tag the agent names,
|
|
86
|
+
* or the branch's newest when the agent names the version by id. */
|
|
87
|
+
export declare function liveCommitTag(agent: Pick<Agent, "live_version_id">, live: AgentVersion): string;
|
|
88
|
+
/** A branch's name, `v3` — how `branch list` prints it and every verb takes it. */
|
|
89
|
+
export declare function branchName(version: Pick<AgentVersion, "version_tag"> & {
|
|
90
|
+
version_number?: number;
|
|
91
|
+
}): string;
|
|
92
|
+
/** The default name of a branch cut from `version`: its name, marked continued once. */
|
|
93
|
+
export declare function continuedName(version: Pick<AgentVersion, "label" | "version_tag">): string;
|
|
94
|
+
/** A branch's state as people say it: the registry's `published` is `locked`. */
|
|
95
|
+
export declare function branchState(status: VersionStatus): string;
|
|
60
96
|
export declare class ManagementClient {
|
|
61
97
|
private readonly http;
|
|
62
98
|
constructor(http: HttpClient);
|
|
@@ -71,9 +107,8 @@ export declare class ManagementClient {
|
|
|
71
107
|
*
|
|
72
108
|
* `runtimeVersion` picks the engine and with it the create flow: a `1.x`
|
|
73
109
|
* family runs the legacy v1 flow; anything else creates a runtime-v2 agent
|
|
74
|
-
* seeded with one
|
|
75
|
-
*
|
|
76
|
-
* agent then goes live on the template's content immediately.
|
|
110
|
+
* seeded with one open branch whose first commit is live. `fromTemplate`
|
|
111
|
+
* names an explicit clone source for that commit.
|
|
77
112
|
*/
|
|
78
113
|
createAgent(projectId: string, input: {
|
|
79
114
|
name: string;
|
|
@@ -81,12 +116,27 @@ export declare class ManagementClient {
|
|
|
81
116
|
runtimeVersion?: string;
|
|
82
117
|
}): Promise<Agent>;
|
|
83
118
|
getAgent(agentId: string): Promise<Agent>;
|
|
119
|
+
/**
|
|
120
|
+
* The agent's versions. INTERNAL, for `parent_version_tag`: the published
|
|
121
|
+
* record has no lineage field, and the merge-base walk
|
|
122
|
+
* (`bundle/lineage.ts`) and `apollo branch list`'s "from v3.12" line both
|
|
123
|
+
* read it.
|
|
124
|
+
*
|
|
125
|
+
* The internal surface answers `{items}` where the published one answers
|
|
126
|
+
* `{results}`; the envelope is normalized here so no caller has to know
|
|
127
|
+
* which surface served it.
|
|
128
|
+
*/
|
|
84
129
|
listVersions(agentId: string, filters?: {
|
|
85
130
|
status?: VersionStatus;
|
|
86
131
|
tag?: string;
|
|
87
132
|
versionNumber?: number;
|
|
88
133
|
excludeRevisions?: boolean;
|
|
89
134
|
}): Promise<Page<AgentVersion>>;
|
|
135
|
+
/** A branch's commits, newest first — one page of `size`, with the branch's total. */
|
|
136
|
+
listRevisions(agentId: string, versionId: string, size: number): Promise<{
|
|
137
|
+
results: AgentRevision[];
|
|
138
|
+
total: number;
|
|
139
|
+
}>;
|
|
90
140
|
/**
|
|
91
141
|
* Resolve a local pin (`v{major}.{revision}`) to a version row.
|
|
92
142
|
*
|
|
@@ -96,14 +146,62 @@ export declare class ManagementClient {
|
|
|
96
146
|
* `v0.11` on the same draft.
|
|
97
147
|
*/
|
|
98
148
|
resolveVersion(agentId: string, tag: string): Promise<AgentVersion>;
|
|
149
|
+
/**
|
|
150
|
+
* A ref → the branch row AND the exact COMMIT it names. `resolveVersion`
|
|
151
|
+
* answers with the row (whose tag is the branch's newest commit); a ref like
|
|
152
|
+
* `v3.7` that names an older commit keeps it here, so fetch, diff,
|
|
153
|
+
* merge-from and `version create --from` work from the commit the author
|
|
154
|
+
* pointed at, not the tip. `live` is the live commit, and a commit the
|
|
155
|
+
* branch does not have is refused rather than read as its newest.
|
|
156
|
+
*/
|
|
157
|
+
resolveRef(agentId: string, ref: string): Promise<{
|
|
158
|
+
version: AgentVersion;
|
|
159
|
+
tag: string;
|
|
160
|
+
}>;
|
|
99
161
|
createVersion(agentId: string, input: {
|
|
100
162
|
source: VersionSource;
|
|
163
|
+
/** The signed-in user the new version is attributed to. */
|
|
164
|
+
createdBy: string;
|
|
101
165
|
fromVersion?: string;
|
|
166
|
+
/** Cut from this exact commit of `fromVersion` (`v3.7`) rather than
|
|
167
|
+
* its latest one; recorded as the draft's `parent_version_tag`. */
|
|
168
|
+
fromVersionTag?: string;
|
|
102
169
|
fromTemplate?: string;
|
|
103
170
|
label?: string;
|
|
104
171
|
tags?: string[];
|
|
105
172
|
notes?: string;
|
|
106
173
|
}): Promise<AgentVersion>;
|
|
174
|
+
/** Rename a version (its `label`) — the name people refer to it by. */
|
|
175
|
+
updateVersion(agentId: string, versionId: string, patch: {
|
|
176
|
+
label?: string;
|
|
177
|
+
notes?: string;
|
|
178
|
+
}): Promise<AgentVersion>;
|
|
179
|
+
/**
|
|
180
|
+
* LOCK a branch (draft → locked): no more commits land on it. Working-tree
|
|
181
|
+
* management, and no statement about customers — live is a pinned SAVE held
|
|
182
|
+
* by the agent, not by a version's status.
|
|
183
|
+
*
|
|
184
|
+
* INTERNAL, and not by choice: the published surface has no lock route at
|
|
185
|
+
* all (its `publish` verb locks AND ships, which is the pair this split
|
|
186
|
+
* exists to separate).
|
|
187
|
+
*/
|
|
188
|
+
lockVersion(agentId: string, versionId: string, lockedBy: string): Promise<AgentVersion>;
|
|
189
|
+
/** UNLOCK a locked branch (locked → draft), so commits land on it again —
|
|
190
|
+
* the undo for locking one too early. It cannot change what customers get.
|
|
191
|
+
* INTERNAL: the published surface has no such verb. */
|
|
192
|
+
unlockVersion(agentId: string, versionId: string): Promise<AgentVersion>;
|
|
193
|
+
/**
|
|
194
|
+
* Make ONE COMMIT live — the exact bundle the agent serves.
|
|
195
|
+
*
|
|
196
|
+
* `versionTag` names it; omitted, the branch's newest commit goes live. Any
|
|
197
|
+
* non-archived branch qualifies, a draft included, and a later push onto
|
|
198
|
+
* it does NOT move the pointer. The answer is apollo's read-back of the
|
|
199
|
+
* agent, so a caller sees the commit that is actually live.
|
|
200
|
+
*
|
|
201
|
+
* INTERNAL: the published `publish` verb means "lock it, then ship its
|
|
202
|
+
* newest commit" and keeps that meaning.
|
|
203
|
+
*/
|
|
204
|
+
activateSave(agentId: string, versionId: string, versionTag?: string): Promise<AgentLiveSave>;
|
|
107
205
|
publishVersion(agentId: string, versionId: string): Promise<AgentVersion>;
|
|
108
206
|
archiveVersion(agentId: string, versionId: string): Promise<AgentVersion>;
|
|
109
207
|
/**
|
|
@@ -112,7 +210,13 @@ export declare class ManagementClient {
|
|
|
112
210
|
* the agent's `active_blob_stats`). Omitted, the revision is unpinned —
|
|
113
211
|
* exactly the payload every push sent before the field existed.
|
|
114
212
|
*/
|
|
115
|
-
pushVersion(agentId: string, versionId: string, bundle: Record<string, unknown>,
|
|
213
|
+
pushVersion(agentId: string, versionId: string, bundle: Record<string, unknown>,
|
|
214
|
+
/** The signed-in user the commit is attributed to. */
|
|
215
|
+
pushedBy: string, commitMessage?: string, runtimeVersion?: string,
|
|
216
|
+
/** The commit these changes are based on. The registry refuses the push
|
|
217
|
+
* (409 `agent_versions.version_moved`) when the version has moved past
|
|
218
|
+
* it — nobody's commit is ever silently overwritten. */
|
|
219
|
+
baseVersionTag?: string): Promise<VersionPush>;
|
|
116
220
|
pullVersion(agentId: string, versionId: string, versionTag?: string): Promise<VersionPull>;
|
|
117
221
|
}
|
|
118
222
|
/** `v8.14` / `v8` → major (+ optional revision). */
|