@vectros-ai/cli 0.6.5 → 0.6.6

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,20 @@
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.6 — 2026-07-03
7
+
8
+ ### Changed
9
+
10
+ - **Bundled blueprint library updated to `@vectros-ai/blueprints` 0.6.4.** The
11
+ `agentic-sdlc` blueprint's record schemas (`control` / `convention` / `gotcha` /
12
+ `term`) now carry a `sourceRef` provenance field — the sync-back index that lets a
13
+ knowledge base stay in sync with the repo it mirrors — and its bundled guide and
14
+ agent prompt document that sync pattern. No CLI command or flag changes.
15
+ - Updated the bundled `@vectros-ai/sdk` to **0.32.0**, keeping the CLI aligned with
16
+ the current Vectros API. Documents gained a lifecycle `status` (archive/restore
17
+ without deleting) and their processing state moved to `indexStatus`; no CLI
18
+ command or flag changes.
19
+
6
20
  ## 0.6.5 — 2026-07-01
7
21
 
8
22
  ### 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.
@@ -9683,9 +9691,10 @@ var DATA_PLANE_ACTIONS = [
9683
9691
  "folders:r",
9684
9692
  "folders:c"
9685
9693
  ];
9694
+ var EDITOR_ACTIONS = [...DATA_PLANE_ACTIONS, "records:d", "documents:d", "folders:d"];
9686
9695
  var agenticSdlc = {
9687
9696
  name: "agentic-sdlc",
9688
- version: "1.0.0",
9697
+ version: "1.2.0",
9689
9698
  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
9699
  contextId: "agentic-sdlc",
9691
9700
  contextName: "Agentic SDLC Knowledge Base",
@@ -10120,6 +10129,19 @@ var agenticSdlc = {
10120
10129
  fieldType: "date",
10121
10130
  description: "ISO-8601 last-reviewed date. Range-queryable.",
10122
10131
  renderHints: { label: "Reviewed on", widget: "date", order: 12 }
10132
+ },
10133
+ {
10134
+ // Provenance for sync: the source file this record was distilled from. A
10135
+ // record can't carry an in-file marker the way a document can (many records
10136
+ // come from one file), so it names its source instead — a change to that file
10137
+ // finds (equality lookup) and re-extracts exactly its records. Equality, not
10138
+ // range: file-level is the sync unit (re-extraction reprocesses the whole file),
10139
+ // and the schema keeps its single range lookup for the date row.
10140
+ fieldId: "sourceRef",
10141
+ fieldType: "string",
10142
+ filterable: true,
10143
+ 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.",
10144
+ renderHints: { label: "Source ref", widget: "text", order: 13 }
10123
10145
  }
10124
10146
  ],
10125
10147
  lookupFields: [
@@ -10129,7 +10151,8 @@ var agenticSdlc = {
10129
10151
  "area",
10130
10152
  "verifiedBy",
10131
10153
  "relatedDecision",
10132
- { fieldName: "reviewedOn", rangeEnabled: true }
10154
+ { fieldName: "reviewedOn", rangeEnabled: true },
10155
+ "sourceRef"
10133
10156
  ]
10134
10157
  },
10135
10158
  {
@@ -10206,9 +10229,23 @@ var agenticSdlc = {
10206
10229
  fieldType: "date",
10207
10230
  description: "ISO-8601 \u2014 when last revised. Range-queryable.",
10208
10231
  renderHints: { label: "Updated on", widget: "date", order: 9 }
10232
+ },
10233
+ {
10234
+ // Provenance for sync — see the note on `control.sourceRef`.
10235
+ fieldId: "sourceRef",
10236
+ fieldType: "string",
10237
+ filterable: true,
10238
+ 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.",
10239
+ renderHints: { label: "Source ref", widget: "text", order: 10 }
10209
10240
  }
10210
10241
  ],
10211
- lookupFields: ["area", "status", "establishedBy", { fieldName: "updatedOn", rangeEnabled: true }]
10242
+ lookupFields: [
10243
+ "area",
10244
+ "status",
10245
+ "establishedBy",
10246
+ { fieldName: "updatedOn", rangeEnabled: true },
10247
+ "sourceRef"
10248
+ ]
10212
10249
  },
