@granular-software/sdk 0.4.38 → 0.4.39

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/dist/cli/index.js CHANGED
@@ -18991,7 +18991,10 @@ var WSClient = class {
18991
18991
  if (!expiresAt) {
18992
18992
  return;
18993
18993
  }
18994
- const refreshInMs = Math.max(1e3, expiresAt - Date.now() - TOKEN_REFRESH_LEEWAY_MS);
18994
+ const refreshInMs = Math.max(
18995
+ 1e3,
18996
+ expiresAt - Date.now() - TOKEN_REFRESH_LEEWAY_MS
18997
+ );
18995
18998
  const delay = Math.min(refreshInMs, MAX_TIMER_DELAY_MS);
18996
18999
  this.tokenRefreshTimer = setTimeout(() => {
18997
19000
  void this.refreshTokenInBackground();
@@ -19037,7 +19040,10 @@ var WSClient = class {
19037
19040
  return refreshedToken;
19038
19041
  } catch (error2) {
19039
19042
  if (expiresAt > Date.now()) {
19040
- console.warn("[Granular] Token refresh failed, using current token:", error2);
19043
+ console.warn(
19044
+ "[Granular] Token refresh failed, using current token:",
19045
+ error2
19046
+ );
19041
19047
  return this.token;
19042
19048
  }
19043
19049
  throw error2;
@@ -19064,7 +19070,9 @@ var WSClient = class {
19064
19070
  }
19065
19071
  }
19066
19072
  if (!WebSocketClass) {
19067
- throw new Error('No WebSocket implementation found. If using Node.js, please install "ws" and pass the constructor to the SDK options: { WebSocketCtor: WebSocket }.');
19073
+ throw new Error(
19074
+ 'No WebSocket implementation found. If using Node.js, please install "ws" and pass the constructor to the SDK options: { WebSocketCtor: WebSocket }.'
19075
+ );
19068
19076
  }
19069
19077
  return new Promise((resolve2, reject) => {
19070
19078
  try {
@@ -19196,7 +19204,10 @@ var WSClient = class {
19196
19204
  try {
19197
19205
  this.options.onUnexpectedClose(info2);
19198
19206
  } catch (callbackError) {
19199
- console.error("[Granular] onUnexpectedClose callback failed:", callbackError);
19207
+ console.error(
19208
+ "[Granular] onUnexpectedClose callback failed:",
19209
+ callbackError
19210
+ );
19200
19211
  }
19201
19212
  }
19202
19213
  this.reconnectTimer = setTimeout(() => {
@@ -19213,7 +19224,10 @@ var WSClient = class {
19213
19224
  try {
19214
19225
  this.options.onReconnectError(reconnectInfo);
19215
19226
  } catch (callbackError) {
19216
- console.error("[Granular] onReconnectError callback failed:", callbackError);
19227
+ console.error(
19228
+ "[Granular] onReconnectError callback failed:",
19229
+ callbackError
19230
+ );
19217
19231
  }
19218
19232
  }
19219
19233
  });
@@ -19222,7 +19236,10 @@ var WSClient = class {
19222
19236
  }
19223
19237
  handleMessage(message) {
19224
19238
  if (typeof message !== "object" || message === null) return;
19225
- debugWs("[Granular DEBUG] Received message:", JSON.stringify(message).slice(0, 500));
19239
+ debugWs(
19240
+ "[Granular DEBUG] Received message:",
19241
+ JSON.stringify(message).slice(0, 500)
19242
+ );
19226
19243
  if ("type" in message && message.type === "sync") {
19227
19244
  const syncMessage = message;
19228
19245
  let bytes;
@@ -19252,21 +19269,39 @@ var WSClient = class {
19252
19269
  this.syncState = newSyncState;
19253
19270
  const docAny = this.doc;
19254
19271
  if (docAny.catalog) {
19255
- debugWs("[Granular DEBUG] Doc catalog sync applied. Keys in catalog:", Object.keys(docAny.catalog || {}));
19256
- debugWs("[Granular DEBUG] RawToolCatalogs:", Object.keys(docAny.catalog.rawToolCatalogs || {}));
19272
+ debugWs(
19273
+ "[Granular DEBUG] Doc catalog sync applied. Keys in catalog:",
19274
+ Object.keys(docAny.catalog || {})
19275
+ );
19276
+ debugWs(
19277
+ "[Granular DEBUG] RawToolCatalogs:",
19278
+ Object.keys(docAny.catalog.rawToolCatalogs || {})
19279
+ );
19257
19280
  } else {
19258
- debugWs("[Granular DEBUG] Doc synced but no catalog yet. Keys in doc:", Object.keys(docAny));
19281
+ debugWs(
19282
+ "[Granular DEBUG] Doc synced but no catalog yet. Keys in doc:",
19283
+ Object.keys(docAny)
19284
+ );
19259
19285
  }
19260
19286
  this.emit("sync", this.doc);
19261
19287
  } catch (e) {
19262
19288
  try {
19263
- debugWs("[Granular DEBUG] receiveSyncMessage failed, trying applyChanges...");
19289
+ debugWs(
19290
+ "[Granular DEBUG] receiveSyncMessage failed, trying applyChanges..."
19291
+ );
19264
19292
  const [newDoc] = Automerge__namespace.applyChanges(this.doc, [bytes]);
19265
19293
  this.doc = newDoc;
19266
19294
  this.emit("sync", this.doc);
19267
- debugWs("[Granular DEBUG] applyChanges succeeded. Doc:", JSON.stringify(Automerge__namespace.toJS(this.doc)));
19295
+ debugWs(
19296
+ "[Granular DEBUG] applyChanges succeeded. Doc:",
19297
+ JSON.stringify(Automerge__namespace.toJS(this.doc))
19298
+ );
19268
19299
  } catch (applyError) {
19269
- console.warn("[Granular] Failed to apply sync message (both sync & applyChanges)", e, applyError);
19300
+ console.warn(
19301
+ "[Granular] Failed to apply sync message (both sync & applyChanges)",
19302
+ e,
19303
+ applyError
19304
+ );
19270
19305
  }
19271
19306
  }
19272
19307
  return;
@@ -19275,10 +19310,16 @@ var WSClient = class {
19275
19310
  const snapshotMessage = message;
19276
19311
  try {
19277
19312
  const bytes = new Uint8Array(snapshotMessage.data);
19278
- debugWs("[Granular DEBUG] Loading Automerge session snapshot bytes:", bytes.length);
19313
+ debugWs(
19314
+ "[Granular DEBUG] Loading Automerge session snapshot bytes:",
19315
+ bytes.length
19316
+ );
19279
19317
  this.doc = Automerge__namespace.load(bytes);
19280
19318
  this.emit("sync", this.doc);
19281
- debugWs("[Granular DEBUG] Automerge session snapshot loaded. Doc:", JSON.stringify(Automerge__namespace.toJS(this.doc)));
19319
+ debugWs(
19320
+ "[Granular DEBUG] Automerge session snapshot loaded. Doc:",
19321
+ JSON.stringify(Automerge__namespace.toJS(this.doc))
19322
+ );
19282
19323
  } catch (e) {
19283
19324
  console.warn("[Granular] Failed to load snapshot message", e);
19284
19325
  }
@@ -19290,6 +19331,7 @@ var WSClient = class {
19290
19331
  const bytes = new Uint8Array(changeMessage.data);
19291
19332
  const [newDoc] = Automerge__namespace.applyChanges(this.doc, [bytes]);
19292
19333
  this.doc = newDoc;
19334
+ this.emit("change", changeMessage);
19293
19335
  this.emit("sync", this.doc);
19294
19336
  } catch (e) {
19295
19337
  console.warn("[Granular] Failed to apply change message", e);
@@ -19302,12 +19344,16 @@ var WSClient = class {
19302
19344
  if (pending) {
19303
19345
  if (response.type === "rpc_error") {
19304
19346
  pending.reject(
19305
- new Error(`RPC error: ${response.error?.message || "Unknown error"}`)
19347
+ new Error(
19348
+ `RPC error: ${response.error?.message || "Unknown error"}`
19349
+ )
19306
19350
  );
19307
19351
  } else {
19308
19352
  pending.resolve(response.result);
19309
19353
  }
19310
- this.messageQueue = this.messageQueue.filter((q) => q.id !== response.id);
19354
+ this.messageQueue = this.messageQueue.filter(
19355
+ (q) => q.id !== response.id
19356
+ );
19311
19357
  }
19312
19358
  return;
19313
19359
  }
@@ -21096,9 +21142,10 @@ function normalizeShowRefs(value) {
21096
21142
  const show = {
21097
21143
  entryPaths: normalizeRefs(record.entryPaths),
21098
21144
  listNames: normalizeRefs(record.listNames),
21099
- variableNames: normalizeRefs(record.variableNames)
21145
+ variableNames: normalizeRefs(record.variableNames),
21146
+ fileIds: normalizeRefs(record.fileIds)
21100
21147
  };
21101
- return show.entryPaths || show.listNames || show.variableNames ? show : void 0;
21148
+ return show.entryPaths || show.listNames || show.variableNames || show.fileIds ? show : void 0;
21102
21149
  }
21103
21150
  function stringifyTranscriptValue(value, fallback2 = "") {
21104
21151
  if (typeof value === "string") {
@@ -21306,7 +21353,10 @@ function buildJobCodeEntry(jobId, job2) {
21306
21353
  jobId,
21307
21354
  code,
21308
21355
  jobStatus,
21309
- jobResultPreview: stringifyTranscriptValue(job2.result, "No job result recorded."),
21356
+ jobResultPreview: stringifyTranscriptValue(
21357
+ job2.result,
21358
+ "No job result recorded."
21359
+ ),
21310
21360
  error: error2,
21311
21361
  source: "job_code"
21312
21362
  };
@@ -21315,12 +21365,16 @@ function buildSessionTranscript(input) {
21315
21365
  const liveDoc = input.liveDoc || null;
21316
21366
  const sessionHeap = input.sessionHeap || EMPTY_HEAP;
21317
21367
  const transcript = [];
21318
- const conversationMessages = asArray(asRecord3(liveDoc?.conversation)?.messages).map((message) => normalizeConversationMessage(message)).filter((message) => Boolean(message));
21368
+ const conversationMessages = asArray(
21369
+ asRecord3(liveDoc?.conversation)?.messages
21370
+ ).map((message) => normalizeConversationMessage(message)).filter((message) => Boolean(message));
21319
21371
  const conversationPromptIds = new Set(
21320
21372
  conversationMessages.map((message) => message.promptId).filter((promptId) => Boolean(promptId))
21321
21373
  );
21322
21374
  const assistantConversationJobIds = new Set(
21323
- conversationMessages.filter((message) => message.role === "assistant" && Boolean(message.jobId)).map((message) => message.jobId)
21375
+ conversationMessages.filter(
21376
+ (message) => message.role === "assistant" && Boolean(message.jobId)
21377
+ ).map((message) => message.jobId)
21324
21378
  );
21325
21379
  transcript.push(...conversationMessages);
21326
21380
  const jobsById = asRecord3(asRecord3(liveDoc?.jobs)?.byId) || {};
@@ -21338,7 +21392,10 @@ function buildSessionTranscript(input) {
21338
21392
  ...normalizePromptEntries(jobId, job2.prompts, conversationPromptIds)
21339
21393
  );
21340
21394
  if (!assistantConversationJobIds.has(jobId)) {
21341
- const agentEntries = normalizeAgentMessageEntries(jobId, job2.agentMessages);
21395
+ const agentEntries = normalizeAgentMessageEntries(
21396
+ jobId,
21397
+ job2.agentMessages
21398
+ );
21342
21399
  if (agentEntries.length > 0) {
21343
21400
  transcript.push(...agentEntries);
21344
21401
  } else {
@@ -21691,6 +21748,25 @@ var LOCAL_CONTROL_REQUEST_RETRY_DELAY_MS = 500;
21691
21748
  var SESSION_DATA_REQUEST_RETRY_COUNT = 4;
21692
21749
  var SESSION_DATA_REQUEST_RETRY_DELAY_MS = 500;
21693
21750
  var EFFECT_HOST_CONNECT_TIMEOUT_MS = 15e3;
21751
+ function filenameFromUploadBody(body) {
21752
+ const maybe = body;
21753
+ return typeof maybe.name === "string" && maybe.name.trim() ? maybe.name.trim() : null;
21754
+ }
21755
+ function contentTypeFromUploadBody(body) {
21756
+ const maybe = body;
21757
+ return typeof maybe.type === "string" && maybe.type.trim() ? maybe.type.trim() : null;
21758
+ }
21759
+ function bodyInitFromSessionFileUpload(body) {
21760
+ if (typeof body === "string") return body;
21761
+ if (body instanceof ArrayBuffer) return body;
21762
+ if (ArrayBuffer.isView(body)) {
21763
+ return body.buffer.slice(
21764
+ body.byteOffset,
21765
+ body.byteOffset + body.byteLength
21766
+ );
21767
+ }
21768
+ return body;
21769
+ }
21694
21770
  var EFFECT_CATALOG_SYNC_TIMEOUT_MS = 3e4;
21695
21771
  var EFFECT_CATALOG_SYNC_RETRY_COUNT = 3;
21696
21772
  var EFFECT_CATALOG_SYNC_RETRY_DELAY_MS = 1e3;
@@ -23175,7 +23251,7 @@ var EnvironmentSession = class extends Session {
23175
23251
  const doc = this.document;
23176
23252
  return normalizeHeapSnapshot(doc?.heap);
23177
23253
  }
23178
- async sessionDataRequest(path7, query, init2 = {}) {
23254
+ buildSessionDataUrl(path7, query) {
23179
23255
  const searchParams = new URLSearchParams();
23180
23256
  for (const [key, value] of Object.entries(query || {})) {
23181
23257
  if (value !== null && typeof value !== "undefined" && value !== "") {
@@ -23183,20 +23259,21 @@ var EnvironmentSession = class extends Session {
23183
23259
  }
23184
23260
  }
23185
23261
  const queryString = searchParams.toString();
23186
- const url = `${this.environment.runtimeBaseUrl}${this.sessionDataRoutePrefix}/${encodeURIComponent(this.sessionId)}${path7}${queryString ? `?${queryString}` : ""}`;
23187
- const body = typeof init2.body === "undefined" ? void 0 : JSON.stringify(init2.body);
23262
+ return `${this.environment.runtimeBaseUrl}${this.sessionDataRoutePrefix}/${encodeURIComponent(this.sessionId)}${path7}${queryString ? `?${queryString}` : ""}`;
23263
+ }
23264
+ async sessionDataFetch(path7, query, init2 = {}) {
23265
+ const url = this.buildSessionDataUrl(path7, query);
23188
23266
  for (let attempt = 1; attempt <= SESSION_DATA_REQUEST_RETRY_COUNT; attempt += 1) {
23189
23267
  try {
23268
+ const headers = new Headers(init2.headers);
23269
+ headers.set("Authorization", `Bearer ${this.environment.authToken}`);
23190
23270
  const response = await fetch(url, {
23191
23271
  method: init2.method || "GET",
23192
- headers: {
23193
- Authorization: `Bearer ${this.environment.authToken}`,
23194
- "Content-Type": "application/json"
23195
- },
23196
- ...typeof body === "undefined" ? {} : { body }
23272
+ headers,
23273
+ ...typeof init2.body === "undefined" ? {} : { body: init2.body }
23197
23274
  });
23198
23275
  if (response.ok) {
23199
- return response.json();
23276
+ return response;
23200
23277
  }
23201
23278
  const errorText = await response.text();
23202
23279
  const error2 = new Error(
@@ -23217,6 +23294,15 @@ var EnvironmentSession = class extends Session {
23217
23294
  }
23218
23295
  throw new Error(`Session data API Error: exhausted retries for ${url}`);
23219
23296
  }
23297
+ async sessionDataRequest(path7, query, init2 = {}) {
23298
+ const body = typeof init2.body === "undefined" ? void 0 : JSON.stringify(init2.body);
23299
+ const response = await this.sessionDataFetch(path7, query, {
23300
+ method: init2.method || "GET",
23301
+ headers: { "Content-Type": "application/json" },
23302
+ ...typeof body === "undefined" ? {} : { body }
23303
+ });
23304
+ return response.json();
23305
+ }
23220
23306
  async collectAllSessionItems(listPage) {
23221
23307
  const items = [];
23222
23308
  let cursor = null;
@@ -23257,6 +23343,53 @@ var EnvironmentSession = class extends Session {
23257
23343
  )
23258
23344
  };
23259
23345
  }
23346
+ get files() {
23347
+ return {
23348
+ list: (options = {}) => this.sessionDataRequest(
23349
+ "/files",
23350
+ options
23351
+ ),
23352
+ get: (fileId) => this.sessionDataRequest(
23353
+ `/files/${encodeURIComponent(fileId)}`
23354
+ ),
23355
+ upload: async (body, options = {}) => {
23356
+ const headers = new Headers({
23357
+ "Content-Type": options.contentType || contentTypeFromUploadBody(body) || "application/octet-stream",
23358
+ "x-granular-filename": options.filename || filenameFromUploadBody(body) || "upload",
23359
+ "x-granular-file-source": options.source || "sdk"
23360
+ });
23361
+ if (options.parentFileIds?.length) {
23362
+ headers.set(
23363
+ "x-granular-parent-file-ids",
23364
+ JSON.stringify(options.parentFileIds)
23365
+ );
23366
+ }
23367
+ if (options.metadata) {
23368
+ headers.set(
23369
+ "x-granular-file-metadata",
23370
+ JSON.stringify(options.metadata)
23371
+ );
23372
+ }
23373
+ const response = await this.sessionDataFetch("/files", void 0, {
23374
+ method: "POST",
23375
+ headers,
23376
+ body: bodyInitFromSessionFileUpload(body)
23377
+ });
23378
+ return response.json();
23379
+ },
23380
+ download: async (fileId) => {
23381
+ const response = await this.sessionDataFetch(
23382
+ `/files/${encodeURIComponent(fileId)}/content`
23383
+ );
23384
+ return response.arrayBuffer();
23385
+ },
23386
+ delete: (fileId) => this.sessionDataRequest(
23387
+ `/files/${encodeURIComponent(fileId)}`,
23388
+ void 0,
23389
+ { method: "DELETE" }
23390
+ )
23391
+ };
23392
+ }
23260
23393
  get heap() {
23261
23394
  return {
23262
23395
  entries: {
@@ -1,4 +1,4 @@
1
- import { aX as WSClientOptions, L as GranularQuotaProgress, T as ToolWithHandler, f as PublishToolsResult, aE as Job, g as ToolHandler, I as InstanceToolHandler, aG as ConversationMessageInput, aH as ConversationAppendResult, ar as EffectInfo, P as Prompt, aq as ToolInfo, at as EffectsChangedEvent, as as ToolsChangedEvent, D as DomainState, q as GranularOptions, bm as EnvironmentImporter, u as RecordUserOptions, U as User, w as OpenEnvironmentOptions, a5 as EnvironmentData, a2 as BuildPolicy, bk as EnvironmentSetupSummary, y as ConversationSessionInfo, x as CreateSessionOptions, b5 as RecordObjectOptions, b6 as RecordObjectResult, b8 as RecordObjectsOptions, bf as RecordImport, bb as RecordImportStatus, bg as EnvironmentRecordImportSummary, aC as EnvironmentFeedbackRecord, c as SessionHeapSnapshot, aR as SessionDocumentResult, aS as SessionCollectionListOptions, aU as SessionCollectionListResult, aI as SessionConversationMessage, aJ as SessionTimelineEvent, aT as SessionJobListOptions, aK as SessionJobRecord, S as SessionHeapEntry, b as SessionHeapList, aN as SessionHeapVariable, d as SessionTranscriptEntry, bI as GraphQLResult, aP as RecordSearchOptions, aO as RecordSearchResult, aQ as RecordMentionInput, b4 as DefineRelationshipOptions, b3 as RelationshipInfo, b2 as ModelRef, bH as ManifestContent, ba as RecordImportOptions, C as ConnectOptions, bi as RunEnvironmentImporterOptions, l as OpenAIUsageSpendEvent, G as GranularSpendContext, o as RecordOpenAIUsageSpendResult, X as SandboxListResponse, V as Sandbox, W as CreateSandboxData, bK as DeleteResponse, Z as PermissionProfile, _ as CreatePermissionProfileData, a6 as CreateEnvironmentData, bL as StreamEvent, bM as StreamSubscription, bN as StreamStats, v as Subject, a1 as AssignmentListResponse } from './spend-rzS1rlFr.js';
1
+ import { b0 as WSClientOptions, L as GranularQuotaProgress, T as ToolWithHandler, f as PublishToolsResult, aE as Job, g as ToolHandler, I as InstanceToolHandler, aG as ConversationMessageInput, aH as ConversationAppendResult, ar as EffectInfo, P as Prompt, aq as ToolInfo, at as EffectsChangedEvent, as as ToolsChangedEvent, D as DomainState, q as GranularOptions, br as EnvironmentImporter, u as RecordUserOptions, U as User, w as OpenEnvironmentOptions, a5 as EnvironmentData, a2 as BuildPolicy, bp as EnvironmentSetupSummary, y as ConversationSessionInfo, x as CreateSessionOptions, ba as RecordObjectOptions, bb as RecordObjectResult, bd as RecordObjectsOptions, bk as RecordImport, bg as RecordImportStatus, bl as EnvironmentRecordImportSummary, aC as EnvironmentFeedbackRecord, c as SessionHeapSnapshot, aW as SessionDocumentResult, aX as SessionCollectionListOptions, aZ as SessionCollectionListResult, aI as SessionConversationMessage, aJ as SessionTimelineEvent, aY as SessionJobListOptions, aP as SessionJobRecord, aN as SessionFileRecord, aO as SessionFileUploadOptions, S as SessionHeapEntry, b as SessionHeapList, aS as SessionHeapVariable, d as SessionTranscriptEntry, bN as GraphQLResult, aU as RecordSearchOptions, aT as RecordSearchResult, aV as RecordMentionInput, b9 as DefineRelationshipOptions, b8 as RelationshipInfo, b7 as ModelRef, bM as ManifestContent, bf as RecordImportOptions, C as ConnectOptions, bn as RunEnvironmentImporterOptions, l as OpenAIUsageSpendEvent, G as GranularSpendContext, o as RecordOpenAIUsageSpendResult, X as SandboxListResponse, V as Sandbox, W as CreateSandboxData, bP as DeleteResponse, Z as PermissionProfile, _ as CreatePermissionProfileData, a6 as CreateEnvironmentData, bQ as StreamEvent, bR as StreamSubscription, bS as StreamStats, v as Subject, a1 as AssignmentListResponse } from './spend-tAz2a16I.js';
2
2
  import * as Automerge from '@automerge/automerge';
3
3
  import { Doc } from '@automerge/automerge/slim';
4
4
 
@@ -251,6 +251,7 @@ declare class Session {
251
251
  private checkForToolChanges;
252
252
  }
253
253
 
254
+ type SessionFileUploadBody = Blob | ArrayBuffer | Uint8Array | string;
254
255
  type EnvironmentImporterHandler = (importer: EnvironmentImporter) => Promise<void> | void;
255
256
  /**
256
257
  * Environment is the sessionless handle for one resolved ontology environment.
@@ -670,6 +671,8 @@ declare class EnvironmentSession extends Session {
670
671
  * Return a plain JS copy of the synced session heap.
671
672
  */
672
673
  getHeap(): SessionHeapSnapshot;
674
+ private buildSessionDataUrl;
675
+ private sessionDataFetch;
673
676
  private sessionDataRequest;
674
677
  private collectAllSessionItems;
675
678
  /**
@@ -689,6 +692,19 @@ declare class EnvironmentSession extends Session {
689
692
  list: (options?: SessionJobListOptions) => Promise<SessionCollectionListResult<SessionJobRecord>>;
690
693
  get: (jobId: string) => Promise<SessionJobRecord>;
691
694
  };
695
+ get files(): {
696
+ list: (options?: SessionCollectionListOptions & {
697
+ status?: string | null;
698
+ source?: string | null;
699
+ }) => Promise<SessionCollectionListResult<SessionFileRecord>>;
700
+ get: (fileId: string) => Promise<SessionFileRecord>;
701
+ upload: (body: SessionFileUploadBody, options?: SessionFileUploadOptions) => Promise<SessionFileRecord>;
702
+ download: (fileId: string) => Promise<ArrayBuffer>;
703
+ delete: (fileId: string) => Promise<{
704
+ deleted: boolean;
705
+ fileId: string;
706
+ }>;
707
+ };
692
708
  get heap(): {
693
709
  entries: {
694
710
  list: (options?: SessionCollectionListOptions) => Promise<SessionCollectionListResult<SessionHeapEntry>>;
@@ -1,4 +1,4 @@
1
- import { aX as WSClientOptions, L as GranularQuotaProgress, T as ToolWithHandler, f as PublishToolsResult, aE as Job, g as ToolHandler, I as InstanceToolHandler, aG as ConversationMessageInput, aH as ConversationAppendResult, ar as EffectInfo, P as Prompt, aq as ToolInfo, at as EffectsChangedEvent, as as ToolsChangedEvent, D as DomainState, q as GranularOptions, bm as EnvironmentImporter, u as RecordUserOptions, U as User, w as OpenEnvironmentOptions, a5 as EnvironmentData, a2 as BuildPolicy, bk as EnvironmentSetupSummary, y as ConversationSessionInfo, x as CreateSessionOptions, b5 as RecordObjectOptions, b6 as RecordObjectResult, b8 as RecordObjectsOptions, bf as RecordImport, bb as RecordImportStatus, bg as EnvironmentRecordImportSummary, aC as EnvironmentFeedbackRecord, c as SessionHeapSnapshot, aR as SessionDocumentResult, aS as SessionCollectionListOptions, aU as SessionCollectionListResult, aI as SessionConversationMessage, aJ as SessionTimelineEvent, aT as SessionJobListOptions, aK as SessionJobRecord, S as SessionHeapEntry, b as SessionHeapList, aN as SessionHeapVariable, d as SessionTranscriptEntry, bI as GraphQLResult, aP as RecordSearchOptions, aO as RecordSearchResult, aQ as RecordMentionInput, b4 as DefineRelationshipOptions, b3 as RelationshipInfo, b2 as ModelRef, bH as ManifestContent, ba as RecordImportOptions, C as ConnectOptions, bi as RunEnvironmentImporterOptions, l as OpenAIUsageSpendEvent, G as GranularSpendContext, o as RecordOpenAIUsageSpendResult, X as SandboxListResponse, V as Sandbox, W as CreateSandboxData, bK as DeleteResponse, Z as PermissionProfile, _ as CreatePermissionProfileData, a6 as CreateEnvironmentData, bL as StreamEvent, bM as StreamSubscription, bN as StreamStats, v as Subject, a1 as AssignmentListResponse } from './spend-rzS1rlFr.mjs';
1
+ import { b0 as WSClientOptions, L as GranularQuotaProgress, T as ToolWithHandler, f as PublishToolsResult, aE as Job, g as ToolHandler, I as InstanceToolHandler, aG as ConversationMessageInput, aH as ConversationAppendResult, ar as EffectInfo, P as Prompt, aq as ToolInfo, at as EffectsChangedEvent, as as ToolsChangedEvent, D as DomainState, q as GranularOptions, br as EnvironmentImporter, u as RecordUserOptions, U as User, w as OpenEnvironmentOptions, a5 as EnvironmentData, a2 as BuildPolicy, bp as EnvironmentSetupSummary, y as ConversationSessionInfo, x as CreateSessionOptions, ba as RecordObjectOptions, bb as RecordObjectResult, bd as RecordObjectsOptions, bk as RecordImport, bg as RecordImportStatus, bl as EnvironmentRecordImportSummary, aC as EnvironmentFeedbackRecord, c as SessionHeapSnapshot, aW as SessionDocumentResult, aX as SessionCollectionListOptions, aZ as SessionCollectionListResult, aI as SessionConversationMessage, aJ as SessionTimelineEvent, aY as SessionJobListOptions, aP as SessionJobRecord, aN as SessionFileRecord, aO as SessionFileUploadOptions, S as SessionHeapEntry, b as SessionHeapList, aS as SessionHeapVariable, d as SessionTranscriptEntry, bN as GraphQLResult, aU as RecordSearchOptions, aT as RecordSearchResult, aV as RecordMentionInput, b9 as DefineRelationshipOptions, b8 as RelationshipInfo, b7 as ModelRef, bM as ManifestContent, bf as RecordImportOptions, C as ConnectOptions, bn as RunEnvironmentImporterOptions, l as OpenAIUsageSpendEvent, G as GranularSpendContext, o as RecordOpenAIUsageSpendResult, X as SandboxListResponse, V as Sandbox, W as CreateSandboxData, bP as DeleteResponse, Z as PermissionProfile, _ as CreatePermissionProfileData, a6 as CreateEnvironmentData, bQ as StreamEvent, bR as StreamSubscription, bS as StreamStats, v as Subject, a1 as AssignmentListResponse } from './spend-tAz2a16I.mjs';
2
2
  import * as Automerge from '@automerge/automerge';
3
3
  import { Doc } from '@automerge/automerge/slim';
4
4
 
@@ -251,6 +251,7 @@ declare class Session {
251
251
  private checkForToolChanges;
252
252
  }
253
253
 
254
+ type SessionFileUploadBody = Blob | ArrayBuffer | Uint8Array | string;
254
255
  type EnvironmentImporterHandler = (importer: EnvironmentImporter) => Promise<void> | void;
255
256
  /**
256
257
  * Environment is the sessionless handle for one resolved ontology environment.
@@ -670,6 +671,8 @@ declare class EnvironmentSession extends Session {
670
671
  * Return a plain JS copy of the synced session heap.
671
672
  */
672
673
  getHeap(): SessionHeapSnapshot;
674
+ private buildSessionDataUrl;
675
+ private sessionDataFetch;
673
676
  private sessionDataRequest;
674
677
  private collectAllSessionItems;
675
678
  /**
@@ -689,6 +692,19 @@ declare class EnvironmentSession extends Session {
689
692
  list: (options?: SessionJobListOptions) => Promise<SessionCollectionListResult<SessionJobRecord>>;
690
693
  get: (jobId: string) => Promise<SessionJobRecord>;
691
694
  };
695
+ get files(): {
696
+ list: (options?: SessionCollectionListOptions & {
697
+ status?: string | null;
698
+ source?: string | null;
699
+ }) => Promise<SessionCollectionListResult<SessionFileRecord>>;
700
+ get: (fileId: string) => Promise<SessionFileRecord>;
701
+ upload: (body: SessionFileUploadBody, options?: SessionFileUploadOptions) => Promise<SessionFileRecord>;
702
+ download: (fileId: string) => Promise<ArrayBuffer>;
703
+ delete: (fileId: string) => Promise<{
704
+ deleted: boolean;
705
+ fileId: string;
706
+ }>;
707
+ };
692
708
  get heap(): {
693
709
  entries: {
694
710
  list: (options?: SessionCollectionListOptions) => Promise<SessionCollectionListResult<SessionHeapEntry>>;
package/dist/index.d.mts CHANGED
@@ -1,8 +1,8 @@
1
- export { E as Environment, a as EnvironmentSession, G as Granular, O as OntologyHandle, S as Session, W as WSClient } from './client-HDJgcJC5.mjs';
2
- import { E as EndpointMode, T as ToolWithHandler, a as EffectHandlerContext, M as ManifestEffectMetamodelSpec, R as ResolvedEffectBehaviors, S as SessionHeapEntry, b as SessionHeapList, c as SessionHeapSnapshot, P as Prompt, d as SessionTranscriptEntry } from './spend-rzS1rlFr.mjs';
3
- export { bJ as APIError, A as AccessTokenProvider, a0 as Assignment, a1 as AssignmentListResponse, ab as Build, ad as BuildListResponse, a2 as BuildPolicy, aa as BuildStatus, C as ConnectOptions, aH as ConversationAppendResult, aG as ConversationMessageInput, aF as ConversationMessageShowRefs, y as ConversationSessionInfo, a6 as CreateEnvironmentData, _ as CreatePermissionProfileData, W as CreateSandboxData, x as CreateSessionOptions, b4 as DefineRelationshipOptions, bK as DeleteResponse, D as DomainState, au as EffectHandler, ar as EffectInfo, al as EffectInvocationMetadata, ak as EffectInvocationMode, am as EffectSchema, ap as EffectVersionSelector, an as EffectWithHandler, at as EffectsChangedEvent, a5 as EnvironmentData, aC as EnvironmentFeedbackRecord, bm as EnvironmentImporter, bl as EnvironmentImporterImportOptions, a7 as EnvironmentListResponse, bg as EnvironmentRecordImportSummary, bj as EnvironmentSetupLifecycleStatus, bk as EnvironmentSetupSummary, bh as EnvironmentSetupTriggerReason, s as GranularAuth, q as GranularOptions, K as GranularQuotaPolicy, L as GranularQuotaProgress, G as GranularSpendContext, bI as GraphQLResult, av as InstanceEffectHandler, I as InstanceToolHandler, aE as Job, aA as JobFeedbackInput, az as JobFeedbackMetadata, aB as JobFeedbackRecord, ax as JobFeedbackSentiment, ay as JobFeedbackToolCall, aw as JobStatus, aD as JobSubmitResult, a8 as Manifest, by as ManifestApprovalRequiredSpec, bH as ManifestContent, bw as ManifestDryRunSpec, bB as ManifestEffectDeclaration, bA as ManifestEffectSchema, bp as ManifestEnumRuleSpec, bD as ManifestEventStreamDef, bC as ManifestEventTypeDef, bq as ManifestFilterBySpec, bF as ManifestImport, a9 as ManifestListResponse, bE as ManifestOperation, bv as ManifestPostConditionSpec, bn as ManifestPropertySpec, bz as ManifestRelationshipDef, bx as ManifestReverseSpec, bu as ManifestStateMachineSpec, bs as ManifestStateMachineStateSpec, bt as ManifestStateMachineTransitionSpec, bo as ManifestValidationOperator, br as ManifestValidationRuleSpec, bG as ManifestVolume, b2 as ModelRef, N as NormalizedOpenAIUsage, i as OPENAI_MODEL_PRICING_USD_PER_MILLION, O as OpenAIModelPricing, h as OpenAITokenSpend, l as OpenAIUsageSpendEvent, w as OpenEnvironmentOptions, Z as PermissionProfile, $ as PermissionProfileListResponse, Y as PermissionRules, ao as PublishEffectsResult, f as PublishToolsResult, J as QuotaLineItemFilter, B as QuotaPeriod, Q as QuotaScopeType, F as QuotaStatus, aY as RPCRequest, a$ as RPCRequestFromServer, aZ as RPCResponse, bf as RecordImport, be as RecordImportItem, bc as RecordImportItemStatus, ba as RecordImportOptions, bd as RecordImportStats, bb as RecordImportStatus, b9 as RecordImportWriteMode, aQ as RecordMentionInput, b5 as RecordObjectOptions, b6 as RecordObjectResult, b7 as RecordObjectsChunkInfo, b8 as RecordObjectsOptions, m as RecordOpenAIUsageSpendOptions, o as RecordOpenAIUsageSpendResult, aP as RecordSearchOptions, aO as RecordSearchResult, u as RecordUserOptions, b3 as RelationshipInfo, aj as ResolvedEffectApprovalRequired, ah as ResolvedEffectDryRun, ag as ResolvedEffectPostCondition, ai as ResolvedEffectReverse, bi as RunEnvironmentImporterOptions, V as Sandbox, X as SandboxListResponse, af as SemanticVersionDiff, ae as SemanticVersionDiffEntry, aS as SessionCollectionListOptions, aU as SessionCollectionListResult, aI as SessionConversationMessage, aR as SessionDocumentResult, aL as SessionHeapFieldType, aM as SessionHeapFieldValue, aN as SessionHeapVariable, aT as SessionJobListOptions, aK as SessionJobRecord, aJ as SessionTimelineEvent, z as SpendLineItemType, H as SpendSummary, bL as StreamEvent, bN as StreamStats, bM as StreamSubscription, v as Subject, a_ as SyncMessage, g as ToolHandler, aq as ToolInfo, b0 as ToolInvokeParams, b1 as ToolResultParams, e as ToolSchema, as as ToolsChangedEvent, U as User, ac as Version, a4 as VersionTag, a3 as VersionTracking, aX as WSClientOptions, aV as WSDisconnectInfo, aW as WSReconnectErrorInfo, p as buildOpenAISpendEventId, k as calculateOpenAITokenSpend, j as getOpenAIModelPricing, n as normalizeOpenAIUsage, r as recordOpenAIUsageSpend, t as toGranularHttpBase } from './spend-rzS1rlFr.mjs';
1
+ export { E as Environment, a as EnvironmentSession, G as Granular, O as OntologyHandle, S as Session, W as WSClient } from './client-CBQFvuKf.mjs';
2
+ import { E as EndpointMode, T as ToolWithHandler, a as EffectHandlerContext, M as ManifestEffectMetamodelSpec, R as ResolvedEffectBehaviors, S as SessionHeapEntry, b as SessionHeapList, c as SessionHeapSnapshot, P as Prompt, d as SessionTranscriptEntry } from './spend-tAz2a16I.mjs';
3
+ export { bO as APIError, A as AccessTokenProvider, a0 as Assignment, a1 as AssignmentListResponse, ab as Build, ad as BuildListResponse, a2 as BuildPolicy, aa as BuildStatus, C as ConnectOptions, aH as ConversationAppendResult, aG as ConversationMessageInput, aF as ConversationMessageShowRefs, y as ConversationSessionInfo, a6 as CreateEnvironmentData, _ as CreatePermissionProfileData, W as CreateSandboxData, x as CreateSessionOptions, b9 as DefineRelationshipOptions, bP as DeleteResponse, D as DomainState, au as EffectHandler, ar as EffectInfo, al as EffectInvocationMetadata, ak as EffectInvocationMode, am as EffectSchema, ap as EffectVersionSelector, an as EffectWithHandler, at as EffectsChangedEvent, a5 as EnvironmentData, aC as EnvironmentFeedbackRecord, br as EnvironmentImporter, bq as EnvironmentImporterImportOptions, a7 as EnvironmentListResponse, bl as EnvironmentRecordImportSummary, bo as EnvironmentSetupLifecycleStatus, bp as EnvironmentSetupSummary, bm as EnvironmentSetupTriggerReason, s as GranularAuth, q as GranularOptions, K as GranularQuotaPolicy, L as GranularQuotaProgress, G as GranularSpendContext, bN as GraphQLResult, av as InstanceEffectHandler, I as InstanceToolHandler, aE as Job, aA as JobFeedbackInput, az as JobFeedbackMetadata, aB as JobFeedbackRecord, ax as JobFeedbackSentiment, ay as JobFeedbackToolCall, aw as JobStatus, aD as JobSubmitResult, a8 as Manifest, bD as ManifestApprovalRequiredSpec, bM as ManifestContent, bB as ManifestDryRunSpec, bG as ManifestEffectDeclaration, bF as ManifestEffectSchema, bu as ManifestEnumRuleSpec, bI as ManifestEventStreamDef, bH as ManifestEventTypeDef, bv as ManifestFilterBySpec, bK as ManifestImport, a9 as ManifestListResponse, bJ as ManifestOperation, bA as ManifestPostConditionSpec, bs as ManifestPropertySpec, bE as ManifestRelationshipDef, bC as ManifestReverseSpec, bz as ManifestStateMachineSpec, bx as ManifestStateMachineStateSpec, by as ManifestStateMachineTransitionSpec, bt as ManifestValidationOperator, bw as ManifestValidationRuleSpec, bL as ManifestVolume, b7 as ModelRef, N as NormalizedOpenAIUsage, i as OPENAI_MODEL_PRICING_USD_PER_MILLION, O as OpenAIModelPricing, h as OpenAITokenSpend, l as OpenAIUsageSpendEvent, w as OpenEnvironmentOptions, Z as PermissionProfile, $ as PermissionProfileListResponse, Y as PermissionRules, ao as PublishEffectsResult, f as PublishToolsResult, J as QuotaLineItemFilter, B as QuotaPeriod, Q as QuotaScopeType, F as QuotaStatus, b1 as RPCRequest, b4 as RPCRequestFromServer, b2 as RPCResponse, bk as RecordImport, bj as RecordImportItem, bh as RecordImportItemStatus, bf as RecordImportOptions, bi as RecordImportStats, bg as RecordImportStatus, be as RecordImportWriteMode, aV as RecordMentionInput, ba as RecordObjectOptions, bb as RecordObjectResult, bc as RecordObjectsChunkInfo, bd as RecordObjectsOptions, m as RecordOpenAIUsageSpendOptions, o as RecordOpenAIUsageSpendResult, aU as RecordSearchOptions, aT as RecordSearchResult, u as RecordUserOptions, b8 as RelationshipInfo, aj as ResolvedEffectApprovalRequired, ah as ResolvedEffectDryRun, ag as ResolvedEffectPostCondition, ai as ResolvedEffectReverse, bn as RunEnvironmentImporterOptions, V as Sandbox, X as SandboxListResponse, af as SemanticVersionDiff, ae as SemanticVersionDiffEntry, aX as SessionCollectionListOptions, aZ as SessionCollectionListResult, aI as SessionConversationMessage, aW as SessionDocumentResult, aL as SessionFileKind, aN as SessionFileRecord, aK as SessionFileSource, aM as SessionFileStatus, aO as SessionFileUploadOptions, aQ as SessionHeapFieldType, aR as SessionHeapFieldValue, aS as SessionHeapVariable, aY as SessionJobListOptions, aP as SessionJobRecord, aJ as SessionTimelineEvent, z as SpendLineItemType, H as SpendSummary, bQ as StreamEvent, bS as StreamStats, bR as StreamSubscription, v as Subject, b3 as SyncMessage, g as ToolHandler, aq as ToolInfo, b5 as ToolInvokeParams, b6 as ToolResultParams, e as ToolSchema, as as ToolsChangedEvent, U as User, ac as Version, a4 as VersionTag, a3 as VersionTracking, b0 as WSClientOptions, a_ as WSDisconnectInfo, a$ as WSReconnectErrorInfo, p as buildOpenAISpendEventId, k as calculateOpenAITokenSpend, j as getOpenAIModelPricing, n as normalizeOpenAIUsage, r as recordOpenAIUsageSpend, t as toGranularHttpBase } from './spend-tAz2a16I.mjs';
4
4
  export { ConditionIR, ConditionalPolicySpec, LimitPolicySpec, MatchedPolicy, PermissionActionSpec, PermissionPolicySpec, PermissionProfileFile, PolicyDecision, PolicyEvaluationContext, PolicyOutcome, PolicyRuleIR } from '@granular-software/policy-engine';
5
- export { BuildGranularAgentSystemPromptInput, GeneratedJobCodeIssue, GranularAgentExecutionCheckpoint, GranularAgentHeapSummaryOptions, GranularAgentPromptCapabilities, GranularAgentReferentFocus, GranularAgentSessionContext, GranularAgentToolInfo, GranularAgentWorkflowFocus, GranularReasoningTraceChunkResult, GranularReasoningTraceOptions, HarnessContinuationDecision, HarnessControllerBudgets, HarnessProjectionOptions, HarnessPromptLike, HarnessVerifierSnapshot, HarnessVerifierSnapshotInput, ReviewGeneratedJobCodeOptions, buildContinuationInstruction, buildGranularAgentCheckpointBlock, buildGranularAgentDomainBlock, buildGranularAgentHeapBlock, buildGranularAgentLoopBlock, buildGranularAgentReferentBlock, buildGranularAgentSessionBlock, buildGranularAgentSystemPrompt, buildGranularAgentToolBlock, buildGranularAgentWorkflowBlock, consumeGranularReasoningOnlyChunk, consumeGranularReasoningTraceChunk, createHarnessVerifierSnapshot, evaluateContinuation, getCurrentClosureId, getExclusivePromptTarget, hasOpenPrompt, projectConversationReferentFocus, projectConversationReferentSummary, projectHeapSummary, projectLoopSummary, projectWorkflowFocus, projectWorkflowSummary, reviewGeneratedJobCode, stripGranularReasoningTrace } from './agent-harness.mjs';
5
+ export { BuildGranularAgentSystemPromptInput, GeneratedJobCodeIssue, GranularAgentExecutionCheckpoint, GranularAgentHeapSummaryOptions, GranularAgentPromptCapabilities, GranularAgentReferentFocus, GranularAgentSessionContext, GranularAgentToolInfo, GranularAgentWorkflowFocus, GranularReasoningTraceChunkResult, GranularReasoningTraceOptions, HarnessContinuationDecision, HarnessControllerBudgets, HarnessProjectionOptions, HarnessPromptLike, HarnessVerifierSnapshot, HarnessVerifierSnapshotInput, ReviewGeneratedJobCodeOptions, buildContinuationInstruction, buildGranularAgentCheckpointBlock, buildGranularAgentDomainBlock, buildGranularAgentFileBlock, buildGranularAgentHeapBlock, buildGranularAgentLoopBlock, buildGranularAgentReferentBlock, buildGranularAgentRuntimeImportsBlock, buildGranularAgentSessionBlock, buildGranularAgentSystemPrompt, buildGranularAgentToolBlock, buildGranularAgentWorkflowBlock, consumeGranularReasoningOnlyChunk, consumeGranularReasoningTraceChunk, createHarnessVerifierSnapshot, evaluateContinuation, getCurrentClosureId, getExclusivePromptTarget, hasOpenPrompt, projectConversationReferentFocus, projectConversationReferentSummary, projectHeapSummary, projectLoopSummary, projectSessionFileSummary, projectWorkflowFocus, projectWorkflowSummary, reviewGeneratedJobCode, stripGranularReasoningTrace } from './agent-harness.mjs';
6
6
  import '@automerge/automerge';
7
7
  import '@automerge/automerge/slim';
8
8
 
package/dist/index.d.ts CHANGED
@@ -1,8 +1,8 @@
1
- export { E as Environment, a as EnvironmentSession, G as Granular, O as OntologyHandle, S as Session, W as WSClient } from './client-BNbWA9jQ.js';
2
- import { E as EndpointMode, T as ToolWithHandler, a as EffectHandlerContext, M as ManifestEffectMetamodelSpec, R as ResolvedEffectBehaviors, S as SessionHeapEntry, b as SessionHeapList, c as SessionHeapSnapshot, P as Prompt, d as SessionTranscriptEntry } from './spend-rzS1rlFr.js';
3
- export { bJ as APIError, A as AccessTokenProvider, a0 as Assignment, a1 as AssignmentListResponse, ab as Build, ad as BuildListResponse, a2 as BuildPolicy, aa as BuildStatus, C as ConnectOptions, aH as ConversationAppendResult, aG as ConversationMessageInput, aF as ConversationMessageShowRefs, y as ConversationSessionInfo, a6 as CreateEnvironmentData, _ as CreatePermissionProfileData, W as CreateSandboxData, x as CreateSessionOptions, b4 as DefineRelationshipOptions, bK as DeleteResponse, D as DomainState, au as EffectHandler, ar as EffectInfo, al as EffectInvocationMetadata, ak as EffectInvocationMode, am as EffectSchema, ap as EffectVersionSelector, an as EffectWithHandler, at as EffectsChangedEvent, a5 as EnvironmentData, aC as EnvironmentFeedbackRecord, bm as EnvironmentImporter, bl as EnvironmentImporterImportOptions, a7 as EnvironmentListResponse, bg as EnvironmentRecordImportSummary, bj as EnvironmentSetupLifecycleStatus, bk as EnvironmentSetupSummary, bh as EnvironmentSetupTriggerReason, s as GranularAuth, q as GranularOptions, K as GranularQuotaPolicy, L as GranularQuotaProgress, G as GranularSpendContext, bI as GraphQLResult, av as InstanceEffectHandler, I as InstanceToolHandler, aE as Job, aA as JobFeedbackInput, az as JobFeedbackMetadata, aB as JobFeedbackRecord, ax as JobFeedbackSentiment, ay as JobFeedbackToolCall, aw as JobStatus, aD as JobSubmitResult, a8 as Manifest, by as ManifestApprovalRequiredSpec, bH as ManifestContent, bw as ManifestDryRunSpec, bB as ManifestEffectDeclaration, bA as ManifestEffectSchema, bp as ManifestEnumRuleSpec, bD as ManifestEventStreamDef, bC as ManifestEventTypeDef, bq as ManifestFilterBySpec, bF as ManifestImport, a9 as ManifestListResponse, bE as ManifestOperation, bv as ManifestPostConditionSpec, bn as ManifestPropertySpec, bz as ManifestRelationshipDef, bx as ManifestReverseSpec, bu as ManifestStateMachineSpec, bs as ManifestStateMachineStateSpec, bt as ManifestStateMachineTransitionSpec, bo as ManifestValidationOperator, br as ManifestValidationRuleSpec, bG as ManifestVolume, b2 as ModelRef, N as NormalizedOpenAIUsage, i as OPENAI_MODEL_PRICING_USD_PER_MILLION, O as OpenAIModelPricing, h as OpenAITokenSpend, l as OpenAIUsageSpendEvent, w as OpenEnvironmentOptions, Z as PermissionProfile, $ as PermissionProfileListResponse, Y as PermissionRules, ao as PublishEffectsResult, f as PublishToolsResult, J as QuotaLineItemFilter, B as QuotaPeriod, Q as QuotaScopeType, F as QuotaStatus, aY as RPCRequest, a$ as RPCRequestFromServer, aZ as RPCResponse, bf as RecordImport, be as RecordImportItem, bc as RecordImportItemStatus, ba as RecordImportOptions, bd as RecordImportStats, bb as RecordImportStatus, b9 as RecordImportWriteMode, aQ as RecordMentionInput, b5 as RecordObjectOptions, b6 as RecordObjectResult, b7 as RecordObjectsChunkInfo, b8 as RecordObjectsOptions, m as RecordOpenAIUsageSpendOptions, o as RecordOpenAIUsageSpendResult, aP as RecordSearchOptions, aO as RecordSearchResult, u as RecordUserOptions, b3 as RelationshipInfo, aj as ResolvedEffectApprovalRequired, ah as ResolvedEffectDryRun, ag as ResolvedEffectPostCondition, ai as ResolvedEffectReverse, bi as RunEnvironmentImporterOptions, V as Sandbox, X as SandboxListResponse, af as SemanticVersionDiff, ae as SemanticVersionDiffEntry, aS as SessionCollectionListOptions, aU as SessionCollectionListResult, aI as SessionConversationMessage, aR as SessionDocumentResult, aL as SessionHeapFieldType, aM as SessionHeapFieldValue, aN as SessionHeapVariable, aT as SessionJobListOptions, aK as SessionJobRecord, aJ as SessionTimelineEvent, z as SpendLineItemType, H as SpendSummary, bL as StreamEvent, bN as StreamStats, bM as StreamSubscription, v as Subject, a_ as SyncMessage, g as ToolHandler, aq as ToolInfo, b0 as ToolInvokeParams, b1 as ToolResultParams, e as ToolSchema, as as ToolsChangedEvent, U as User, ac as Version, a4 as VersionTag, a3 as VersionTracking, aX as WSClientOptions, aV as WSDisconnectInfo, aW as WSReconnectErrorInfo, p as buildOpenAISpendEventId, k as calculateOpenAITokenSpend, j as getOpenAIModelPricing, n as normalizeOpenAIUsage, r as recordOpenAIUsageSpend, t as toGranularHttpBase } from './spend-rzS1rlFr.js';
1
+ export { E as Environment, a as EnvironmentSession, G as Granular, O as OntologyHandle, S as Session, W as WSClient } from './client-BZ8NuQ_e.js';
2
+ import { E as EndpointMode, T as ToolWithHandler, a as EffectHandlerContext, M as ManifestEffectMetamodelSpec, R as ResolvedEffectBehaviors, S as SessionHeapEntry, b as SessionHeapList, c as SessionHeapSnapshot, P as Prompt, d as SessionTranscriptEntry } from './spend-tAz2a16I.js';
3
+ export { bO as APIError, A as AccessTokenProvider, a0 as Assignment, a1 as AssignmentListResponse, ab as Build, ad as BuildListResponse, a2 as BuildPolicy, aa as BuildStatus, C as ConnectOptions, aH as ConversationAppendResult, aG as ConversationMessageInput, aF as ConversationMessageShowRefs, y as ConversationSessionInfo, a6 as CreateEnvironmentData, _ as CreatePermissionProfileData, W as CreateSandboxData, x as CreateSessionOptions, b9 as DefineRelationshipOptions, bP as DeleteResponse, D as DomainState, au as EffectHandler, ar as EffectInfo, al as EffectInvocationMetadata, ak as EffectInvocationMode, am as EffectSchema, ap as EffectVersionSelector, an as EffectWithHandler, at as EffectsChangedEvent, a5 as EnvironmentData, aC as EnvironmentFeedbackRecord, br as EnvironmentImporter, bq as EnvironmentImporterImportOptions, a7 as EnvironmentListResponse, bl as EnvironmentRecordImportSummary, bo as EnvironmentSetupLifecycleStatus, bp as EnvironmentSetupSummary, bm as EnvironmentSetupTriggerReason, s as GranularAuth, q as GranularOptions, K as GranularQuotaPolicy, L as GranularQuotaProgress, G as GranularSpendContext, bN as GraphQLResult, av as InstanceEffectHandler, I as InstanceToolHandler, aE as Job, aA as JobFeedbackInput, az as JobFeedbackMetadata, aB as JobFeedbackRecord, ax as JobFeedbackSentiment, ay as JobFeedbackToolCall, aw as JobStatus, aD as JobSubmitResult, a8 as Manifest, bD as ManifestApprovalRequiredSpec, bM as ManifestContent, bB as ManifestDryRunSpec, bG as ManifestEffectDeclaration, bF as ManifestEffectSchema, bu as ManifestEnumRuleSpec, bI as ManifestEventStreamDef, bH as ManifestEventTypeDef, bv as ManifestFilterBySpec, bK as ManifestImport, a9 as ManifestListResponse, bJ as ManifestOperation, bA as ManifestPostConditionSpec, bs as ManifestPropertySpec, bE as ManifestRelationshipDef, bC as ManifestReverseSpec, bz as ManifestStateMachineSpec, bx as ManifestStateMachineStateSpec, by as ManifestStateMachineTransitionSpec, bt as ManifestValidationOperator, bw as ManifestValidationRuleSpec, bL as ManifestVolume, b7 as ModelRef, N as NormalizedOpenAIUsage, i as OPENAI_MODEL_PRICING_USD_PER_MILLION, O as OpenAIModelPricing, h as OpenAITokenSpend, l as OpenAIUsageSpendEvent, w as OpenEnvironmentOptions, Z as PermissionProfile, $ as PermissionProfileListResponse, Y as PermissionRules, ao as PublishEffectsResult, f as PublishToolsResult, J as QuotaLineItemFilter, B as QuotaPeriod, Q as QuotaScopeType, F as QuotaStatus, b1 as RPCRequest, b4 as RPCRequestFromServer, b2 as RPCResponse, bk as RecordImport, bj as RecordImportItem, bh as RecordImportItemStatus, bf as RecordImportOptions, bi as RecordImportStats, bg as RecordImportStatus, be as RecordImportWriteMode, aV as RecordMentionInput, ba as RecordObjectOptions, bb as RecordObjectResult, bc as RecordObjectsChunkInfo, bd as RecordObjectsOptions, m as RecordOpenAIUsageSpendOptions, o as RecordOpenAIUsageSpendResult, aU as RecordSearchOptions, aT as RecordSearchResult, u as RecordUserOptions, b8 as RelationshipInfo, aj as ResolvedEffectApprovalRequired, ah as ResolvedEffectDryRun, ag as ResolvedEffectPostCondition, ai as ResolvedEffectReverse, bn as RunEnvironmentImporterOptions, V as Sandbox, X as SandboxListResponse, af as SemanticVersionDiff, ae as SemanticVersionDiffEntry, aX as SessionCollectionListOptions, aZ as SessionCollectionListResult, aI as SessionConversationMessage, aW as SessionDocumentResult, aL as SessionFileKind, aN as SessionFileRecord, aK as SessionFileSource, aM as SessionFileStatus, aO as SessionFileUploadOptions, aQ as SessionHeapFieldType, aR as SessionHeapFieldValue, aS as SessionHeapVariable, aY as SessionJobListOptions, aP as SessionJobRecord, aJ as SessionTimelineEvent, z as SpendLineItemType, H as SpendSummary, bQ as StreamEvent, bS as StreamStats, bR as StreamSubscription, v as Subject, b3 as SyncMessage, g as ToolHandler, aq as ToolInfo, b5 as ToolInvokeParams, b6 as ToolResultParams, e as ToolSchema, as as ToolsChangedEvent, U as User, ac as Version, a4 as VersionTag, a3 as VersionTracking, b0 as WSClientOptions, a_ as WSDisconnectInfo, a$ as WSReconnectErrorInfo, p as buildOpenAISpendEventId, k as calculateOpenAITokenSpend, j as getOpenAIModelPricing, n as normalizeOpenAIUsage, r as recordOpenAIUsageSpend, t as toGranularHttpBase } from './spend-tAz2a16I.js';
4
4
  export { ConditionIR, ConditionalPolicySpec, LimitPolicySpec, MatchedPolicy, PermissionActionSpec, PermissionPolicySpec, PermissionProfileFile, PolicyDecision, PolicyEvaluationContext, PolicyOutcome, PolicyRuleIR } from '@granular-software/policy-engine';
5
- export { BuildGranularAgentSystemPromptInput, GeneratedJobCodeIssue, GranularAgentExecutionCheckpoint, GranularAgentHeapSummaryOptions, GranularAgentPromptCapabilities, GranularAgentReferentFocus, GranularAgentSessionContext, GranularAgentToolInfo, GranularAgentWorkflowFocus, GranularReasoningTraceChunkResult, GranularReasoningTraceOptions, HarnessContinuationDecision, HarnessControllerBudgets, HarnessProjectionOptions, HarnessPromptLike, HarnessVerifierSnapshot, HarnessVerifierSnapshotInput, ReviewGeneratedJobCodeOptions, buildContinuationInstruction, buildGranularAgentCheckpointBlock, buildGranularAgentDomainBlock, buildGranularAgentHeapBlock, buildGranularAgentLoopBlock, buildGranularAgentReferentBlock, buildGranularAgentSessionBlock, buildGranularAgentSystemPrompt, buildGranularAgentToolBlock, buildGranularAgentWorkflowBlock, consumeGranularReasoningOnlyChunk, consumeGranularReasoningTraceChunk, createHarnessVerifierSnapshot, evaluateContinuation, getCurrentClosureId, getExclusivePromptTarget, hasOpenPrompt, projectConversationReferentFocus, projectConversationReferentSummary, projectHeapSummary, projectLoopSummary, projectWorkflowFocus, projectWorkflowSummary, reviewGeneratedJobCode, stripGranularReasoningTrace } from './agent-harness.js';
5
+ export { BuildGranularAgentSystemPromptInput, GeneratedJobCodeIssue, GranularAgentExecutionCheckpoint, GranularAgentHeapSummaryOptions, GranularAgentPromptCapabilities, GranularAgentReferentFocus, GranularAgentSessionContext, GranularAgentToolInfo, GranularAgentWorkflowFocus, GranularReasoningTraceChunkResult, GranularReasoningTraceOptions, HarnessContinuationDecision, HarnessControllerBudgets, HarnessProjectionOptions, HarnessPromptLike, HarnessVerifierSnapshot, HarnessVerifierSnapshotInput, ReviewGeneratedJobCodeOptions, buildContinuationInstruction, buildGranularAgentCheckpointBlock, buildGranularAgentDomainBlock, buildGranularAgentFileBlock, buildGranularAgentHeapBlock, buildGranularAgentLoopBlock, buildGranularAgentReferentBlock, buildGranularAgentRuntimeImportsBlock, buildGranularAgentSessionBlock, buildGranularAgentSystemPrompt, buildGranularAgentToolBlock, buildGranularAgentWorkflowBlock, consumeGranularReasoningOnlyChunk, consumeGranularReasoningTraceChunk, createHarnessVerifierSnapshot, evaluateContinuation, getCurrentClosureId, getExclusivePromptTarget, hasOpenPrompt, projectConversationReferentFocus, projectConversationReferentSummary, projectHeapSummary, projectLoopSummary, projectSessionFileSummary, projectWorkflowFocus, projectWorkflowSummary, reviewGeneratedJobCode, stripGranularReasoningTrace } from './agent-harness.js';
6
6
  import '@automerge/automerge';
7
7
  import '@automerge/automerge/slim';
8
8