@isaacthoman/pulpo 0.149.0 → 0.150.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.
Files changed (2) hide show
  1. package/dist/index.js +177 -7
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -14773,6 +14773,50 @@ var avatarCropSettingsSchema = external_exports.object({
14773
14773
  offsetY: external_exports.number()
14774
14774
  });
14775
14775
 
14776
+ // ../../packages/contracts/dist/admin-analytics.js
14777
+ var clientPlatformSchema = external_exports.enum(["web", "desktop", "ios", "android", "cli", "api", "unknown"]);
14778
+ var analyticsRangeSchema = external_exports.enum(["1h", "24h", "7d", "30d", "90d", "all", "custom"]);
14779
+ var analyticsBucketSchema = external_exports.enum(["hour", "day"]);
14780
+ function validTimeZone(value) {
14781
+ try {
14782
+ new Intl.DateTimeFormat("en-US", { timeZone: value }).format();
14783
+ return true;
14784
+ } catch {
14785
+ return false;
14786
+ }
14787
+ }
14788
+ var booleanFilter = external_exports.enum(["true", "false"]).optional();
14789
+ var csvFilter = external_exports.string().trim().max(500).optional();
14790
+ var analyticsRangeQuerySchema = external_exports.object({
14791
+ range: analyticsRangeSchema.default("24h"),
14792
+ from: external_exports.iso.datetime({ offset: true }).optional(),
14793
+ to: external_exports.iso.datetime({ offset: true }).optional(),
14794
+ timeZone: external_exports.string().trim().min(1).max(100).refine(validTimeZone, "Invalid time zone").default("UTC")
14795
+ }).refine((value) => value.range !== "custom" || Boolean(value.from), {
14796
+ message: "Custom ranges need a start time",
14797
+ path: ["from"]
14798
+ });
14799
+ var adminRequestFiltersSchema = external_exports.object({
14800
+ status: csvFilter,
14801
+ origin: csvFilter,
14802
+ platform: csvFilter,
14803
+ model: csvFilter,
14804
+ userId: external_exports.uuid().optional(),
14805
+ apiKeyId: external_exports.uuid().optional(),
14806
+ errorCategory: csvFilter,
14807
+ retry: booleanFilter,
14808
+ fallback: booleanFilter,
14809
+ agent: booleanFilter,
14810
+ ocr: booleanFilter
14811
+ });
14812
+ var adminRequestSortSchema = external_exports.enum(["newest", "slowest", "costliest"]);
14813
+ var insightsFiltersSchema = external_exports.object({
14814
+ platform: csvFilter,
14815
+ plan: csvFilter,
14816
+ origin: csvFilter,
14817
+ model: csvFilter
14818
+ });
14819
+
14776
14820
  // ../../packages/contracts/dist/attachment-limits.js
14777
14821
  var MAX_MESSAGE_ATTACHMENTS = 500;
14778
14822
  var DEFAULT_MAX_INLINE_IMAGES = 5;
@@ -16595,6 +16639,98 @@ var shelfMutationSchema = external_exports.object({
16595
16639
  ])
16596
16640
  });
16597
16641
 
