@vectros-ai/cli 0.6.5 → 0.6.7

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 CHANGED
@@ -3,6 +3,32 @@
3
3
  All notable changes to `@vectros-ai/cli` are documented here.
4
4
  This project adheres to [Semantic Versioning](https://semver.org).
5
5
 
6
+ ## 0.6.7 — 2026-07-04
7
+
8
+ ### Fixed
9
+
10
+ - **Bundled blueprint library updated to `@vectros-ai/blueprints` 0.6.5.** The
11
+ `agentic-sdlc` blueprint's service-principal `accessProfile` now includes
12
+ `documents:u`, so a `bootstrap`ped agent key can archive and re-ingest documents —
13
+ the repo↔KB sync the blueprint documents was previously unexecutable by the key it
14
+ mints. Re-running `vectros bootstrap` against an existing context brings its scopes
15
+ current with the blueprint; no key rotation is needed, and the installed key gains
16
+ `documents:u` within a few minutes. No CLI command or flag changes.
17
+
18
+ ## 0.6.6 — 2026-07-03
19
+
20
+ ### Changed
21
+
22
+ - **Bundled blueprint library updated to `@vectros-ai/blueprints` 0.6.4.** The
23
+ `agentic-sdlc` blueprint's record schemas (`control` / `convention` / `gotcha` /
24
+ `term`) now carry a `sourceRef` provenance field — the sync-back index that lets a
25
+ knowledge base stay in sync with the repo it mirrors — and its bundled guide and
26
+ agent prompt document that sync pattern. No CLI command or flag changes.
27
+ - Updated the bundled `@vectros-ai/sdk` to **0.32.0**, keeping the CLI aligned with
28
+ the current Vectros API. Documents gained a lifecycle `status` (archive/restore
29
+ without deleting) and their processing state moved to `indexStatus`; no CLI
30
+ command or flag changes.
31
+
6
32
  ## 0.6.5 — 2026-07-01
7
33
 
8
34
  ### Added
package/dist/cli.js CHANGED
@@ -504,10 +504,18 @@ var DocumentRequest;
504
504
  Text: "TEXT",
505
505
  None: "NONE"
506
506
  };
507
+ DocumentRequest2.Status = {
508
+ Active: "ACTIVE",
509
+ Archived: "ARCHIVED"
510
+ };
507
511
  })(DocumentRequest || (DocumentRequest = {}));
508
512
  var DocumentResponse;
