@qredence/fleet 0.6.4 → 0.6.5

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 (46) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/web/client/assets/{chat-command-palette-DdPlRVuL.js → chat-command-palette-AjGusIEp.js} +1 -1
  3. package/dist/web/client/assets/{create-project-dialog-CaXurRpm.js → create-project-dialog-zTSeGUup.js} +1 -1
  4. package/dist/web/client/assets/globals-BiAbxPQ2.css +2 -0
  5. package/dist/web/client/assets/{index-BJIGh8ag.js → index-NhnAdIsR.js} +2 -2
  6. package/dist/web/client/assets/{message-queue-CPYj2iaw.js → message-queue-BoNn57Po.js} +1 -1
  7. package/dist/web/client/assets/prompt-input-BhVQxoyh.js +1 -0
  8. package/dist/web/client/assets/{prompt-suggestions-ULqmPijZ.js → prompt-suggestions-BRFWFm5y.js} +1 -1
  9. package/dist/web/client/assets/right-panel-registry-gwgnEeUz.js +2 -0
  10. package/dist/web/client/assets/routes-umGEy_Ak.js +16 -0
  11. package/dist/web/client/assets/{settings-dialog-BRWheaBZ.js → settings-dialog-C8YN5D1V.js} +1 -1
  12. package/dist/web/client/assets/{subagent-chat-panel-B6d4Z3bV.js → subagent-chat-panel-BIsmzS45.js} +1 -1
  13. package/dist/web/client/assets/{subagent-transcript-CQuPs6N4.js → subagent-transcript-CEUBL9sF.js} +1 -1
  14. package/dist/web/client/assets/{subagents-panel-ajf--C_-.js → subagents-panel-CFxWpUT0.js} +1 -1
  15. package/dist/web/client/assets/{tokens-BcUIpW6Y.js → tokens-CtP2s1Y3.js} +1 -1
  16. package/dist/web/client/assets/types-D5hZ8IyV.js +1 -0
  17. package/dist/web/client/assets/virtualized-turn-list-DkJIWXFJ.js +6 -0
  18. package/dist/web/client/bundle-budget.json +6 -6
  19. package/dist/web/server/{_tanstack-start-manifest_v-BZR0i182-OLTGGEDQ.js → _tanstack-start-manifest_v-B3Gb4p5p-DO2GL5VM.js} +9 -10
  20. package/dist/web/server/{artifacts-panel-BySfu7im-AKBWHYJS.js → artifacts-panel-CGgpyc85-V3KXDVAX.js} +2 -2
  21. package/dist/web/server/{chat-command-palette-BLGKnp-w-OKFIKD3T.js → chat-command-palette-BMR7RsuI-U5S4X44U.js} +2 -2
  22. package/dist/web/server/{chunk-4B2PJSK5.js → chunk-5TXDGMCK.js} +14 -4
  23. package/dist/web/server/{chunk-ONWT54IL.js → chunk-BS4D5LRR.js} +5 -1
  24. package/dist/web/server/{chunk-JLGBOCFM.js → chunk-ELRLMFHT.js} +49 -33
  25. package/dist/web/server/{chunk-JZ2WBCIH.js → chunk-G6NMFFZX.js} +624 -624
  26. package/dist/web/server/{chunk-47TH5VUT.js → chunk-LBUHLBKK.js} +2 -2
  27. package/dist/web/server/{chunk-2GQATGF4.js → chunk-N47UN47Y.js} +3 -3
  28. package/dist/web/server/{chunk-CIE2PLNB.js → chunk-PX7B5BTI.js} +2 -2
  29. package/dist/web/server/{chunk-NHZRY22Z.js → chunk-SOZKLVNI.js} +59 -19
  30. package/dist/web/server/{create-project-dialog-CigfFgAj-QS27NAJH.js → create-project-dialog-xhTWmcx1-UQQU3MAT.js} +2 -2
  31. package/dist/web/server/{message-queue-BsrLcNPX-CUCBSF6U.js → message-queue-Dg2okv2L-SJTUUJS7.js} +4 -4
  32. package/dist/web/server/{openui-renderer-TbIFXEW2-BET2OXM2.js → openui-renderer-CiWvcD3p-N6I66FOC.js} +1 -1
  33. package/dist/web/server/{prompt-suggestions-D6RXFQF4-7WHYRNMN.js → prompt-suggestions-h17Gu7u1-BS5SU2FY.js} +2 -2
  34. package/dist/web/server/{router-RPObiwZR-AFMFSYSZ.js → router-DOPFvRSC-G7G75P7U.js} +84 -28
  35. package/dist/web/server/{routes-Dn-deuPY-MDXEQXRU.js → routes-i2Ai-ZwX-SMSFONDQ.js} +469 -352
  36. package/dist/web/server/server.js +2 -2
  37. package/dist/web/server/{settings-dialog-CzeangBl-YKL7CLPF.js → settings-dialog-C-xwPYy8-TFICZWEM.js} +7 -7
  38. package/dist/web/server/{subagent-chat-panel-Fa31QewE-YDPOKN74.js → subagent-chat-panel-VEVu0QXU-DPWJFCYR.js} +5 -4
  39. package/dist/web/server/{subagents-panel-DjOcQxp4-GZYOZOYC.js → subagents-panel-Cs3cBcsy-HTQBIYAS.js} +4 -3
  40. package/package.json +1 -1
  41. package/dist/web/client/assets/globals-B-fD_O7k.css +0 -2
  42. package/dist/web/client/assets/prompt-input-a7UP_MAw.js +0 -1
  43. package/dist/web/client/assets/right-panel-registry-BqtgZw7Z.js +0 -2
  44. package/dist/web/client/assets/routes-C37r2W1K.js +0 -16
  45. package/dist/web/client/assets/types-Cr5Z97oW.js +0 -1
  46. package/dist/web/client/assets/virtualized-turn-list-Bcq088gZ.js +0 -6
