aipctl 2026.10.12 → 2026.10.13
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 +31 -1
- package/build/index.cjs +69 -8
- package/docs/api-contract-inventory.md +2 -1
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -63,6 +63,35 @@ admission 사용량·활성/미확정 실행 수를 조회합니다. 업무 한
|
|
|
63
63
|
사용량 조회에 실패하면 `usage.status`는 `UNAVAILABLE`이고 사용량과 reset 필드는 `null`입니다.
|
|
64
64
|
정책 버전이 `null`이면 해당 override 없이 기본값을 상속합니다.
|
|
65
65
|
|
|
66
|
+
## Skill 파일 전송과 GitHub 연동
|
|
67
|
+
|
|
68
|
+
기존 공개 기능과의 호환성을 위해 사용자 Skill과 조직 Skill의 upload/download를 production에서
|
|
69
|
+
지원합니다. `admin skill`은 전역 Back Office가 아니라 선택한 조직의 AI Operator 권한을 사용합니다.
|
|
70
|
+
일반 `skill download`는 본인이 올린 개인 Skill 또는 조직 라이브러리에 공개된 Skill만 다운로드하고,
|
|
71
|
+
`admin skill download`는 AI Operator가 조직 범위 Skill만 다운로드합니다.
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
aipctl skill upload ./my-skill.zip
|
|
75
|
+
aipctl skill download <skill-id> --output ./my-skill.zip
|
|
76
|
+
aipctl admin skill upload ./organization-skill.zip
|
|
77
|
+
aipctl admin skill download <skill-id> --output ./organization-skill.zip
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
조직 AI Operator는 GitHub-backed Skill도 관리할 수 있습니다. PAT 원문 대신 PAT를 보관한
|
|
81
|
+
환경 변수 이름을 `--pat-env`로 전달합니다.
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
aipctl admin skill github inspect <github-url> [--pat-env GITHUB_TOKEN]
|
|
85
|
+
aipctl admin skill github import <github-url> [--pat-env GITHUB_TOKEN]
|
|
86
|
+
aipctl admin skill github sync <skill-id> [--apply]
|
|
87
|
+
aipctl admin skill github credentials set <skill-id> --pat-env GITHUB_TOKEN
|
|
88
|
+
aipctl admin skill github credentials clear <skill-id>
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
upload는 `.zip`과 `.skill`만 허용하며 실패한 준비 upload는 abort합니다. download는 10분·128 MiB
|
|
92
|
+
상한을 적용합니다. `sync`는 `--apply`가 없으면 변경 유무만 확인하고 준비 결과를 폐기합니다.
|
|
93
|
+
이 기능들은 기존 Web Skill 계약을 유지하는 호환 경로입니다.
|
|
94
|
+
|
|
66
95
|
API 실패 시 `--json`은 stderr에 `{ "error": { "code", "message", ... } }` 한 건을 출력하고
|
|
67
96
|
exit 1로 종료합니다. 일반 요청은 로컬 대기부터 응답 본문 처리까지 120초·8 MiB로 제한합니다.
|
|
68
97
|
변경 요청이 전송된 뒤 timeout이나 응답 유실이 생기면 `outcome: "unknown"`이므로 대상 상태를
|
|
@@ -90,7 +119,8 @@ aipctl model-exec get <model-id> [--json]
|
|
|
90
119
|
aipctl model-exec sample <model-id> [--save input.json]
|
|
91
120
|
```
|
|
92
121
|
|
|
93
|
-
`model-exec chat`, `agent chat`, `chat send`, transfer
|
|
122
|
+
`model-exec chat`, `agent chat`, `chat send`, Drive transfer·Agent export, 외부 실행과
|
|
123
|
+
Integration/Preset/Tunnel credential 회전 후보는
|
|
94
124
|
production에서 비공개입니다. 개발 artifact(`npx aipctl@dev`)와 설정된 개발 App URL, 해당
|
|
95
125
|
서버의 인증·release·quota gate가 모두 충족되어야 시험할 수 있습니다. 개발 artifact만 설치해도
|
|
96
126
|
서버 차단을 통과하는 것은 아닙니다. 아래 예시는 text 실행 gate를 연 개발 환경에만 적용됩니다.
|
package/build/index.cjs
CHANGED
|
@@ -93239,7 +93239,7 @@ const injectedBuildEnv = "dev".length > 0 ? "dev" : "local";
|
|
|
93239
93239
|
if (!isBuildEnv(injectedBuildEnv)) {
|
|
93240
93240
|
throw new Error(`Invalid AIPCTL_BUILD_ENV: ${injectedBuildEnv}`);
|
|
93241
93241
|
}
|
|
93242
|
-
const VERSION = "2026.10.
|
|
93242
|
+
const VERSION = "2026.10.13".length > 0 ? "2026.10.13" : "0.0.0";
|
|
93243
93243
|
const BUILD_ENV = injectedBuildEnv;
|
|
93244
93244
|
const INCLUDE_NATIVE_LOGS = BUILD_ENV !== "prod";
|
|
93245
93245
|
|
|
@@ -93450,6 +93450,11 @@ const candidate = (commands, owner, authBoundary, requiredGates) => commands.map
|
|
|
93450
93450
|
capability: `cli.${command.replaceAll(" ", ".")}`,
|
|
93451
93451
|
requiredGates
|
|
93452
93452
|
}));
|
|
93453
|
+
const compatibilityCandidate = (commands, owner, authBoundary, requiredGates) => candidate(commands, owner, authBoundary, requiredGates).map((entry) => ({
|
|
93454
|
+
...entry,
|
|
93455
|
+
availability: "AVAILABLE",
|
|
93456
|
+
compatibilityReason: "restored-existing-customer-surface"
|
|
93457
|
+
}));
|
|
93453
93458
|
const fixedBoundary = (commands, tier, owner, authBoundary) => commands.map((command) => ({
|
|
93454
93459
|
command,
|
|
93455
93460
|
tier,
|
|
@@ -94119,12 +94124,12 @@ const commandManifest = [
|
|
|
94119
94124
|
"partial-file-cleanup",
|
|
94120
94125
|
"authorization-audit"
|
|
94121
94126
|
]),
|
|
94122
|
-
...
|
|
94127
|
+
...compatibilityCandidate(["skill upload", "skill download", "admin skill upload", "admin skill download"], "backend", "organization-oauth", [
|
|
94123
94128
|
"archive-size-mime-validation",
|
|
94124
94129
|
"presigned-host-policy",
|
|
94125
94130
|
"abort-complete-recovery"
|
|
94126
94131
|
]),
|
|
94127
|
-
...
|
|
94132
|
+
...compatibilityCandidate([
|
|
94128
94133
|
"admin skill github inspect",
|
|
94129
94134
|
"admin skill github import",
|
|
94130
94135
|
"admin skill github sync"
|
|
@@ -94134,7 +94139,7 @@ const commandManifest = [
|
|
|
94134
94139
|
"duplicate-import-protection",
|
|
94135
94140
|
"credential-redaction"
|
|
94136
94141
|
]),
|
|
94137
|
-
...
|
|
94142
|
+
...compatibilityCandidate([
|
|
94138
94143
|
"admin skill github credentials set",
|
|
94139
94144
|
"admin skill github credentials clear"
|
|
94140
94145
|
], "backend", "organization-oauth", [
|
|
@@ -95143,6 +95148,14 @@ const makeApiServiceLive = (buildEnv) => effect$1(
|
|
|
95143
95148
|
});
|
|
95144
95149
|
}),
|
|
95145
95150
|
getSkillDownloadUrl: (orgSlug, skillId) => gen(function* () {
|
|
95151
|
+
const token = yield* getAccessToken();
|
|
95152
|
+
const path = `/api/web/organizations/slug/${encodeURIComponent(orgSlug)}/skills/download-url`;
|
|
95153
|
+
return yield* makeRequest(baseUrl, path, token, {
|
|
95154
|
+
method: "POST",
|
|
95155
|
+
body: { skillId }
|
|
95156
|
+
});
|
|
95157
|
+
}),
|
|
95158
|
+
getAdminSkillDownloadUrl: (orgSlug, skillId) => gen(function* () {
|
|
95146
95159
|
const token = yield* getAccessToken();
|
|
95147
95160
|
const path = `/api/web/admin/organizations/slug/${encodeURIComponent(orgSlug)}/skills/download-url`;
|
|
95148
95161
|
return yield* makeRequest(baseUrl, path, token, {
|
|
@@ -96076,6 +96089,49 @@ const trailingOptionSpecs = [
|
|
|
96076
96089
|
explicitBooleanValues: true
|
|
96077
96090
|
})
|
|
96078
96091
|
),
|
|
96092
|
+
...[
|
|
96093
|
+
["skill", "download"],
|
|
96094
|
+
["admin", "skill", "download"]
|
|
96095
|
+
].map(
|
|
96096
|
+
(command) => ({
|
|
96097
|
+
command,
|
|
96098
|
+
booleanOptions: /* @__PURE__ */ new Set(),
|
|
96099
|
+
valueOptions: /* @__PURE__ */ new Set(["--org", "--output", "-o"])
|
|
96100
|
+
})
|
|
96101
|
+
),
|
|
96102
|
+
...[
|
|
96103
|
+
["skill", "upload"],
|
|
96104
|
+
["admin", "skill", "upload"]
|
|
96105
|
+
].map(
|
|
96106
|
+
(command) => ({
|
|
96107
|
+
command,
|
|
96108
|
+
booleanOptions: /* @__PURE__ */ new Set(["--overwrite"]),
|
|
96109
|
+
valueOptions: /* @__PURE__ */ new Set(["--org"]),
|
|
96110
|
+
explicitBooleanValues: true
|
|
96111
|
+
})
|
|
96112
|
+
),
|
|
96113
|
+
{
|
|
96114
|
+
command: ["admin", "skill", "github", "inspect"],
|
|
96115
|
+
booleanOptions: /* @__PURE__ */ new Set(["--json"]),
|
|
96116
|
+
valueOptions: /* @__PURE__ */ new Set(["--org", "--pat-env"]),
|
|
96117
|
+
explicitBooleanValues: true
|
|
96118
|
+
},
|
|
96119
|
+
{
|
|
96120
|
+
command: ["admin", "skill", "github", "sync"],
|
|
96121
|
+
booleanOptions: /* @__PURE__ */ new Set(["--apply", "--json"]),
|
|
96122
|
+
valueOptions: /* @__PURE__ */ new Set(["--org"]),
|
|
96123
|
+
explicitBooleanValues: true
|
|
96124
|
+
},
|
|
96125
|
+
{
|
|
96126
|
+
command: ["admin", "skill", "github", "credentials", "set"],
|
|
96127
|
+
booleanOptions: /* @__PURE__ */ new Set(),
|
|
96128
|
+
valueOptions: /* @__PURE__ */ new Set(["--org", "--pat-env"])
|
|
96129
|
+
},
|
|
96130
|
+
{
|
|
96131
|
+
command: ["admin", "skill", "github", "credentials", "clear"],
|
|
96132
|
+
booleanOptions: /* @__PURE__ */ new Set(),
|
|
96133
|
+
valueOptions: /* @__PURE__ */ new Set(["--org"])
|
|
96134
|
+
},
|
|
96079
96135
|
...[
|
|
96080
96136
|
["skill", "delete"],
|
|
96081
96137
|
["admin", "skill", "delete"],
|
|
@@ -97760,14 +97816,14 @@ const outputOption$2 = text("output").pipe(
|
|
|
97760
97816
|
withDescription$3("Output file path (defaults to original filename)"),
|
|
97761
97817
|
optional
|
|
97762
97818
|
);
|
|
97763
|
-
const
|
|
97819
|
+
const makeDownloadCommand = (getDownloadUrl = (api, orgSlug, skillId) => api.getSkillDownloadUrl(orgSlug, skillId), description = "Download a skill file by ID") => make$4(
|
|
97764
97820
|
"download",
|
|
97765
97821
|
{ skillId: skillIdArg$4, org: orgOption, output: outputOption$2 },
|
|
97766
97822
|
({ skillId, org, output }) => gen(function* () {
|
|
97767
97823
|
const api = yield* ApiService;
|
|
97768
97824
|
const orgSlug = yield* resolveOrgSlug(org, api);
|
|
97769
97825
|
yield* log(`Requesting download URL for skill "${skillId}"...`);
|
|
97770
|
-
const downloadInfo = yield* api
|
|
97826
|
+
const downloadInfo = yield* getDownloadUrl(api, orgSlug, skillId).pipe(
|
|
97771
97827
|
catchTag(
|
|
97772
97828
|
"NotLoggedInError",
|
|
97773
97829
|
(e) => gen(function* () {
|
|
@@ -97820,7 +97876,8 @@ Skill downloaded successfully!`);
|
|
|
97820
97876
|
yield* log(` File: ${outputPath}`);
|
|
97821
97877
|
yield* log(` Size: ${formatBytes(buffer.length)}`);
|
|
97822
97878
|
})
|
|
97823
|
-
).pipe(withDescription(
|
|
97879
|
+
).pipe(withDescription(description));
|
|
97880
|
+
const downloadCommand$1 = makeDownloadCommand();
|
|
97824
97881
|
|
|
97825
97882
|
const githubUrlArg = text$2({ name: "github-url" }).pipe(
|
|
97826
97883
|
withDescription$5("GitHub repository or skill folder URL")
|
|
@@ -98353,12 +98410,16 @@ const adminCloneBuiltInCommand = makeCloneBuiltInCommand(
|
|
|
98353
98410
|
(api, orgSlug, sourceSkillIds) => api.cloneAdminBuiltInSkills(orgSlug, sourceSkillIds),
|
|
98354
98411
|
"Clone built-in skills as an AI operator"
|
|
98355
98412
|
);
|
|
98413
|
+
const adminDownloadCommand = makeDownloadCommand(
|
|
98414
|
+
(api, orgSlug, skillId) => api.getAdminSkillDownloadUrl(orgSlug, skillId),
|
|
98415
|
+
"Download an organization skill file by ID"
|
|
98416
|
+
);
|
|
98356
98417
|
const adminSkillCommandDescription = "Admin skill management (list, get, upload, download, delete, publish, unpublish, built-in, clone-built-in, github)";
|
|
98357
98418
|
const adminSkillSubcommands = [
|
|
98358
98419
|
listCommand$8,
|
|
98359
98420
|
getCommand$5,
|
|
98360
98421
|
uploadCommand$3,
|
|
98361
|
-
|
|
98422
|
+
adminDownloadCommand,
|
|
98362
98423
|
deleteCommand$3,
|
|
98363
98424
|
publishCommand,
|
|
98364
98425
|
unpublishCommand,
|
|
@@ -45,9 +45,10 @@
|
|
|
45
45
|
| P0-ORG-02 | org-admin | hidden from public beta (`aipctl admin org invite-link`, `gen-invite-link`, `revoke-invite-link` removed from command tree) | removed from public surface | api | `GET`, `POST`, `DELETE` | previously `/api/web/organizations/slug/{organizationSlug}/invite/link` | none | hidden | latest: `resource/oas/modules/backend/organization/openapi.yaml` (`/invite/link/v2`); legacy: `resource/oas/duplo-web.yaml` (`/invite/link`) | latest `frontend/packages/api/src/out/modules/organization-types.ts#paths["/api/web/organizations/slug/{organizationSlug}/invite/link/v2"]`; legacy `frontend/packages/api/src/out/user-types.ts#paths["/api/web/organizations/slug/{organizationSlug}/invite/link"]` | `oas-source-only` | `P0` | `hide` | owner=`backend organization module`; rationale=`v2 exists but current CLI UX contract for GET/DELETE parity is not approved for public beta`; removal condition=`public beta continues hiding until a reviewed v2 CLI UX contract exists`; incorporation plan=`reintroduce only after independent organization contract/build and public UX review` | N/A | updated admin org help smoke + command-tree regression to ensure trio is absent |
|
|
46
46
|
| SKILL-01 | skill | `aipctl skill list`, `aipctl skill get`, `aipctl skill delete` | `listSkills`, `getSkill`, `deleteSkill` | api | `GET`, `GET`, `DELETE` | `/api/cli/v1/organizations/{organizationSlug}/skills`; `/api/cli/v1/organizations/{organizationSlug}/skills/{skillId}` | query `{ count,cursor,search }`; detail query `{ maxFiles }` | local `ListSkillsResponse`, `SkillDetail`, `void` | `resource/oas/modules/backend/cli/openapi.yaml` → `v1_skills*.yaml` (DTO aliases to organization Skills OAS) | `backend/api/.../cli/generated/api/CliSkillApi.kt`; domain DTOs remain `com.querypie.duplo.api.skills.generated.model.*` | `generated-ready` | `P0` | `migrate` | none; `CliSkillApiController` delegates to the existing member authorization/audit controller | `AI-6344` | `src/core/api.test.ts`, `CliSkillDriveApiControllerTest`, Gateway registry/contract parity; production CLI and local 403/404 checks (401/429 remain common gates) |
|
|
47
47
|
| SKILL-02 | skill | `aipctl skill upload` | `createUploadUrl` → `uploadToS3` → `completeUpload` (`abortUpload` on failure) | api + external | `POST` → `PUT` → `POST` | `/skills/upload-url`; external presigned `uploadUrl`; `/skills/{skillId}/complete` | local upload request `{ filename,fileSize,mimeType }`, file buffer, complete body `{ overwrite }` | `CreateSkillUploadUrlResponse`, external `void`, `CompleteSkillUploadResponse` | `resource/oas/modules/backend/organization/skills/openapi.yaml` | `frontend/packages/api/src/out/modules/organization-skills-types.ts#paths["/api/web/organizations/slug/{organizationSlug}/skills/upload-url"]`, `#paths["/api/web/organizations/slug/{organizationSlug}/skills/{skillId}/complete"]` | `external-presigned` | N/A | `keep` | none | N/A | existing skill upload tests; needed presigned URL + complete path snapshot |
|
|
48
|
+
| SKILL-02-DOWNLOAD | skill | `aipctl skill download` | `getSkillDownloadUrl` → `downloadFromUrl` | api + external | `POST` → external `GET` | `/api/web/organizations/slug/{organizationSlug}/skills/download-url`; external presigned `downloadUrl` | `{ skillId }` | `SkillDownloadUrlResponse`, external file `Buffer` | `resource/oas/modules/backend/organization/skills/openapi.yaml` | `frontend/packages/api/src/out/modules/organization-skills-types.ts#paths["/api/web/organizations/slug/{organizationSlug}/skills/download-url"]` | `external-presigned` | N/A | `keep` | none; requires active membership and permits only the caller's own `USER` Skill or a published `ORGANIZATION` Skill | N/A | `src/core/api.test.ts` pins the member path; `src/basic-behavior.test.ts` proves ordinary dispatch never selects the admin API |
|
|
48
49
|
| SKILL-03 | skill | `aipctl skill library`, `aipctl skill clone`, `aipctl skill built-in`, `aipctl skill clone-built-in`; `aipctl admin skill built-in`, `aipctl admin skill clone-built-in` | `listLibrarySkills`, `cloneSkills`, `listBuiltInSkills`, `cloneBuiltInSkills`, `listAdminBuiltInSkills`, `cloneAdminBuiltInSkills` | api | `GET`, `POST`, `GET`, `POST`, `GET`, `POST` | `/api/cli/v1/organizations/{organizationSlug}/skills/library`; `/skills/library/clone`; `/skills/built-in`; `/skills/built-in/clone`; `/admin/skills/built-in`; `/admin/skills/built-in/clone` | list query `{ count,cursor,search/limit }`; clone body `{ sourceSkillIds[] }` | local list/clone DTOs | `resource/oas/modules/backend/cli/openapi.yaml` → `v1_skills_library*`, `v1_skills_built-in*`, `v1_admin_skills_built-in*` (aliases to organization Skills OAS) | `backend/api/.../cli/generated/api/CliSkillApi.kt`; domain DTOs remain `com.querypie.duplo.api.skills.generated.model.*` | `generated-ready` | `P0` | `migrate` | none; built-in execution reuses the existing AI-operator authorization owner while CLI API methods preserve general/admin operation identity | `AI-6344` | existing skill extended/admin tests, API path tests, adapter test, Gateway registry/contract parity and production CLI clone/list checks |
|
|
49
50
|
| SKILL-04 | skill-admin | `aipctl admin skill list`, `get`, `delete`, `publish`, `unpublish` | `listAdminSkills`, `getAdminSkill`, `deleteAdminSkill`, `updateAdminSkill` | api | `GET`, `GET`, `DELETE`, `PATCH` | `/api/cli/v1/organizations/{organizationSlug}/admin/skills`; `/admin/skills/{skillId}` | list query `{ pageNumber,pageSize,search }`; publish toggle body `{ availableInLibrary: boolean }` | local `ListAdminSkillsResponse`, `SkillDetail`, `void` | `resource/oas/modules/backend/cli/openapi.yaml` → `v1_admin_skills*.yaml` (DTO aliases to organization Skills OAS) | `backend/api/.../cli/generated/api/CliSkillApi.kt`; domain DTOs remain `com.querypie.duplo.api.skills.generated.model.*` | `generated-ready` | `P0` | `migrate` | none; `CliSkillApiController` delegates AI-operator authorization, workflow and audit owner | `AI-6344` | existing `commands/admin/skill.test.ts`, adapter test, Gateway parity; production admin list/publish/delete and 403/429 checks |
|
|
50
|
-
| SKILL-05 | skill-admin | `aipctl
|
|
51
|
+
| SKILL-05 | skill-admin | `aipctl admin skill upload`, `aipctl admin skill download`, `aipctl admin skill github inspect/import/sync/credentials set/clear` | `createAdminUploadUrl` → `uploadToS3` → `completeAdminUpload` (`abortAdminUpload` on failure); `getAdminSkillDownloadUrl` → `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; admin download requires AI Operator and permits only `ORGANIZATION` scope Skills | N/A | `src/core/api.test.ts` pins the admin path; `src/basic-behavior.test.ts` proves admin dispatch never selects the member API; existing admin/GitHub fixtures |
|
|
51
52
|
| 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
53
|
| 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
54
|
| 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 |
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "aipctl",
|
|
3
|
-
"version": "2026.10.
|
|
3
|
+
"version": "2026.10.13",
|
|
4
4
|
"description": "QueryPie AIP and MCP CLI tool",
|
|
5
5
|
"author": "QueryPie",
|
|
6
6
|
"license": "UNLICENSED",
|
|
@@ -26,8 +26,8 @@
|
|
|
26
26
|
"node": ">=24.18.0"
|
|
27
27
|
},
|
|
28
28
|
"metadata": {
|
|
29
|
-
"contentHash": "
|
|
30
|
-
"wrapperHash": "
|
|
29
|
+
"contentHash": "ff95f9f72ff8e736645f8f0395010573739da83787389d4a4b723d1779c2c5a5",
|
|
30
|
+
"wrapperHash": "1bfe99bbfbed18d5cab3a6f1c5bd79297218c8a8f80a16ed54f77dda1068efce",
|
|
31
31
|
"nativeHash": "006b08c3e391f4571d9b7c0f12d684fe2448106259e7e0581b10f9be362452e9"
|
|
32
32
|
},
|
|
33
33
|
"optionalDependencies": {
|