@bike4mind/cli 0.21.0 → 0.22.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.
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
- import { n as logger, t as ConfigStore } from "./ConfigStore-CoY0l0gr.mjs";
3
- import { t as version } from "./package-CfIETbXd.mjs";
2
+ import { n as logger, t as ConfigStore } from "./ConfigStore-8_0WsN5r.mjs";
3
+ import { t as version } from "./package-OZdXqn0e.mjs";
4
4
  import axios, { isAxiosError } from "axios";
5
5
  //#region src/auth/OAuthClient.ts
6
6
  /**
@@ -416,6 +416,7 @@ let ApiKeyType = /* @__PURE__ */ function(ApiKeyType) {
416
416
  ApiKeyType["ollama"] = "ollama";
417
417
  ApiKeyType["xai"] = "xai";
418
418
  ApiKeyType["kimi"] = "kimi";
419
+ ApiKeyType["deepseek"] = "deepseek";
419
420
  ApiKeyType["voyageai"] = "voyageai";
420
421
  return ApiKeyType;
421
422
  }({});
@@ -489,6 +490,16 @@ const FallbackInfoSchema = z$1.object({
489
490
  primaryModelName: z$1.string(),
490
491
  fallbackModel: z$1.string(),
491
492
  fallbackModelName: z$1.string(),
493
+ /**
494
+ * Backend of each side, so the badge can name the provider path without
495
+ * inferring it from the id - a bare `deepseek-*` slug is the direct API on a
496
+ * hosted deployment and an Ollama pull on a self-hosted one. Optional and
497
+ * loosely typed: these payloads are persisted in browser storage, so a record
498
+ * written by an older build has neither field and an unknown backend name from
499
+ * a newer one must not fail the parse.
500
+ */
501
+ primaryModelBackend: z$1.string().optional(),
502
+ fallbackModelBackend: z$1.string().optional(),
492
503
  timestamp: z$1.number()
493
504
  });
