aipctl 2026.9.7 → 2026.9.8
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/build/index.cjs +43 -12
- package/docs/api-contract-inventory.md +6 -5
- package/package.json +3 -3
package/build/index.cjs
CHANGED
|
@@ -89670,7 +89670,7 @@ const injectedBuildEnv = "dev".length > 0 ? "dev" : "local";
|
|
|
89670
89670
|
if (!isBuildEnv(injectedBuildEnv)) {
|
|
89671
89671
|
throw new Error(`Invalid AIPCTL_BUILD_ENV: ${injectedBuildEnv}`);
|
|
89672
89672
|
}
|
|
89673
|
-
const VERSION = "2026.9.
|
|
89673
|
+
const VERSION = "2026.9.8".length > 0 ? "2026.9.8" : "0.0.0";
|
|
89674
89674
|
const BUILD_ENV = injectedBuildEnv;
|
|
89675
89675
|
const INCLUDE_NATIVE_LOGS = BUILD_ENV !== "prod";
|
|
89676
89676
|
|
|
@@ -89804,6 +89804,14 @@ const normalizeAipArgs = (args) => {
|
|
|
89804
89804
|
};
|
|
89805
89805
|
|
|
89806
89806
|
const implementedCommandOperationIds = /* @__PURE__ */ new Set([
|
|
89807
|
+
"listCliAgents",
|
|
89808
|
+
"getCliAgent",
|
|
89809
|
+
"listCliAgentTemplates",
|
|
89810
|
+
"createCliAgent",
|
|
89811
|
+
"updateCliAgent",
|
|
89812
|
+
"deleteCliAgent",
|
|
89813
|
+
"updateCliAgentStatus",
|
|
89814
|
+
"getCliAgentShare",
|
|
89807
89815
|
"getCliMe",
|
|
89808
89816
|
"getCliUserSettings",
|
|
89809
89817
|
"listCliOrganizations",
|
|
@@ -89814,6 +89822,14 @@ const implementedCommandOperationIds = /* @__PURE__ */ new Set([
|
|
|
89814
89822
|
"createCliModelChatExecution"
|
|
89815
89823
|
]);
|
|
89816
89824
|
const releaseEnabledCommandOperationIds = /* @__PURE__ */ new Set([
|
|
89825
|
+
"listCliAgents",
|
|
89826
|
+
"getCliAgent",
|
|
89827
|
+
"listCliAgentTemplates",
|
|
89828
|
+
"createCliAgent",
|
|
89829
|
+
"updateCliAgent",
|
|
89830
|
+
"deleteCliAgent",
|
|
89831
|
+
"updateCliAgentStatus",
|
|
89832
|
+
"getCliAgentShare",
|
|
89817
89833
|
"getCliMe",
|
|
89818
89834
|
"getCliUserSettings",
|
|
89819
89835
|
"listCliOrganizations",
|
|
@@ -95291,7 +95307,8 @@ const makeApiServiceLive = (buildEnv) => effect$1(
|
|
|
95291
95307
|
// Phase 2: Agent management
|
|
95292
95308
|
listInstalledAgents: (orgSlug) => gen(function* () {
|
|
95293
95309
|
const token = yield* getAccessToken();
|
|
95294
|
-
|
|
95310
|
+
yield* requireServerOperation("listCliAgents", token);
|
|
95311
|
+
const path = `/api/cli/v1/organizations/${encodeURIComponent(orgSlug)}/agents`;
|
|
95295
95312
|
const raw = yield* makeRequest(baseUrl, path, token);
|
|
95296
95313
|
return {
|
|
95297
95314
|
pagination: normalizePageNumberPagination(raw.pagination, raw.list.length),
|
|
@@ -95300,7 +95317,8 @@ const makeApiServiceLive = (buildEnv) => effect$1(
|
|
|
95300
95317
|
}),
|
|
95301
95318
|
getInstalledAgent: (orgSlug, agentId) => gen(function* () {
|
|
95302
95319
|
const token = yield* getAccessToken();
|
|
95303
|
-
|
|
95320
|
+
yield* requireServerOperation("getCliAgent", token);
|
|
95321
|
+
const path = `/api/cli/v1/organizations/${encodeURIComponent(orgSlug)}/agents/${encodeURIComponent(agentId)}`;
|
|
95304
95322
|
const raw = yield* makeRequest(baseUrl, path, token);
|
|
95305
95323
|
return {
|
|
95306
95324
|
data: {
|
|
@@ -95312,7 +95330,8 @@ const makeApiServiceLive = (buildEnv) => effect$1(
|
|
|
95312
95330
|
}),
|
|
95313
95331
|
updateInstalledAgentStatus: (orgSlug, agentId, status) => gen(function* () {
|
|
95314
95332
|
const token = yield* getAccessToken();
|
|
95315
|
-
|
|
95333
|
+
yield* requireServerOperation("updateCliAgentStatus", token);
|
|
95334
|
+
const path = `/api/cli/v1/organizations/${encodeURIComponent(orgSlug)}/agents/${encodeURIComponent(agentId)}/status`;
|
|
95316
95335
|
return yield* makeRequest(baseUrl, path, token, {
|
|
95317
95336
|
method: "PATCH",
|
|
95318
95337
|
body: { status }
|
|
@@ -95605,7 +95624,8 @@ const makeApiServiceLive = (buildEnv) => effect$1(
|
|
|
95605
95624
|
// Phase 8: Agent admin CRUD
|
|
95606
95625
|
createInstalledAgent: (orgSlug, body) => gen(function* () {
|
|
95607
95626
|
const token = yield* getAccessToken();
|
|
95608
|
-
|
|
95627
|
+
yield* requireServerOperation("createCliAgent", token);
|
|
95628
|
+
const path = `/api/cli/v1/organizations/${encodeURIComponent(orgSlug)}/agents`;
|
|
95609
95629
|
return yield* makeRequest(baseUrl, path, token, {
|
|
95610
95630
|
method: "POST",
|
|
95611
95631
|
body
|
|
@@ -95613,7 +95633,8 @@ const makeApiServiceLive = (buildEnv) => effect$1(
|
|
|
95613
95633
|
}),
|
|
95614
95634
|
updateInstalledAgent: (orgSlug, agentId, body) => gen(function* () {
|
|
95615
95635
|
const token = yield* getAccessToken();
|
|
95616
|
-
|
|
95636
|
+
yield* requireServerOperation("updateCliAgent", token);
|
|
95637
|
+
const path = `/api/cli/v1/organizations/${encodeURIComponent(orgSlug)}/agents/${encodeURIComponent(agentId)}`;
|
|
95617
95638
|
return yield* makeRequest(baseUrl, path, token, {
|
|
95618
95639
|
method: "PATCH",
|
|
95619
95640
|
body
|
|
@@ -95621,7 +95642,8 @@ const makeApiServiceLive = (buildEnv) => effect$1(
|
|
|
95621
95642
|
}),
|
|
95622
95643
|
deleteInstalledAgent: (orgSlug, agentId) => gen(function* () {
|
|
95623
95644
|
const token = yield* getAccessToken();
|
|
95624
|
-
|
|
95645
|
+
yield* requireServerOperation("deleteCliAgent", token);
|
|
95646
|
+
const path = `/api/cli/v1/organizations/${encodeURIComponent(orgSlug)}/agents/${encodeURIComponent(agentId)}`;
|
|
95625
95647
|
return yield* makeRequest(baseUrl, path, token, { method: "DELETE" });
|
|
95626
95648
|
}),
|
|
95627
95649
|
exportInstalledAgent: (orgSlug, agentId) => gen(function* () {
|
|
@@ -95647,7 +95669,8 @@ const makeApiServiceLive = (buildEnv) => effect$1(
|
|
|
95647
95669
|
}),
|
|
95648
95670
|
getInstalledAgentShare: (orgSlug, agentId) => gen(function* () {
|
|
95649
95671
|
const token = yield* getAccessToken();
|
|
95650
|
-
|
|
95672
|
+
yield* requireServerOperation("getCliAgentShare", token);
|
|
95673
|
+
const path = `/api/cli/v1/organizations/${encodeURIComponent(orgSlug)}/agents/${encodeURIComponent(agentId)}/share`;
|
|
95651
95674
|
const raw = yield* makeRequest(baseUrl, path, token);
|
|
95652
95675
|
const sharedUserList = yield* try_({
|
|
95653
95676
|
try: () => normalizeSharedUserList(raw.sharedUserList),
|
|
@@ -95660,11 +95683,19 @@ const makeApiServiceLive = (buildEnv) => effect$1(
|
|
|
95660
95683
|
}),
|
|
95661
95684
|
listAgentTemplates: (orgSlug) => gen(function* () {
|
|
95662
95685
|
const token = yield* getAccessToken();
|
|
95663
|
-
|
|
95664
|
-
const
|
|
95686
|
+
yield* requireServerOperation("listCliAgentTemplates", token);
|
|
95687
|
+
const path = `/api/cli/v1/organizations/${encodeURIComponent(orgSlug)}/agents/templates`;
|
|
95688
|
+
const templates = [];
|
|
95689
|
+
let page = 1;
|
|
95690
|
+
while (true) {
|
|
95691
|
+
const raw = yield* makeRequest(baseUrl, page === 1 ? path : `${path}?page=${page}`, token);
|
|
95692
|
+
templates.push(...raw.list);
|
|
95693
|
+
if (raw.list.length === 0 || page * raw.pagination.pageSize >= raw.pagination.total) break;
|
|
95694
|
+
page += 1;
|
|
95695
|
+
}
|
|
95665
95696
|
return {
|
|
95666
|
-
pagination: { pageNumber: 1, pageSize:
|
|
95667
|
-
data:
|
|
95697
|
+
pagination: { pageNumber: 1, pageSize: templates.length, totalCount: templates.length },
|
|
95698
|
+
data: templates.map((item) => ({
|
|
95668
95699
|
id: item.agentId,
|
|
95669
95700
|
displayName: item.label,
|
|
95670
95701
|
categories: item.categoryList,
|
|
@@ -49,8 +49,9 @@
|
|
|
49
49
|
| SKILL-04 | skill-admin | `aipctl admin skill list`, `get`, `delete`, `publish`, `unpublish` | `listAdminSkills`, `getAdminSkill`, `deleteAdminSkill`, `updateAdminSkill` | api | `GET`, `GET`, `DELETE`, `PATCH` | `/api/web/admin/organizations/slug/{organizationSlug}/skills`; `/skills/{skillId}` | list query `{ pageNumber,pageSize,search }`; publish toggle body `{ availableInLibrary: boolean }` | local `ListAdminSkillsResponse`, `SkillDetail`, `void` | `resource/oas/modules/backend/organization/skills/openapi.yaml` | `frontend/packages/api/src/out/modules/organization-skills-types.ts#paths["/api/web/admin/organizations/slug/{organizationSlug}/skills"]`, `#paths["/api/web/admin/organizations/slug/{organizationSlug}/skills/{skillId}"]` | `generated-ready` | N/A | `keep` | none | N/A | existing `commands/admin/skill.test.ts`; needed admin list/detail/update path snapshot |
|
|
50
50
|
| SKILL-05 | skill-admin | `aipctl skill download`; `aipctl admin skill upload`, `aipctl admin skill download`, `aipctl admin skill github inspect/import/sync/credentials set/clear` | `createAdminUploadUrl` → `uploadToS3` → `completeAdminUpload` (`abortAdminUpload` on failure); `getSkillDownloadUrl` → `downloadFromUrl`; `inspectGitHubSkillSource`, `prepareGitHubSkill`, `syncPrepareGitHubSkill`, `updateGitHubSkillCredentials` | api + external | `POST`/`PUT`/`POST`; `POST`/`GET`; `POST`, `POST`, `POST`, `PATCH` | `/admin/.../skills/upload-url`; `/admin/.../skills/download-url`; `/admin/.../skills/github-repo-inspect`; `/github-prepare`; `/{skillId}/sync-prepare`; `/{skillId}/github-credentials` | upload/download local bodies; GitHub inspect/prepare `{ url, pat? }`; credentials `{ pat or null }` | upload/download/GitHub admin skill DTOs | `resource/oas/modules/backend/organization/skills/openapi.yaml` | `frontend/packages/api/src/out/modules/organization-skills-types.ts#paths["/api/web/admin/organizations/slug/{organizationSlug}/skills/upload-url"]`, `#paths["/api/web/admin/organizations/slug/{organizationSlug}/skills/download-url"]`, `#paths["/api/web/admin/organizations/slug/{organizationSlug}/skills/github-repo-inspect"]`, `#paths["/api/web/admin/organizations/slug/{organizationSlug}/skills/github-prepare"]`, `#paths["/api/web/admin/organizations/slug/{organizationSlug}/skills/{skillId}/sync-prepare"]`, `#paths["/api/web/admin/organizations/slug/{organizationSlug}/skills/{skillId}/github-credentials"]` | `external-presigned` | N/A | `keep` | none | N/A | existing `commands/admin/skill.test.ts`, `commands/skill/skill-extended.test.ts`; needed GitHub admin skill contract fixtures |
|
|
51
51
|
| P1-SKILL-01 | skill-docs | `aipctl skill get --json`, `aipctl admin skill get --json`, `aipctl admin skill github import/sync --json` | same owners as `SKILL-01`/`SKILL-05` | api | same as upstream rows | same as upstream rows | runtime/JSON/help/docs now align on `source`, `origin`, `updateAvailable`, `secretsAvailable`, GitHub metadata, `secretKeys`; stale `version` and file `size` removed | JSON/help/docs contract for skill objects | `resource/oas/modules/backend/organization/skills/openapi.yaml` | `frontend/packages/api/src/out/modules/organization-skills-types.ts#components[...]` | `generated-ready` | `P1` | `keep` | none | N/A | updated `src/core/api.test.ts`, `commands/skill/skill.test.ts`, `commands/skill/skill-extended.test.ts`, `commands/admin/skill.test.ts`, `commands/json-format.test.ts`, `../docs/how-to/aip-cli-usage.md`; covers JSON/help/docs field sync |
|
|
52
|
-
| P0-AGENT-01 | agent-user | `aipctl agent list`, `aipctl agent get` | `listInstalledAgents`, `getInstalledAgent` | api | `GET`, `GET` | `/api/
|
|
53
|
-
| P0-AGENT-02 | agent-admin | `aipctl admin agent create`, `update`, `delete`, `
|
|
52
|
+
| P0-AGENT-01 | agent-user | `aipctl agent list`, `aipctl agent get` | `listInstalledAgents`, `getInstalledAgent` | api | `GET`, `GET` | `/api/cli/v1/organizations/{organizationSlug}/agents`; `/{installedAgentId}` | preserves user read semantics and maps `list`/`installedAgentId` to local `data`/`id` | local `ListInstalledAgentsResponse`, `{ data: InstalledAgentDetail }` | `resource/oas/modules/backend/cli/openapi.yaml`; shared DTO refs from `resource/oas/duplo.yaml` | `backend/api/.../cli/generated/api/CliAgentApi.kt` | `generated-ready` | `P0` | `migrate` | none; dedicated adapter delegates to the working `AgentsApiController` bean | `AI-6344` | `src/core/api.test.ts`, `CliAgentApiControllerTest`, Gateway registry/admission parity; real local production CLI list/get JSON |
|
|
53
|
+
| P0-AGENT-02 | agent-admin | `aipctl admin agent create`, `update`, `delete`, `share`, `templates`; `aipctl agent enable`, `disable` | `createInstalledAgent`, `updateInstalledAgent`, `deleteInstalledAgent`, `getInstalledAgentShare`, `listAgentTemplates`, `updateInstalledAgentStatus` | api | `POST`, `PATCH`, `DELETE`, `GET`, `GET`, `PATCH` | `/api/cli/v1/organizations/{organizationSlug}/agents`; `/{installedAgentId}`; `/{installedAgentId}/share`; `/templates`; `/{installedAgentId}/status` | existing create/update/status bodies; templates collect bounded pages and retain the full catalog; share is read-only | create/update `{ id }`, void mutation responses, existing CLI template/share mapping | `resource/oas/modules/backend/cli/openapi.yaml`; shared legacy DTO refs | `backend/api/.../cli/generated/api/CliAgentApi.kt` | `generated-ready` | `P0` | `migrate` | none; AI operator/workflow/audit policy stays in existing domain owner | `AI-6344` | all eight operations capability/path tests, mutation non-replay, template paging, real CLI lifecycle/DB/audit and metadata 429 verification |
|
|
54
|
+
| P0-AGENT-03 | agent-export | `aipctl admin agent export` (GA-CANDIDATE, production gated) | `exportInstalledAgent` | api | `GET` | `/web/admin/organizations/slug/{organizationSlug}/installed-agents/{installedAgentId}/export` | existing direct controller request | YAML `Buffer` | `backend/api/.../app/controller/AgentExportController.kt`; intentionally OAS-codegen excluded | none | `legacy-generated` | `P0` | `legacy-exception` | owner=`AgentExportController`; dedicated transfer contract, size/timeout/partial-file/authorization/audit gates remain | `AI-6380` | existing direct export path/Buffer/404 tests; production help remains hidden |
|
|
54
55
|
| P1-CHAT-01 | agent-chat | `aipctl agent chat` | `agentNewChat`, `agentChat`, local `parseSseStream` | chat | `POST` + SSE | `/librechat/api/{orgSlug}/agent/new-chat`; `/librechat/api/{orgSlug}/agent/chat` | request body `{ agentInstallationId or conversationId, text, files: [] }` | local `AgentChatResult { text, conversationId }` parsed from SSE event fields `final`, `conversation.conversationId`, `responseMessage` | path source: `resource/oas/chat.yaml` | `frontend/packages/api/src/out/chat-types.ts#paths["/librechat/api/{orgSlug}/agent/new-chat"]`, `#paths["/librechat/api/{orgSlug}/agent/chat"]` | `stream-exception` | `P1` | `legacy-exception` | owner=`chat backend agent SSE stream contract`; rationale=`path exists in OpenAPI but final SSE event payload is still out-of-band`; removal condition=`official SSE event schema or versioned fixture is published with the chat contract`; incorporation plan=`bind CLI parser/tests to the published SSE fixture and drop local-only stream assumptions` | N/A | updated `src/core/api.test.ts`; covers content[] text, fallback text, malformed event skip, and no-final-event failure |
|
|
55
56
|
| P1-AUTO-01 | automation | `aipctl automation list`, `get`, `create`, `update`, `delete`, `run`, `enable`, `disable`, `history`, `cancel`, `webhook-regen`, `triggers` | `listAutomations`, `getAutomation`, `createAutomation`, `updateAutomation`, `deleteAutomation`, `runAutomation`, `updateAutomationStatus`, `listAutomationHistories`, `cancelAutomationHistory`, `regenerateWebhookUrl`, `getTriggerProviderMetadata` | api | `GET`, `POST`, `PUT`, `DELETE` mix | `/api/web/organizations/slug/{organizationSlug}/automations...`; `/automation-trigger-providers/.../metadata` | automation pagination normalized to `{ page, pageSize, total }`; metadata calls now use provider-specific OAS paths and required args (`accountId`, `folderId`, `serviceType`) | local automation DTOs + webhook URL DTO | `resource/oas/modules/backend/automation/user/openapi.yaml` | `frontend/packages/api/src/out/modules/automation-user-types.ts#paths[...]` | `generated-ready` | `P1` | `keep` | none | N/A | updated `src/core/api.test.ts`, `commands/automation/automation.test.ts`, `commands/json-format.test.ts`; covers official pagination fields, provider-specific metadata routes, and unsupported-provider preflight failure |
|
|
56
57
|
| CHAT-01 | chat-readonly | `aipctl chat list`, `aipctl chat get`, `aipctl chat messages` | `listConversations`, `getConversation`, `listMessages` | chat | `GET` | `/librechat/api/{orgSlug}/convos`; `/convos/{conversationId}`; `/messages/{conversationId}` | list sends no default query; optional cursor only (`?cursor=...`). `pageSize`/`sortBy`/`sortDirection` defaults removed due deployed Chat validation drift | local `ListConversationsResponse`, `ConversationDetail`, `ChatMessage[]` | `resource/oas/chat.yaml` | `frontend/packages/api/src/out/chat-types.ts#paths["/librechat/api/{orgSlug}/convos"]`, `#paths["/librechat/api/{orgSlug}/convos/{conversationId}"]`, `#paths["/librechat/api/{orgSlug}/messages/{conversationId}"]` | `legacy-generated` | N/A | `keep` | owner=`chat backend`; rationale=`PROD rejects CLI default pageSize/sort query while no-query and cursor-only read path are safe`; removal condition=`chat deployed contract publishes and accepts explicit pagination query for public CLI`; incorporation plan=`reintroduce explicit pagination only after OAS/source/deployed validation align` | N/A | updated `src/core/api.test.ts`, existing `commands/chat/chat.test.ts`; covers default no-query and cursor-only URL |
|
|
@@ -83,8 +84,8 @@ CLI `ApiError`는 위 세 code에서 allowlist된 quota detail만 보존하며
|
|
|
83
84
|
|
|
84
85
|
- `P0-ORG-01` org member list/mutation legacy-exception aligned (done in `AIP-PUB-04`, independent contract follow-up remains)
|
|
85
86
|
- `P0-ORG-02` org invite-link trio hidden from public beta (done in `AIP-PUB-04`)
|
|
86
|
-
- `P0-AGENT-01`
|
|
87
|
-
- `P0-AGENT-
|
|
87
|
+
- `P0-AGENT-01` / `P0-AGENT-02` moved to dedicated CLI lifecycle endpoints with metadata quota and capability checks (`AI-6344`)
|
|
88
|
+
- `P0-AGENT-03` export remains a gated transfer candidate (`AI-6380`)
|
|
88
89
|
- `P0-DRIVE-01` drive list/download/delete/mkdir/rename/usage contract migration (done in `AIP-PUB-04`)
|
|
89
90
|
- `P0-DRIVE-02` drive upload contract migration (done in `AIP-PUB-04`)
|
|
90
91
|
- `P0-MODEL-01` model list path/DTO migration (done in `AIP-PUB-04`)
|
|
@@ -101,6 +102,6 @@ CLI `ApiError`는 위 세 code에서 allowlist된 quota detail만 보존하며
|
|
|
101
102
|
## Manual notes
|
|
102
103
|
|
|
103
104
|
- Generated reference files under `frontend/packages/api/src/out/**` are inventory links only. They are not imported by CLI source/build/test/lint.
|
|
104
|
-
-
|
|
105
|
+
- Agent lifecycle uses the dedicated `CliAgentApiController` and CLI OAS, delegating internally to the implemented `AgentsApiController` bean. Future v2 implementation can replace that internal owner without changing the CLI endpoint. `agent chat` and `admin agent export` retain their separate candidate gates.
|
|
105
106
|
- OAuth authorization-server metadata, dynamic client registration, authorize, and token endpoints used by `src/core/oauth.ts` were not found in current `resource/oas`; they need owner-backed contractization.
|
|
106
107
|
- `config` commands intentionally excluded. local config surface has no network owner.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "aipctl",
|
|
3
|
-
"version": "2026.9.
|
|
3
|
+
"version": "2026.9.8",
|
|
4
4
|
"description": "QueryPie AIP and MCP CLI tool",
|
|
5
5
|
"author": "QueryPie",
|
|
6
6
|
"license": "UNLICENSED",
|
|
@@ -22,8 +22,8 @@
|
|
|
22
22
|
"node": ">=24.18.0"
|
|
23
23
|
},
|
|
24
24
|
"metadata": {
|
|
25
|
-
"contentHash": "
|
|
26
|
-
"wrapperHash": "
|
|
25
|
+
"contentHash": "fc535c50b1c26702237a8dbfd683f04ddaec6b84c369c308b9714d1e65c5fc69",
|
|
26
|
+
"wrapperHash": "69f4f9d9e2ed5283318f3b770870f094ae315b9cc579ad426203224c66624461",
|
|
27
27
|
"nativeHash": "006b08c3e391f4571d9b7c0f12d684fe2448106259e7e0581b10f9be362452e9"
|
|
28
28
|
},
|
|
29
29
|
"optionalDependencies": {
|