16642
+ // ../../packages/contracts/dist/files.js
16643
+ var FILE_NAME_MAX_LENGTH = 255;
16644
+ function normalizeFileName(value) {
16645
+ return value.normalize("NFC").trim();
16646
+ }
16647
+ function fileNameError(name) {
16648
+ if (!name)
16649
+ return "empty";
16650
+ if ([...name].length > FILE_NAME_MAX_LENGTH)
16651
+ return "too_long";
16652
+ if (name === "." || name === "..")
16653
+ return "reserved";
16654
+ for (const character of name) {
16655
+ const code = character.charCodeAt(0);
16656
+ if (character === "/" || code < 32 || code === 127)
16657
+ return "invalid_character";
16658
+ }
16659
+ return null;
16660
+ }
16661
+ var fileNameSchema = external_exports.string().max(4 * FILE_NAME_MAX_LENGTH).transform(normalizeFileName).superRefine((name, context) => {
16662
+ const error51 = fileNameError(name);
16663
+ if (error51)
16664
+ context.addIssue({ code: "custom", message: `Invalid file name (${error51})` });
16665
+ });
16666
+ var fileNodeKindSchema = external_exports.enum(["folder", "doc", "blob"]);
16667
+ var fileNodeStatusSchema = external_exports.enum(["pending", "ready"]);
16668
+ var fileNodeSchema = external_exports.object({
16669
+ id: external_exports.uuid(),
16670
+ parentId: external_exports.uuid().nullable(),
16671
+ kind: fileNodeKindSchema,
16672
+ name: external_exports.string(),
16673
+ status: fileNodeStatusSchema,
16674
+ mimeType: external_exports.string().nullable(),
16675
+ sizeBytes: external_exports.number().int().nonnegative(),
16676
+ revision: external_exports.number().int().nonnegative(),
16677
+ trashedAt: external_exports.string().nullable(),
16678
+ createdAt: external_exports.string(),
16679
+ updatedAt: external_exports.string()
16680
+ });
16681
+ var createFileFolderSchema = external_exports.object({
16682
+ parentId: external_exports.uuid().nullable().default(null),
16683
+ name: fileNameSchema
16684
+ });
16685
+ var FILE_DOC_MAX_MARKDOWN_LENGTH = 2e6;
16686
+ var createFileDocSchema = external_exports.object({
16687
+ parentId: external_exports.uuid().nullable().default(null),
16688
+ name: fileNameSchema.optional(),
16689
+ /** Initial content, e.g. when importing an uploaded .md file. */
16690
+ markdown: external_exports.string().max(FILE_DOC_MAX_MARKDOWN_LENGTH).optional()
16691
+ });
16692
+ var updateFileNodeSchema = external_exports.object({
16693
+ name: fileNameSchema.optional(),
16694
+ parentId: external_exports.uuid().nullable().optional(),
16695
+ expectedRevision: external_exports.number().int().nonnegative().optional()
16696
+ }).refine((input) => input.name !== void 0 || input.parentId !== void 0, { message: "Nothing to update" });
16697
+ var FILE_BATCH_MAX_ITEMS = 500;
16698
+ var fileIdsSchema = external_exports.array(external_exports.uuid()).min(1).max(FILE_BATCH_MAX_ITEMS);
16699
+ var fileNodeIdsSchema = external_exports.object({ ids: fileIdsSchema });
16700
+ var moveFileNodesSchema = external_exports.object({
16701
+ items: external_exports.array(external_exports.object({
16702
+ id: external_exports.uuid(),
16703
+ parentId: external_exports.uuid().nullable(),
16704
+ /** Optional target name, e.g. when undoing a move that had to rename. */
16705
+ name: fileNameSchema.optional()
16706
+ })).min(1).max(FILE_BATCH_MAX_ITEMS)
16707
+ });
16708
+ var saveAttachmentToFilesSchema = external_exports.object({
16709
+ parentId: external_exports.uuid().nullable().default(null),
16710
+ name: fileNameSchema.optional(),
16711
+ replaceId: external_exports.uuid().optional()
16712
+ });
16713
+ var copyFileNodesSchema = external_exports.object({
16714
+ ids: fileIdsSchema,
16715
+ parentId: external_exports.uuid().nullable()
16716
+ });
16717
+ var reserveFileUploadSchema = external_exports.object({
16718
+ parentId: external_exports.uuid().nullable().default(null),
16719
+ name: fileNameSchema,
16720
+ mimeType: external_exports.string().min(1).max(255),
16721
+ // The per-file cap is an admin setting enforced when the upload is reserved.
16722
+ sizeBytes: external_exports.number().int().nonnegative().max(Number.MAX_SAFE_INTEGER)
16723
+ });
16724
+ var fileGridPositionSchema = external_exports.object({
16725
+ x: external_exports.number().int().min(0).max(1e6),
16726
+ y: external_exports.number().int().min(0).max(1e6)
16727
+ });
16728
+ var updateFileFolderLayoutSchema = external_exports.object({
16729
+ folderId: external_exports.uuid().nullable(),
16730
+ snapToGrid: external_exports.boolean().optional(),
16731
+ positions: external_exports.record(external_exports.uuid(), fileGridPositionSchema.nullable()).refine((positions) => Object.keys(positions).length <= 5e3, { message: "Too many positions" }).optional()
16732
+ });
16733
+
16598
16734
  // ../../packages/contracts/dist/index.js