494
505
  const ArtifactMetadataSchema = z$1.object({
@@ -895,6 +906,7 @@ let ModelBackend = /* @__PURE__ */ function(ModelBackend) {
895
906
  ModelBackend["BFL"] = "bfl";
896
907
  ModelBackend["XAI"] = "xai";
897
908
  ModelBackend["Kimi"] = "kimi";
909
+ ModelBackend["DeepSeek"] = "deepseek";
898
910
  ModelBackend["VoyageAI"] = "voyageai";
899
911
  ModelBackend["AWS"] = "aws";
900
912
  ModelBackend["LocalImage"] = "local-image";
@@ -1093,6 +1105,7 @@ let ChatModels = /* @__PURE__ */ function(ChatModels) {
1093
1105
  ChatModels["KIMI_K2_5"] = "kimi-k2.5";
1094
1106
  ChatModels["KIMI_K2_5_BEDROCK"] = "moonshotai.kimi-k2.5";
1095
1107
  ChatModels["KIMI_K2_THINKING_BEDROCK"] = "moonshot.kimi-k2-thinking";
1108
+ ChatModels["DEEPSEEK_FLASH"] = "deepseek-flash";
1096
1109
  return ChatModels;
1097
1110
  }({});
1098
1111
  const CHAT_MODELS = Object.values(ChatModels);
@@ -1227,7 +1240,8 @@ const NO_TEMPERATURE_MODELS = /* @__PURE__ */ new Set([
1227
1240
  "kimi-k2.7-code",
1228
1241
  "kimi-k2.7-code-highspeed",
1229
1242
  "kimi-k2.6",
1230
- "kimi-k2.5"
1243
+ "kimi-k2.5",
1244
+ "deepseek-flash"
1231
1245
  ]);
1232
1246
  /**
1233
1247
  * Models whose safety classifiers can decline a request with `stop_reason: 'refusal'`
@@ -1716,6 +1730,7 @@ const ADAPTER_FAMILIES = [
1716
1730
  "gemini",
1717
1731
  "xai",
1718
1732
  "kimi",
1733
+ "deepseek",
1719
1734
  "ollama",
1720
1735
  "bfl",
1721
1736
  "local-image",
@@ -1966,6 +1981,7 @@ const MODEL_INFO_FIELD_GROUP_OF = {
1966
1981
  supportsImageVariation: "modalities",
1967
1982
  supportsSafetyTolerance: "modalities",
1968
1983
  deprecationDate: "lifecycle",
1984
+ replacedBy: "lifecycle",
1969
1985
  adapterFamily: "dispatch",
1970
1986
  dispatchProfile: "dispatch",
1971
1987
  description: "presentation",
@@ -2089,6 +2105,8 @@ z$1.object({
2089
2105
  }).optional(),
2090
2106
  /** Optional: a state row written before Phase 4 has none, and must keep parsing. */
2091
2107
  suggestion: ModelLifecycleSuggestion.optional(),
2108
+ /** Dispatch probes spent on this model, so one that always fails stops taking a budget slot. */
2109
+ probeAttempts: z$1.number().int().nonnegative().optional(),
2092
2110
  createdAt: z$1.date(),
2093
2111
  updatedAt: z$1.date()
2094
2112
  });
@@ -3130,6 +3148,7 @@ function toModelInfo(record) {
3130
3148
  disabled,
3131
3149
  disabledReason: record.disabledReason ?? record.autoDisabledReason ?? (retired ? "retired by the provider" : void 0),
3132
3150
  deprecationDate: record.lifecycle?.deprecationDate,
3151
+ replacedBy: record.lifecycle?.replacedBy,
3133
3152
  trainingCutoff: record.trainingCutoff,
3134
3153
  releaseDate: record.releaseDate,
3135
3154
  logoFile: record.logoFile,
@@ -3162,6 +3181,7 @@ const VENDOR_BY_BACKEND = {
3162
3181
  ["gemini"]: "google",
3163
3182
  ["xai"]: "xai",
3164
3183
  ["kimi"]: "moonshotai",
3184
+ ["deepseek"]: "deepseek",
3165
3185
  ["bfl"]: "black-forest-labs",
3166
3186
  ["aws"]: "amazon",
3167
3187
  ["voyageai"]: "voyageai",
@@ -3230,10 +3250,13 @@ function toModelRecord(info) {
3230
3250
  supportsTools: info.supportsTools,
3231
3251
  supportsImageVariation: info.supportsImageVariation,
3232
3252
  supportsSafetyTolerance: info.supportsSafetyTolerance,
3233
- lifecycle: info.deprecationDate ? {
3234
- status: "deprecated",
3235
- deprecationDate: info.deprecationDate
3236
- } : { status: "active" },
3253
+ lifecycle: {
3254
+ ...info.deprecationDate ? {
3255
+ status: "deprecated",
3256
+ deprecationDate: info.deprecationDate
3257
+ } : { status: "active" },
3258
+ ...info.replacedBy ? { replacedBy: info.replacedBy } : {}
3259
+ },
3237
3260
  description: info.description,
3238
3261
  logoFile: info.logoFile,
3239
3262
  rank: info.rank,
@@ -4016,6 +4039,7 @@ const QuestExportProgressAction = z$1.object({
4016
4039
  downloadUrl: z$1.string().optional(),
4017
4040
  filename: z$1.string().optional(),
4018
4041
  errorMessage: z$1.string().optional(),
4042
+ droppedQuestCount: z$1.number().optional(),
4019
4043
  clientId: z$1.string().optional()
4020
4044
  });
4021
4045
  const SpiderProgressUpdateAction = z$1.object({
@@ -6634,12 +6658,23 @@ let OllamaEmbeddingModel = /* @__PURE__ */ function(OllamaEmbeddingModel) {
6634
6658
  return OllamaEmbeddingModel;
6635
6659
  }({});
6636
6660
  /**
6637
- * The default embedding model for the current deployment. On self-host with a local Ollama
6638
- * server and no cloud embedding key, this is a local embedder, so RAG / knowledge search work
6639
- * out of the box with no AWS/OpenAI/Voyage credential; otherwise it is the cloud default. Read
6640
- * by the `defaultEmbeddingModel` admin-setting default and by the query-embedding fallback, so
6641
- * an operator who never opens admin settings still gets a working, keyless embedder instead of
6642
- * an unconfigured cloud model that fails with an opaque "security token" error.
6661
+ * The default embedding model this deployment advertises - the `defaultEmbeddingModel` admin-setting
6662
+ * default and the query-embedding fallback, so an operator who never opens admin settings still gets
6663
+ * a sensible model rather than an unconfigured one.
6664
+ *
6665
+ * Deliberately answers from the ENVIRONMENT only, and deliberately does NOT try to answer "can this
6666
+ * deployment actually reach that model". It cannot: on a hosted stage an SST secret arrives as a
6667
+ * linked Resource, never as process.env (see apps/client/server/modelDiscovery/adapters.ts), so an
6668
+ * absent OPENAI_API_KEY here means "unknown", not "no key" - it is absent on production too. This
6669
+ * function is also bundled into the browser via settingsMap, where every env read is undefined, so
6670
+ * any answer it gives must be one that is safe as a stage-neutral constant.
6671
+ *
6672
+ * Reachability is therefore decided where the resolved credentials are actually in hand, by
6673
+ * `resolveEmbeddingWithKeylessFallback` (fab-pipeline) - that is what lets a keyless cloud stage
6674
+ * embed on Bedrock without changing what any other stage advertises.
6675
+ *
6676
+ * The one arm that IS env-decidable: a self-host running Ollama has its base URL in real process.env
6677
+ * on both server and (absent) client, and no cloud credential can arrive by any other route.
6643
6678
  */
6644
6679
  function defaultEmbeddingModelForEnv() {
6645
6680
  const selfHost = process.env.B4M_SELF_HOST === "true";
@@ -6648,6 +6683,45 @@ function defaultEmbeddingModelForEnv() {
6648
6683
  if (selfHost && hasOllama && !hasCloudEmbeddingKey) return "qwen3-embedding:0.6b";
6649
6684
  return "text-embedding-ada-002";
6650
6685
  }
6686
+ /**
6687
+ * True when this deployment can embed with no provider API key at all: a cloud stage reaches
6688
+ * Bedrock through its task/execution role's AWS credentials.
6689
+ *
6690
+ * Requires POSITIVE evidence of an execution role rather than merely "not self-host". A plain
6691
+ * `next dev` session and a CI job both leave B4M_SELF_HOST unset while holding no AWS credentials
6692
+ * at all, so an absence test would send them to the Bedrock SDK for an opaque `CredentialsProvider
6693
+ * Error` in place of the actionable OPENAI_KEY_MISSING_MESSAGE naming the key to set - the same
6694
+ * actionable-to-opaque trade this fallback exists to avoid, just in a different keyless place.
6695
+ *
6696
+ * BOTH runtimes must be covered, and they carry different markers. The Lambdas (vectorize
6697
+ * subscriber, the crons, the Next API routes) get AWS_LAMBDA_FUNCTION_NAME; ChatCompletion is a
6698
+ * Fargate service (infra/chatCompletion.ts) and gets the ECS task-role URI instead. Since
6699
+ * knowledgeBaseSearch runs inside that container, keying on the Lambda marker alone would leave
6700
+ * chat knowledge-base search failing on exactly the keyless stages this fallback is for.
6701
+ *
6702
+ * SST_RESOURCE_App is the third arm and the one this repo can prove: SST sets it on anything it
6703
+ * links, Lambda and Service alike (infra/chatCompletion.ts:129 and infra/agentExecutor.ts:54 both
6704
+ * note that linking alone exposes SST_RESOURCE_*). It covers the Fargate task whether or not the
6705
+ * ECS credential URI is present, and it is absent from a plain `next dev` and from CI, which is
6706
+ * the case that matters. `sst dev` does set it - correctly, since that session runs against real
6707
+ * AWS credentials.
6708
+ *
6709
+ * Self-host is excluded outright because it has no such role - its keyless path is the local
6710
+ * Ollama embedder (`isLocalEmbedderAvailable` in toolAvailability.ts), not Bedrock.
6711
+ *
6712
+ * Answers "is Bedrock reachable here", NOT "should we use it" - a keyed stage is keyless-capable
6713
+ * too, so this must only ever be asked ALONGSIDE a resolved credential table that came back empty.
6714
+ * `resolveEmbeddingWithKeylessFallback` is where the two questions are paired for callers free to
6715
+ * choose the model, and is what such a caller should use instead of asking this directly. The
6716
+ * direct callers are the ones that additionally need the answer BEFORE resolving, to decide
6717
+ * policy: toolAvailability reports whether embedding-backed tools are usable at all, and
6718
+ * data-lakes/semantic-search decides whether a substitution is permitted for this request before
6719
+ * it knows whether one is needed. Both still pair it with the table.
6720
+ */
6721
+ function hasKeylessCloudEmbedder() {
6722
+ if (process.env.B4M_SELF_HOST === "true") return false;
6723
+ return !!(process.env.AWS_LAMBDA_FUNCTION_NAME || process.env.AWS_CONTAINER_CREDENTIALS_RELATIVE_URI || process.env.AWS_CONTAINER_CREDENTIALS_FULL_URI || process.env.SST_RESOURCE_App);
6724
+ }
6651
6725
  z$1.union([
6652
6726
  z$1.enum(OpenAIEmbeddingModel),
6653
6727
  z$1.enum(VoyageAIEmbeddingModel),
@@ -6655,6 +6729,18 @@ z$1.union([
6655
6729
  z$1.enum(OllamaEmbeddingModel)
6656
6730
  ]);
6657
6731
  /**
6732
+ * The measured per-space floors, rendered for an admin-facing description (e.g. "75 for
6733
+ * text-embedding-ada-002, 35 for text-embedding-3-small").
6734
+ *
6735
+ * Rendered rather than written out in prose because these numbers are expected to move - 35 is
6736
+ * provisional until it is re-derived against a production lake - and a description that restates
6737
+ * the table is a wrong number shown to operators the moment it drifts, with nothing failing.
6738
+ */
6739
+ const forcedRetrievalFloorsBySpaceSummary = Object.entries({
6740
+ ["text-embedding-ada-002"]: 75,
6741
+ ["text-embedding-3-small"]: 35
6742
+ }).map(([space, pct]) => `${pct} for ${space}`).join(", ");
6743
+ /**
6658
6744
  * Default text for the artifact-emission system prompt. Single source of truth used BOTH as the
6659
6745
  * `ArtifactEmissionPrompt` admin setting's default AND as the runtime fallback in
6660
6746
  * ChatCompletionProcess - so an unset/empty/cleared DB value reverts to this and never bricks
@@ -6847,6 +6933,7 @@ z$1.enum([
6847
6933
  "geminiDemoKey",
6848
6934
  "xaiApiKey",
6849
6935
  "moonshotApiKey",
6936
+ "deepseekApiKey",
6850
6937
  "voyageApiKey",
6851
6938
  "FirecrawlApiKey",
6852
6939
  "FirecrawlApiUrl",
@@ -6981,6 +7068,7 @@ z$1.enum([
6981
7068
  "defaultEmbeddingModel",
6982
7069
  "dataLakeSearchMaxFiles",
6983
7070
  "dataLakeSearchMaxChunks",
7071
+ "dataLakeSearchMaxChunksPerFile",
6984
7072
  "forcedRetrievalCharBudget",
6985
7073
  "lakeMemoryRecallK",
6986
7074
  "kbSearchDefaultResults",
@@ -7070,6 +7158,7 @@ z$1.enum([
7070
7158
  "modelDiscoveryAllowEgress",
7071
7159
  "modelDiscoveryPriceBandPct",
7072
7160
  "modelDiscoveryAutoRemap",
7161
+ "modelDiscoveryProbeNewModels",
7073
7162
  "prReportRepo",
7074
7163
  "prReportIdentityMap",
7075
7164
  "prReportWebhookUrl",
@@ -7841,6 +7930,10 @@ const API_SERVICE_GROUPS = {
7841
7930
  {
7842
7931
  key: "forcedRetrievalMinSimilarityPct",
7843
7932
  order: 10
7933
+ },
7934
+ {
7935
+ key: "dataLakeSearchMaxChunksPerFile",
7936
+ order: 11
7844
7937
  }
7845
7938
  ]
7846
7939
  },
@@ -7948,6 +8041,16 @@ const API_SERVICE_GROUPS = {
7948
8041
  order: 1
7949
8042
  }]
7950
8043
  },
8044
+ DEEPSEEK: {
8045
+ id: "deepseekAPIService",
8046
+ name: "DeepSeek Service",
8047
+ description: "DeepSeek API integration settings",
8048
+ icon: "AutoAwesome",
8049
+ settings: [{
8050
+ key: "deepseekApiKey",
8051
+ order: 1
8052
+ }]
8053
+ },
7951
8054
  ANTHROPIC: {
7952
8055
  id: "anthropicAPIService",
7953
8056
  name: "Anthropic Service",
@@ -8647,6 +8750,10 @@ const API_SERVICE_GROUPS = {
8647
8750
  {
8648
8751
  key: "modelDiscoveryAutoRemap",
8649
8752
  order: 6
8753
+ },
8754
+ {
8755
+ key: "modelDiscoveryProbeNewModels",
8756
+ order: 7
8650
8757
  }
8651
8758
  ]
8652
8759
  },
@@ -8732,6 +8839,16 @@ const settingsMap = {
8732
8839
  group: API_SERVICE_GROUPS.MOONSHOT.id,
8733
8840
  order: 1
8734
8841
  }),
8842
+ deepseekApiKey: makeStringSetting({
8843
+ key: "deepseekApiKey",
8844
+ name: "DeepSeek API Key",
8845
+ defaultValue: "",
8846
+ description: "The global API Key for DeepSeek.",
8847
+ isSensitive: true,
8848
+ category: "AI",
8849
+ group: API_SERVICE_GROUPS.DEEPSEEK.id,
8850
+ order: 1
8851
+ }),
8735
8852
  voyageApiKey: makeStringSetting({
8736
8853
  key: "voyageApiKey",
8737
8854
  name: "Voyage API Key",
@@ -10033,7 +10150,7 @@ const settingsMap = {
10033
10150
  userReadable: true,
10034
10151
  name: "Default Embedding Model",
10035
10152
  defaultValue: defaultEmbeddingModelForEnv(),
10036
- description: "The default embedding model to use",
10153
+ description: "The default embedding model to use. Changing it changes the SCALE of every similarity score in the system, so relevance floors do not carry across: a floor tuned for one model can sit above the entire range of another and reject everything. The server handles this for you on the floors it ships, applying the value measured for whichever model your documents are actually embedded with - but if you have set Forced Retrieval Absolute Floor by hand, re-measure it after changing this. Existing documents keep their old vectors and are only comparable to a query embedded the same way, so a change here needs a re-embed to take full effect; until then each set of documents is searched with the model it was indexed under.",
10037
10154
  category: "AI",
10038
10155
  group: API_SERVICE_GROUPS.EMBEDDING.id,
10039
10156
  options: [
@@ -10065,6 +10182,17 @@ const settingsMap = {
10065
10182
  order: 3,
10066
10183
  scope: { settableAt: ["organization", "owner"] }
10067
10184
  }),
10185
+ dataLakeSearchMaxChunksPerFile: makeNumberSetting({
10186
+ key: "dataLakeSearchMaxChunksPerFile",
10187
+ name: "Data Lake Search Max Chunks Per Document",
10188
+ defaultValue: 0,
10189
+ min: 0,
10190
+ description: "Most chunks from any ONE source document a data-lake semantic search may return in its top-K. A diversity guard for CONTESTED slots: where several documents answer the question, it stops the best-scoring one from taking slots the others could have filled. It is NOT a fix for severe crowding - the cap redistributes only among the candidates retrieval already returned, so a document that supplies enough of the top-scoring chunks to fill that pool on its own is one the cap cannot change at all. On a corpus of book-length documents, expect enabling this to change little beyond widening the vector-search request. 0 (default) disables the cap, byte-identical to behavior before this setting existed. The cap never SHRINKS a result set - once the spread-out picks are in, any slots still open are backfilled with the highest-scoring chunks the cap held back, so a lake whose only match is one document still returns a full top-K. A value at or above the result count is also a no-op, since nothing can ever be held back. Below it, each retrieval stream's candidate pool is widened to a fixed multiple of the result count so the cap has a spread to choose from. The scanned corpus itself does not grow (that is bounded separately), but the vector-search backends are asked for that many more matches, and a larger in-memory ranking pool costs some CPU. 2-3 is the useful range; 1 serves one passage per document, which suits a corpus of many short documents and starves a question whose answer spans one long one. The chat knowledge-base path ranks more passages than it serves, so it applies the cap a second time at the count it actually serves - otherwise the spread-out picks, which are by definition the lowest-scoring ones admitted, would land in the passages that path discards.",
10191
+ category: "AI",
10192
+ group: API_SERVICE_GROUPS.EMBEDDING.id,
10193
+ order: 11,
10194
+ scope: { settableAt: ["organization", "owner"] }
10195
+ }),
10068
10196
  forcedRetrievalCharBudget: makeNumberSetting({
10069
10197
  key: "forcedRetrievalCharBudget",
10070
10198
  name: "Forced Retrieval Char Budget",
@@ -10145,7 +10273,7 @@ const settingsMap = {
10145
10273
  min: 1,
10146
10274
  max: 100,
10147
10275
  int: true,
10148
- description: "Absolute minimum cosine similarity, as a percent, a chunk must clear to be injected on a Data-Lake-mode turn. This is a sanity floor for genuinely unrelated content, NOT the ranking gate - the relative floor above does the ranking. Measured over 166 injected chunks on a production lake the 75 default never once bound (the whole band sat between 80 and 91), so it currently reads like a quality gate while providing no protection. Lowering it toward 30-40 is the intended companion to raising the relative floor: it lets the relative rule govern a corpus whose band sits low, which a 75 line would otherwise reject wholesale. Cosine similarity is not comparable across embedding models, so a value tuned for one model does not transfer to another.",
10276
+ description: `Absolute minimum cosine similarity, as a percent, a chunk must clear to be injected on a Data-Lake-mode turn. This is a sanity floor for genuinely unrelated content, NOT the ranking gate - the relative floor above does the ranking. LEAVE IT AT 75 UNLESS YOU HAVE MEASURED YOUR OWN CORPUS: a raw cosine means nothing outside the embedding model it was fitted to, so while this reads 75 the server ignores it and applies the floor measured for whichever model your documents are actually embedded with (${forcedRetrievalFloorsBySpaceSummary}, and no absolute floor at all for a model nobody has measured - the relative floor still applies). Set any other value and the server uses exactly that, in every space, which is yours to get right: 75 against text-embedding-3-small sits above that band entirely and returns nothing on every query. Where this floor lands inside your band decides a lot - on one measured corpus 74 / 75 / 76 swung recall 91% / 65% / 40% - and the same 75 that is a cliff on one lake rejects nothing at all on another. Re-measure after changing the embedding model; the sweep tool is packages/scripts/retrieval/forcedFloorSweep.ts.`,
10149
10277
  category: "AI",
10150
10278
  group: API_SERVICE_GROUPS.EMBEDDING.id,
10151
10279
  order: 10,
@@ -10997,6 +11125,15 @@ const settingsMap = {
10997
11125
  group: API_SERVICE_GROUPS.MODEL_DISCOVERY.id,
10998
11126
  order: 6
10999
11127
  }),
11128
+ modelDiscoveryProbeNewModels: makeBooleanSetting({
11129
+ key: "modelDiscoveryProbeNewModels",
11130
+ name: "Probe New Models for Dispatch",
11131
+ defaultValue: true,
11132
+ description: "Lets a write-mode run spend a forced one-tool call on a newly discovered OpenAI model to verify which token parameter and tool transport it takes, and turn its tools on. Off leaves every new OpenAI model with tools withheld until an operator writes the dispatch profile by hand.",
11133
+ category: "AI",
11134
+ group: API_SERVICE_GROUPS.MODEL_DISCOVERY.id,
11135
+ order: 7
11136
+ }),
11000
11137
  prReportRepo: makeStringSetting({
11001
11138
  key: "prReportRepo",
11002
11139
  name: "PR Report Repository",
@@ -11089,7 +11226,8 @@ const ModelTelemetrySchema = z$1.object({
11089
11226
  "google",
11090
11227
  "xai",
11091
11228
  "ollama",
11092
- "moonshot"
11229
+ "moonshot",
11230
+ "deepseek"
11093
11231
  ]),
11094
11232
  fallbackUsed: z$1.boolean(),
11095
11233
  fallbackReason: z$1.string().optional(),
@@ -11769,6 +11907,31 @@ const RetrievalSummarySchema = z$1.object({
11769
11907
  /** Lakes resolved at the moment retrieval ran, stamped point-in-time (not read live from the session). */
11770
11908
  dataLakeTags: z$1.array(z$1.string()),
11771
11909
  /**
11910
+ * The lake scope the turn's retrieval surfaces WOULD have searched, resolved at the seed site
11911
+ * whether or not any of them ran: the caller's accessible lakes narrowed to the session
11912
+ * (narrowLakeAccessToSession), or empty where the corpus is personal and the lake arms are
11913
+ * suppressed. `dataLakeTags` is the other half of the pair and answers a different question -
11914
+ * which lakes retrieval ACTUALLY used - so on a turn where retrieval never ran that one is empty
11915
+ * while this one still names whatever was in scope.
11916
+ *
11917
+ * EXISTS FOR THE OFFLINE REPLAY. `answerability` is reconstructed after the fact, and without a
11918
+ * recorded scope the replay had to rebuild one from the session's `retrievalTags` as they stand
11919
+ * at replay time - a session whose lake selection had since changed was replayed against a
11920
+ * corpus its turn never had, with nothing to flag it. Recording it here removes that drift for
11921
+ * every turn seeded after this landed; `probedAt` still discloses the content drift, which no
11922
+ * amount of recording can fix.
11923
+ *
11924
+ * Absence means NOT RECORDED (a turn predating this, or one whose `retrieval` was written only
11925
+ * by a surface rather than by the seed) - never "no lakes in scope", which is present-and-empty.
11926
+ * The replay must keep those apart: probing an unrecorded turn would mean inventing a scope,
11927
+ * which is the approximation this field exists to end.
11928
+ *
11929
+ * Only the seed writes it, so mergeRetrievalSummary carries it first-writer-wins rather than
11930
+ * unioning: a later surface write asserting a narrower scope must not be able to widen the
11931
+ * recorded one, and a union across the two would mean neither.
11932
+ */
11933
+ lakeScope: z$1.array(z$1.string()).optional(),
11934
+ /**
11772
11935
  * Ids of the lakes whose `systemPrompt` was injected this turn (getAccessibleDataLakePrompts),
11773
11936
  * across every injection site (forced retrieval and the model-driven knowledge tools). NOT the
11774
11937
  * prompt text itself - that already reaches the model in the completion, and copying it here
@@ -11880,15 +12043,15 @@ const RetrievalSummarySchema = z$1.object({
11880
12043
  * (ChatCompletionFeatures' forced path, which has no ANN index) to exactly the turns that pay
11881
12044
  * nothing for retrieval today. The measurement is not worth that latency on live traffic.
11882
12045
  *
11883
- * BEING A RECONSTRUCTION, IT CARRIES TWO DRIFTS THE OTHER FIELDS DO NOT:
12046
+ * BEING A RECONSTRUCTION, IT CARRIES DRIFTS THE OTHER FIELDS DO NOT:
11884
12047
  * 1. Corpus CONTENT moves. A document added or reindexed between the turn and the replay is
11885
12048
  * scored as though it had been there. `probedAt` discloses the gap; a replay run long after
11886
12049
  * the window is weak evidence, not strong.
11887
- * 2. Corpus SCOPE is inferred, not recorded. The seed writes `dataLakeTags: []` on a turn where
11888
- * retrieval never ran (ChatCompletionProcess), so the replay reconstructs scope from the
11889
- * session's lakes as they stand at replay time. A session whose lake selection changed is
11890
- * replayed against a corpus the turn never had, and NOTHING here flags that. Recording real
11891
- * scope at seed time would fix it for future turns and is not done yet.
12050
+ * 2. Corpus SCOPE no longer drifts: the seed records the turn's resolved scope in `lakeScope`
12051
+ * and the replay probes that, so a session whose lake selection has since changed is still
12052
+ * scored against the lakes its turn actually had. The cost is coverage rather than accuracy -
12053
+ * a turn with no recorded scope is skipped instead of approximated, so every turn predating
12054
+ * the field is outside the measurement.
11892
12055
  * 3. The QUESTION can move out from under it. The probe is keyed to the quest, not to the
11893
12056
  * prompt text it scored, so a turn whose prompt is later rewritten in place keeps a probe
11894
12057
  * describing the question it used to ask. mergeRetrievalSummary preserves the probe across
@@ -11935,7 +12098,32 @@ const RetrievalSummarySchema = z$1.object({
11935
12098
  * non-empty value does not prove the admission is what made the injection possible. Absent means no
11936
12099
  * admitted id was among this turn's injections, including every turn on a session with none.
11937
12100
  */
11938
- preauthorizedLakeIdsUsed: z$1.array(z$1.string()).optional()
12101
+ preauthorizedLakeIdsUsed: z$1.array(z$1.string()).optional(),
12102
+ /**
12103
+ * Which of this turn's injected lake prompt ids the caller holds an owner/curator GRANT on - the
12104
+ * per-arm sibling of `preauthorizedLakeIdsUsed`, and the reason both exist: `injectedLakePromptIds`
12105
+ * records THAT a lake's systemPrompt entered the turn, these two record WHICH ARM admitted it.
12106
+ * A subset of injectedLakePromptIds, never a superset. Derived at both injection sites via
12107
+ * grantedLakeIdsUsedFor.
12108
+ *
12109
+ * THE ARM WORTH NAMING SEPARATELY: the grant arm (#2495) is the only one that can cross an org
12110
+ * boundary - `grantLakeAccess` can hand a CURATOR grant to an arbitrary cross-tenant user, and
12111
+ * that grant carries injection trust. The creator and org arms cannot reach past one org, and a
12112
+ * reader grant is excluded permanently, so a lake listed here is the case an operator auditing
12113
+ * cross-tenant prompt influence is actually looking for.
12114
+ *
12115
+ * MEMBERSHIP, NOT CAUSATION, the same caveat the field above carries: a granted lake its holder
12116
+ * could already reach (they created it, or they are in its org) injects through the ordinary
12117
+ * trust arm and is listed here anyway, so a non-empty value does not prove the grant is what
12118
+ * made the injection possible. The two fields OVERLAP for that reason - a lake can appear in
12119
+ * both - so they are not a partition of injectedLakePromptIds and must not be counted as one.
12120
+ *
12121
+ * Absent means no injected id was grant-reached, including every turn where the grant read
12122
+ * FAILED (it is fail-quiet by design - telemetry must not drop the injection it records), so
12123
+ * absence is weaker evidence than presence. Date-bound any rollup: turns predating this field
12124
+ * carry nothing, and no backfill is possible - a past turn's grant rows have moved on.
12125
+ */
12126
+ grantedLakeIdsUsed: z$1.array(z$1.string()).optional()
11939
12127
  });
11940
12128
  /**
11941
12129
  * Why a grounded turn's library scan stopped short of the whole library.
@@ -16541,4 +16729,4 @@ var ConfigStore = class {
16541
16729
  }
16542
16730
  };
16543
16731
  //#endregion
16544
- export { SupportedFabFileMimeTypes as $, buildRateLimitLogEntry as $t, HTTPError as A, isRenderableModelType as At, OPENAI_GPT_IMAGE_1_IMAGE_SIZES as B, resolveHistoryFetchLimit as Bt, DEFAULT_MUSIC_MODEL_ID as C, isGeminiModelId as Ct, FIXED_TEMPERATURE_MODELS as D, isModelAccessible as Dt, FIELD_GROUP_OF as E, isMediaModelType as Et, MODEL_INFO_FIELD_GROUP_OF as F, isZodError as Ft, PermissionDeniedError as G, usdToCredits as Gt, OllamaEmbeddingModel as H, settingsMap as Ht, McpServerName as I, mapMimeTypeToArtifactType as It, REFUSAL_FALLBACK_MODELS as J, ACTOR_COLOR_SLOTS as Jt, REASONING_EFFORT_INCOMPATIBLE_WITH_TOOLS_MODELS as K, usdToCreditsStochastic as Kt, ModelBackend as L, obfuscateApiKey as Lt, IMAGE_SIZE_CONSTRAINTS as M, isSupportedFabFileMimeType as Mt, ImageModels as N, isUnlimitedHistory as Nt, FORMAT_PROMPT_TEMPLATE as O, isModelDeprecated as Ot, InternalServerError as P, isUserInitiatedAbort as Pt, SpeechToTextModels as Q, selfClaimedActorKindSchema as Qt, NO_TEMPERATURE_MODELS as R, parseEmbeddingRateLimitHeaders as Rt, CorruptedFileError as S, isGPTImageModel as St, DEGENERATE_FINISH_REASON as T, isImageServeable as Tt, OpenAIEmbeddingModel as U, toModelInfo as Ut, OPENAI_GPT_IMAGE_2_IMAGE_SIZES as V, secureParameters as Vt, PROMPT_TEXT_MAX as W, toModelRecord as Wt, REVIEW_GATE_STATUS_VALUES as X, actorKindMarker as Xt, RESPONSES_API_TOOL_MODELS as Y, actorColorIndex as Yt, SUBQUEST_STATUS_VALUES as Z, actorKindSchema as Zt, BadRequestError as _, isChunkRebuildPending as _t, getCreditsUrl as a, VideoModels as at, CREDIT_DEDUCT_TRANSACTION_TYPES as b, isFieldGroup as bt, requireApiUrl as c, applyModelPriceCatalog as ct, AGENT_QUEST_MANIFEST as d, defaultEmbeddingModelForEnv as dt, extractSnippetMeta as en, TTS_MAX_INPUT_CHARS as et, AGENT_QUEST_MCP_URI as f, getMcpProviderMetadata as ft, BFL_SAFETY_TOLERANCE as g, isAudioMimeType as gt, BEDROCK_NO_PROMPT_CACHING_MODELS as h, hasUsableLimits as ht, LOCAL_DEV_URL as i, VIDEO_SIZE_CONSTRAINTS as it, HttpStatus as j, isRetryableError as jt, ForbiddenError as k, isPlaceholderApiKey as kt, resolveApiEndpoint as l, calculateRetryDelay as lt, ApiKeyType as m, getRetryAfterMs as mt, logger as n, parseRateLimitHeaders as nn, UnauthorizedError as nt, getEnvironmentName as o, VoyageAIEmbeddingModel as ot, ARTIFACT_ATTRS_PATTERN as p, getQuestErrorCode as pt, REASONING_SUPPORTED_MODELS as q, withRetry as qt, ApiEndpointUnconfiguredError as r, UnprocessableEntityError as rt, parseApiUrl as s, WORK_ITEM_STATUSES as st, ConfigStore as t, isNearLimit as tn, TooManyRequestsError as tt, AGENT_QUEST_ID as u, dayjsConfig_default as ut, BedrockEmbeddingModel as v, isChunkStalledFile as vt, DEFAULT_UNKNOWN_CONTEXT_WINDOW as w, isImageAttachment as wt, ChatModels as x, isGPTImage2Model as xt, CONTEXT_WINDOW_SAFETY_BUFFER_TOKENS as y, isEarlyStop as yt, NotFoundError as z, reservationOutputTokens as zt };
16732
+ export { SupportedFabFileMimeTypes as $, selfClaimedActorKindSchema as $t, HTTPError as A, isPlaceholderApiKey as At, OPENAI_GPT_IMAGE_1_IMAGE_SIZES as B, reservationOutputTokens as Bt, DEFAULT_MUSIC_MODEL_ID as C, isGPTImageModel as Ct, FIXED_TEMPERATURE_MODELS as D, isMediaModelType as Dt, FIELD_GROUP_OF as E, isImageServeable as Et, MODEL_INFO_FIELD_GROUP_OF as F, isUserInitiatedAbort as Ft, PermissionDeniedError as G, toModelRecord as Gt, OllamaEmbeddingModel as H, secureParameters as Ht, McpServerName as I, isZodError as It, REFUSAL_FALLBACK_MODELS as J, withRetry as Jt, REASONING_EFFORT_INCOMPATIBLE_WITH_TOOLS_MODELS as K, usdToCredits as Kt, ModelBackend as L, mapMimeTypeToArtifactType as Lt, IMAGE_SIZE_CONSTRAINTS as M, isRetryableError as Mt, ImageModels as N, isSupportedFabFileMimeType as Nt, FORMAT_PROMPT_TEMPLATE as O, isModelAccessible as Ot, InternalServerError as P, isUnlimitedHistory as Pt, SpeechToTextModels as Q, actorKindSchema as Qt, NO_TEMPERATURE_MODELS as R, obfuscateApiKey as Rt, CorruptedFileError as S, isGPTImage2Model as St, DEGENERATE_FINISH_REASON as T, isImageAttachment as Tt, OpenAIEmbeddingModel as U, settingsMap as Ut, OPENAI_GPT_IMAGE_2_IMAGE_SIZES as V, resolveHistoryFetchLimit as Vt, PROMPT_TEXT_MAX as W, toModelInfo as Wt, REVIEW_GATE_STATUS_VALUES as X, actorColorIndex as Xt, RESPONSES_API_TOOL_MODELS as Y, ACTOR_COLOR_SLOTS as Yt, SUBQUEST_STATUS_VALUES as Z, actorKindMarker as Zt, BadRequestError as _, isAudioMimeType as _t, getCreditsUrl as a, VideoModels as at, CREDIT_DEDUCT_TRANSACTION_TYPES as b, isEarlyStop as bt, requireApiUrl as c, applyModelPriceCatalog as ct, AGENT_QUEST_MANIFEST as d, defaultEmbeddingModelForEnv as dt, buildRateLimitLogEntry as en, TTS_MAX_INPUT_CHARS as et, AGENT_QUEST_MCP_URI as f, getMcpProviderMetadata as ft, BFL_SAFETY_TOLERANCE as g, hasUsableLimits as gt, BEDROCK_NO_PROMPT_CACHING_MODELS as h, hasKeylessCloudEmbedder as ht, LOCAL_DEV_URL as i, VIDEO_SIZE_CONSTRAINTS as it, HttpStatus as j, isRenderableModelType as jt, ForbiddenError as k, isModelDeprecated as kt, resolveApiEndpoint as l, calculateRetryDelay as lt, ApiKeyType as m, getRetryAfterMs as mt, logger as n, isNearLimit as nn, UnauthorizedError as nt, getEnvironmentName as o, VoyageAIEmbeddingModel as ot, ARTIFACT_ATTRS_PATTERN as p, getQuestErrorCode as pt, REASONING_SUPPORTED_MODELS as q, usdToCreditsStochastic as qt, ApiEndpointUnconfiguredError as r, parseRateLimitHeaders as rn, UnprocessableEntityError as rt, parseApiUrl as s, WORK_ITEM_STATUSES as st, ConfigStore as t, extractSnippetMeta as tn, TooManyRequestsError as tt, AGENT_QUEST_ID as u, dayjsConfig_default as ut, BedrockEmbeddingModel as v, isChunkRebuildPending as vt, DEFAULT_UNKNOWN_CONTEXT_WINDOW as w, isGeminiModelId as wt, ChatModels as x, isFieldGroup as xt, CONTEXT_WINDOW_SAFETY_BUFFER_TOKENS as y, isChunkStalledFile as yt, NotFoundError as z, parseEmbeddingRateLimitHeaders as zt };
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
- import { F as loadContextFiles, J as setWebSocketToolExecutor, L as generateCliTools, M as ReActAgent, X as buildSystemPrompt, Y as getPlanModeFilePath, a as McpManager, i as AgentStore, l as OllamaBackend, n as BackgroundAgentManager, o as createSseBackend, r as SubagentOrchestrator, s as ServerLlmBackend, t as AgentHistoryStore } from "./AgentHistoryStore-ucv6xXVT.mjs";
3
- import { n as logger } from "./ConfigStore-CoY0l0gr.mjs";
2
+ import { F as loadContextFiles, J as setWebSocketToolExecutor, L as generateCliTools, M as ReActAgent, X as buildSystemPrompt, Y as getPlanModeFilePath, a as McpManager, i as AgentStore, l as OllamaBackend, n as BackgroundAgentManager, o as createSseBackend, r as SubagentOrchestrator, s as ServerLlmBackend, t as AgentHistoryStore } from "./AgentHistoryStore-7zQUOxkA.mjs";
3
+ import { n as logger } from "./ConfigStore-8_0WsN5r.mjs";
4
4
  import { z as z$1 } from "zod";
5
5
  import WebSocket from "ws";
6
6
  //#region src/llm/NotifyingLlmBackend.ts
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
- import { $ as RemoteSkillSource, A as FallbackLlmBackend, C as createWriteTodosTool, D as createResumeAgentTool, E as createCoordinateTaskTool, I as PermissionManager, J as setWebSocketToolExecutor, O as createBackgroundAgentTools, Q as isReadOnlyTool, S as createTodoStore, et as CustomCommandStore, k as createAgentDelegateTool, nt as SessionStore, tt as CheckpointStore, w as createSkillTool, x as createFindDefinitionTool, y as createGetFileStructureTool } from "../AgentHistoryStore-ucv6xXVT.mjs";
3
- import { c as requireApiUrl, n as logger, t as ConfigStore } from "../ConfigStore-CoY0l0gr.mjs";
4
- import { t as ApiClient } from "../ApiClient-Ut1MXtOs.mjs";
5
- import { a as createToolSearchTool, i as buildLlmBackend, n as buildSupportingStores, o as deferredToolRegistry, r as buildSandbox, s as NotifyingLlmBackend, t as buildAgent } from "../buildAgent-jZhBReAr.mjs";
2
+ import { $ as RemoteSkillSource, A as FallbackLlmBackend, C as createWriteTodosTool, D as createResumeAgentTool, E as createCoordinateTaskTool, I as PermissionManager, J as setWebSocketToolExecutor, O as createBackgroundAgentTools, Q as isReadOnlyTool, S as createTodoStore, et as CustomCommandStore, k as createAgentDelegateTool, nt as SessionStore, tt as CheckpointStore, w as createSkillTool, x as createFindDefinitionTool, y as createGetFileStructureTool } from "../AgentHistoryStore-7zQUOxkA.mjs";
3
+ import { c as requireApiUrl, n as logger, t as ConfigStore } from "../ConfigStore-8_0WsN5r.mjs";
4
+ import { t as ApiClient } from "../ApiClient-XdY9O3nz.mjs";
5
+ import { a as createToolSearchTool, i as buildLlmBackend, n as buildSupportingStores, o as deferredToolRegistry, r as buildSandbox, s as NotifyingLlmBackend, t as buildAgent } from "../buildAgent-CvPRH2n-.mjs";
6
6
  import { randomUUID } from "crypto";
7
7
  import { existsSync, realpathSync, statSync } from "fs";
8
8
  import { isAbsolute } from "path";
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { l as resolveApiEndpoint, s as parseApiUrl, t as ConfigStore } from "../ConfigStore-CoY0l0gr.mjs";
2
+ import { l as resolveApiEndpoint, s as parseApiUrl, t as ConfigStore } from "../ConfigStore-8_0WsN5r.mjs";
3
3
  //#region src/commands/apiCommand.ts
4
4
  /**
5
5
  * External API config command (--api-url / --reset-api)
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { t as version } from "../package-CfIETbXd.mjs";
2
+ import { t as version } from "../package-OZdXqn0e.mjs";
3
3
  import { a as fetchLatestVersion, c as isNpmPrefixWritable, i as compareSemver } from "../updateChecker-CQW8bxo6.mjs";
4
4
  import { t as checkRipgrep } from "../ripgrepCheck-BmkyTK2i.mjs";
5
5
  import { execSync } from "child_process";
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { t as ConfigStore } from "../ConfigStore-CoY0l0gr.mjs";
2
+ import { t as ConfigStore } from "../ConfigStore-8_0WsN5r.mjs";
3
3
  //#region src/commands/envCommand.ts
4
4
  /**
5
5
  * Environment switching for the `--dev` / `--prod` launch flags.
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
- import { $ as RemoteSkillSource, A as FallbackLlmBackend, B as classifyCommandRisk, C as createWriteTodosTool, D as createResumeAgentTool, E as createCoordinateTaskTool, F as loadContextFiles, I as PermissionManager, J as setWebSocketToolExecutor, L as generateCliTools, M as ReActAgent, O as createBackgroundAgentTools, Q as isReadOnlyTool, S as createTodoStore, X as buildSystemPrompt, a as McpManager, b as createWorkItemTools, et as CustomCommandStore, i as AgentStore, k as createAgentDelegateTool, n as BackgroundAgentManager, nt as SessionStore, o as createSseBackend, r as SubagentOrchestrator, t as AgentHistoryStore, tt as CheckpointStore, w as createSkillTool, x as createFindDefinitionTool, y as createGetFileStructureTool, z as SHELL_LIKE_TOOL_COMMAND_FIELDS } from "../AgentHistoryStore-ucv6xXVT.mjs";
3
- import { c as requireApiUrl, n as logger, t as ConfigStore } from "../ConfigStore-CoY0l0gr.mjs";
4
- import { t as ApiClient } from "../ApiClient-Ut1MXtOs.mjs";
2
+ import { $ as RemoteSkillSource, A as FallbackLlmBackend, B as classifyCommandRisk, C as createWriteTodosTool, D as createResumeAgentTool, E as createCoordinateTaskTool, F as loadContextFiles, I as PermissionManager, J as setWebSocketToolExecutor, L as generateCliTools, M as ReActAgent, O as createBackgroundAgentTools, Q as isReadOnlyTool, S as createTodoStore, X as buildSystemPrompt, a as McpManager, b as createWorkItemTools, et as CustomCommandStore, i as AgentStore, k as createAgentDelegateTool, n as BackgroundAgentManager, nt as SessionStore, o as createSseBackend, r as SubagentOrchestrator, t as AgentHistoryStore, tt as CheckpointStore, w as createSkillTool, x as createFindDefinitionTool, y as createGetFileStructureTool, z as SHELL_LIKE_TOOL_COMMAND_FIELDS } from "../AgentHistoryStore-7zQUOxkA.mjs";
3
+ import { c as requireApiUrl, n as logger, t as ConfigStore } from "../ConfigStore-8_0WsN5r.mjs";
4
+ import { t as ApiClient } from "../ApiClient-XdY9O3nz.mjs";
5
5
  import { t as DEFAULT_SANDBOX_CONFIG } from "../types-LyRNHOiS.mjs";
6
6
  import { r as reconstructTurnBlocks, t as WorkItemsClient } from "../WorkItemsClient-Cow6nXx7.mjs";
7
7
  import { t as createSandboxRuntime } from "../SandboxRuntimeAdapter-ChGlxSGQ.mjs";
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
- import { t as ConfigStore } from "../ConfigStore-CoY0l0gr.mjs";
3
- import { t as version } from "../package-CfIETbXd.mjs";
2
+ import { t as ConfigStore } from "../ConfigStore-8_0WsN5r.mjs";
3
+ import { t as version } from "../package-OZdXqn0e.mjs";
4
4
  //#region src/commands/mcpCommand.ts
5
5
  /**
6
6
  * External MCP commands (b4m mcp list, b4m mcp add, etc.)
@@ -70,7 +70,7 @@ async function handleMcpCommand(subcommand, argv) {
70
70
  await handleDisable(config, argv.name, configStore);
71
71
  break;
72
72
  case "serve": {
73
- const { handleMcpServeCommand } = await import("../serve-C9UDR5px.mjs");
73
+ const { handleMcpServeCommand } = await import("../serve-CEqSZwl6.mjs");
74
74
  await handleMcpServeCommand({
75
75
  http: Boolean(argv.http),
76
76
  port: typeof argv.port === "number" ? argv.port : void 0,
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  import { n as getDefaultPluginsDir, r as isFeatureEnabled, t as PluginStore } from "../PluginStore-DwvOJ-G3.mjs";
3
- import { t as ConfigStore } from "../ConfigStore-CoY0l0gr.mjs";
3
+ import { t as ConfigStore } from "../ConfigStore-8_0WsN5r.mjs";
4
4
  import { execFileSync } from "child_process";
5
5
  import { promises } from "fs";
6
6
  import path from "path";
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { t as version } from "../package-CfIETbXd.mjs";
2
+ import { t as version } from "../package-OZdXqn0e.mjs";
3
3
  import { c as isNpmPrefixWritable, l as setAutoUpdatePreference, n as REEXEC_GUARD_ENV, o as forceCheckForUpdate, r as checkForUpdate, s as getAutoUpdatePreference, t as INSTALL_CMD, u as shouldAttemptAutoUpdate } from "../updateChecker-CQW8bxo6.mjs";
4
4
  import { t as checkRipgrep } from "../ripgrepCheck-BmkyTK2i.mjs";
5
5
  import { execSync, spawnSync } from "child_process";
package/dist/index.mjs CHANGED
@@ -1,13 +1,13 @@
1
1
  #!/usr/bin/env node
2
- import { $ as RemoteSkillSource, A as FallbackLlmBackend, C as createWriteTodosTool, D as createResumeAgentTool, E as createCoordinateTaskTool, G as DEFAULT_THOROUGHNESS, H as DEFAULT_AGENT_MODEL, I as PermissionManager, J as setWebSocketToolExecutor, K as clearFeatureModuleTools, N as findIterationBoundary, O as createBackgroundAgentTools, P as extractCompactInstructions, Q as isReadOnlyTool, R as getProcessHooks, S as createTodoStore, T as parseAgentConfig, U as DEFAULT_MAX_ITERATIONS, V as ALWAYS_DENIED_FOR_AGENTS, W as DEFAULT_RETRY_CONFIG, X as buildSystemPrompt, Y as getPlanModeFilePath, Z as buildSkillsPromptSection, _ as createDecisionStore, at as searchCommands, b as createWorkItemTools, c as isTransientNetworkError, ct as searchFiles, d as createReviewGateTool, et as CustomCommandStore, f as formatReviewGatesOutput, ft as MAX_PASTE_SIZE, g as createDecisionLogTool, h as formatBlockersOutput, it as processFileReferences, j as substituteArguments, k as createAgentDelegateTool, lt as warmFileCache, m as createBlockerTools, nt as SessionStore, ot as mergeCommands, p as createBlockerStore, q as registerFeatureModuleTools, rt as hasFileReferences, st as formatFileSize, tt as CheckpointStore, u as createReviewGateStore, ut as COMPACTION_SUMMARY_MARKER, v as formatDecisionsOutput, w as createSkillTool, x as createFindDefinitionTool, y as createGetFileStructureTool } from "./AgentHistoryStore-ucv6xXVT.mjs";
2
+ import { $ as RemoteSkillSource, A as FallbackLlmBackend, C as createWriteTodosTool, D as createResumeAgentTool, E as createCoordinateTaskTool, G as DEFAULT_THOROUGHNESS, H as DEFAULT_AGENT_MODEL, I as PermissionManager, J as setWebSocketToolExecutor, K as clearFeatureModuleTools, N as findIterationBoundary, O as createBackgroundAgentTools, P as extractCompactInstructions, Q as isReadOnlyTool, R as getProcessHooks, S as createTodoStore, T as parseAgentConfig, U as DEFAULT_MAX_ITERATIONS, V as ALWAYS_DENIED_FOR_AGENTS, W as DEFAULT_RETRY_CONFIG, X as buildSystemPrompt, Y as getPlanModeFilePath, Z as buildSkillsPromptSection, _ as createDecisionStore, at as searchCommands, b as createWorkItemTools, c as isTransientNetworkError, ct as searchFiles, d as createReviewGateTool, et as CustomCommandStore, f as formatReviewGatesOutput, ft as MAX_PASTE_SIZE, g as createDecisionLogTool, h as formatBlockersOutput, it as processFileReferences, j as substituteArguments, k as createAgentDelegateTool, lt as warmFileCache, m as createBlockerTools, nt as SessionStore, ot as mergeCommands, p as createBlockerStore, q as registerFeatureModuleTools, rt as hasFileReferences, st as formatFileSize, tt as CheckpointStore, u as createReviewGateStore, ut as COMPACTION_SUMMARY_MARKER, v as formatDecisionsOutput, w as createSkillTool, x as createFindDefinitionTool, y as createGetFileStructureTool } from "./AgentHistoryStore-7zQUOxkA.mjs";
3
3
  import { a as selectLiveSubagentTokens, i as selectLiveSubagentCredits, n as selectActiveBackgroundShells, o as useCliStore, r as selectCompletedBackgroundShells, t as selectActiveBackgroundAgents } from "./store-CvjTpQPs.mjs";
4
4
  import { r as isFeatureEnabled, t as PluginStore } from "./PluginStore-DwvOJ-G3.mjs";
5
- import { Jt as ACTOR_COLOR_SLOTS, Qt as selfClaimedActorKindSchema, X as REVIEW_GATE_STATUS_VALUES, Xt as actorKindMarker, Yt as actorColorIndex, Z as SUBQUEST_STATUS_VALUES, Zt as actorKindSchema, a as getCreditsUrl, b as CREDIT_DEDUCT_TRANSACTION_TYPES, c as requireApiUrl, i as LOCAL_DEV_URL, l as resolveApiEndpoint, n as logger, o as getEnvironmentName, r as ApiEndpointUnconfiguredError, s as parseApiUrl, t as ConfigStore, x as ChatModels, yt as isEarlyStop } from "./ConfigStore-CoY0l0gr.mjs";
5
+ import { $t as selfClaimedActorKindSchema, Qt as actorKindSchema, X as REVIEW_GATE_STATUS_VALUES, Xt as actorColorIndex, Yt as ACTOR_COLOR_SLOTS, Z as SUBQUEST_STATUS_VALUES, Zt as actorKindMarker, a as getCreditsUrl, b as CREDIT_DEDUCT_TRANSACTION_TYPES, bt as isEarlyStop, c as requireApiUrl, i as LOCAL_DEV_URL, l as resolveApiEndpoint, n as logger, o as getEnvironmentName, r as ApiEndpointUnconfiguredError, s as parseApiUrl, t as ConfigStore, x as ChatModels } from "./ConfigStore-8_0WsN5r.mjs";
6
6
  import { t as getShellSessionManager } from "./ShellSessionManager-6o8KZzl1-vrbPAUTq.mjs";
7
- import { n as OAuthClient, t as ApiClient } from "./ApiClient-Ut1MXtOs.mjs";
7
+ import { n as OAuthClient, t as ApiClient } from "./ApiClient-XdY9O3nz.mjs";
8
8
  import { i as getTokenCounter, n as ConversationContext, r as reconstructTurnBlocks, t as WorkItemsClient } from "./WorkItemsClient-Cow6nXx7.mjs";
9
- import { a as createToolSearchTool, i as buildLlmBackend, n as buildSupportingStores, o as deferredToolRegistry, r as buildSandbox, s as NotifyingLlmBackend, t as buildAgent } from "./buildAgent-jZhBReAr.mjs";
10
- import { t as version } from "./package-CfIETbXd.mjs";
9
+ import { a as createToolSearchTool, i as buildLlmBackend, n as buildSupportingStores, o as deferredToolRegistry, r as buildSandbox, s as NotifyingLlmBackend, t as buildAgent } from "./buildAgent-CvPRH2n-.mjs";
10
+ import { t as version } from "./package-OZdXqn0e.mjs";
11
11
  import { r as checkForUpdate } from "./updateChecker-CQW8bxo6.mjs";
12
12
  import React, { useCallback, useEffect, useMemo, useReducer, useRef, useState, useSyncExternalStore } from "react";
13
13
  import { Box, Static, Text, render, useApp, useInput, usePaste, useStdout } from "ink";
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
2
  //#region package.json
3
- var version = "0.21.0";
3
+ var version = "0.22.0";
4
4
  //#endregion
5
5
  export { version as t };
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
- import { W as PROMPT_TEXT_MAX, c as requireApiUrl, d as AGENT_QUEST_MANIFEST, f as AGENT_QUEST_MCP_URI, n as logger, s as parseApiUrl, t as ConfigStore, u as AGENT_QUEST_ID } from "./ConfigStore-CoY0l0gr.mjs";
3
- import { t as ApiClient } from "./ApiClient-Ut1MXtOs.mjs";
2
+ import { W as PROMPT_TEXT_MAX, c as requireApiUrl, d as AGENT_QUEST_MANIFEST, f as AGENT_QUEST_MCP_URI, n as logger, s as parseApiUrl, t as ConfigStore, u as AGENT_QUEST_ID } from "./ConfigStore-8_0WsN5r.mjs";
3
+ import { t as ApiClient } from "./ApiClient-XdY9O3nz.mjs";
4
4
  import { z as z$1 } from "zod";
5
5
  import { isAxiosError } from "axios";
6
6
  import { Writable } from "node:stream";