@uluops/ops-sdk 6.0.0 → 6.3.1
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/CHANGELOG.md +55 -1
- package/README.md +65 -1
- package/dist/client.d.ts +69 -78
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +70 -62
- package/dist/client.js.map +1 -1
- package/dist/config/constants.d.ts +3 -1
- package/dist/config/constants.d.ts.map +1 -1
- package/dist/config/constants.js +2 -0
- package/dist/config/constants.js.map +1 -1
- package/dist/config/generated-version.d.ts +1 -1
- package/dist/config/generated-version.js +1 -1
- package/dist/config/index.d.ts +1 -0
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +1 -0
- package/dist/config/index.js.map +1 -1
- package/dist/config/workspace-org.d.ts +77 -0
- package/dist/config/workspace-org.d.ts.map +1 -0
- package/dist/config/workspace-org.js +182 -0
- package/dist/config/workspace-org.js.map +1 -0
- package/dist/errors/errors.d.ts +47 -0
- package/dist/errors/errors.d.ts.map +1 -1
- package/dist/errors/errors.js +39 -0
- package/dist/errors/errors.js.map +1 -1
- package/dist/http/http-client.d.ts +46 -0
- package/dist/http/http-client.d.ts.map +1 -1
- package/dist/http/http-client.js +88 -5
- package/dist/http/http-client.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +1 -0
- package/dist/types/index.js.map +1 -1
- package/dist/types/org.d.ts +25 -0
- package/dist/types/org.d.ts.map +1 -0
- package/dist/types/org.js +2 -0
- package/dist/types/org.js.map +1 -0
- package/dist/types/response-schemas.d.ts +8 -0
- package/dist/types/response-schemas.d.ts.map +1 -1
- package/dist/types/response-schemas.js +35 -0
- package/dist/types/response-schemas.js.map +1 -1
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,58 @@ All notable changes to `@uluops/ops-sdk` will be documented in this file.
|
|
|
4
4
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
|
|
6
6
|
|
|
7
|
+
## [6.3.1] - 2026-09-13
|
|
8
|
+
|
|
9
|
+
### Security
|
|
10
|
+
|
|
11
|
+
Security audit of the org-routing train (ops-uluops-api run #187, 2026-09-13). None of these was a bypass; each is a channel by which the wrong org could be chosen silently.
|
|
12
|
+
|
|
13
|
+
- **`resolveWorkspaceOrg` walk is bounded by the home directory** when `cwd` is under it: a `.uluops.json` at `/`, `/Users` or a container root can no longer become the default for every checkout beneath it (the single-default leak D13 exists to remove, one layer down). Outside home the walk still reaches the root. New `home` option (default `os.homedir()`), injectable for tests.
|
|
14
|
+
- **A workspace file owned by another user is refused**, not skipped — the planting vector is a shared parent directory. New `uid` option (default `process.getuid()`; `undefined` disables the check on platforms without uids).
|
|
15
|
+
- **The workspace file's key check is an allowlist** (`org`, `$schema`). It was a ten-name denylist while the error said "may carry only org"; `baseURL`, `apikey`, `token` passed. Inert (only `org` was read), but the stated invariant is now the enforced one.
|
|
16
|
+
- **`"personal"` is honoured as an explicit value** (`resolveWorkspaceOrg({ explicit: 'personal' })`, `withOrg('personal')`): no header, `source: 'explicit'`. It used to go to the wire as a slug (404 `ORG_NOT_FOUND`, or a real org if anyone registers the name). `withOrg('personal')` does not cancel a constructor `orgSlug`.
|
|
17
|
+
- **Per-call org header is set last, and an org header in `options.headers` is refused** on a scoped view. The spread order let a caller header win, and `X-Org-Id` outranks `X-Org-Slug` server-side — no live caller did this; the invariant held by luck.
|
|
18
|
+
|
|
19
|
+
## [6.3.0] - 2026-09-13
|
|
20
|
+
|
|
21
|
+
### Added
|
|
22
|
+
|
|
23
|
+
- **`resolveWorkspaceOrg()` — the D13 workspace default** (project-org-routing-and-rehome spec D13, §2.0). Walks upward from `cwd` to the nearest `.uluops.json` and honours only its `org`; the reserved value `"personal"` stops the walk and means "no org" (a personal repo cloned under a work tree carries it so the outer file does not win). Precedence: `explicit` (a `--org` flag, an MCP tool's `org` argument) > nearest workspace file > `ULUOPS_ORG_SLUG` (kept as the lowest fall-through for headless environments) > personal. Returns `{ org, source, path }` so a caller can print *why* a call landed where it did.
|
|
24
|
+
|
|
25
|
+
**The file may carry only `org`.** `apiKey`, `baseUrl`, `profile`, `credentials`, `sessionToken`, `email`, `password` are refused with `InputValidationError`, not ignored — a `.env` in cwd once retargeted the CLI's base URL, and the one guard that keeps that footgun from transferring is that this file cannot name a target or an identity. Malformed JSON and invalid slugs are refused loudly for the same reason: a silently ignored file is a silently wrong org. The slug is server-relative, so "where it landed" output should print the base URL beside the org.
|
|
26
|
+
|
|
27
|
+
Lives here, not in each consumer: the CLI and the tracker MCP both need it, and two copies of a walk-up function in two repos are the drift class the spec exists to remove. `findWorkspaceOrgFile` and `readWorkspaceOrgFile` are exported for tooling that wants to explain the answer. `ENV_VARS.ORG_SLUG` added. Tests build their own temp trees and pass `stopAt` so a real `.uluops.json` above the temp dir cannot leak in — this workspace will carry one.
|
|
28
|
+
|
|
29
|
+
## [6.2.0] - 2026-09-13
|
|
30
|
+
|
|
31
|
+
### Added
|
|
32
|
+
|
|
33
|
+
- **Per-call `org` on every project, run, issue and analytics operation** (project-org-routing-and-rehome spec §3.2, D12). Each method on `client.projects`, `client.runs`, `client.issues` and `client.analytics` takes a trailing `options?: { org?: string }` (run writes: `RunCallOptions`, which also carries the existing `_skipClientValidation`). `org` is the target org's slug and becomes `X-Org-Slug` on that one request, overriding the constructor-level `orgSlug`. **Precedence on the wire, lowest to highest: personal org (no header) < constructor `orgSlug` < per-call `org`; an API key BOUND to an org ignores both headers and returns `403 ORG_ACCESS_DENIED` if they name a different org** — the platform's rule, surfaced verbatim. The API never infers an org from a project name (spec D2): a call that names no org creates or targets the *personal* project of that name even when a work org has one by the same name.
|
|
34
|
+
|
|
35
|
+
**Mechanism, because it differs from the spec's plan and the difference is worth knowing.** The spec (§3.2) said every operation would migrate from sdk-core's verb helpers to `client.request(..., { headers })`. sdk-core's `get/post/patch/put/delete` all delegate to `this.request`, so instead `OpsHttpClient` overrides `request` and exposes `withOrg(slug)`, a prototype-chained VIEW of the client that merges the header on every request it makes. One seam, zero operation rewrites, and the view shares the root's auth strategy, so a session installed on the root is honoured. `OpsClient` mints the view per call. Same wire contract; the test file asserts on the outgoing request as nock sees it, including a `badheaders` control proving the root client sends no header and that minting a view does not mutate the root.
|
|
36
|
+
|
|
37
|
+
- **`OpsHttpClient.withOrg(slug)`** and **`scopedOrg`** (read-only, for diagnostics) on the low-level client; `ORG_SLUG_PATTERN` and `ORG_SLUG_HEADER` exported. `withOrg` validates the slug with the same pattern as `orgSlug` and throws `InputValidationError` — it is a header value, so CRLF and whitespace can never reach the wire.
|
|
38
|
+
|
|
39
|
+
- **Org-routing error codes and type guards**: `INSUFFICIENT_ORG_ROLE` / `isInsufficientOrgRoleError` (403 — below the org's write floor; on tracker writes the API's body carries `details.applied: false` and forbids retrying without `org`: **do not retry the same call org-less — that is not a fallback, it files the work in the caller's personal org**), `ORG_ACCESS_DENIED` / `isOrgAccessDeniedError` (403 — not a member, or a bound key naming another org), and `PROJECT_REHOMED` / `isProjectRehomedError` with `ProjectRehomedDetails` (410 — spec D14: the project this name once denoted in this org now lives in `details.target_org.slug`; pass it as `org` and the same call succeeds). The rehomed guard requires the details shape it promises, not only the code, so a narrowed error is safe to dereference. `InsufficientOrgRoleDetails` declared.
|
|
40
|
+
|
|
41
|
+
### Changed
|
|
42
|
+
|
|
43
|
+
- `client.runs.*` write and preview options are typed `RunCallOptions` (`OrgScopedOptions & { _skipClientValidation? }`) instead of the inline `{ _skipClientValidation?: boolean }`. Structurally compatible; nothing a caller wrote breaks.
|
|
44
|
+
|
|
45
|
+
## [6.1.0] - 2026-09-10
|
|
46
|
+
|
|
47
|
+
### Added
|
|
48
|
+
|
|
49
|
+
- **`description` on `IssueResponseSchema` and on `RunDetailsResponseSchema`'s `recommendations[]`** — the occurrence's own account of a sighting, as opposed to the issue's `title`. Both `.nullable().optional()`.
|
|
50
|
+
|
|
51
|
+
**Why it needed declaring at all, and why the failure was invisible.** `z.object()` strips undeclared keys and returns a clean 200. So a listing that omitted `description` was indistinguishable from findings that genuinely had none, and every consumer reasonably read the omission as an absence. Nothing errored; nothing logged. This is the same mechanism, on the same file, as `issueStatus` / `659d061d` — the third field to go missing this way, which is why each now carries its own test suite asserting the **value survives the parse**, not merely that parsing succeeds. `success: true` passes against the broken state.
|
|
52
|
+
|
|
53
|
+
The cost was real: a remediation pass over `ops-uluops-api` spent a full iteration re-investigating seven findings whose descriptions each said "FIXED IN RUN" — one call away on `get_issue_details`, which does return the field (tracker `fc862289`).
|
|
54
|
+
|
|
55
|
+
**Optional in both directions, deliberately.** A required key makes `.parse()` throw on every issue read against an API that predates the change, and the SDK and API deploy independently. Absent means "this read path does not supply it"; `null` means "the latest occurrence has no description". Same reasoning already recorded on `mergedIntoIssueId`.
|
|
56
|
+
|
|
57
|
+
**Not a column on `issues`.** It lives on `occurrences`. `GET /projects/:id/issues` derives it per issue via a correlated subquery (ops-uluops-api); the by-id and by-fingerprint lookups do not supply it and will report `undefined`. Requires ops-uluops-api with the matching change deployed — against an older API this parses cleanly and yields `undefined`, which is the intended degradation, not a silent one: the field's absence is now expressible, where before it was indistinguishable from a finding having no description.
|
|
58
|
+
|
|
7
59
|
## [6.0.0] - 2026-08-24
|
|
8
60
|
|
|
9
61
|
### BREAKING — breaking-train Train C: the STRICT release (tool-sweep T10/T11/T13/T22/T23)
|
|
@@ -101,7 +153,9 @@ deploys; SDK 6.0.0 (after the flip) re-pins the new shapes strictly.
|
|
|
101
153
|
|
|
102
154
|
### Added
|
|
103
155
|
|
|
104
|
-
- **`runs.save()` surfaces the `analysisWrite` confirmation** (tool-sweep T21; API
|
|
156
|
+
- **`runs.save()` surfaces the `analysisWrite` confirmation** (tool-sweep T21; API 2.0.0+, or a
|
|
157
|
+
1.70.0 deploy after 2026-08-19 — this read "≥1.71.0" until 2026-09-13; no such version was
|
|
158
|
+
ever declared, see ops-uluops-api issue `aea76608`).
|
|
105
159
|
The save response envelope now carries `analysisWrite` as a sibling of `data` — the same
|
|
106
160
|
placement as the update envelope — read via `rawEnvelope` and returned on the result
|
|
107
161
|
(`analysisWrite: AnalysisWriteEcho | null`; `recordMode: 'initial'` on this path). Like the
|
package/README.md
CHANGED
|
@@ -307,7 +307,8 @@ const client = new OpsClient({
|
|
|
307
307
|
debug: false, // Enable debug logging
|
|
308
308
|
|
|
309
309
|
// Multi-tenancy
|
|
310
|
-
orgSlug: 'my-org', // Org slug (sets X-Org-Slug header on all requests)
|
|
310
|
+
orgSlug: 'my-org', // Org slug (sets X-Org-Slug header on all requests);
|
|
311
|
+
// any method's trailing `{ org }` overrides it per call
|
|
311
312
|
|
|
312
313
|
// Callbacks
|
|
313
314
|
onTokenRefresh: (token) => { /* handle token refresh */ },
|
|
@@ -321,6 +322,45 @@ const client = new OpsClient({
|
|
|
321
322
|
});
|
|
322
323
|
```
|
|
323
324
|
|
|
325
|
+
#### Org routing — which org a call lands in
|
|
326
|
+
|
|
327
|
+
Every project, run, issue and analytics method takes a trailing `options` with `org?: string`
|
|
328
|
+
(run writes: `RunCallOptions`, which also carries `_skipClientValidation`). It becomes the
|
|
329
|
+
`X-Org-Slug` header on that one request.
|
|
330
|
+
|
|
331
|
+
```typescript
|
|
332
|
+
await client.runs.save(input, { org: 'ulu-labs' }); // this call → ulu-labs
|
|
333
|
+
await client.projects.list({ org: 'ulu-labs' }); // reads take it too
|
|
334
|
+
await client.projects.list(); // → constructor orgSlug, else your personal org
|
|
335
|
+
```
|
|
336
|
+
|
|
337
|
+
**Precedence on the wire, lowest to highest:** personal org (no header) < constructor `orgSlug`
|
|
338
|
+
< per-call `org`. An API key **bound** to an org ignores both headers and answers
|
|
339
|
+
`403 ORG_ACCESS_DENIED` if they name a different org. The API never infers an org from a project
|
|
340
|
+
name: a call that names no org creates or targets the *personal* project of that name, even when
|
|
341
|
+
a work org has one by the same name (spec D2). Name the org.
|
|
342
|
+
|
|
343
|
+
Three org-routing errors are worth branching on (all exported with type guards):
|
|
344
|
+
|
|
345
|
+
| Code | Status | Guard | What to do |
|
|
346
|
+
|---|---|---|---|
|
|
347
|
+
| `INSUFFICIENT_ORG_ROLE` | 403 | `isInsufficientOrgRoleError` | Your role in that org is below `publisher`. **Do not retry without `org`** — an org-less retry files the work in your personal org; the API says so in the body (`details.applied: false`). |
|
|
348
|
+
| `ORG_ACCESS_DENIED` | 403 | `isOrgAccessDeniedError` | Not a member of that org, or your key is bound to a different one. Terminal. |
|
|
349
|
+
| `PROJECT_REHOMED` | 410 | `isProjectRehomedError` | The project moved orgs. `err.details.target_org.slug` is where it lives — pass it as `org` and retry the same call. |
|
|
350
|
+
|
|
351
|
+
Low-level: `new OpsHttpClient(cfg).withOrg('acme')` returns a view of the client scoped to that org.
|
|
352
|
+
|
|
353
|
+
**Where does the default come from?** For tools that run inside a checkout (the CLI, the tracker
|
|
354
|
+
MCP), `resolveWorkspaceOrg({ explicit, cwd })` implements the spec's D13 rule: an explicit value
|
|
355
|
+
wins; else the nearest `.uluops.json` above `cwd` (`{ "org": "ulu-labs" }`, or `{ "org": "personal" }`
|
|
356
|
+
to stop the walk in a personal repo nested under a work tree); else `ULUOPS_ORG_SLUG`; else your
|
|
357
|
+
personal org. The file may carry only `org` (and `$schema`) — any other key is refused, not ignored.
|
|
358
|
+
Two more refusals since 6.3.1 (security audit run #187): the walk never rises above your home
|
|
359
|
+
directory (a file at `/` or `/Users` cannot become everyone's default), and a file owned by another
|
|
360
|
+
user is refused (a shared parent directory is the planting vector). `"personal"` is also honoured as
|
|
361
|
+
an explicit value — `{ org: 'personal' }` sends no header. On a scoped call the per-call org header
|
|
362
|
+
is set last and an `X-Org-Slug`/`X-Org-Id` in `options.headers` is refused.
|
|
363
|
+
|
|
324
364
|
---
|
|
325
365
|
|
|
326
366
|
### Security Events
|
|
@@ -1243,6 +1283,30 @@ Track and manage validation issues.
|
|
|
1243
1283
|
> is soft-deleted, and the API refuses to set it through any update path. Correlation
|
|
1244
1284
|
> follows it; the by-fingerprint endpoints deliberately do not.
|
|
1245
1285
|
|
|
1286
|
+
> **`description` is available on issue listings and run recommendations (since v6.1.0).**
|
|
1287
|
+
> This is the occurrence's own account of a sighting — what the agent actually wrote —
|
|
1288
|
+
> as opposed to the issue's `title`. It is what tells you a finding was already resolved:
|
|
1289
|
+
> agents routinely end a description with *"FIXED IN RUN"*, and the title alone states
|
|
1290
|
+
> the defect in the present tense regardless.
|
|
1291
|
+
>
|
|
1292
|
+
> **It is not a column on `issues`.** It lives on `occurrences`, and only the read paths
|
|
1293
|
+
> that derive it carry it: `listIssues` (the API computes the latest occurrence's
|
|
1294
|
+
> description per issue) and `runs.getDetails`'s `recommendations[]`. The by-id and
|
|
1295
|
+
> by-fingerprint lookups do not supply it and report `undefined`. `get_issue_details`
|
|
1296
|
+
> on the API side has always returned it via the occurrence record.
|
|
1297
|
+
>
|
|
1298
|
+
> The same silent-strip applies as above, and it has now cost real work: before v6.1.0
|
|
1299
|
+
> the field was undeclared, so `z.object()` dropped it and a listing was
|
|
1300
|
+
> **indistinguishable from findings that genuinely had no description**. A remediation
|
|
1301
|
+
> pass read the omission as an absence and spent an entire iteration re-investigating
|
|
1302
|
+
> seven findings whose descriptions each said they were already fixed. If you are on an
|
|
1303
|
+
> older SDK you are not seeing `null` — you are seeing nothing.
|
|
1304
|
+
>
|
|
1305
|
+
> Requires a matching `ops-uluops-api`. Against an older API this parses cleanly and
|
|
1306
|
+
> yields `undefined`; the field being *expressible* is the point, since `undefined`
|
|
1307
|
+
> ("this path did not supply it") and `null` ("this occurrence recorded none") are now
|
|
1308
|
+
> distinguishable where before neither was.
|
|
1309
|
+
|
|
1246
1310
|
#### `client.issues.create(input)`
|
|
1247
1311
|
|
|
1248
1312
|
Create a user-submitted issue.
|
package/dist/client.d.ts
CHANGED
|
@@ -6,6 +6,7 @@ import type { Run, RunSummary, RunAnalysis, ProjectAnalysisList, AnalysisRecords
|
|
|
6
6
|
import type { Issue, CreateUserIssueInput, UpdateIssueInput, UpdateIssueStatusInput, CreateIssueNoteInput, IssueNote, IssueDetails, IssueHistoryEnvelope, IssueSearchQuery, ListIssuesQuery, BulkStatusUpdateItem, StatusUpdateResult } from './types/issues.js';
|
|
7
7
|
import type { AnalyticsQuery, AgentPerformance, AgentInfo, AgentLifecycleEntry, AgentReliabilityQuery, BurndownQuery, VelocityQuery, DiscoveryQuery, AgentMatrixQuery, TaxonomyResponse, AgentReliabilityResult, ResolutionRateResult, FileHotspotResult, TaxonomyDistributionResult, FullTaxonomyAnalyticsResult, BurndownResultResponse, VelocityResultResponse, DiscoveryResultResponse, AgentMatrixResultResponse, TrendSummaryResult } from './types/analytics.js';
|
|
8
8
|
import type { MessageResponse, DeleteResult } from './types/responses.js';
|
|
9
|
+
import type { OrgScopedOptions, RunCallOptions } from './types/org.js';
|
|
9
10
|
/**
|
|
10
11
|
* OpsClient configuration options.
|
|
11
12
|
* All HTTP-level options (baseUrl, timeout, retries, debug, auth) are available.
|
|
@@ -67,6 +68,12 @@ export declare class OpsClient {
|
|
|
67
68
|
* @returns `'api_key'`, `'session'`, or `null` if unauthenticated
|
|
68
69
|
*/
|
|
69
70
|
getAuthType(): 'api_key' | 'session' | null;
|
|
71
|
+
/**
|
|
72
|
+
* The HTTP client for one call: a per-call `org` (spec §3.2) yields a view
|
|
73
|
+
* carrying `X-Org-Slug: <org>` on that request only; otherwise the root
|
|
74
|
+
* client (constructor `orgSlug`, else the personal org).
|
|
75
|
+
*/
|
|
76
|
+
private scope;
|
|
70
77
|
/** Authentication, API keys, sessions, and user profile management */
|
|
71
78
|
readonly auth: {
|
|
72
79
|
/** Register a new user account. */
|
|
@@ -116,174 +123,158 @@ export declare class OpsClient {
|
|
|
116
123
|
/** Project CRUD, summaries, trends, issue listing, and bulk operations */
|
|
117
124
|
readonly projects: {
|
|
118
125
|
/** List all projects visible to the caller — {data, total} (6.0.0, T13). */
|
|
119
|
-
list: () => Promise<{
|
|
126
|
+
list: (options?: OrgScopedOptions) => Promise<{
|
|
120
127
|
data: Project[];
|
|
121
128
|
total: number;
|
|
122
129
|
}>;
|
|
123
130
|
/** Get a project by id or name. */
|
|
124
|
-
get: (idOrName: string) => Promise<Project>;
|
|
131
|
+
get: (idOrName: string, options?: OrgScopedOptions) => Promise<Project>;
|
|
125
132
|
/** Create a new project. */
|
|
126
|
-
create: (input: CreateProjectInput) => Promise<Project>;
|
|
133
|
+
create: (input: CreateProjectInput, options?: OrgScopedOptions) => Promise<Project>;
|
|
127
134
|
/** Update a project's metadata. */
|
|
128
|
-
update: (idOrName: string, input: UpdateProjectInput) => Promise<Project>;
|
|
135
|
+
update: (idOrName: string, input: UpdateProjectInput, options?: OrgScopedOptions) => Promise<Project>;
|
|
129
136
|
/** Permanently delete a project (requires confirmation). */
|
|
130
|
-
delete: (idOrName: string, input: DeleteProjectInput) => Promise<DeleteResult>;
|
|
137
|
+
delete: (idOrName: string, input: DeleteProjectInput, options?: OrgScopedOptions) => Promise<DeleteResult>;
|
|
131
138
|
/** Soft-delete a project; reversible via `restore()`. */
|
|
132
|
-
softDelete: (idOrName: string, input: DeleteProjectInput) => Promise<DeleteResult>;
|
|
139
|
+
softDelete: (idOrName: string, input: DeleteProjectInput, options?: OrgScopedOptions) => Promise<DeleteResult>;
|
|
133
140
|
/** Restore a soft-deleted project. */
|
|
134
|
-
restore: (idOrName: string) => Promise<Project>;
|
|
141
|
+
restore: (idOrName: string, options?: OrgScopedOptions) => Promise<Project>;
|
|
135
142
|
/** Rename a project. */
|
|
136
|
-
rename: (input: RenameProjectInput) => Promise<Project>;
|
|
143
|
+
rename: (input: RenameProjectInput, options?: OrgScopedOptions) => Promise<Project>;
|
|
137
144
|
/** Get aggregate summary stats for a project. */
|
|
138
|
-
getSummary: (idOrName: string) => Promise<ProjectSummaryResponse>;
|
|
145
|
+
getSummary: (idOrName: string, options?: OrgScopedOptions) => Promise<ProjectSummaryResponse>;
|
|
139
146
|
/** Get time-series trends for a project. */
|
|
140
|
-
getTrends: (idOrName: string, query?: ProjectTrendsQuery) => Promise<ProjectTrends>;
|
|
147
|
+
getTrends: (idOrName: string, query?: ProjectTrendsQuery, options?: OrgScopedOptions) => Promise<ProjectTrends>;
|
|
141
148
|
/** List a project's issues (filtered) — {data, total} (6.0.0, T13).
|
|
142
149
|
* Replaces listIssuesWithCount, which existed only to recover the count
|
|
143
150
|
* the old array return dropped. */
|
|
144
|
-
listIssues: (idOrName: string, query?: ListProjectIssuesQuery) => Promise<{
|
|
151
|
+
listIssues: (idOrName: string, query?: ListProjectIssuesQuery, options?: OrgScopedOptions) => Promise<{
|
|
145
152
|
data: Issue[];
|
|
146
153
|
total: number;
|
|
147
154
|
}>;
|
|
148
155
|
/** Bulk-update the status of many issues in a project. */
|
|
149
|
-
bulkUpdateIssueStatus: (idOrName: string, updates: BulkIssueStatusUpdate[]) => Promise<BulkIssueStatusResult>;
|
|
156
|
+
bulkUpdateIssueStatus: (idOrName: string, updates: BulkIssueStatusUpdate[], options?: OrgScopedOptions) => Promise<BulkIssueStatusResult>;
|
|
150
157
|
/** Merge duplicate issues within a project. */
|
|
151
|
-
mergeIssues: (idOrName: string, input: MergeIssuesInput) => Promise<MergeIssuesResult>;
|
|
158
|
+
mergeIssues: (idOrName: string, input: MergeIssuesInput, options?: OrgScopedOptions) => Promise<MergeIssuesResult>;
|
|
152
159
|
/**
|
|
153
160
|
* Merge one project into another (merge-projects spec v0.3.4) — the
|
|
154
161
|
* source's runs and issues are re-keyed into the target inside one
|
|
155
162
|
* advisory-locked transaction; the source is soft-deleted by default.
|
|
156
163
|
* Pairwise only. Dry-run first: `{ ...input, dryRun: true }`.
|
|
157
164
|
*/
|
|
158
|
-
mergeProjects: (input: MergeProjectsInput) => Promise<MergeProjectsResult>;
|
|
165
|
+
mergeProjects: (input: MergeProjectsInput, options?: OrgScopedOptions) => Promise<MergeProjectsResult>;
|
|
159
166
|
};
|
|
160
167
|
/** Execution run save, preview, diff, archive, and retrieval */
|
|
161
168
|
readonly runs: {
|
|
162
169
|
/** Save an execution run (agents, scores, recommendations). */
|
|
163
|
-
save: (input: SaveRunInput, options?:
|
|
164
|
-
_skipClientValidation?: boolean;
|
|
165
|
-
}) => Promise<SaveRunResponse>;
|
|
170
|
+
save: (input: SaveRunInput, options?: RunCallOptions) => Promise<SaveRunResponse>;
|
|
166
171
|
/** Preview a save without persisting (dry-run). */
|
|
167
|
-
validate: (input: SaveRunInput, options?:
|
|
168
|
-
_skipClientValidation?: boolean;
|
|
169
|
-
}) => Promise<ValidateRunResponse>;
|
|
172
|
+
validate: (input: SaveRunInput, options?: RunCallOptions) => Promise<ValidateRunResponse>;
|
|
170
173
|
/** Diff two runs to surface regressions/improvements. */
|
|
171
|
-
diff: (query: RunDiffQuery) => Promise<RunDiffResult>;
|
|
174
|
+
diff: (query: RunDiffQuery, options?: OrgScopedOptions) => Promise<RunDiffResult>;
|
|
172
175
|
/** Archive old runs by number/date/keep-last filter. */
|
|
173
|
-
archive: (input: ArchiveRunsInput) => Promise<ArchiveRunsResult>;
|
|
176
|
+
archive: (input: ArchiveRunsInput, options?: OrgScopedOptions) => Promise<ArchiveRunsResult>;
|
|
174
177
|
/** Update a run (project + run number). Discards the analysis-write echo (use updateWithEcho); on analysis-bearing calls can throw AnalysisEchoMismatchError AFTER the write landed. */
|
|
175
|
-
update: (input: UpdateRunByNumberInput, options?:
|
|
176
|
-
_skipClientValidation?: boolean;
|
|
177
|
-
}) => Promise<RunWriteEcho>;
|
|
178
|
+
update: (input: UpdateRunByNumberInput, options?: RunCallOptions) => Promise<RunWriteEcho>;
|
|
178
179
|
/** Read-only preview of an analysis-bearing update (project + run number): what a write under the requested record_write_mode would supersede, create, and retire. */
|
|
179
|
-
previewUpdate: (input: UpdateRunPreviewByNumberInput, options?:
|
|
180
|
-
_skipClientValidation?: boolean;
|
|
181
|
-
}) => Promise<RunUpdatePreview>;
|
|
180
|
+
previewUpdate: (input: UpdateRunPreviewByNumberInput, options?: RunCallOptions) => Promise<RunUpdatePreview>;
|
|
182
181
|
/** Update (project + run number) returning the run AND the §3.9 analysis-write echo — success-path visibility of superseded/created counts (F17). */
|
|
183
|
-
updateWithEcho: (input: UpdateRunByNumberInput, options?:
|
|
184
|
-
_skipClientValidation?: boolean;
|
|
185
|
-
}) => Promise<UpdateRunWithEchoResult>;
|
|
182
|
+
updateWithEcho: (input: UpdateRunByNumberInput, options?: RunCallOptions) => Promise<UpdateRunWithEchoResult>;
|
|
186
183
|
/** List run summaries for a project — {data, total} (6.0.0, T13). */
|
|
187
|
-
listByProject: (projectId: string, query?: ListRunsQuery) => Promise<{
|
|
184
|
+
listByProject: (projectId: string, query?: ListRunsQuery, options?: OrgScopedOptions) => Promise<{
|
|
188
185
|
data: RunSummary[];
|
|
189
186
|
total: number;
|
|
190
187
|
}>;
|
|
191
188
|
/** Get the latest run for a project (optionally by workflow type). */
|
|
192
|
-
getLatest: (projectId: string, workflowType?: string) => Promise<Run>;
|
|
189
|
+
getLatest: (projectId: string, workflowType?: string, options?: OrgScopedOptions) => Promise<Run>;
|
|
193
190
|
/** Get full details for a run (defaults to latest when runNumber omitted). */
|
|
194
|
-
getDetails: (projectId: string, runNumber?: number) => Promise<RunDetails>;
|
|
191
|
+
getDetails: (projectId: string, runNumber?: number, options?: OrgScopedOptions) => Promise<RunDetails>;
|
|
195
192
|
/** Get a single run by its id. */
|
|
196
|
-
get: (runId: string) => Promise<Run>;
|
|
193
|
+
get: (runId: string, options?: OrgScopedOptions) => Promise<Run>;
|
|
197
194
|
/** Update a run by id. Discards the analysis-write echo (use updateByIdWithEcho); on analysis-bearing calls can throw AnalysisEchoMismatchError AFTER the write landed. */
|
|
198
|
-
updateById: (runId: string, input: UpdateRunInput, options?:
|
|
199
|
-
_skipClientValidation?: boolean;
|
|
200
|
-
}) => Promise<RunWriteEcho>;
|
|
195
|
+
updateById: (runId: string, input: UpdateRunInput, options?: RunCallOptions) => Promise<RunWriteEcho>;
|
|
201
196
|
/** Read-only preview of an analysis-bearing update, by run id. See previewUpdate. */
|
|
202
|
-
previewUpdateById: (runId: string, input: UpdateRunPreviewInput, options?:
|
|
203
|
-
_skipClientValidation?: boolean;
|
|
204
|
-
}) => Promise<RunUpdatePreview>;
|
|
197
|
+
previewUpdateById: (runId: string, input: UpdateRunPreviewInput, options?: RunCallOptions) => Promise<RunUpdatePreview>;
|
|
205
198
|
/** By-id sibling of updateWithEcho (F17). */
|
|
206
|
-
updateByIdWithEcho: (runId: string, input: UpdateRunInput, options?:
|
|
207
|
-
_skipClientValidation?: boolean;
|
|
208
|
-
}) => Promise<UpdateRunWithEchoResult>;
|
|
199
|
+
updateByIdWithEcho: (runId: string, input: UpdateRunInput, options?: RunCallOptions) => Promise<UpdateRunWithEchoResult>;
|
|
209
200
|
/** Delete a run by id. */
|
|
210
|
-
delete: (runId: string) => Promise<DeleteResult>;
|
|
201
|
+
delete: (runId: string, options?: OrgScopedOptions) => Promise<DeleteResult>;
|
|
211
202
|
/** Get the structured analysis attached to a run. */
|
|
212
|
-
getAnalysis: (runId: string) => Promise<RunAnalysis>;
|
|
203
|
+
getAnalysis: (runId: string, options?: OrgScopedOptions) => Promise<RunAnalysis>;
|
|
213
204
|
/** List analyses across a project's runs. */
|
|
214
|
-
getProjectAnalysis: (projectId: string, query?: ProjectAnalysisQuery) => Promise<ProjectAnalysisList>;
|
|
205
|
+
getProjectAnalysis: (projectId: string, query?: ProjectAnalysisQuery, options?: OrgScopedOptions) => Promise<ProjectAnalysisList>;
|
|
215
206
|
/** Query individual analysis records across runs. */
|
|
216
|
-
queryAnalysisRecords: (query?: AnalysisRecordsQuery) => Promise<AnalysisRecordsList>;
|
|
207
|
+
queryAnalysisRecords: (query?: AnalysisRecordsQuery, options?: OrgScopedOptions) => Promise<AnalysisRecordsList>;
|
|
217
208
|
/** Get per-run analysis history for a single agent. */
|
|
218
|
-
getAgentRunsAnalysis: (agentName: string, query: AgentRunsAnalysisQuery) => Promise<AgentRunsAnalysis>;
|
|
209
|
+
getAgentRunsAnalysis: (agentName: string, query: AgentRunsAnalysisQuery, options?: OrgScopedOptions) => Promise<AgentRunsAnalysis>;
|
|
219
210
|
};
|
|
220
211
|
/** Issue CRUD, search, status management, notes, and bulk operations */
|
|
221
212
|
readonly issues: {
|
|
222
213
|
/** Create a user-submitted issue. */
|
|
223
|
-
create: (input: CreateUserIssueInput) => Promise<Issue>;
|
|
214
|
+
create: (input: CreateUserIssueInput, options?: OrgScopedOptions) => Promise<Issue>;
|
|
224
215
|
/** Search issues by text/filters. */
|
|
225
|
-
search: (query: IssueSearchQuery) => Promise<Issue[]>;
|
|
216
|
+
search: (query: IssueSearchQuery, options?: OrgScopedOptions) => Promise<Issue[]>;
|
|
226
217
|
/** Get an issue by its fingerprint within a project. */
|
|
227
|
-
getByFingerprint: (fingerprint: string, project: string) => Promise<Issue>;
|
|
218
|
+
getByFingerprint: (fingerprint: string, project: string, options?: OrgScopedOptions) => Promise<Issue>;
|
|
228
219
|
/** Update an issue's status by fingerprint + project. */
|
|
229
|
-
updateStatusByFingerprint: (fingerprint: string, project: string, input: UpdateIssueStatusInput) => Promise<StatusUpdateResult>;
|
|
220
|
+
updateStatusByFingerprint: (fingerprint: string, project: string, input: UpdateIssueStatusInput, options?: OrgScopedOptions) => Promise<StatusUpdateResult>;
|
|
230
221
|
/** Get an issue by id. */
|
|
231
|
-
get: (issueId: string) => Promise<Issue>;
|
|
222
|
+
get: (issueId: string, options?: OrgScopedOptions) => Promise<Issue>;
|
|
232
223
|
/** Get an issue with notes and history detail. */
|
|
233
|
-
getDetails: (issueId: string) => Promise<IssueDetails>;
|
|
224
|
+
getDetails: (issueId: string, options?: OrgScopedOptions) => Promise<IssueDetails>;
|
|
234
225
|
/** Get an issue's change history. */
|
|
235
|
-
getHistory: (issueId: string) => Promise<IssueHistoryEnvelope>;
|
|
226
|
+
getHistory: (issueId: string, options?: OrgScopedOptions) => Promise<IssueHistoryEnvelope>;
|
|
236
227
|
/** Update an issue's status by id. */
|
|
237
|
-
updateStatus: (issueId: string, input: UpdateIssueStatusInput) => Promise<Issue>;
|
|
228
|
+
updateStatus: (issueId: string, input: UpdateIssueStatusInput, options?: OrgScopedOptions) => Promise<Issue>;
|
|
238
229
|
/** Update an issue's metadata by id. */
|
|
239
|
-
update: (issueId: string, input: UpdateIssueInput) => Promise<Issue>;
|
|
230
|
+
update: (issueId: string, input: UpdateIssueInput, options?: OrgScopedOptions) => Promise<Issue>;
|
|
240
231
|
/** Add a note to an issue. */
|
|
241
|
-
addNote: (issueId: string, input: CreateIssueNoteInput) => Promise<IssueNote>;
|
|
232
|
+
addNote: (issueId: string, input: CreateIssueNoteInput, options?: OrgScopedOptions) => Promise<IssueNote>;
|
|
242
233
|
/** Restore a soft-deleted issue. */
|
|
243
|
-
restore: (issueId: string) => Promise<Issue>;
|
|
234
|
+
restore: (issueId: string, options?: OrgScopedOptions) => Promise<Issue>;
|
|
244
235
|
/** Soft-delete an active issue; reversible via `restore()`. */
|
|
245
|
-
softDelete: (issueId: string) => Promise<DeleteResult>;
|
|
236
|
+
softDelete: (issueId: string, options?: OrgScopedOptions) => Promise<DeleteResult>;
|
|
246
237
|
/** Undo the most recent change to an issue. */
|
|
247
|
-
undoLastChange: (issueId: string) => Promise<Issue>;
|
|
238
|
+
undoLastChange: (issueId: string, options?: OrgScopedOptions) => Promise<Issue>;
|
|
248
239
|
/** Bulk-update issue statuses; returns `{ updated, failed }`. */
|
|
249
|
-
bulkUpdateStatus: (updates: BulkStatusUpdateItem[]) => Promise<BulkIssueStatusResult>;
|
|
240
|
+
bulkUpdateStatus: (updates: BulkStatusUpdateItem[], options?: OrgScopedOptions) => Promise<BulkIssueStatusResult>;
|
|
250
241
|
/** List a project's issues by project id (filtered). */
|
|
251
|
-
listByProject: (projectId: string, query?: ListIssuesQuery) => Promise<Issue[]>;
|
|
242
|
+
listByProject: (projectId: string, query?: ListIssuesQuery, options?: OrgScopedOptions) => Promise<Issue[]>;
|
|
252
243
|
};
|
|
253
244
|
/** Agent performance, taxonomy analytics, burndown, velocity, and discovery */
|
|
254
245
|
readonly analytics: {
|
|
255
246
|
/** Get per-agent performance metrics. */
|
|
256
|
-
getAgentPerformance: (query?: AnalyticsQuery) => Promise<AgentPerformance[]>;
|
|
247
|
+
getAgentPerformance: (query?: AnalyticsQuery, options?: OrgScopedOptions) => Promise<AgentPerformance[]>;
|
|
257
248
|
/** Get agent reliability (convergence/recurrence) metrics. */
|
|
258
|
-
getAgentReliability: (query?: AgentReliabilityQuery) => Promise<AgentReliabilityResult>;
|
|
249
|
+
getAgentReliability: (query?: AgentReliabilityQuery, options?: OrgScopedOptions) => Promise<AgentReliabilityResult>;
|
|
259
250
|
/** Get an agent's lifecycle timeline. */
|
|
260
|
-
getAgentLifecycle: (agentName: string, query?: AnalyticsQuery) => Promise<AgentLifecycleEntry[]>;
|
|
251
|
+
getAgentLifecycle: (agentName: string, query?: AnalyticsQuery, options?: OrgScopedOptions) => Promise<AgentLifecycleEntry[]>;
|
|
261
252
|
/** Get issue resolution-rate metrics. */
|
|
262
|
-
getResolutionRates: (query?: AnalyticsQuery) => Promise<ResolutionRateResult[]>;
|
|
253
|
+
getResolutionRates: (query?: AnalyticsQuery, options?: OrgScopedOptions) => Promise<ResolutionRateResult[]>;
|
|
263
254
|
/** Get files with the most recurring issues. */
|
|
264
|
-
getFileHotspots: (query?: AnalyticsQuery) => Promise<FileHotspotResult[]>;
|
|
255
|
+
getFileHotspots: (query?: AnalyticsQuery, options?: OrgScopedOptions) => Promise<FileHotspotResult[]>;
|
|
265
256
|
/** Get the distribution of issues across the failure taxonomy. */
|
|
266
|
-
getTaxonomyDistribution: (query?: AnalyticsQuery) => Promise<TaxonomyDistributionResult[]>;
|
|
257
|
+
getTaxonomyDistribution: (query?: AnalyticsQuery, options?: OrgScopedOptions) => Promise<TaxonomyDistributionResult[]>;
|
|
267
258
|
/** Get the full taxonomy analytics breakdown. */
|
|
268
|
-
getFullTaxonomy: (query?: AnalyticsQuery) => Promise<FullTaxonomyAnalyticsResult>;
|
|
259
|
+
getFullTaxonomy: (query?: AnalyticsQuery, options?: OrgScopedOptions) => Promise<FullTaxonomyAnalyticsResult>;
|
|
269
260
|
/** Get issue burndown over time. */
|
|
270
|
-
getBurndown: (query?: BurndownQuery) => Promise<BurndownResultResponse>;
|
|
261
|
+
getBurndown: (query?: BurndownQuery, options?: OrgScopedOptions) => Promise<BurndownResultResponse>;
|
|
271
262
|
/** Get resolution velocity over time. */
|
|
272
|
-
getVelocity: (query?: VelocityQuery) => Promise<VelocityResultResponse>;
|
|
263
|
+
getVelocity: (query?: VelocityQuery, options?: OrgScopedOptions) => Promise<VelocityResultResponse>;
|
|
273
264
|
/** Get issue-discovery rate metrics. */
|
|
274
|
-
getDiscovery: (query?: DiscoveryQuery) => Promise<DiscoveryResultResponse>;
|
|
265
|
+
getDiscovery: (query?: DiscoveryQuery, options?: OrgScopedOptions) => Promise<DiscoveryResultResponse>;
|
|
275
266
|
/** Get the agent comparison matrix. */
|
|
276
|
-
getAgentMatrix: (query?: AgentMatrixQuery) => Promise<AgentMatrixResultResponse>;
|
|
267
|
+
getAgentMatrix: (query?: AgentMatrixQuery, options?: OrgScopedOptions) => Promise<AgentMatrixResultResponse>;
|
|
277
268
|
/** Get a high-level trend summary. */
|
|
278
|
-
getTrendSummary: (query?: AnalyticsQuery) => Promise<TrendSummaryResult[]>;
|
|
269
|
+
getTrendSummary: (query?: AnalyticsQuery, options?: OrgScopedOptions) => Promise<TrendSummaryResult[]>;
|
|
279
270
|
/**
|
|
280
271
|
* Get analytics by metric name (generic endpoint).
|
|
281
272
|
* Returns unvalidated data — use typed methods (getAgentPerformance, etc.) for validated responses.
|
|
282
273
|
*
|
|
283
274
|
*/
|
|
284
|
-
getByMetric: (metric: analyticsOps.AnalyticsMetric, query?: AnalyticsQuery) => Promise<unknown>;
|
|
275
|
+
getByMetric: (metric: analyticsOps.AnalyticsMetric, query?: AnalyticsQuery, options?: OrgScopedOptions) => Promise<unknown>;
|
|
285
276
|
/** List agents known to the analytics layer. */
|
|
286
|
-
listAgents: (query?: AnalyticsQuery) => Promise<AgentInfo[]>;
|
|
277
|
+
listAgents: (query?: AnalyticsQuery, options?: OrgScopedOptions) => Promise<AgentInfo[]>;
|
|
287
278
|
};
|
|
288
279
|
/** Failure taxonomy schema (domains, modes, severities) */
|
|
289
280
|
readonly taxonomy: {
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAS7E,OAAO,KAAK,YAAY,MAAM,2BAA2B,CAAC;AAE1D,OAAO,KAAK,EACV,aAAa,EACb,UAAU,EACV,aAAa,EACb,gBAAgB,EAChB,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,EACjB,qBAAqB,EACrB,YAAY,EACZ,aAAa,EACb,QAAQ,EACR,UAAU,EACX,MAAM,iBAAiB,CAAC;AAEzB,OAAO,KAAK,EACV,OAAO,EACP,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,sBAAsB,EACtB,aAAa,EACb,kBAAkB,EAClB,sBAAsB,EACtB,qBAAqB,EACrB,qBAAqB,EACrB,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACpB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,KAAK,EACV,GAAG,EACH,UAAU,EACV,WAAW,EACX,mBAAmB,EACnB,mBAAmB,EACnB,iBAAiB,EACjB,YAAY,EACZ,eAAe,EACf,mBAAmB,EACnB,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,EACd,sBAAsB,EACtB,qBAAqB,EACrB,6BAA6B,EAC7B,gBAAgB,EAChB,uBAAuB,EACvB,aAAa,EACb,UAAU,EACV,oBAAoB,EACpB,oBAAoB,EACpB,sBAAsB,EACtB,YAAY,EACb,MAAM,iBAAiB,CAAC;AAEzB,OAAO,KAAK,EACV,KAAK,EACL,oBAAoB,EACpB,gBAAgB,EAChB,sBAAsB,EACtB,oBAAoB,EACpB,SAAS,EACT,YAAY,EACZ,oBAAoB,EACpB,gBAAgB,EAChB,eAAe,EACf,oBAAoB,EACpB,kBAAkB,EACnB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,KAAK,EACV,cAAc,EACd,gBAAgB,EAChB,SAAS,EACT,mBAAmB,EACnB,qBAAqB,EACrB,aAAa,EACb,aAAa,EACb,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,sBAAsB,EACtB,oBAAoB,EACpB,iBAAiB,EACjB,0BAA0B,EAC1B,2BAA2B,EAC3B,sBAAsB,EACtB,sBAAsB,EACtB,uBAAuB,EACvB,yBAAyB,EACzB,kBAAkB,EACnB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|