16599
16735
  var idSchema = external_exports.uuid();
16600
16736
  var isoDateSchema = external_exports.iso.datetime();
@@ -16853,6 +16989,13 @@ var poolInvitationSchema = external_exports.object({
16853
16989
  memberCount: external_exports.number().int().min(1).max(6),
16854
16990
  createdAt: isoDateSchema
16855
16991
  });
16992
+ var usageLimitBarSchema = external_exports.object({
16993
+ remainingPercentage: external_exports.number().int().min(0).max(100),
16994
+ availableBarPercentage: external_exports.number().min(0).max(100),
16995
+ pendingMicros: external_exports.number().int().nonnegative(),
16996
+ pendingBarPercentage: external_exports.number().min(0).max(100),
16997
+ resetsAt: isoDateSchema.nullable()
16998
+ });
16856
16999
  var poolSummarySchema = external_exports.object({
16857
17000
  accountBalanceMicros: external_exports.number().int().nonnegative(),
16858
17001
  pool: external_exports.object({
@@ -16860,7 +17003,13 @@ var poolSummarySchema = external_exports.object({
16860
17003
  ownerUserId: idSchema,
16861
17004
  pooledBalanceMicros: external_exports.number().int().nonnegative(),
16862
17005
  members: external_exports.array(poolMemberSchema).max(6),
16863
- pendingInvitations: external_exports.array(poolInvitationSchema)
17006
+ pendingInvitations: external_exports.array(poolInvitationSchema),
17007
+ /** Shared weekly usage from Fat subscribers in the pool; null when nobody shares. */
17008
+ sharedUsage: external_exports.object({
17009
+ total: usageLimitBarSchema,
17010
+ /** The viewer's own five-hour limit on drawing from others' shared usage. */
17011
+ fiveHour: usageLimitBarSchema.nullable()
17012
+ }).nullable()
16864
17013
  }).nullable(),
16865
17014
  incomingInvitations: external_exports.array(poolInvitationSchema)
16866
17015
  });
@@ -17236,6 +17385,9 @@ var modelPreferencesPatchSchema = external_exports.object({
17236
17385
  providerOrder: orderedPreferenceIdsSchema.optional()
17237
17386
  });
17238
17387
  var sidebarPinsSchema = external_exports.object({
17388
+ // Shown by default; saved preferences that predate these keys keep them visible.
17389
+ searchChats: external_exports.boolean().default(true),
17390
+ files: external_exports.boolean().default(true),
17239
17391
  usage: external_exports.boolean().default(false),
17240
17392
  billing: external_exports.boolean().default(false),
17241
17393
  friends: external_exports.boolean().default(false),
@@ -17646,6 +17798,7 @@ var authSettingsSchema = external_exports.object({
17646
17798
  pendingMessage: external_exports.string().max(2e3).default("Your account is pending approval. An admin will review it shortly."),
17647
17799
  defaultSignupRole: external_exports.enum(["pending", "user"]).default("pending"),
17648
17800
  apiKeysEnabled: external_exports.boolean().default(true),
17801
+ filesEnabled: external_exports.boolean().default(true),
17649
17802
  inviteCodesEnabled: external_exports.boolean().default(false),
17650
17803
  newAccountModelDefaults: newAccountModelDefaultsSchema.default(() => newAccountModelDefaultsSchema.parse({}))
17651
17804
  });
@@ -17738,6 +17891,7 @@ var instanceOcrSettingsSchema = external_exports.object({
17738
17891
  var accountPreferenceIdsSchema = external_exports.array(external_exports.string().trim().min(1).max(200)).max(500).transform((ids) => [...new Set(ids)]);
17739
17892
  var automaticChatExpirationSchema = external_exports.enum(["disabled", "24h", "7d"]);
17740
17893
  var newChatAutoExpireSchema = external_exports.boolean().default(false);
17894
+ var chatSortModeSchema = external_exports.enum(["default", "recent"]);
17741
17895
  var ANIMATION_SPEED_MIN = 0.01;
17742
17896
  var ANIMATION_SPEED_MAX = 5;
17743
17897
  var DEFAULT_ANIMATION_SPEED = 1;
@@ -17776,6 +17930,7 @@ var managementAccountSettingsSchema = external_exports.object({
17776
17930
  trashRetention: external_exports.enum(["instant", "24h", "7d", "30d", "90d", "indefinite"]).default("30d"),
17777
17931
  automaticChatExpiration: automaticChatExpirationSchema.default("24h"),
17778
17932
  newChatAutoExpire: newChatAutoExpireSchema,
17933
+ chatSortMode: chatSortModeSchema.default("default"),
17779
17934
  defaultModelId: external_exports.string().max(120).nullable().default(null),
17780
17935
  generation: external_exports.record(external_exports.string(), external_exports.record(external_exports.string(), external_exports.string())).default({}),
17781
17936
  favoriteModelIds: accountPreferenceIdsSchema.default([]),
@@ -17937,6 +18092,9 @@ var updateApiKeySchema = external_exports.object({
17937
18092
  }).refine((input) => Object.values(input).some((value) => value !== void 0), {
17938
18093
  message: "Provide at least one API key setting"
17939
18094
  });
18095
+ var FILE_SCOPE_ROOT = "root";
18096
+ var MAX_CHAT_FILE_SCOPES = 20;
18097
+ var fileScopeIdsSchema = external_exports.array(external_exports.union([external_exports.literal(FILE_SCOPE_ROOT), idSchema])).max(MAX_CHAT_FILE_SCOPES).transform((ids) => [...new Set(ids.map((id) => id.toLowerCase()))]);
17940
18098
  var chatSummarySchema = external_exports.object({
17941
18099
  id: idSchema,
17942
18100
  title: external_exports.string(),
@@ -17945,6 +18103,7 @@ var chatSummarySchema = external_exports.object({
17945
18103
  folderId: idSchema.nullable(),
17946
18104
  sortOrder: external_exports.number().int().optional(),
17947
18105
  temporary: external_exports.boolean(),
18106
+ fileScopeIds: external_exports.array(external_exports.string()).default([]),
17948
18107
  expiresAt: isoDateSchema.nullable().optional(),
17949
18108
  updatedAt: isoDateSchema,
17950
18109
  activeResponseId: idSchema.nullable(),
@@ -17959,7 +18118,9 @@ var createChatSchema = external_exports.object({
17959
18118
  modelId: external_exports.string().min(1),
17960
18119
  title: external_exports.string().trim().min(1).max(200).optional(),
17961
18120
  temporary: external_exports.boolean().default(false),
17962
- autoExpire: external_exports.boolean().default(false)
18121
+ autoExpire: external_exports.boolean().default(false),
18122
+ /** Files items the agent may read and edit in this chat. */
18123
+ fileScopeIds: fileScopeIdsSchema.default([])
17963
18124
  });
17964
18125
  var updateChatSchema = external_exports.object({
17965
18126
  title: external_exports.string().trim().min(1).max(200).optional(),
@@ -17967,7 +18128,8 @@ var updateChatSchema = external_exports.object({
17967
18128
  folderId: idSchema.nullable().optional(),
17968
18129
  modelId: external_exports.string().min(1).optional(),
17969
18130
  sortOrder: external_exports.number().int().optional(),
17970
- autoExpire: external_exports.boolean().optional()
18131
+ autoExpire: external_exports.boolean().optional(),
18132
+ fileScopeIds: fileScopeIdsSchema.optional()
17971
18133
  });
17972
18134
  var attachmentIdListSchema = external_exports.array(idSchema).max(MAX_MESSAGE_ATTACHMENTS).refine((ids) => new Set(ids).size === ids.length, { message: "Attachment ids must be unique" });
17973
18135
  var timeZoneSchema = external_exports.string().trim().min(1).max(100).refine((value) => {
@@ -17990,7 +18152,9 @@ var createChatResponseSchema = external_exports.object({
17990
18152
  maxOutputTokens: external_exports.number().int().positive().optional(),
17991
18153
  presetSelections: external_exports.record(external_exports.string(), external_exports.string()).default({}),
17992
18154
  attachmentIds: attachmentIdListSchema.default([]),
17993
- agentMode: external_exports.boolean().default(false)
18155
+ agentMode: external_exports.boolean().default(false),
18156
+ /** Analytics only: whether dictation produced any of the message text. */
18157
+ usedDictation: external_exports.boolean().optional()
17994
18158
  }).refine((value) => value.input.length > 0 || value.attachmentIds.length > 0, {
17995
18159
  message: "Message must include text or attachments",
17996
18160
  path: ["input"]
@@ -18032,7 +18196,9 @@ var createQueuedMessageSchema = external_exports.object({
18032
18196
  modelId: external_exports.string().min(1),
18033
18197
  presetSelections: external_exports.record(external_exports.string(), external_exports.string()).default({}),
18034
18198
  attachmentIds: attachmentIdListSchema.default([]),
18035
- agentMode: external_exports.boolean().default(false)
18199
+ agentMode: external_exports.boolean().default(false),
18200
+ /** Analytics only: whether dictation produced any of the message text. */
18201
+ usedDictation: external_exports.boolean().optional()
18036
18202
  }).refine((value) => value.input.length > 0 || value.attachmentIds.length > 0, {
18037
18203
  message: "Message must include text or attachments",
18038
18204
  path: ["input"]
@@ -18067,7 +18233,7 @@ var syncRequestSchema = external_exports.object({
18067
18233
  activeChatId: idSchema.optional(),
18068
18234
  responseCursors: external_exports.record(idSchema, external_exports.number().int().nonnegative())
18069
18235
  });
18070
- var stateInvalidationScopeSchema = external_exports.enum(["chats", "folders", "models", "usage", "settings", "friends", "pool", "billing", "shelved-drafts"]);
18236
+ var stateInvalidationScopeSchema = external_exports.enum(["chats", "folders", "models", "usage", "settings", "friends", "pool", "billing", "shelved-drafts", "files"]);
18071
18237
  var syncResultSchema = external_exports.object({
18072
18238
  accountRevision: external_exports.number().int().nonnegative(),
18073
18239
  invalidate: external_exports.array(stateInvalidationScopeSchema),
@@ -18075,6 +18241,10 @@ var syncResultSchema = external_exports.object({
18075
18241
  events: external_exports.array(responseEventSchema)
18076
18242
  });
18077
18243
 
18244
+ // ../../packages/client-core/dist/dictation.js
18245
+ var NOISE_FLOOR_DECIBELS = -60;
18246
+ var NOISE_FLOOR_AMPLITUDE = 10 ** (NOISE_FLOOR_DECIBELS / 20);
18247
+
18078
18248
  // ../../node_modules/marked/lib/marked.esm.js
18079
18249
  function _getDefaults() {
18080
18250
  return {
@@ -20846,7 +21016,7 @@ async function runModelTest(input) {
20846
21016
  }
20847
21017
 
20848
21018
  // src/index.ts
20849
- var CLI_VERSION = true ? "0.149.0" : "0.1.0";
21019
+ var CLI_VERSION = true ? "0.150.0" : "0.1.0";
20850
21020
  var CLI_BUNDLED = true;
20851
21021
  var commandIo = /* @__PURE__ */ new WeakMap();
20852
21022
  var commandClientFactory = /* @__PURE__ */ new WeakMap();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@isaacthoman/pulpo",
3
- "version": "0.149.0",
3
+ "version": "0.150.0",
4
4
  "description": "Operator-first command-line client for Pulpo",
5
5
  "type": "module",
6
6
  "bin": {