@bud.sh/app 0.5.1 → 0.6.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 (115) hide show
  1. package/README.md +41 -31
  2. package/dist/client/assets/bud/design.js +1 -1
  3. package/dist/client/assets/canvas-Bih9EdKJ.js +1 -0
  4. package/dist/client/assets/difference-worker-Bzg-rizy.js +8 -0
  5. package/dist/client/assets/dist-CdE5wBkg.js +5 -0
  6. package/dist/client/assets/files-1dLuoM2f.js +1 -0
  7. package/dist/client/assets/i18n-CkO6VFI0.js +1 -0
  8. package/dist/client/assets/index-Cn2mxroU.css +2 -0
  9. package/dist/client/assets/{index-Dn2pfmXf.js → index-DtISWZp9.js} +2 -2
  10. package/dist/client/assets/pages-BJ-tNJ4J.js +1 -0
  11. package/dist/client/assets/{project-branches-CMGRmrqr.js → project-branches-Ce3rXrkc.js} +1 -1
  12. package/dist/client/assets/project-comments-CPUONfs8.js +1 -0
  13. package/dist/client/assets/project-thread-links-C-TGkq59.js +1 -0
  14. package/dist/client/assets/{project-threads-ZbKDh78d.js → project-threads-Bv7IDBgi.js} +105 -105
  15. package/dist/client/assets/project-work-DAE9-olg.js +1 -0
  16. package/dist/client/assets/{task-design-BPpc4Gd7.js → task-design-CwySIAOl.js} +3 -3
  17. package/dist/client/assets/tasks-KWsCLi_h.js +3 -0
  18. package/dist/client/assets/wasm-inline-DSUyFn1L.js +1 -0
  19. package/dist/client/assets/workspace-CVdcfaaB.js +2 -0
  20. package/dist/client/index.html +3 -3
  21. package/dist/hosted/assets/{canvas-BYTOp1p7.js → canvas-AII16n9i.js} +97 -6
  22. package/dist/hosted/assets/{comment-data-Cn5y2VxV.js → comment-data-BXfMElfx.js} +1998 -381
  23. package/dist/hosted/assets/dist-BCSTeNf4.js +4785 -0
  24. package/dist/hosted/assets/{files-B1P2_24q.js → files-D_1yeAVO.js} +10 -5
  25. package/dist/hosted/assets/{pages-B0ZlVdci.js → pages-CN_SbKWA.js} +3 -3
  26. package/dist/hosted/assets/{project-branches-DlCWmfRo.js → project-branches-Bxp0DCwg.js} +1 -1
  27. package/dist/hosted/assets/{project-thread-links-BZXQ200n.js → project-thread-links-KqQoKBLE.js} +76 -4
  28. package/dist/{node-host/assets/screen-DapOVrga.js → hosted/assets/screen-DpAcDUKR.js} +25 -1
  29. package/dist/hosted/assets/tasks-D66LlwxM.js +1423 -0
  30. package/dist/hosted/assets/wasm-inline-Dl9tqabx.js +4 -0
  31. package/dist/hosted/hosted.js +7885 -6219
  32. package/dist/node/assets/Stream-CAm1eJ2n.js +16604 -0
  33. package/dist/{server/assets/bridge-B_Blt55E.js → node/assets/bridge-DQSBYHmw.js} +124 -290
  34. package/dist/node/assets/config-9_jWwNBh.js +1067 -0
  35. package/dist/node/assets/load-config.server-CMVtRVmO.js +261 -0
  36. package/dist/node/assets/module-3GgtT4Xs.js +308 -0
  37. package/dist/node/assets/server-DTQFuoX2.js +846 -0
  38. package/dist/node/assets/src-D-kG1GxB.js +2 -0
  39. package/dist/node/assets/{src-CerrKjID.js → src-Dwe9APUx.js} +93 -3
  40. package/dist/node/assets/src-DysjfbM8.js +8592 -0
  41. package/dist/node/bridge.js +1 -845
  42. package/dist/node/cli.js +206 -0
  43. package/dist/node/design.js +811 -8
  44. package/dist/node/index.js +2 -739
  45. package/dist/node/plugins.js +5711 -0
  46. package/dist/node/server.js +1 -6746
  47. package/dist/node/vite.js +121 -0
  48. package/dist/{server/assets/canvas-CkMK4hoN.js → node-host/assets/canvas-BeDoufy1.js} +97 -7
  49. package/dist/node-host/assets/{comment-data-yfWEdDQL.js → comment-data-DE2T9yTj.js} +1974 -355
  50. package/dist/node-host/assets/dist-BCSTeNf4.js +4785 -0
  51. package/dist/node-host/assets/{files-anHi-apm.js → files-Dl-PTS09.js} +11 -6
  52. package/dist/node-host/assets/{pages-CW4aF6dK.js → pages-DL2sk6_U.js} +3 -3
  53. package/dist/node-host/assets/{project-branches-D7rVCxQX.js → project-branches-DGp5ELct.js} +1 -1
  54. package/dist/{server/assets/project-thread-links-lLS_rq7c.js → node-host/assets/project-thread-links-CgBV3Jcm.js} +76 -5
  55. package/dist/{hosted/assets/screen-CfdC3NbR.js → node-host/assets/screen-B55yyVfb.js} +25 -1
  56. package/dist/node-host/assets/tasks-DZRNkoxe.js +1425 -0
  57. package/dist/node-host/assets/wasm-inline-Dl9tqabx.js +4 -0
  58. package/dist/node-host/node-host.js +6127 -4438
  59. package/dist/server/assets/{branch-previews-ClkoJ0lM.js → branch-previews-DedrpnVR.js} +1555 -673
  60. package/dist/{node-host/assets/canvas-DxmcFZCh.js → server/assets/canvas-CJWQ-jjv.js} +98 -6
  61. package/dist/server/assets/{comment-data-NLeHG89b.js → comment-data-Rg42ToTW.js} +1660 -26
  62. package/dist/server/assets/dist-BCSTeNf4.js +4785 -0
  63. package/dist/server/assets/{events-iHpLGr3k.js → events-BH_rAu7O.js} +155 -20
  64. package/dist/server/assets/{files-CRdl489E.js → files-CPJqKeMo.js} +12 -7
  65. package/dist/server/assets/{listener-BAYn9Q-u.js → listener-D61O6PzF.js} +708 -12
  66. package/dist/server/assets/{pages-DXVlJlBC.js → pages-KJY_Ba92.js} +4 -4
  67. package/dist/server/assets/{project-branches-CwTsf6WQ.js → project-branches-qG9ACZvo.js} +2 -2
  68. package/dist/{node-host/assets/project-thread-links-m-OLpsD9.js → server/assets/project-thread-links-CqK0lqCF.js} +77 -4
  69. package/dist/{node-host/assets/tasks-request-B0aeNocI.js → server/assets/project-work-DoIwxWMm.js} +87 -2
  70. package/dist/server/assets/run-BJ8r5jSh.js +572 -0
  71. package/dist/server/assets/{screen-B1zH_1O3.js → screen-CBrHPFug.js} +26 -2
  72. package/dist/server/assets/{server-DxK-UB_Z.js → server-Dkbp5stG.js} +1521 -793
  73. package/dist/server/assets/{services-BRrgXYlT.js → services-BTfig8A8.js} +234 -997
  74. package/dist/server/assets/tasks-Bgu5Lg9Y.js +1427 -0
  75. package/dist/server/assets/wasm-inline-Dl9tqabx.js +4 -0
  76. package/dist/server/capture.js +1 -2
  77. package/dist/server/migration.js +569 -12
  78. package/dist/server/runtime.js +7 -5
  79. package/dist/server/server.js +3 -3
  80. package/dist/types/assets/{config-DIC2cf_S.d.ts → config-CvcYmE2s.d.ts} +188 -50
  81. package/dist/types/assets/{contract-CAT-XFNq.d.ts → contract-B7yuuqSn.d.ts} +44 -2
  82. package/dist/types/assets/{items-CaVkByHk.d.ts → items-BQdaVksf.d.ts} +12 -1
  83. package/dist/types/assets/memory-state-BBW-FAVA.d.ts +236 -0
  84. package/dist/types/assets/picker-Be5Gx4WR.d.ts +9 -0
  85. package/dist/types/assets/{task-design-xJOhRNWh.d.ts → task-design-BDHKFHpp.d.ts} +3 -1
  86. package/dist/types/bridge.d.ts +1 -1
  87. package/dist/types/companion.d.ts +3 -3
  88. package/dist/types/design.d.ts +2 -2
  89. package/dist/types/hosted.d.ts +3 -3
  90. package/dist/types/index.d.ts +2 -2
  91. package/dist/types/node-host.d.ts +2 -2
  92. package/dist/types/plugins.d.ts +445 -0
  93. package/dist/types/screen.d.ts +2 -2
  94. package/dist/types/server.d.ts +2 -228
  95. package/dist/types/vite.d.ts +16 -0
  96. package/package.json +19 -3
  97. package/dist/client/assets/canvas-8GXJIuDK.js +0 -1
  98. package/dist/client/assets/difference-worker-C99ychYw.js +0 -8
  99. package/dist/client/assets/files-DkWt1l9H.js +0 -1
  100. package/dist/client/assets/i18n-hH_Ba5QO.js +0 -1
  101. package/dist/client/assets/index-tpHYVXma.css +0 -2
  102. package/dist/client/assets/pages-BVd6MQmu.js +0 -1
  103. package/dist/client/assets/project-comments-D1IIQwsW.js +0 -1
  104. package/dist/client/assets/project-thread-links-DKwe_SYb.js +0 -1
  105. package/dist/client/assets/project-work-D4DZqBCZ.js +0 -1
  106. package/dist/client/assets/tasks-Cn0VOZ9Z.js +0 -1
  107. package/dist/client/assets/tasks-request-BLyOzokZ.js +0 -1
  108. package/dist/client/assets/workspace-DGErsSg6.js +0 -2
  109. package/dist/hosted/assets/tasks-_yKh2Z6q.js +0 -649
  110. package/dist/hosted/assets/tasks-request-CFPLvLc7.js +0 -113
  111. package/dist/node-host/assets/tasks-BBK_CybR.js +0 -651
  112. package/dist/server/assets/project-work-CSZlCwH-.js +0 -88
  113. package/dist/server/assets/tasks-CGdz-uox.js +0 -652
  114. package/dist/server/assets/tasks-request-D2NBjCTl.js +0 -115
  115. package/dist/types/assets/picker-D1Bw3ndx.d.ts +0 -14