@@ -27,7 +27,7 @@ import "./chunk-FOMB2JR7.js";
27
27
  import {
28
28
  GenerativeTextRenderer,
29
29
  OpenUIHtmlArtifactView
30
- } from "./chunk-JZ2WBCIH.js";
30
+ } from "./chunk-G6NMFFZX.js";
31
31
  import {
32
32
  UiErrorBoundary
33
33
  } from "./chunk-2HOITUWV.js";
@@ -68,7 +68,7 @@ import "./chunk-UQVZJSZZ.js";
68
68
  import "./chunk-L547YHC4.js";
69
69
  import "./chunk-MLKGABMK.js";
70
70
 
71
- // web/app/dist/server/assets/artifacts-panel-BySfu7im.js
71
+ // web/app/dist/server/assets/artifacts-panel-CGgpyc85.js
72
72
  import { useEffect, useMemo, useRef, useState } from "react";
73
73
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
74
74
  var __iconData = {
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  RIGHT_PANEL_LAUNCHER_DEFINITIONS
3
- } from "./chunk-2GQATGF4.js";
3
+ } from "./chunk-N47UN47Y.js";
4
4
  import {
5
5
  Keyboard,
6
6
  Monitor,
@@ -49,7 +49,7 @@ import "./chunk-RPWKCJHL.js";
49
49
  import "./chunk-L547YHC4.js";
50
50
  import "./chunk-MLKGABMK.js";
51
51
 
52
- // web/app/dist/server/assets/chat-command-palette-BLGKnp-w.js
52
+ // web/app/dist/server/assets/chat-command-palette-BMR7RsuI.js
53
53
  import { useState } from "react";
54
54
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
55
55
  var __iconData = {
@@ -10,7 +10,7 @@ import {
10
10
  positiveIntSchema
11
11
  } from "./chunk-3YYNG52U.js";
12
12
 
13
- // web/app/dist/server/assets/composer-completion-CqJ6R1s9.js
13
+ // web/app/dist/server/assets/composer-completion-Bjb1zW3r.js
14
14
  function observeWebVitals(onVital) {
15
15
  if (typeof window === "undefined" || typeof PerformanceObserver === "undefined") return () => {
16
16
  };
@@ -336,11 +336,19 @@ var ChatCommandsResponseSchema = external_exports.object({
336
336
  commands: external_exports.array(ChatSlashCommandInfoSchema),
337
337
  diagnostics: external_exports.array(external_exports.string())
338
338
  }).openapi({ description: "Chat slash commands response" });
339
+ var ComposerCompletionSourceSchema = external_exports.enum(["session", "corpus"]).openapi({ description: "Where a completion came from: this session or another session" });
340
+ external_exports.enum(["append", "replace"]).openapi({ description: "Whether accepting appends the completion or replaces the draft with it" });
339
341
  var ComposerCompletionRequestSchema = external_exports.object({
340
342
  text: nonEmptyStringSchema.max(2e3),
343
+ /** The session being typed in; its own prompts are preferred over the corpus. */
344
+ sessionId: nonEmptyStringSchema.max(200).optional(),
341
345
  projectId: ProjectIdSchema.optional()
342
346
  }).openapi({ description: "Composer ghost-text completion request" });
343
- external_exports.object({ completion: external_exports.string().min(1).max(2e3).optional() }).openapi({ description: "Composer ghost-text completion; a verbatim string, never model prose" });
347
+ external_exports.object({
348
+ completion: external_exports.string().min(1).max(2e3).optional(),
349
+ confidence: external_exports.number().min(0).max(1).optional(),
350
+ source: ComposerCompletionSourceSchema.optional()
351
+ }).openapi({ description: "Composer ghost-text completion from history; a verbatim string that always extends the draft, never model prose" });
344
352
  var ComposerIntentStatusSchema = external_exports.enum([
345
353
  "unconfigured",
346
354
  "unverified",
@@ -589,10 +597,11 @@ function composerCompletionIgnores(draft) {
589
597
  function normalizeCompletionDraft(text) {
590
598
  return text.trim().replace(/\s+/g, " ");
591
599
  }
592
- function composerCompletionGhost(draft, completion) {
600
+ function composerCompletionGhost(draft, completion, mode = "append") {
593
601
  if (!completion) return void 0;
594
- const normalizedDraft = normalizeCompletionDraft(draft);
595
602
  const normalizedCompletion = normalizeCompletionDraft(completion);
603
+ if (mode === "replace") return normalizedCompletion.length > 0 ? normalizedCompletion : void 0;
604
+ const normalizedDraft = normalizeCompletionDraft(draft);
596
605
  if (normalizedCompletion.length <= normalizedDraft.length) return void 0;
597
606
  if (!normalizedCompletion.toLowerCase().startsWith(normalizedDraft.toLowerCase())) return void 0;
598
607
  const suffix = normalizedCompletion.slice(normalizedDraft.length);
@@ -2932,6 +2941,7 @@ export {
2932
2941
  ChatSettingsUpdateRequestSchema,
2933
2942
  ChatSettingsResponseSchema,
2934
2943
  composerCompletionIgnores,
2944
+ normalizeCompletionDraft,
2935
2945
  composerCompletionGhost,
2936
2946
  useQueryClient,
2937
2947
  QueryClientProvider,
@@ -13,7 +13,7 @@ import {
13
13
  createLucideIcon
14
14
  } from "./chunk-JVXQQYXB.js";
15
15
 
16
- // web/app/dist/server/assets/types-D7DqQjP8.js
16
+ // web/app/dist/server/assets/types-aWCwh7xA.js
17
17
  var __iconData$1 = {
18
18
  name: "folder-plus",
19
19
  size: 24,
@@ -59,6 +59,8 @@ var __iconData = {
59
59
  __iconData.node;
60
60
  var FolderTree = createLucideIcon(__iconData);
61
61
  var DOCUMENTATION_URL = "https://docs.qredence.ai";
62
+ var TWITTER_URL = "https://x.com/zacharybydesign";
63
+ var DISCORD_URL = "https://discord.gg/ebgy7gtZHK";
62
64
  var EXPANDED_PROJECTS_STORAGE_KEY = "fleet-prime:v1:sidebar-expanded-projects";
63
65
  var EMPTY_PROJECTS = [];
64
66
  var NEW_SESSION_PREFIX = "new-session:";
@@ -124,6 +126,8 @@ export {
124
126
  FolderPlus,
125
127
  FolderTree,
126
128
  DOCUMENTATION_URL,
129
+ TWITTER_URL,
130
+ DISCORD_URL,
127
131
  EXPANDED_PROJECTS_STORAGE_KEY,
128
132
  EMPTY_PROJECTS,
129
133
  NEW_SESSION_PREFIX,
@@ -49,7 +49,7 @@ import {
49
49
  cn
50
50
  } from "./chunk-JCK6B7ZW.js";
51
51
 
52
- // web/app/dist/server/assets/virtualized-turn-list-6hzO3o1j.js
52
+ // web/app/dist/server/assets/virtualized-turn-list-BPXCnicM.js
53
53
  import { Fragment, Suspense, cloneElement, createContext, lazy, memo, useCallback, useContext, useEffect, useEffectEvent, useId, useLayoutEffect, useMemo, useRef, useState } from "react";
54
54
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
55
55
  import { createPortal } from "react-dom";
@@ -1338,13 +1338,25 @@ function getFileIconName(filename, isImage) {
1338
1338
  function renderFileIcon(iconName) {
1339
1339
  switch (iconName) {
1340
1340
  case "image":
1341
- return /* @__PURE__ */ jsx(Image, { className: "size-4 text-muted-foreground" });
1341
+ return /* @__PURE__ */ jsx(Image, {
1342
+ "aria-hidden": "true",
1343
+ className: "size-4 text-muted-foreground"
1344
+ });
1342
1345
  case "code":
1343
- return /* @__PURE__ */ jsx(FileCode, { className: "size-4 text-muted-foreground" });
1346
+ return /* @__PURE__ */ jsx(FileCode, {
1347
+ "aria-hidden": "true",
1348
+ className: "size-4 text-muted-foreground"
1349
+ });
1344
1350
  case "data":
1345
- return /* @__PURE__ */ jsx(FileBraces, { className: "size-4 text-muted-foreground" });
1351
+ return /* @__PURE__ */ jsx(FileBraces, {
1352
+ "aria-hidden": "true",
1353
+ className: "size-4 text-muted-foreground"
1354
+ });
1346
1355
  default:
1347
- return /* @__PURE__ */ jsx(FileText, { className: "size-4 text-muted-foreground" });
1356
+ return /* @__PURE__ */ jsx(FileText, {
1357
+ "aria-hidden": "true",
1358
+ className: "size-4 text-muted-foreground"
1359
+ });
1348
1360
  }
1349
1361
  }
1350
1362
  function FileAttachment({ id, filename, size, isImage, url, onRemove, className, display = "chip", enableImagePreview = true }) {
@@ -1357,40 +1369,41 @@ function FileAttachment({ id, filename, size, isImage, url, onRemove, className,
1357
1369
  event?.stopPropagation();
1358
1370
  setIsLightboxOpen(true);
1359
1371
  };
1372
+ const previewButtonClass = cn("shrink-0 overflow-hidden rounded-[calc(var(--chat-input-radius)-var(--chat-context-padding)-2px)]", canPreview && "cursor-pointer focus-visible:ring-2 focus-visible:ring-ring");
1360
1373
  return /* @__PURE__ */ jsxs("div", {
1361
- className: cn("relative rounded-[calc(var(--chat-input-radius)-var(--chat-context-padding))] bg-muted/50", isImageOnly ? "flex size-10 items-center justify-center" : "flex max-w-[200px] min-w-[120px] items-center gap-2 py-1 pr-2 pl-1", className),
1374
+ className: cn("group relative rounded-[calc(var(--chat-input-radius)-var(--chat-context-padding))] bg-muted/50", isImageOnly ? "flex size-10 items-center justify-center" : "flex max-w-[min(12.5rem,100%)] min-w-0 items-center gap-2 py-1 ps-1 pe-2", className),
1362
1375
  onMouseEnter: () => setIsHovered(true),
1363
1376
  onMouseLeave: () => setIsHovered(false),
1364
1377
  children: [
1365
- isImageOnly ? /* @__PURE__ */ jsx("div", {
1366
- className: cn("size-8 shrink-0 overflow-hidden rounded-[calc(var(--chat-input-radius)-var(--chat-context-padding)-2px)]", canPreview && "cursor-pointer"),
1367
- onClick: canPreview ? openLightbox : void 0,
1368
- role: canPreview ? "button" : void 0,
1369
- tabIndex: canPreview ? 0 : void 0,
1370
- "aria-label": canPreview ? `Preview ${filename}` : void 0,
1371
- onKeyDown: canPreview ? (event) => {
1372
- if (event.key === "Enter" || event.key === " ") {
1373
- event.preventDefault();
1374
- openLightbox();
1375
- }
1376
- } : void 0,
1378
+ isImageOnly ? canPreview ? /* @__PURE__ */ jsx("button", {
1379
+ type: "button",
1380
+ className: cn(previewButtonClass, "size-8 border-0 bg-transparent p-0"),
1381
+ onClick: openLightbox,
1382
+ "aria-label": `Preview ${filename}`,
1383
+ children: /* @__PURE__ */ jsx("img", {
1384
+ src: url,
1385
+ alt: "",
1386
+ className: "h-full w-full object-cover"
1387
+ })
1388
+ }) : /* @__PURE__ */ jsx("div", {
1389
+ className: cn(previewButtonClass, "size-8"),
1377
1390
  children: /* @__PURE__ */ jsx("img", {
1378
1391
  src: url,
1379
1392
  alt: filename,
1380
1393
  className: "h-full w-full object-cover"
1381
1394
  })
1382
- }) : /* @__PURE__ */ jsxs(Fragment$1, { children: [isImage && url ? /* @__PURE__ */ jsx("div", {
1383
- className: cn("w-8 shrink-0 self-stretch overflow-hidden rounded-[calc(var(--chat-input-radius)-var(--chat-context-padding)-2px)]", canPreview && "cursor-pointer"),
1384
- onClick: canPreview ? openLightbox : void 0,
1385
- role: canPreview ? "button" : void 0,
1386
- tabIndex: canPreview ? 0 : void 0,
1387
- "aria-label": canPreview ? `Preview ${filename}` : void 0,
1388
- onKeyDown: canPreview ? (event) => {
1389
- if (event.key === "Enter" || event.key === " ") {
1390
- event.preventDefault();
1391
- openLightbox();
1392
- }
1393
- } : void 0,
1395
+ }) : /* @__PURE__ */ jsxs(Fragment$1, { children: [isImage && url ? canPreview ? /* @__PURE__ */ jsx("button", {
1396
+ type: "button",
1397
+ className: cn(previewButtonClass, "w-8 self-stretch border-0 bg-transparent p-0"),
1398
+ onClick: openLightbox,
1399
+ "aria-label": `Preview ${filename}`,
1400
+ children: /* @__PURE__ */ jsx("img", {
1401
+ src: url,
1402
+ alt: "",
1403
+ className: "aspect-square h-full w-full object-cover"
1404
+ })
1405
+ }) : /* @__PURE__ */ jsx("div", {
1406
+ className: cn(previewButtonClass, "w-8 self-stretch"),
1394
1407
  children: /* @__PURE__ */ jsx("img", {
1395
1408
  src: url,
1396
1409
  alt: filename,
@@ -1416,9 +1429,12 @@ function FileAttachment({ id, filename, size, isImage, url, onRemove, className,
1416
1429
  onRemove();
1417
1430
  },
1418
1431
  "aria-label": `Remove ${filename}`,
1419
- className: `absolute -top-1.5 -right-1.5 z-10 flex size-4 items-center justify-center rounded-full border border-border bg-background text-muted-foreground transition-[opacity,transform] duration-150 ease-out hover:text-foreground active:scale-[0.97] ${isHovered ? "opacity-100" : "opacity-0"}`,
1432
+ className: cn("relative after:absolute after:top-1/2 after:left-1/2 after:size-10 after:-translate-x-1/2 after:-translate-y-1/2", "absolute -top-1.5 -end-1.5 z-10 flex size-6 items-center justify-center rounded-full border border-border bg-background text-muted-foreground transition-[opacity,transform] duration-150 ease-out hover:text-foreground focus-visible:opacity-100 focus-visible:ring-2 focus-visible:ring-ring active:scale-[0.97] group-hover:opacity-100 group-focus-within:opacity-100 [@media(hover:none)]:opacity-100", isHovered ? "opacity-100" : "opacity-0"),
1420
1433
  type: "button",
1421
- children: /* @__PURE__ */ jsx(X, { className: "size-3" })
1434
+ children: /* @__PURE__ */ jsx(X, {
1435
+ "aria-hidden": "true",
1436
+ className: "size-3"
1437
+ })
1422
1438
  }),
1423
1439
  canPreview && url && /* @__PURE__ */ jsx(ImageLightbox, {
1424
1440
  open: isLightboxOpen,
@@ -1578,7 +1594,7 @@ function groupMessages(messages) {
1578
1594
  if (current) turns.push(current);
1579
1595
  return turns;
1580
1596
  }
1581
- var LazyGenerativeTextRenderer = lazy(() => import("./openui-renderer-TbIFXEW2-BET2OXM2.js").then((n) => n.n).then(({ GenerativeTextRenderer }) => ({ default: GenerativeTextRenderer })));
1597
+ var LazyGenerativeTextRenderer = lazy(() => import("./openui-renderer-CiWvcD3p-N6I66FOC.js").then((n) => n.n).then(({ GenerativeTextRenderer }) => ({ default: GenerativeTextRenderer })));
1582
1598
  function PlainTextFallback({ className, content }) {
1583
1599
  return /* @__PURE__ */ jsx("div", {
1584
1600
  className: className ? `${className} whitespace-pre-wrap` : "whitespace-pre-wrap",