509
513
  ((DocumentResponse2) => {
510
514
  DocumentResponse2.Status = {
515
+ Active: "ACTIVE",
516
+ Archived: "ARCHIVED"
517
+ };
518
+ DocumentResponse2.IndexStatus = {
511
519
  PendingUpload: "PENDING_UPLOAD",
512
520
  Uploaded: "UPLOADED",
513
521
  Extracting: "EXTRACTING",
@@ -5278,7 +5286,7 @@ var DocumentsClient = class {
5278
5286
  return handleNonStatusCodeError(_response.error, _response.rawResponse, "GET", "/v1/documents/{id}/versions");
5279
5287
  }
5280
5288
  /**
5281
- * Starts a file-based document by returning a short-lived presigned S3 PUT URL. Upload the file bytes directly to `uploadUrl`; the document is then automatically queued for text extraction and asynchronous indexing. Supplying an `externalId` makes this idempotent — re-initiating an upload with the same `externalId` re-issues a fresh presigned URL to the SAME existing document/object (so a re-upload inherently replaces the file body) rather than creating a duplicate. The response's `created` field (and the HTTP status — 201 when a new document was minted, 200 when an existing one was matched) tells the two apart. With `?upsert=true`, the submitted `payload`/`title` are also applied to the matched document (file-body divergence cannot be diffed at upload-init — the bytes have not arrived yet — so the re-upload itself replaces the body; `?upsert=true` requires the `documents:u` scope). Requires the `documents:c` scope.
5289
+ * Starts a file-based document by returning a short-lived presigned S3 PUT URL. Upload the file bytes directly to `uploadUrl`; the document is then automatically queued for text extraction and asynchronous indexing. Supplying an `externalId` makes this idempotent — re-initiating an upload with the same `externalId` re-issues a fresh presigned URL to the SAME existing document/object (so a re-upload inherently replaces the file body) rather than creating a duplicate. The response's `created` field (and the HTTP status — 201 when a new document was minted, 200 when an existing one was matched) tells the two apart. With `?upsert=true`, the submitted `payload`/`title` are also applied to the matched document (file-body divergence cannot be diffed at upload-init — the bytes have not arrived yet — so the re-upload itself replaces the body). Creating a NEW document requires the `documents:c` scope. Re-uploading over an EXISTING document overwrites (and re-indexes) its body, so it is an update: it requires the `documents:u` scope (as does `?upsert=true` for the metadata).
5282
5290
  *
5283
5291
  * @param {Vectros.FileUploadRequest} request
5284
5292
  * @param {DocumentsClient.RequestOptions} requestOptions - Request-specific configuration.
@@ -9680,12 +9688,14 @@ var DATA_PLANE_ACTIONS = [
9680
9688
  "inference:r",
9681
9689
  "documents:r",
9682
9690
  "documents:c",
9691
+ "documents:u",
9683
9692
  "folders:r",
9684
9693
  "folders:c"
9685
9694
  ];
9695
+ var EDITOR_ACTIONS = [...DATA_PLANE_ACTIONS, "records:d", "documents:d", "folders:d"];
9686
9696
  var agenticSdlc = {
9687
9697
  name: "agentic-sdlc",
9688
- version: "1.0.0",
9698
+ version: "1.3.0",
9689
9699
  description: "A whole-SDLC system of record for an AI development team \u2014 decisions, designs, references, runbooks, post-mortems (as documents) plus controls, conventions, gotchas, and a glossary (as records), cross-linked and recalled by meaning.",
9690
9700
  contextId: "agentic-sdlc",
9691
9701
  contextName: "Agentic SDLC Knowledge Base",
@@ -10120,6 +10130,19 @@ var agenticSdlc = {
10120
10130
  fieldType: "date",
10121
10131
  description: "ISO-8601 last-reviewed date. Range-queryable.",
10122
10132
  renderHints: { label: "Reviewed on", widget: "date", order: 12 }
10133
+ },
10134
+ {
10135
+ // Provenance for sync: the source file this record was distilled from. A
10136
+ // record can't carry an in-file marker the way a document can (many records
10137
+ // come from one file), so it names its source instead — a change to that file
10138
+ // finds (equality lookup) and re-extracts exactly its records. Equality, not
10139
+ // range: file-level is the sync unit (re-extraction reprocesses the whole file),
10140
+ // and the schema keeps its single range lookup for the date row.
10141
+ fieldId: "sourceRef",
10142
+ fieldType: "string",
10143
+ filterable: true,
10144
+ description: "The source file (repo path) this record was extracted from \u2014 its provenance; a change to that file re-extracts its records. The specific section is encoded in the record externalId.",
10145
+ renderHints: { label: "Source ref", widget: "text", order: 13 }
10123
10146
  }
10124
10147
  ],
10125
10148
  lookupFields: [
@@ -10129,7 +10152,8 @@ var agenticSdlc = {
10129
10152
  "area",
10130
10153
  "verifiedBy",
10131
10154
  "relatedDecision",
10132
- { fieldName: "reviewedOn", rangeEnabled: true }
10155
+ { fieldName: "reviewedOn", rangeEnabled: true },
10156
+ "sourceRef"
10133
10157
  ]
10134
10158
  },
10135
10159
  {
@@ -10206,9 +10230,23 @@ var agenticSdlc = {
10206
10230
  fieldType: "date",
10207
10231
  description: "ISO-8601 \u2014 when last revised. Range-queryable.",
10208
10232
  renderHints: { label: "Updated on", widget: "date", order: 9 }
10233
+ },
10234
+ {
10235
+ // Provenance for sync — see the note on `control.sourceRef`.
10236
+ fieldId: "sourceRef",
10237
+ fieldType: "string",
10238
+ filterable: true,
10239
+ description: "The source file (repo path) this record was extracted from \u2014 its provenance; a change to that file re-extracts its records. The specific section is encoded in the record externalId.",
10240
+ renderHints: { label: "Source ref", widget: "text", order: 10 }
10209
10241
  }
10210
10242
  ],
10211
- lookupFields: ["area", "status", "establishedBy", { fieldName: "updatedOn", rangeEnabled: true }]
10243
+ lookupFields: [
10244
+ "area",
10245
+ "status",
10246
+ "establishedBy",
10247
+ { fieldName: "updatedOn", rangeEnabled: true },
10248
+ "sourceRef"
10249
+ ]
10212
10250
  },
10213
10251
  {
10214
10252
  // A GOTCHA / sharp edge: a symptom, its cause, and the fix. A tight typed
@@ -10262,9 +10300,22 @@ var agenticSdlc = {
10262
10300
  fieldType: "date",
10263
10301
  description: "ISO-8601 \u2014 when first hit. Range-queryable.",
10264
10302
  renderHints: { label: "Discovered on", widget: "date", order: 7 }
10303
+ },
10304
+ {
10305
+ // Provenance for sync — see the note on `control.sourceRef`.
10306
+ fieldId: "sourceRef",
10307
+ fieldType: "string",
10308
+ filterable: true,
10309
+ description: "The source file (repo path) this record was extracted from \u2014 its provenance; a change to that file re-extracts its records. The specific section is encoded in the record externalId.",
10310
+ renderHints: { label: "Source ref", widget: "text", order: 8 }
10265
10311
  }
10266
10312
  ],
10267
- lookupFields: ["area", "status", { fieldName: "discoveredOn", rangeEnabled: true }]
10313
+ lookupFields: [
10314
+ "area",
10315
+ "status",
10316
+ { fieldName: "discoveredOn", rangeEnabled: true },
10317
+ "sourceRef"
10318
+ ]
10268
10319
  },
10269
10320
  {
10270
10321
  // A glossary TERM — a definition keyed by the term itself. Structure-dominant:
@@ -10324,6 +10375,14 @@ var agenticSdlc = {
10324
10375
  fieldType: "date",
10325
10376
  description: "ISO-8601 \u2014 when last revised. Range-queryable.",
10326
10377
  renderHints: { label: "Updated on", widget: "date", order: 7 }
10378
+ },
10379
+ {
10380
+ // Provenance for sync — see the note on `control.sourceRef`.
10381
+ fieldId: "sourceRef",
10382
+ fieldType: "string",
10383
+ filterable: true,
10384
+ description: "The source file (repo path) this record was extracted from \u2014 its provenance; a change to that file re-extracts its records. The specific section is encoded in the record externalId.",
10385
+ renderHints: { label: "Source ref", widget: "text", order: 8 }
10327
10386
  }
10328
10387
  ],
10329
10388
  // `term` is a UNIQUE equality lookup — exact "define X" + a one-per-term
@@ -10332,7 +10391,8 @@ var agenticSdlc = {
10332
10391
  { fieldName: "term", unique: true },
10333
10392
  "area",
10334
10393
  "relatedDecision",
10335
- { fieldName: "updatedOn", rangeEnabled: true }
10394
+ { fieldName: "updatedOn", rangeEnabled: true },
10395
+ "sourceRef"
10336
10396
  ]
10337
10397
  }
10338
10398
  ],
@@ -10350,11 +10410,13 @@ var agenticSdlc = {
10350
10410
  // grants the human none by default. Bind it after bootstrap with:
10351
10411
  // vectros access grant --principal usr_<your-user-id> --context agentic-sdlc --role editor
10352
10412
  // (or the admin app's Access > Contexts > agentic-sdlc > Profiles > Create).
10353
- // Editor PARITY with the service key (same DATA_PLANE_ACTIONS) so a human
10354
- // curator can browse AND write/correct the KB; still no :d and no control-plane
10355
- // action, so the scope gate accepts it exactly like the accessProfile.
10413
+ // The editor gets the full data plane so a human curator can browse, write/correct,
10414
+ // AND hard-delete the KB (EDITOR_ACTIONS = the service key's set + delete). The
10415
+ // service key deliberately lacks delete and archives instead; the trusted human
10416
+ // owner may permanently remove genuine strays. Still no control-plane action, so
10417
+ // the scope gate accepts it as a data-plane-only role.
10356
10418
  roles: {
10357
- editor: [{ allowedActions: DATA_PLANE_ACTIONS }]
10419
+ editor: [{ allowedActions: EDITOR_ACTIONS }]
10358
10420
  },
10359
10421
  servicePrincipal: {
10360
10422
  externalId: "agentic-sdlc",
@@ -14033,9 +14095,9 @@ async function runBlueprintTest(fileOrName, opts, deps = {}) {
14033
14095
 
14034
14096
  // src/build-info.ts
14035
14097
  var BUILD_INFO = {
14036
- cli: true ? "0.6.5" : "dev",
14037
- sdk: true ? "0.31.0" : "dev",
14038
- blueprints: true ? "0.6.3" : "dev"
14098
+ cli: true ? "0.6.7" : "dev",
14099
+ sdk: true ? "0.32.0" : "dev",
14100
+ blueprints: true ? "0.6.5" : "dev"
14039
14101
  };
14040
14102
  function formatBuildInfo() {
14041
14103
  return `vectros ${BUILD_INFO.cli} (sdk ${BUILD_INFO.sdk}, blueprints ${BUILD_INFO.blueprints})`;