@@ -652,6 +652,30 @@ import { get, post, route } from "remix/routes";
652
652
  * This source code is licensed under the ISC license.
653
653
  * See the LICENSE file in the root directory of this source tree.
654
654
  */
655
+ /**
656
+ * @license @lucide/icons v1.58.0 - ISC
657
+ *
658
+ * This source code is licensed under the ISC license.
659
+ * See the LICENSE file in the root directory of this source tree.
660
+ */
661
+ /**
662
+ * @license @lucide/icons v1.58.0 - ISC
663
+ *
664
+ * This source code is licensed under the ISC license.
665
+ * See the LICENSE file in the root directory of this source tree.
666
+ */
667
+ /**
668
+ * @license @lucide/icons v1.58.0 - ISC
669
+ *
670
+ * This source code is licensed under the ISC license.
671
+ * See the LICENSE file in the root directory of this source tree.
672
+ */
673
+ /**
674
+ * @license @lucide/icons v1.58.0 - ISC
675
+ *
676
+ * This source code is licensed under the ISC license.
677
+ * See the LICENSE file in the root directory of this source tree.
678
+ */
655
679
  //#endregion
656
680
  //#region ../ui/src/lib/icon.tsx
657
681
  var icons = {
@@ -1947,6 +1971,32 @@ var icons = {
1947
1971
  }]