10213
10250
  {
10214
10251
  // A GOTCHA / sharp edge: a symptom, its cause, and the fix. A tight typed
@@ -10262,9 +10299,22 @@ var agenticSdlc = {
10262
10299
  fieldType: "date",
10263
10300
  description: "ISO-8601 \u2014 when first hit. Range-queryable.",
10264
10301
  renderHints: { label: "Discovered on", widget: "date", order: 7 }
10302
+ },
10303
+ {
10304
+ // Provenance for sync — see the note on `control.sourceRef`.
10305
+ fieldId: "sourceRef",
10306
+ fieldType: "string",
10307
+ filterable: true,
10308
+ 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.",
10309
+ renderHints: { label: "Source ref", widget: "text", order: 8 }
10265
10310
  }
10266
10311
  ],
10267
- lookupFields: ["area", "status", { fieldName: "discoveredOn", rangeEnabled: true }]
10312
+ lookupFields: [
10313
+ "area",
10314
+ "status",
10315
+ { fieldName: "discoveredOn", rangeEnabled: true },
10316
+ "sourceRef"
10317
+ ]
10268
10318
  },
10269
10319
  {
10270
10320
  // A glossary TERM — a definition keyed by the term itself. Structure-dominant:
@@ -10324,6 +10374,14 @@ var agenticSdlc = {
10324
10374
  fieldType: "date",
10325
10375
  description: "ISO-8601 \u2014 when last revised. Range-queryable.",
10326
10376
  renderHints: { label: "Updated on", widget: "date", order: 7 }
10377
+ },
10378
+ {
10379
+ // Provenance for sync — see the note on `control.sourceRef`.
10380
+ fieldId: "sourceRef",
10381
+ fieldType: "string",
10382
+ filterable: true,
10383
+ 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.",
10384
+ renderHints: { label: "Source ref", widget: "text", order: 8 }
10327
10385
  }
10328
10386
  ],
10329
10387
  // `term` is a UNIQUE equality lookup — exact "define X" + a one-per-term
@@ -10332,7 +10390,8 @@ var agenticSdlc = {
10332
10390
  { fieldName: "term", unique: true },
10333
10391
  "area",
10334
10392
  "relatedDecision",
10335
- { fieldName: "updatedOn", rangeEnabled: true }
10393
+ { fieldName: "updatedOn", rangeEnabled: true },
10394
+ "sourceRef"
10336
10395
  ]
10337
10396
  }
10338
10397
  ],
@@ -10350,11 +10409,13 @@ var agenticSdlc = {
10350
10409
  // grants the human none by default. Bind it after bootstrap with:
10351
10410
  // vectros access grant --principal usr_<your-user-id> --context agentic-sdlc --role editor
10352
10411
  // (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.
10412
+ // The editor gets the full data plane so a human curator can browse, write/correct,
10413
+ // AND hard-delete the KB (EDITOR_ACTIONS = the service key's set + delete). The
10414
+ // service key deliberately lacks delete and archives instead; the trusted human
10415
+ // owner may permanently remove genuine strays. Still no control-plane action, so
10416
+ // the scope gate accepts it as a data-plane-only role.
10356
10417
  roles: {
10357
- editor: [{ allowedActions: DATA_PLANE_ACTIONS }]
10418
+ editor: [{ allowedActions: EDITOR_ACTIONS }]
10358
10419
  },
10359
10420
  servicePrincipal: {
10360
10421
  externalId: "agentic-sdlc",
@@ -14033,9 +14094,9 @@ async function runBlueprintTest(fileOrName, opts, deps = {}) {
14033
14094
 
14034
14095
  // src/build-info.ts
14035
14096
  var BUILD_INFO = {
14036
- cli: true ? "0.6.5" : "dev",
14037
- sdk: true ? "0.31.0" : "dev",
14038
- blueprints: true ? "0.6.3" : "dev"
14097
+ cli: true ? "0.6.6" : "dev",
14098
+ sdk: true ? "0.32.0" : "dev",
14099
+ blueprints: true ? "0.6.4" : "dev"
14039
14100
  };
14040
14101
  function formatBuildInfo() {
14041
14102
  return `vectros ${BUILD_INFO.cli} (sdk ${BUILD_INFO.sdk}, blueprints ${BUILD_INFO.blueprints})`;