aegis-platform-sdk 0.1.0

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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/errors.ts","../src/transport.ts","../src/resources/auth.ts","../src/resources/iam.ts","../src/resources/osdk.ts","../src/resources/operator.ts","../src/resources/ontology.ts","../src/resources/aip.ts","../src/resources/functions.ts","../src/resources/datasets.ts","../src/client.ts"],"sourcesContent":["/**\n * Exception hierarchy for the AEGIS SDK — mirrors `aegis.exceptions` in the\n * Python SDK. Callers can catch the broad `AegisAPIError` or react to\n * specific subclasses:\n *\n * ```ts\n * try {\n * await client.iam.users.list();\n * } catch (err) {\n * if (err instanceof PermissionDeniedError) console.log(\"missing perm:\", err.detail);\n * else if (err instanceof AegisAPIError) console.log(err.statusCode, err.detail);\n * }\n * ```\n */\n\nexport class AegisAPIError extends Error {\n readonly statusCode: number;\n readonly detail: string;\n readonly payload: unknown;\n\n constructor(statusCode: number, detail = \"\", payload: unknown = null) {\n super(`HTTP ${statusCode}: ${detail}`);\n this.name = new.target.name;\n this.statusCode = statusCode;\n this.detail = detail;\n this.payload = payload;\n }\n}\n\n/** 401 — invalid / expired token, missing credentials, locked account. */\nexport class AuthError extends AegisAPIError {}\n\n/** 403 — authenticated but lacks the permission for this call. */\nexport class PermissionDeniedError extends AegisAPIError {}\n\n/** 404 — the addressed resource does not exist (or is hidden by tenant scope). */\nexport class NotFoundError extends AegisAPIError {}\n","import { AegisAPIError, AuthError, NotFoundError, PermissionDeniedError } from \"./errors\";\n\nexport type QueryParams = Record<string, string | number | boolean | undefined | null>;\n\nexport interface RequestOptions {\n params?: QueryParams;\n json?: unknown;\n signal?: AbortSignal;\n}\n\n/** The verb-agnostic transport contract every resource is built on. */\nexport interface Transport {\n request<T = unknown>(method: string, path: string, opts?: RequestOptions): Promise<T>;\n}\n\nexport function buildUrl(baseUrl: string, path: string, params?: QueryParams): string {\n const url = new URL(baseUrl.replace(/\\/+$/, \"\") + path);\n if (params) {\n for (const [key, value] of Object.entries(params)) {\n if (value !== undefined && value !== null) url.searchParams.set(key, String(value));\n }\n }\n return url.toString();\n}\n\n/** Map an HTTP response to a payload or throw the mirrored exception hierarchy. */\nexport async function handleResponse<T>(res: Response): Promise<T> {\n if (res.status === 204) return null as T;\n const text = await res.text();\n let payload: unknown = text;\n try {\n payload = text ? JSON.parse(text) : null;\n } catch {\n /* non-JSON body — keep raw text */\n }\n if (res.ok) return payload as T;\n\n let detail = \"\";\n if (payload && typeof payload === \"object\" && \"detail\" in payload) {\n detail = String((payload as { detail: unknown }).detail ?? \"\");\n } else if (typeof payload === \"string\") {\n detail = payload;\n }\n if (res.status === 401) throw new AuthError(401, detail || \"unauthenticated\", payload);\n if (res.status === 403) throw new PermissionDeniedError(403, detail || \"forbidden\", payload);\n if (res.status === 404) throw new NotFoundError(404, detail || \"not found\", payload);\n throw new AegisAPIError(res.status, detail || text, payload);\n}\n","import type { Transport } from \"../transport\";\nimport type { DevMode, TokenPair, WhoAmI } from \"../types\";\n\nexport interface LoginOptions {\n totpCode?: string;\n /** Attach the issued JWT to the client for subsequent calls (default true). */\n attach?: boolean;\n}\n\n/** `client.auth.*` — login, whoami, dev-mode. */\nexport class AuthResource {\n constructor(\n private readonly t: Transport,\n private readonly setToken: (token: string | null) => void,\n ) {}\n\n async login(username: string, password: string, opts: LoginOptions = {}): Promise<TokenPair> {\n const body: Record<string, unknown> = { username, password };\n if (opts.totpCode) body.totp_code = opts.totpCode;\n const pair = await this.t.request<TokenPair>(\"POST\", \"/auth/login\", { json: body });\n if (opts.attach !== false) this.setToken(pair.access_token);\n return pair;\n }\n\n me(): Promise<WhoAmI> {\n return this.t.request<WhoAmI>(\"GET\", \"/auth/me\");\n }\n\n /** Activate a vendor dev-mode session; requires the `vendor` role. */\n enableDevMode(password: string): Promise<DevMode> {\n return this.t.request<DevMode>(\"POST\", \"/me/dev-mode\", { json: { password } });\n }\n}\n","import type { Transport } from \"../transport\";\nimport type { Json, Permission, Role, User } from \"../types\";\n\nclass UsersResource {\n constructor(private readonly t: Transport) {}\n list(): Promise<User[]> {\n return this.t.request(\"GET\", \"/iam/users\");\n }\n get(userId: string): Promise<User> {\n return this.t.request(\"GET\", `/iam/users/${userId}`);\n }\n}\n\nclass RolesResource {\n constructor(private readonly t: Transport) {}\n list(): Promise<Role[]> {\n return this.t.request(\"GET\", \"/iam/roles\");\n }\n get(roleId: string): Promise<Role> {\n return this.t.request(\"GET\", `/iam/roles/${roleId}`);\n }\n}\n\nclass GroupsResource {\n constructor(private readonly t: Transport) {}\n list(opts: { limit?: number; offset?: number } = {}): Promise<Json[]> {\n return this.t.request(\"GET\", \"/iam/groups\", { params: opts });\n }\n get(groupId: string): Promise<Json> {\n return this.t.request(\"GET\", `/iam/groups/${groupId}`);\n }\n create(name: string, description?: string): Promise<Json> {\n return this.t.request(\"POST\", \"/iam/groups\", { json: { name, description } });\n }\n update(groupId: string, patch: { name?: string; description?: string }): Promise<Json> {\n return this.t.request(\"PATCH\", `/iam/groups/${groupId}`, { json: patch });\n }\n delete(groupId: string): Promise<void> {\n return this.t.request(\"DELETE\", `/iam/groups/${groupId}`);\n }\n listMembers(groupId: string): Promise<Json[]> {\n return this.t.request(\"GET\", `/iam/groups/${groupId}/members`);\n }\n addMember(groupId: string, userId: string): Promise<Json> {\n return this.t.request(\"POST\", `/iam/groups/${groupId}/members`, { json: { user_id: userId } });\n }\n removeMember(groupId: string, userId: string): Promise<void> {\n return this.t.request(\"DELETE\", `/iam/groups/${groupId}/members/${userId}`);\n }\n listForUser(userId: string): Promise<Json[]> {\n return this.t.request(\"GET\", `/iam/users/${userId}/groups`);\n }\n}\n\nclass PermissionsResource {\n constructor(private readonly t: Transport) {}\n list(resource?: string): Promise<Permission[]> {\n return this.t.request(\"GET\", \"/iam/permissions\", { params: { resource } });\n }\n}\n\nclass NavResource {\n constructor(private readonly t: Transport) {}\n tree(asRoleId?: string): Promise<Json> {\n return this.t.request(\"GET\", \"/iam/nav\", { params: { as_role_id: asRoleId } });\n }\n}\n\n/** `client.iam.*` — users, roles, groups, permissions, nav tree. */\nexport class IamResource {\n readonly users: UsersResource;\n readonly roles: RolesResource;\n readonly groups: GroupsResource;\n readonly permissions: PermissionsResource;\n readonly nav: NavResource;\n\n constructor(t: Transport) {\n this.users = new UsersResource(t);\n this.roles = new RolesResource(t);\n this.groups = new GroupsResource(t);\n this.permissions = new PermissionsResource(t);\n this.nav = new NavResource(t);\n }\n}\n","import type { Transport } from \"../transport\";\nimport type { OsdkToken, OsdkTokenWithSecret } from \"../types\";\n\n/** `client.osdk.*` — OSDK application token management (Governance → OSDK). */\nexport class OsdkResource {\n constructor(private readonly t: Transport) {}\n\n list(): Promise<OsdkToken[]> {\n return this.t.request(\"GET\", \"/governance/tokens\");\n }\n get(tokenId: string): Promise<OsdkToken> {\n return this.t.request(\"GET\", `/governance/tokens/${tokenId}`);\n }\n /** Returns the plaintext secret ONCE — stash it like any other secret. */\n create(name: string, scopes: string[], expiresAt?: string): Promise<OsdkTokenWithSecret> {\n return this.t.request(\"POST\", \"/governance/tokens\", {\n json: { name, scopes, expires_at: expiresAt },\n });\n }\n rotate(tokenId: string): Promise<OsdkTokenWithSecret> {\n return this.t.request(\"POST\", `/governance/tokens/${tokenId}/rotate`);\n }\n revoke(tokenId: string): Promise<void> {\n return this.t.request(\"DELETE\", `/governance/tokens/${tokenId}`);\n }\n}\n","import type { Transport } from \"../transport\";\nimport type { Json } from \"../types\";\n\nexport interface OperatorTaskListOptions {\n status?: string;\n project_id?: string;\n origin?: string;\n mine?: boolean;\n limit?: number;\n}\n\nexport interface OperatorTaskCreate {\n prompt_text: string;\n title?: string;\n project_id?: string;\n priority?: string;\n parent_task_id?: string;\n markings?: string[];\n}\n\nclass OperatorTasksResource {\n constructor(private readonly t: Transport) {}\n\n list(opts: OperatorTaskListOptions = {}): Promise<Json[]> {\n return this.t.request(\"GET\", \"/operator/tasks\", { params: { ...opts } });\n }\n get(taskId: string): Promise<Json> {\n return this.t.request(\"GET\", `/operator/tasks/${taskId}`);\n }\n create(input: OperatorTaskCreate): Promise<Json> {\n return this.t.request(\"POST\", \"/operator/tasks\", { json: input });\n }\n cancel(taskId: string): Promise<Json> {\n return this.t.request(\"PATCH\", `/operator/tasks/${taskId}`, { json: { action: \"cancel\" } });\n }\n retry(taskId: string): Promise<Json> {\n return this.t.request(\"PATCH\", `/operator/tasks/${taskId}`, { json: { action: \"retry\" } });\n }\n reprioritize(taskId: string, priority: string): Promise<Json> {\n return this.t.request(\"PATCH\", `/operator/tasks/${taskId}`, {\n json: { action: \"reprioritize\", priority },\n });\n }\n}\n\n/** `client.operator.*` — operator task queue (NL kanban). */\nexport class OperatorResource {\n readonly tasks: OperatorTasksResource;\n constructor(t: Transport) {\n this.tasks = new OperatorTasksResource(t);\n }\n}\n","import type { Transport } from \"../transport\";\nimport type { Json } from \"../types\";\n\nclass ObjectsResource {\n constructor(private readonly t: Transport) {}\n\n get(objectId: string): Promise<Json> {\n return this.t.request(\"GET\", `/ontology/nodes/${objectId}`);\n }\n list(kind: string, opts: { limit?: number; offset?: number; q?: string } = {}): Promise<Json[]> {\n return this.t.request(\"GET\", \"/ontology/nodes\", { params: { node_type: kind, ...opts } });\n }\n create(kind: string, properties: Json, name?: string): Promise<Json> {\n return this.t.request(\"POST\", \"/ontology/nodes\", {\n json: { kind, properties, name },\n });\n }\n createMany(kind: string, items: Json[], markings?: string[]): Promise<Json> {\n return this.t.request(\"POST\", \"/ontology/nodes/bulk\", { json: { kind, items, markings } });\n }\n delete(objectId: string): Promise<Json> {\n return this.t.request(\"DELETE\", `/ontology/nodes/${objectId}`);\n }\n bulkDelete(opts: {\n object_ids?: string[];\n kind?: string;\n dry_run?: boolean;\n confirm?: boolean;\n expected_count?: number;\n }): Promise<Json> {\n return this.t.request(\"POST\", \"/ontology/nodes/bulk-delete\", { json: opts });\n }\n links(objectId: string): Promise<Json[]> {\n return this.t.request(\"GET\", `/entities/${objectId}/links`);\n }\n history(objectId: string): Promise<Json[]> {\n return this.t.request(\"GET\", `/lineage/by-asset/${objectId}`);\n }\n queryTimeseries(\n objectId: string,\n propertyName: string,\n opts: { from_time?: string; to_time?: string; max_points?: number } = {},\n ): Promise<Json> {\n return this.t.request(\n \"POST\",\n `/ontology/nodes/${objectId}/properties/${propertyName}/timeseries-query`,\n { json: opts },\n );\n }\n appendTimeseries(objectId: string, propertyName: string, points: Json[]): Promise<Json> {\n return this.t.request(\n \"POST\",\n `/ontology/nodes/${objectId}/properties/${propertyName}/timeseries/append`,\n { json: { points } },\n );\n }\n}\n\nclass GraphResource {\n constructor(private readonly t: Transport) {}\n expand(seedId: string, opts: { depth?: number; limit?: number } = {}): Promise<Json> {\n return this.t.request(\"GET\", `/entities/${seedId}/graph`, { params: opts });\n }\n}\n\nclass ExplorerResource {\n constructor(private readonly t: Transport) {}\n histogram(property: string, filters?: Json): Promise<Json[]> {\n return this.t.request(\"GET\", \"/entities/aggregate\", {\n params: { property, ...(filters as Record<string, string> | undefined) },\n });\n }\n timeline(filters?: Json, bin?: string): Promise<Json[]> {\n return this.t.request(\"GET\", \"/entities/timeline\", {\n params: { bin, ...(filters as Record<string, string> | undefined) },\n });\n }\n}\n\nexport interface ObjectTypeWrite {\n title_property: string;\n properties: Json;\n display_name?: string;\n enforce?: boolean;\n markings?: string[];\n}\n\nclass ObjectTypesResource {\n constructor(private readonly t: Transport) {}\n get(kind: string): Promise<Json> {\n return this.t.request(\"GET\", `/ontology/object-types/${kind}`);\n }\n create(kind: string, input: ObjectTypeWrite): Promise<Json> {\n return this.t.request(\"POST\", \"/ontology/object-types\", { json: { kind, ...input } });\n }\n update(kind: string, input: ObjectTypeWrite): Promise<Json> {\n return this.t.request(\"PUT\", `/ontology/object-types/${kind}`, { json: input });\n }\n delete(kind: string): Promise<Json> {\n return this.t.request(\"DELETE\", `/ontology/object-types/${kind}`);\n }\n}\n\nclass LinkTypesResource {\n constructor(private readonly t: Transport) {}\n declare(input: {\n source_kind: string;\n target_kind: string;\n relation: string;\n cardinality: string;\n inverse_label?: string;\n }): Promise<Json> {\n return this.t.request(\"POST\", \"/ontology/link-types\", { json: input });\n }\n delete(edgeId: string): Promise<Json> {\n return this.t.request(\"DELETE\", `/ontology/link-types/${edgeId}`);\n }\n}\n\n/** `client.ontology.*` — objects, graph, explorer, object/link types, OSDK manifest. */\nexport class OntologyResource {\n readonly objects: ObjectsResource;\n readonly graph: GraphResource;\n readonly explorer: ExplorerResource;\n readonly objectTypes: ObjectTypesResource;\n readonly linkTypes: LinkTypesResource;\n\n constructor(private readonly t: Transport) {\n this.objects = new ObjectsResource(t);\n this.graph = new GraphResource(t);\n this.explorer = new ExplorerResource(t);\n this.objectTypes = new ObjectTypesResource(t);\n this.linkTypes = new LinkTypesResource(t);\n }\n\n /** Shortcut — same as `objectTypes.get(kind)`. */\n objectType(kind: string): Promise<Json> {\n return this.objectTypes.get(kind);\n }\n osdkManifest(): Promise<Json[]> {\n return this.t.request(\"GET\", \"/ontology/osdk/manifest\");\n }\n osdkFunctions(): Promise<Json[]> {\n return this.t.request(\"GET\", \"/ontology/osdk/manifest/functions\");\n }\n osdkGenerate(lang?: string): Promise<Json> {\n return this.t.request(\"GET\", \"/ontology/osdk/generate\", { params: { lang } });\n }\n}\n","import type { Transport } from \"../transport\";\nimport type { Json } from \"../types\";\n\nclass FlowsResource {\n constructor(private readonly t: Transport) {}\n list(): Promise<Json[]> {\n return this.t.request(\"GET\", \"/campaign/flows\");\n }\n get(flowId: string): Promise<Json> {\n return this.t.request(\"GET\", `/campaign/flows/${flowId}`);\n }\n runs(flowId: string): Promise<Json[]> {\n return this.t.request(\"GET\", `/campaign/flows/${flowId}/runs`);\n }\n patch(flowId: string, payload: Json): Promise<Json> {\n return this.t.request(\"PATCH\", `/campaign/flows/${flowId}`, { json: payload });\n }\n run(flowId: string, dryRun?: boolean): Promise<Json> {\n return this.t.request(\"POST\", `/campaign/flows/${flowId}/run`, {\n json: dryRun === undefined ? {} : { dry_run: dryRun },\n });\n }\n}\n\nclass AgentsResource {\n constructor(private readonly t: Transport) {}\n list(): Promise<Json[]> {\n return this.t.request(\"GET\", \"/campaign/agents\");\n }\n get(agentId: string): Promise<Json> {\n return this.t.request(\"GET\", `/campaign/agents/${agentId}`);\n }\n patch(agentId: string, config: Json): Promise<Json> {\n return this.t.request(\"PATCH\", `/campaign/agents/${agentId}`, { json: config });\n }\n manualRun(agentId: string): Promise<Json> {\n return this.t.request(\"POST\", `/campaign/agents/${agentId}/runs`);\n }\n runs(agentId: string): Promise<Json[]> {\n return this.t.request(\"GET\", `/campaign/agents/${agentId}/runs`);\n }\n}\n\nclass ModelsResource {\n constructor(private readonly t: Transport) {}\n catalog(provider?: string): Promise<Json[]> {\n return this.t.request(\"GET\", \"/platform/v25/aip/models/catalog\", { params: { provider } });\n }\n defaults(): Promise<Json[]> {\n return this.t.request(\"GET\", \"/platform/v25/aip/models/defaults\");\n }\n setDefault(input: {\n provider: string;\n model: string;\n purpose?: string;\n provider_id?: string;\n }): Promise<Json> {\n return this.t.request(\"PUT\", \"/platform/v25/aip/models/defaults\", { json: input });\n }\n}\n\nclass BudgetResource {\n constructor(private readonly t: Transport) {}\n get(): Promise<Json> {\n return this.t.request(\"GET\", \"/platform/v23/llm-budget\");\n }\n set(tokensPerMonth: number): Promise<Json> {\n return this.t.request(\"PUT\", \"/platform/v23/llm-budget\", {\n json: { tokens_per_month: tokensPerMonth },\n });\n }\n}\n\n/** `client.aip.*` — flows, agents, model catalog/defaults, LLM budget. */\nexport class AipResource {\n readonly flows: FlowsResource;\n readonly agents: AgentsResource;\n readonly models: ModelsResource;\n readonly budget: BudgetResource;\n\n constructor(t: Transport) {\n this.flows = new FlowsResource(t);\n this.agents = new AgentsResource(t);\n this.models = new ModelsResource(t);\n this.budget = new BudgetResource(t);\n }\n}\n","import type { Transport } from \"../transport\";\nimport type { Json } from \"../types\";\n\nexport interface FunctionCreate {\n slug: string;\n display_name: string;\n source: string;\n language?: string;\n signature?: Json;\n description?: string;\n markings?: string[];\n classification_level?: string;\n project_id?: string;\n strict_signature?: boolean;\n allow_network?: boolean;\n}\n\nexport interface PullRequestCreate {\n title: string;\n proposed_source: string;\n description?: string;\n proposed_signature?: Json;\n proposed_language?: string;\n required_approvers?: number;\n target_branch?: string;\n}\n\n/** `client.functions.*` — Code Functions (/platform/v26/functions). */\nexport class FunctionsResource {\n constructor(private readonly t: Transport) {}\n\n list(): Promise<Json[]> {\n return this.t.request(\"GET\", \"/platform/v26/functions\");\n }\n get(slug: string): Promise<Json> {\n return this.t.request(\"GET\", `/platform/v26/functions/${slug}`);\n }\n create(input: FunctionCreate): Promise<Json> {\n return this.t.request(\"POST\", \"/platform/v26/functions\", { json: input });\n }\n invoke(slug: string, inputs?: Json, opts: { branch?: string; draft?: boolean } = {}): Promise<Json> {\n return this.t.request(\"POST\", `/platform/v26/functions/${slug}/invoke`, {\n json: { inputs: inputs ?? {}, ...opts },\n });\n }\n tests(slug: string): Promise<Json[]> {\n return this.t.request(\"GET\", `/platform/v26/functions/${slug}/tests`);\n }\n addTest(slug: string, name: string, inputs?: Json, expectedContains?: string): Promise<Json> {\n return this.t.request(\"POST\", `/platform/v26/functions/${slug}/tests`, {\n json: { name, inputs, expected_contains: expectedContains },\n });\n }\n runTest(slug: string, testId: string): Promise<Json> {\n return this.t.request(\"POST\", `/platform/v26/functions/${slug}/tests/${testId}/run`);\n }\n runTests(slug: string): Promise<Json> {\n return this.t.request(\"POST\", `/platform/v26/functions/${slug}/test`);\n }\n publish(slug: string, branch?: string): Promise<Json> {\n return this.t.request(\"POST\", `/platform/v26/functions/${slug}/publish`, {\n json: branch ? { branch } : {},\n });\n }\n versions(slug: string): Promise<Json[]> {\n return this.t.request(\"GET\", `/platform/v26/functions/${slug}/versions`);\n }\n pullRequests(slug: string, status?: string): Promise<Json[]> {\n return this.t.request(\"GET\", `/platform/v26/functions/${slug}/pull-requests`, {\n params: { status },\n });\n }\n openPullRequest(slug: string, input: PullRequestCreate): Promise<Json> {\n return this.t.request(\"POST\", `/platform/v26/functions/${slug}/pull-requests`, { json: input });\n }\n updatePullRequest(slug: string, prId: string, patch: Json): Promise<Json> {\n return this.t.request(\"PATCH\", `/platform/v26/functions/${slug}/pull-requests/${prId}`, {\n json: patch,\n });\n }\n runPrCi(slug: string, prId: string): Promise<Json> {\n return this.t.request(\"POST\", `/platform/v26/functions/${slug}/pull-requests/${prId}/ci`);\n }\n reviewPullRequest(slug: string, prId: string, decision: string, comment?: string): Promise<Json> {\n return this.t.request(\"POST\", `/platform/v26/functions/${slug}/pull-requests/${prId}/reviews`, {\n json: { decision, comment },\n });\n }\n mergePullRequest(slug: string, prId: string): Promise<Json> {\n return this.t.request(\"POST\", `/platform/v26/functions/${slug}/pull-requests/${prId}/merge`);\n }\n}\n\n/** `client.codeRepositories.*` — repos/branches around Code Functions. */\nexport class CodeRepositoriesResource {\n constructor(private readonly t: Transport) {}\n\n list(): Promise<Json[]> {\n return this.t.request(\"GET\", \"/platform/v26/code-repositories\");\n }\n create(input: {\n slug: string;\n display_name: string;\n description?: string;\n default_branch?: string;\n }): Promise<Json> {\n return this.t.request(\"POST\", \"/platform/v26/code-repositories\", { json: input });\n }\n branches(repoId: string): Promise<Json[]> {\n return this.t.request(\"GET\", `/platform/v26/code-repositories/${repoId}/branches`);\n }\n createBranch(repoId: string, name: string, description?: string): Promise<Json> {\n return this.t.request(\"POST\", `/platform/v26/code-repositories/${repoId}/branches`, {\n json: { name, description },\n });\n }\n functions(repoId: string): Promise<Json[]> {\n return this.t.request(\"GET\", `/platform/v26/code-repositories/${repoId}/functions`);\n }\n assignFunction(repoId: string, slug: string): Promise<Json> {\n return this.t.request(\"POST\", `/platform/v26/code-repositories/${repoId}/functions`, {\n json: { slug },\n });\n }\n runCi(repoId: string): Promise<Json> {\n return this.t.request(\"POST\", `/platform/v26/code-repositories/${repoId}/ci`);\n }\n mergeBranch(repoId: string, sourceBranch: string, into?: string): Promise<Json> {\n return this.t.request(\"POST\", `/platform/v26/code-repositories/${repoId}/merge`, {\n json: { source_branch: sourceBranch, into },\n });\n }\n}\n","import type { Transport } from \"../transport\";\nimport type { Json } from \"../types\";\n\nexport type TransactionKind = \"SNAPSHOT\" | \"APPEND\" | \"UPDATE\" | \"DELETE\";\n\n/** `client.datasets.*` — datasets, branches, transactions, classification, markings. */\nexport class DatasetsResource {\n constructor(private readonly t: Transport) {}\n\n list(): Promise<Json[]> {\n return this.t.request(\"GET\", \"/datasets\");\n }\n get(name: string): Promise<Json> {\n return this.t.request(\"GET\", `/datasets/${name}`);\n }\n sample(name: string, limit?: number): Promise<Json> {\n return this.t.request(\"GET\", `/datasets/${name}/sample`, { params: { limit } });\n }\n\n listBranches(name: string): Promise<Json[]> {\n return this.t.request(\"GET\", `/datasets/${name}/branches`);\n }\n createBranch(\n name: string,\n branchName: string,\n opts: {\n from_branch?: string;\n from_asset_id?: string;\n description?: string;\n project_id?: string;\n } = {},\n ): Promise<Json> {\n return this.t.request(\"POST\", `/datasets/${name}/branches`, {\n json: { branch_name: branchName, ...opts },\n });\n }\n deactivateBranch(name: string, branchName: string): Promise<Json> {\n return this.t.request(\"DELETE\", `/datasets/${name}/branches/${branchName}`);\n }\n\n listTransactions(name: string, branch?: string): Promise<Json[]> {\n return this.t.request(\"GET\", `/datasets/${name}/transactions`, { params: { branch } });\n }\n beginTransaction(name: string, kind: TransactionKind, branch?: string): Promise<Json> {\n return this.t.request(\"POST\", `/datasets/${name}/transactions`, { json: { kind, branch } });\n }\n commitTransaction(name: string, txId: string, inputPayload: Json): Promise<Json> {\n return this.t.request(\"POST\", `/datasets/${name}/transactions/${txId}/commit`, {\n json: inputPayload,\n });\n }\n abortTransaction(name: string, txId: string, reason?: string): Promise<Json> {\n return this.t.request(\"POST\", `/datasets/${name}/transactions/${txId}/abort`, {\n json: { reason },\n });\n }\n\n mergeFastForward(name: string, source: string, into: string): Promise<Json> {\n return this.t.request(\"POST\", `/datasets/${name}/branches/${source}/merge`, {\n json: { into },\n });\n }\n /** 409 responses carry the conflict body in `AegisAPIError.payload`. */\n mergeThreeWay(name: string, source: string, into: string, resolutions?: Json): Promise<Json> {\n return this.t.request(\"POST\", `/datasets/${name}/branches/${source}/merge3`, {\n json: { into, resolutions },\n });\n }\n\n getClassification(name: string): Promise<Json> {\n return this.t.request(\"GET\", `/datasets/${name}/classification`);\n }\n setClassification(\n name: string,\n patch: { data_classification?: string; file_classification?: string },\n ): Promise<Json> {\n return this.t.request(\"PATCH\", `/datasets/${name}/classification`, { json: patch });\n }\n\n listMarkings(name: string): Promise<Json[]> {\n return this.t.request(\"GET\", `/datasets/${name}/markings`);\n }\n applyMarking(name: string, markingId: string): Promise<Json> {\n return this.t.request(\"POST\", `/datasets/${name}/markings`, { json: { marking_id: markingId } });\n }\n removeMarking(name: string, markingId: string): Promise<void> {\n return this.t.request(\"DELETE\", `/datasets/${name}/markings/${markingId}`);\n }\n}\n","/**\n * `AegisClient` — the top-level handle. Mirrors `aegis.client.AegisClient`\n * from the Python SDK (`aegis-platform-sdk` on PyPI).\n *\n * Token resolution priority:\n * 1. `token` option (typically an `osdk_…` API key for programmatic\n * callers, or a JWT issued by `/auth/login`).\n * 2. After `client.auth.login(...)` succeeds, the issued JWT is cached\n * and used automatically for subsequent calls.\n *\n * Transport is the platform `fetch` (Node ≥ 18 or any browser) — the SDK\n * has zero runtime dependencies.\n */\nimport { buildUrl, handleResponse } from \"./transport\";\nimport type { RequestOptions, Transport } from \"./transport\";\nimport { AuthResource } from \"./resources/auth\";\nimport { IamResource } from \"./resources/iam\";\nimport { OsdkResource } from \"./resources/osdk\";\nimport { OperatorResource } from \"./resources/operator\";\nimport { OntologyResource } from \"./resources/ontology\";\nimport { AipResource } from \"./resources/aip\";\nimport { CodeRepositoriesResource, FunctionsResource } from \"./resources/functions\";\nimport { DatasetsResource } from \"./resources/datasets\";\n\nexport interface AegisClientOptions {\n /** Root URL of the AEGIS deployment, e.g. `https://aegis.example.com`.\n * Falls back to `process.env.AEGIS_API_URL`, then `http://localhost:8002`. */\n baseUrl?: string;\n /** Bearer token — a JWT (`eyJ…`) or an OSDK key (`osdk_…`).\n * Falls back to `process.env.AEGIS_TOKEN`. Omit for `auth.login(...)` flows. */\n token?: string;\n /** Per-request timeout in milliseconds. Defaults to 15000. */\n timeoutMs?: number;\n /** Custom fetch implementation (tests, proxies, polyfills). */\n fetch?: typeof globalThis.fetch;\n}\n\nfunction envVar(name: string): string | undefined {\n if (typeof process !== \"undefined\" && process.env) return process.env[name];\n return undefined;\n}\n\nexport class AegisClient implements Transport {\n readonly baseUrl: string;\n private _token: string | null;\n private readonly timeoutMs: number;\n private readonly _fetch: typeof globalThis.fetch;\n\n readonly auth: AuthResource;\n readonly iam: IamResource;\n readonly osdk: OsdkResource;\n readonly operator: OperatorResource;\n readonly ontology: OntologyResource;\n readonly aip: AipResource;\n readonly functions: FunctionsResource;\n readonly codeRepositories: CodeRepositoriesResource;\n readonly datasets: DatasetsResource;\n\n constructor(options: AegisClientOptions = {}) {\n const baseUrl = options.baseUrl ?? envVar(\"AEGIS_API_URL\") ?? \"http://localhost:8002\";\n this.baseUrl = baseUrl.replace(/\\/+$/, \"\");\n this._token = options.token ?? envVar(\"AEGIS_TOKEN\") ?? null;\n this.timeoutMs = options.timeoutMs ?? 15_000;\n this._fetch = options.fetch ?? globalThis.fetch.bind(globalThis);\n\n this.auth = new AuthResource(this, (t) => this.setToken(t));\n this.iam = new IamResource(this);\n this.osdk = new OsdkResource(this);\n this.operator = new OperatorResource(this);\n this.ontology = new OntologyResource(this);\n this.aip = new AipResource(this);\n this.functions = new FunctionsResource(this);\n this.codeRepositories = new CodeRepositoriesResource(this);\n this.datasets = new DatasetsResource(this);\n }\n\n /** Replace the active bearer token (or clear with `null`). */\n setToken(token: string | null): void {\n this._token = token;\n }\n\n get token(): string | null {\n return this._token;\n }\n\n /** Generic escape hatch — call any AEGIS endpoint not yet wrapped. */\n async request<T = unknown>(method: string, path: string, opts: RequestOptions = {}): Promise<T> {\n const url = buildUrl(this.baseUrl, path, opts.params);\n const headers: Record<string, string> = {};\n if (this._token) headers.Authorization = `Bearer ${this._token}`;\n\n const init: RequestInit = { method, headers };\n if (opts.json !== undefined) {\n headers[\"Content-Type\"] = \"application/json\";\n init.body = JSON.stringify(opts.json);\n }\n if (opts.signal) {\n init.signal = opts.signal;\n } else if (typeof AbortSignal !== \"undefined\" && \"timeout\" in AbortSignal) {\n init.signal = AbortSignal.timeout(this.timeoutMs);\n }\n\n const res = await this._fetch(url, init);\n return handleResponse<T>(res);\n }\n}\n"],"mappings":"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","names":[]}
package/package.json ADDED
@@ -0,0 +1,53 @@
1
+ {
2
+ "name": "aegis-platform-sdk",
3
+ "version": "0.1.0",
4
+ "description": "AEGIS Ontology SDK — typed TypeScript client for the AEGIS HTTPS API (Safe-Core Technologies)",
5
+ "license": "SEE LICENSE IN LICENSE",
6
+ "author": "Safe-Core Technologies",
7
+ "type": "module",
8
+ "main": "./dist/index.cjs",
9
+ "module": "./dist/index.js",
10
+ "types": "./dist/index.d.ts",
11
+ "exports": {
12
+ ".": {
13
+ "types": "./dist/index.d.ts",
14
+ "import": "./dist/index.js",
15
+ "require": "./dist/index.cjs"
16
+ }
17
+ },
18
+ "files": [
19
+ "dist",
20
+ "skills",
21
+ "README.md",
22
+ "CHANGELOG.md",
23
+ "LICENSE"
24
+ ],
25
+ "sideEffects": false,
26
+ "engines": {
27
+ "node": ">=18.0.0"
28
+ },
29
+ "scripts": {
30
+ "build": "tsup",
31
+ "typecheck": "tsc --noEmit",
32
+ "test": "vitest run",
33
+ "test:watch": "vitest",
34
+ "prepublishOnly": "npm run typecheck && npm run test && npm run build"
35
+ },
36
+ "repository": {
37
+ "type": "git",
38
+ "url": "git+https://github.com/Safe-Core/aegis-typescript-sdk.git"
39
+ },
40
+ "keywords": [
41
+ "aegis",
42
+ "safe-core",
43
+ "ontology",
44
+ "sdk",
45
+ "client"
46
+ ],
47
+ "devDependencies": {
48
+ "@types/node": "^22.10.0",
49
+ "tsup": "^8.3.5",
50
+ "typescript": "^5.7.2",
51
+ "vitest": "^3.0.0"
52
+ }
53
+ }
@@ -0,0 +1,88 @@
1
+ ---
2
+ name: aegis-sdk
3
+ description: Use when writing TypeScript/JavaScript code that talks to an AEGIS platform deployment (Safe-Core) — auth, IAM, ontology objects, AIP flows/agents, Code Functions, datasets. Covers the aegis-platform-sdk npm package - client construction, auth flows, resource surface, error handling, and conventions.
4
+ ---
5
+
6
+ # AEGIS TypeScript SDK (`aegis-platform-sdk`)
7
+
8
+ Typed, zero-dependency client for the AEGIS HTTPS API. Mirrors the Python
9
+ SDK (`aegis-platform-sdk` on PyPI, import `aegis`) — same resources, same
10
+ error hierarchy, same auth model.
11
+
12
+ ## Rules
13
+
14
+ 1. **Never hand-roll `fetch` calls against an AEGIS backend** in a project
15
+ that has this SDK — construct one `AegisClient` and use its resources.
16
+ For endpoints the SDK doesn't wrap yet, use the escape hatch
17
+ `client.request(method, path, { params, json })` (it still gets auth +
18
+ error mapping), and note the gap so it can be added to the SDK.
19
+ 2. **Auth**: programmatic callers use an OSDK token (`osdk_…`, issued in
20
+ the AEGIS UI under Governance → OSDK Applications), passed as
21
+ `new AegisClient({ baseUrl, token })` or via env `AEGIS_API_URL` +
22
+ `AEGIS_TOKEN`. Interactive flows call
23
+ `await client.auth.login(username, password, { totpCode? })` — the JWT
24
+ attaches to the client automatically.
25
+ 3. **Never log or persist tokens.** `osdk.create()`/`osdk.rotate()` return
26
+ the plaintext secret exactly once.
27
+ 4. **Error handling**: catch the SDK hierarchy, not raw HTTP.
28
+ `AuthError` (401) → re-auth; `PermissionDeniedError` (403) → surface the
29
+ missing permission (`err.detail`); `NotFoundError` (404) → may be tenant
30
+ scoping, not just absence; base `AegisAPIError` exposes
31
+ `statusCode` / `detail` / `payload` (e.g. dataset merge conflicts arrive
32
+ as 409 with the conflict body in `payload`).
33
+ 5. **Everything is tenant-scoped** by the token's identity. Do not build
34
+ cross-tenant logic client-side.
35
+
36
+ ## Client construction
37
+
38
+ ```ts
39
+ import { AegisClient } from "aegis-platform-sdk";
40
+
41
+ const client = new AegisClient({
42
+ baseUrl: process.env.AEGIS_API_URL, // e.g. https://aegis.example.com
43
+ token: process.env.AEGIS_TOKEN, // osdk_… or JWT; optional if using login()
44
+ timeoutMs: 15_000, // default
45
+ });
46
+ ```
47
+
48
+ Server-side only for secrets: in browser apps, never embed an `osdk_…`
49
+ token — proxy through your backend or use the login flow.
50
+
51
+ ## Resource surface (v0.1)
52
+
53
+ - `client.auth` — `login`, `me` (WhoAmI: roles/permissions/tenant), `enableDevMode`
54
+ - `client.iam` — `users.list/get`, `roles.list/get`, `groups` CRUD + members, `permissions.list(resource?)`, `nav.tree(asRoleId?)`
55
+ - `client.osdk` — OSDK token lifecycle: `list/get/create(name, scopes, expiresAt?)/rotate/revoke`
56
+ - `client.operator.tasks` — `list/get/create({ prompt_text, … })/cancel/retry/reprioritize`
57
+ - `client.ontology`
58
+ - `objects` — `get/list(kind, {limit, offset, q})/create(kind, properties, name?)/createMany/delete/bulkDelete/links/history/queryTimeseries/appendTimeseries`
59
+ - `graph.expand(seedId, {depth, limit})`, `explorer.histogram/timeline`
60
+ - `objectTypes` CRUD, `linkTypes.declare/delete`
61
+ - `osdkManifest()/osdkFunctions()/osdkGenerate(lang?)` — typed codegen from the live ontology
62
+ - `client.aip` — `flows` (list/get/runs/patch/run), `agents` (list/get/patch/manualRun/runs), `models` (catalog/defaults/setDefault), `budget` (get/set)
63
+ - `client.functions` — Code Functions: CRUD, `invoke(slug, inputs)`, tests, `publish`, `versions`, pull-request lifecycle + CI
64
+ - `client.codeRepositories` — repos, branches, CI, merge
65
+ - `client.datasets` — `list/get/sample`, branches, transactions (`beginTransaction(name, "SNAPSHOT"|"APPEND"|"UPDATE"|"DELETE")` → `commitTransaction`/`abortTransaction`), `mergeFastForward`/`mergeThreeWay`, classification, markings
66
+
67
+ ## Conventions
68
+
69
+ - Wire fields are `snake_case` (backend-shaped); SDK method names are
70
+ `camelCase`. Request bodies you build use snake_case keys (e.g.
71
+ `{ prompt_text, project_id }`).
72
+ - Loosely-typed returns are `Json` (`Record<string, unknown>`) — same
73
+ policy as the Python SDK's `dict`; they graduate to named interfaces as
74
+ endpoints stabilize.
75
+ - `ontology.objects.list(kind)` maps `kind` → query param `node_type`
76
+ (AEGIS nodes carry `node_type` = ontology kind).
77
+ - Datasets writes are transactional: begin → commit/abort. Never write
78
+ without a transaction.
79
+ - Prefer `AbortSignal` via `opts.signal` on `client.request` for
80
+ cancellable calls; default is a per-request timeout.
81
+
82
+ ## Extending the SDK itself
83
+
84
+ The SDK repo is `Safe-Core/aegis-typescript-sdk` (private). Roadmap and
85
+ parity plan live in `docs/PLAN.md` there. Every new AEGIS endpoint that
86
+ external apps need should land as a resource method there (paired with the
87
+ Python SDK — see the repo plan), not as ad-hoc fetch code in the consuming
88
+ app.