1948
1972
  ]
1949
1973
  },
1974
+ "task-add": {
1975
+ name: "list-plus",
1976
+ size: 24,
1977
+ node: [
1978
+ ["path", {
1979
+ d: "M16 5H3",
1980
+ key: "m91uny"
1981
+ }],
1982
+ ["path", {
1983
+ d: "M11 12H3",
1984
+ key: "51ecnj"
1985
+ }],
1986
+ ["path", {
1987
+ d: "M16 19H3",
1988
+ key: "zzsher"
1989
+ }],
1990
+ ["path", {
1991
+ d: "M18 9v6",
1992
+ key: "1twb98"
1993
+ }],
1994
+ ["path", {
1995
+ d: "M21 12h-6",
1996
+ key: "bt1uis"
1997
+ }]
1998
+ ]
1999
+ },
1950
2000
  files: {
1951
2001
  name: "files",
1952
2002
  size: 24,
@@ -2345,6 +2395,60 @@ var icons = {
2345
2395
  }]
2346
2396
  ]
2347
2397
  },
2398
+ terminal: {
2399
+ name: "square-terminal",
2400
+ size: 24,
2401
+ node: [
2402
+ ["path", {
2403
+ d: "m7 11 2-2-2-2",
2404
+ key: "1lz0vl"
2405
+ }],
2406
+ ["path", {
2407
+ d: "M11 13h4",
2408
+ key: "1p7l4v"
2409
+ }],
2410
+ ["rect", {
2411
+ width: "18",
2412
+ height: "18",
2413
+ x: "3",
2414
+ y: "3",
2415
+ rx: "2",
2416
+ ry: "2",
2417
+ key: "1m3agn"
2418
+ }]
2419
+ ],
2420
+ aliases: ["terminal-square"]
2421
+ },
2422
+ "panel-right": {
2423
+ name: "panel-right",
2424
+ size: 24,
2425
+ node: [["rect", {
2426
+ width: "18",
2427
+ height: "18",
2428
+ x: "3",
2429
+ y: "3",
2430
+ rx: "2",
2431
+ key: "afitv7"
2432
+ }], ["path", {
2433
+ d: "M15 3v18",
2434
+ key: "14nvp0"
2435
+ }]]
2436
+ },
2437
+ "panel-bottom": {
2438
+ name: "panel-bottom",
2439
+ size: 24,
2440
+ node: [["rect", {
2441
+ width: "18",
2442
+ height: "18",
2443
+ x: "3",
2444
+ y: "3",
2445
+ rx: "2",
2446
+ key: "afitv7"
2447
+ }], ["path", {
2448
+ d: "M3 15h18",
2449
+ key: "5xshup"
2450
+ }]]
2451
+ },
2348
2452
  eye: {
2349
2453
  name: "eye",
2350
2454
  size: 24,
@@ -3379,6 +3483,25 @@ var counts = verify(both(record$1, record(enum_([
3379
3483
  "incoming"
3380
3484
  ]), integer$1())), (counts) => counts.children !== void 0 && counts.childrenDone !== void 0 && counts.childrenDone > counts.children ? ["childrenDone"] : void 0);
3381
3485
  /**
3486
+ * Summarizes the run record an adapter keeps on an item (`budRun`) for its board badge.
3487
+ * @param value - The stored record; anything else gives no summary.
3488
+ * @returns The run's state and error, or undefined without a readable run.
3489
+ */
3490
+ function workRunSummary(value) {
3491
+ if (!value || typeof value !== "object" || Array.isArray(value)) return void 0;
3492
+ let { state, error } = value;
3493
+ if (typeof state !== "string" || !/^[a-z_]{1,32}$/.test(state)) return void 0;
3494
+ let message = error && typeof error === "object" && typeof error.message === "string" ? error.message.slice(0, 500) : null;
3495
+ return value.asleep === true ? {
3496
+ state,
3497
+ error: message,
3498
+ asleep: true
3499
+ } : {
3500
+ state,
3501
+ error: message
3502
+ };
3503
+ }
3504
+ /**
3382
3505
  * Creates the schema for an adapter item against its current schema.
3383
3506
  * @param schema - Its adapter's validated field and relation declarations.
3384
3507
  * @returns The schema for a complete or explicitly brief item.
@@ -3398,6 +3521,11 @@ function createWorkItemSchema(schema) {
3398
3521
  counts,
3399
3522
  ready: optional(boolean()),
3400
3523
  closeable: optional(boolean()),
3524
+ run: optional(strict$1({
3525
+ state: identifier$1,
3526
+ error: nullable(text$2(500)),
3527
+ asleep: optional(boolean())
3528
+ })),
3401
3529
  contentLoaded: boolean(),
3402
3530
  extra: JsonSchema
3403
3531
  });
@@ -3652,16 +3780,6 @@ function parseWorkItemRef(value, field = "itemRef") {
3652
3780
  return parseWork(itemRefShape, value, field);
3653
3781
  }
3654
3782
  /**
3655
- * Validates a field value against its declared kind and options.
3656
- * @param value - Untrusted data from a request, adapter or response.
3657
- * @param field - The field declaration whose kind and options apply.
3658
- * @param schema - The adapter’s validated schema.
3659
- * @returns The validated value for the declared field kind.
3660
- */
3661
- function parseWorkValue(value, field, schema) {
3662
- return parseWork(createWorkValueSchema(field, schema), value, `values.${field.id}`);
3663
- }
3664
- /**
3665
3783
  * Validates an adapter item against its current schema.
3666
3784
  * @param value - The untrusted record.
3667
3785
  * @param schema - Its adapter's validated field and relation declarations.
@@ -13729,14 +13847,6 @@ function parseThread(value) {
13729
13847
  return parseWork(ThreadSchema, value, "thread");
13730
13848
  }
13731
13849
  /**
13732
- * Validates which discussion operations an adapter supports.
13733
- * @param value - Untrusted data from a request, adapter or response.
13734
- * @returns The supported discussion operations.
13735
- */
13736
- function parseThreadCapabilities(value) {
13737
- return parseWork(ThreadCapabilitiesSchema, value, "capabilities");
13738
- }
13739
- /**
13740
13850
  * Validates a thread list with its availability and operation capabilities.
13741
13851
  * @param value - Untrusted data from a request, adapter or response.
13742
13852
  * @returns The validated connection and thread list.
@@ -14001,7 +14111,8 @@ function predictThreadStatus(thread, input) {
14001
14111
  /** Places in Bud's task screen, shared by links and the screen's matcher. */
14002
14112
  var taskRoutes = route("/tasks", {
14003
14113
  index: get("/"),
14004
- show: get("/:id")
14114
+ show: get("/:id"),
14115
+ agent: get("/:id/agent")
14005
14116
  });
14006
14117
  /** Places in Bud's browser of the project's live pages: a page's own path follows the screen's. */
14007
14118
  var pageRoutes = route("/pages", {
@@ -14378,12 +14489,35 @@ var routes = route({
14378
14489
  logo: get("/__bud/logo/:theme"),
14379
14490
  health: get("/health"),
14380
14491
  conversation: conversationRoutes.show,
14492
+ agentApi: {
14493
+ tasks: post("/api/agent/tasks"),
14494
+ tasksStream: get("/api/agent/tasks")
14495
+ },
14496
+ factoryApi: {
14497
+ status: get("/api/factory"),
14498
+ addStatuses: post("/api/factory/statuses"),
14499
+ run: get("/api/factory/tasks/:id/run"),
14500
+ start: post("/api/factory/tasks/:id/start"),
14501
+ changes: post("/api/factory/tasks/:id/changes"),
14502
+ answer: post("/api/factory/tasks/:id/answer"),
14503
+ approve: post("/api/factory/tasks/:id/approve"),
14504
+ discard: post("/api/factory/tasks/:id/discard"),
14505
+ retry: post("/api/factory/tasks/:id/retry"),
14506
+ preview: get("/api/factory/tasks/:id/preview"),
14507
+ wake: post("/api/factory/tasks/:id/wake"),
14508
+ touch: post("/api/factory/tasks/:id/touch"),
14509
+ terminal: get("/api/factory/tasks/:id/terminal/:session"),
14510
+ terminalInput: post("/api/factory/tasks/:id/terminal/:session/input"),
14511
+ terminalResize: post("/api/factory/tasks/:id/terminal/:session/resize")
14512
+ },
14381
14513
  tasksApi: {
14382
14514
  index: get("/api/tasks"),
14383
14515
  schema: get("/api/tasks/schema"),
14384
14516
  workspace: get("/api/tasks/workspace"),
14385
14517
  show: get("/api/tasks/items/:id"),
14386
14518
  section: get("/api/tasks/items/:id/sections/:section"),
14519
+ context: get("/api/tasks/items/:id/context"),
14520
+ attachment: get("/api/tasks/attachments/:hash.jpg"),
14387
14521
  create: post("/api/tasks"),
14388
14522
  update: post("/api/tasks/items/:id"),
14389
14523
  mutate: post("/api/tasks/items/:id/actions"),
@@ -14437,6 +14571,7 @@ var routes = route({
14437
14571
  status: post("/api/comments/:id/status"),
14438
14572
  link: post("/api/comments/:id/links"),
14439
14573
  unlink: post("/api/comments/:id/links/remove"),
14574
+ makeTask: post("/api/comments/:id/task"),
14440
14575
  deleteMessage: post("/api/comments/:id/messages/remove"),
14441
14576
  sync: post("/api/comments/sync"),
14442
14577
  viewer: get("/api/viewer")
@@ -14473,4 +14608,4 @@ function parseLiveEvent(value) {
14473
14608
  return parse(LiveEventSchema, value);
14474
14609
  }
14475
14610
  //#endregion
14476
- export { cleanLastNewline as $, list$1 as $t, parseAnchor as A, WorkSchemaSchema as An, parseReviewSourceQuery as At, parseThreadStatus as B, Icon as Bn, FileDocumentSchema as Bt, predictWorkCreate as C, parseWorkValue as Cn, parseReviewDiffQuery as Ct, MAX_THREADS as D, parseMessage as Dn, parseReviewRevision as Dt, parseWorkChange as E, messageDeletionRefusals as En, parseReviewRepository as Et, parseThreadId as F, identifier$1 as Fn, parseFileSearchQuery as Ft, applyReviewSelection as G, parseFileIndex as Gt, createCodeAnchor as H, FileIndexSchema as Ht, parseThreadInput as I, nonempty as In, parseFileSearchResult as It, resolveRegion as J, isWithinDirectory as Jt, reviewConflictIdentity as K, parseFileIndexQuery as Kt, parseThreadLinkInput as L, parseWork as Ln, classifyText as Lt, parseThreadCapabilities as M, parseWorkSchema as Mn, matchFileText as Mt, parseThreadDeleteInput as N, statusCategory as Nn, replacementEdits as Nt, ThreadCapabilitiesSchema as O, parseMessageAuthor as On, parseReviewSnapshot as Ot, parseThreadFilter as P, WorkValidationError as Pn, searchPathMatches as Pt, slideBlankBoundaryBlocksUp as Q, integer as Qt, parseThreadReplyInput as R, record$1 as Rn, filterFileEntries as Rt, predictWorkAction as S, parseWorkUpdate as Sn, parseReviewDiff as St, parseThreadChange as T, messageDeletionRefusal as Tn, parseReviewHistoryQuery as Tt, resolveCodeAnchor as U, parseFileChange as Ut, parseThreadStatusInput as V, iconNames as Vn, FileEntrySchema as Vt, parseFileUpdate as W, parseFileDocument as Wt, diffWordsWithSpace as X, parseFilePath as Xt, parseDiffFromFile as Y, parentPath as Yt, diffChars as Z, pathHierarchy as Zt, taskRoutes as _, parseWorkPatch as _n, parseRecovery as _t, CommentMergeError as a, parseWorkWorkspace as an, parseReviewActionPlan as at, predictThreadReply as b, parseWorkSync as bn, ReviewRepositorySchema as bt, parseCommentInput as c, parseSectionData as cn, parseReviewActionResult as ct, parseCommentThread as d, parseWorkConnection as dn, maxFileSaveBytes as dt, parseContract as en, composeCacheKey as et, revision as f, parseWorkCreate as fn, parseMutationApply as ft, pageRoutes as g, parseWorkMutationResult as gn, parseRecoveries as gt, fileRoutes as h, parseWorkItemRef as hn, parseMutationResult as ht, routes as i, parseElementAnchor as in, parseReviewActionIntent as it, parseThread as j, fieldByRole as jn, compileSearchPattern as jt, ThreadSchema as k, withoutMessages as kn, parseReviewSource as kt, conversationId as l, parseWorkActionInput as ln, parseFileSaveRequest as lt, conversationRoutes as m, parseWorkItem as mn, parseMutationPlan as mt, parseLiveEvent as n, strict as nn, getHunkSideStartBoundary as nt, mergeThreads as o, WorkConnectionSchema as on, parseReviewActionRecoveries as ot, text as p, parseWorkDetail as pn, parseMutationIntent as pt, normalizeDiffResolution as q, isProtectedPath as qt, parseLiveId as r, MAX_CANVAS_Y as rn, parseReviewActionApply as rt, stableJson as s, createWorkItemSchema as sn, parseReviewActionRecovery as st, RESYNC as t, revision$1 as tn, getHunkSideEndBoundary as tt, object$1 as u, parseWorkActivity as un, parseFileSaveResult as ut, predictThreadCreate as v, parseWorkQuery as vn, pathCollisionKey as vt, predictWorkUpdate as w, valueByRole as wn, parseReviewHistory as wt, predictThreadStatus as x, parseWorkSyncResult as xn, parseReviewComparison as xt, predictThreadDelete as y, parseWorkSnapshot as yn, validateMutationSelection as yt, parseThreadSnapshot as z, strict$1 as zn, orderFileEntries as zt };
14611
+ export { composeCacheKey as $, parseContract as $t, parseAnchor as A, fieldByRole as An, compileSearchPattern as At, parseThreadStatusInput as B, iconNames as Bn, FileEntrySchema as Bt, predictWorkCreate as C, workRunSummary as Cn, parseReviewHistory as Ct, MAX_THREADS as D, parseMessageAuthor as Dn, parseReviewSnapshot as Dt, parseWorkChange as E, parseMessage as En, parseReviewRevision as Et, parseThreadInput as F, nonempty as Fn, parseFileSearchResult as Ft, reviewConflictIdentity as G, parseFileIndexQuery as Gt, resolveCodeAnchor as H, parseFileChange as Ht, parseThreadLinkInput as I, parseWork as In, classifyText as It, parseDiffFromFile as J, parentPath as Jt, normalizeDiffResolution as K, isProtectedPath as Kt, parseThreadReplyInput as L, record$1 as Ln, filterFileEntries as Lt, parseThreadDeleteInput as M, statusCategory as Mn, replacementEdits as Mt, parseThreadFilter as N, WorkValidationError as Nn, searchPathMatches as Nt, ThreadCapabilitiesSchema as O, withoutMessages as On, parseReviewSource as Ot, parseThreadId as P, identifier$1 as Pn, parseFileSearchQuery as Pt, cleanLastNewline as Q, list$1 as Qt, parseThreadSnapshot as R, strict$1 as Rn, orderFileEntries as Rt, predictWorkAction as S, valueByRole as Sn, parseReviewDiffQuery as St, parseThreadChange as T, messageDeletionRefusals as Tn, parseReviewRepository as Tt, parseFileUpdate as U, parseFileDocument as Ut, createCodeAnchor as V, FileIndexSchema as Vt, applyReviewSelection as W, parseFileIndex as Wt, diffChars as X, pathHierarchy as Xt, diffWordsWithSpace as Y, parseFilePath as Yt, slideBlankBoundaryBlocksUp as Z, integer as Zt, taskRoutes as _, parseWorkQuery as _n, pathCollisionKey as _t, CommentMergeError as a, WorkConnectionSchema as an, parseReviewActionRecoveries as at, predictThreadReply as b, parseWorkSyncResult as bn, parseReviewComparison as bt, parseCommentInput as c, parseWorkActionInput as cn, parseFileSaveRequest as ct, parseCommentThread as d, parseWorkCreate as dn, parseMutationApply as dt, revision$1 as en, getHunkSideEndBoundary as et, revision as f, parseWorkDetail as fn, parseMutationIntent as ft, pageRoutes as g, parseWorkPatch as gn, parseRecovery as gt, fileRoutes as h, parseWorkMutationResult as hn, parseRecoveries as ht, routes as i, parseWorkWorkspace as in, parseReviewActionPlan as it, parseThread as j, parseWorkSchema as jn, matchFileText as jt, ThreadSchema as k, WorkSchemaSchema as kn, parseReviewSourceQuery as kt, conversationId as l, parseWorkActivity as ln, parseFileSaveResult as lt, conversationRoutes as m, parseWorkItemRef as mn, parseMutationResult as mt, parseLiveEvent as n, MAX_CANVAS_Y as nn, parseReviewActionApply as nt, mergeThreads as o, createWorkItemSchema as on, parseReviewActionRecovery as ot, text as p, parseWorkItem as pn, parseMutationPlan as pt, resolveRegion as q, isWithinDirectory as qt, parseLiveId as r, parseElementAnchor as rn, parseReviewActionIntent as rt, stableJson as s, parseSectionData as sn, parseReviewActionResult as st, RESYNC as t, strict as tn, getHunkSideStartBoundary as tt, object$1 as u, parseWorkConnection as un, maxFileSaveBytes as ut, predictThreadCreate as v, parseWorkSnapshot as vn, validateMutationSelection as vt, predictWorkUpdate as w, messageDeletionRefusal as wn, parseReviewHistoryQuery as wt, predictThreadStatus as x, parseWorkUpdate as xn, parseReviewDiff as xt, predictThreadDelete as y, parseWorkSync as yn, ReviewRepositorySchema as yt, parseThreadStatus as z, Icon as zn, FileDocumentSchema as zt };
@@ -1,12 +1,12 @@
1
1
  import { C as getFiletypeFromFileName, P as __toESM, S as getCustomExtensionsVersion, x as getCustomExtensionsMap } from "./cloneFileDiffMetadata-B-xwytg8.js";
2
- import { Et as parseReviewRepository, Ft as parseFileSearchQuery, Gt as parseFileIndex, H as createCodeAnchor, It as parseFileSearchResult, K as reviewConflictIdentity, Ot as parseReviewSnapshot, St as parseReviewDiff, Ut as parseFileChange, W as parseFileUpdate, Wt as parseFileDocument, Xt as parseFilePath, at as parseReviewActionPlan, ct as parseReviewActionResult, dt as maxFileSaveBytes, gt as parseRecoveries, h as fileRoutes, ht as parseMutationResult, i as routes, kt as parseReviewSource, lt as parseFileSaveRequest, mt as parseMutationPlan, ot as parseReviewActionRecoveries, ut as parseFileSaveResult, wt as parseReviewHistory } from "./events-iHpLGr3k.js";
3
- import { $t as areFileRenderOptionsEqual, A as FileRecoveryDialog, At as fileHref, Ct as readReviewLocation, D as FileEditorPanel, Dt as reviewHref, E as ReviewActionDialog, En as t, Et as reviewContextKey, F as defaultFileDestination, G as ConversationSidebar, Gt as areDiffTargetsEqual, Ht as renderDiffWithHighlighter, I as fileActionIntent, Jt as WorkerPoolWorkerError, Kt as WorkerPoolTaskCanceledError, L as mutationFileView, M as FileReviewPanel, Mt as readFileLocation, N as codeThemes, Nt as reconcileFileView, O as defaultEditorPreferences, On as Text, Ot as closeFileTab, P as FileWorkspace, Pt as rememberFile, Qt as renderFileWithHighlighter, R as remainingMutationIntent, Sn as writePreference, St as parseReviewSession, T as FileConflictPanel, Tt as reviewComparison, U as FileSearchPanel, Ut as areDiffRenderOptionsEqual, Vt as isDiffPlainText, Wt as areFilesEqual, Xt as markWorkerErrorReported, Yt as isHandledWorkerPoolError, Zt as isFilePlainText, an as attachResolvedThemes, bn as toast, bt as defaultReviewView, cn as getResolvedOrResolveLanguage, ct as codeCommentCounts, dn as ResolvedLanguages, en as hasResolvedThemes, f as storeDocument, ft as isCodeConversation, ht as readConversationLocation, in as validateResolvedThemeName, j as FileMutationDialog, jt as parseFileView, k as parseEditorPreferences, kt as defaultFileView, l as projectStore, ln as resolveLanguage, m as storedFiles, mt as locateCodeConversations, nn as getSharedHighlighter, on as themeResolver, p as storedDocument, qt as WorkerPoolTerminatedError, rn as prepareThemeResolution, s as applyFileUpdate, sn as getThemes, tn as areThemesEqual, u as saveFiles, un as areLanguagesAttached, ut as conversationHref, v as projectLive, wt as rememberReviewPosition, xn as readPreference, yt as defaultReviewPosition } from "./comment-data-NLeHG89b.js";
2
+ import { Ct as parseReviewHistory, Dt as parseReviewSnapshot, Ft as parseFileSearchResult, G as reviewConflictIdentity, Ht as parseFileChange, Ot as parseReviewSource, Pt as parseFileSearchQuery, Tt as parseReviewRepository, U as parseFileUpdate, Ut as parseFileDocument, V as createCodeAnchor, Wt as parseFileIndex, Yt as parseFilePath, at as parseReviewActionRecoveries, ct as parseFileSaveRequest, h as fileRoutes, ht as parseRecoveries, i as routes, it as parseReviewActionPlan, lt as parseFileSaveResult, mt as parseMutationResult, pt as parseMutationPlan, st as parseReviewActionResult, ut as maxFileSaveBytes, xt as parseReviewDiff } from "./events-BH_rAu7O.js";
3
+ import { $t as WorkerPoolTaskCanceledError, A as FileRecoveryDialog, At as readReviewLocation, Bt as reconcileFileView, D as FileEditorPanel, Dn as toast, Dt as defaultReviewView, E as ReviewActionDialog, Et as defaultReviewPosition, F as defaultFileDestination, Fn as Text, Ft as closeFileTab, G as FileSearchPanel, I as fileActionIntent, It as defaultFileView, Jt as isDiffPlainText, L as mutationFileView, Lt as fileHref, M as FileReviewPanel, Mt as reviewComparison, N as codeThemes, Nn as t, Nt as reviewContextKey, O as defaultEditorPreferences, On as readPreference, P as FileWorkspace, Pt as reviewHref, Qt as areDiffTargetsEqual, R as remainingMutationIntent, Rt as parseFileView, T as FileConflictPanel, Vt as rememberFile, Xt as areDiffRenderOptionsEqual, Yt as renderDiffWithHighlighter, Zt as areFilesEqual, _n as areLanguagesAttached, an as renderFileWithHighlighter, cn as areThemesEqual, dn as validateResolvedThemeName, en as WorkerPoolTerminatedError, f as storeDocument, fn as attachResolvedThemes, ft as codeCommentCounts, gn as resolveLanguage, gt as isCodeConversation, hn as getResolvedOrResolveLanguage, in as isFilePlainText, j as FileMutationDialog, jt as rememberReviewPosition, k as parseEditorPreferences, kn as writePreference, kt as parseReviewSession, l as projectStore, ln as getSharedHighlighter, m as storedFiles, mn as getThemes, mt as conversationHref, nn as isHandledWorkerPoolError, on as areFileRenderOptionsEqual, p as storedDocument, pn as themeResolver, q as ConversationSidebar, rn as markWorkerErrorReported, s as applyFileUpdate, sn as hasResolvedThemes, tn as WorkerPoolWorkerError, u as saveFiles, un as prepareThemeResolution, v as projectLive, vn as ResolvedLanguages, vt as locateCodeConversations, yt as readConversationLocation, zt as readFileLocation } from "./comment-data-Rg42ToTW.js";
4
4
  import { l as DEFAULT_THEMES } from "./constants-C7Y3SJGj.js";
5
5
  import { t as require_lru } from "./lru-C4Rh6JYD.js";
6
- import { n as createProjectComments, t as defineScreen } from "./screen-B1zH_1O3.js";
7
- import { t as ProjectThreadLinks } from "./project-thread-links-lLS_rq7c.js";
6
+ import { n as createProjectComments, t as defineScreen } from "./screen-CBrHPFug.js";
7
+ import { n as ProjectThreadLinks, t as ProjectMakeTask } from "./project-thread-links-CqK0lqCF.js";
8
8
  import { ref } from "remix/component";
9
- import { jsx, jsxs } from "remix/component/jsx-runtime";
9
+ import { Fragment, jsx, jsxs } from "remix/component/jsx-runtime";
10
10
  //#region ../../node_modules/.pnpm/@pierre+diffs@1.5.2_@shikijs+themes@4.5.0_react-dom@19.3.1_react@19.3.1__react@19.3.1/node_modules/@pierre/diffs/dist/highlighter/languages/getResolvedLanguages.js
11
11
  function getResolvedLanguages(languages) {
12
12
  const resolvedLanguages = [];
@@ -3245,7 +3245,12 @@ function ProjectFileReview(handle) {
3245
3245
  await comments.loadThread(thread.id, true);
3246
3246
  }
3247
3247
  }),
3248
- renderThreadActions: (thread) => /* @__PURE__ */ jsx(ProjectThreadLinks, {
3248
+ renderThreadActions: (thread) => /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(ProjectMakeTask, {
3249
+ thread,
3250
+ canMake: comments.snapshot.capabilities.link && project.storage.work?.state === "ready",
3251
+ busy: comments.busy,
3252
+ onMake: comments.makeTask
3253
+ }), /* @__PURE__ */ jsx(ProjectThreadLinks, {
3249
3254
  part: "action",
3250
3255
  project,
3251
3256
  thread,
@@ -3255,7 +3260,7 @@ function ProjectFileReview(handle) {
3255
3260
  await comments.load();
3256
3261
  await comments.loadThread(thread.id, true);
3257
3262
  }
3258
- }),
3263
+ })] }),
3259
3264
  capabilities: comments.snapshot.capabilities,
3260
3265
  selected: selectedThread,
3261
3266
  currentPath: handle.props.path,