@paperclipai/server 0.3.0 → 0.3.1-canary.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.
- package/dist/adapters/registry.d.ts.map +1 -1
- package/dist/adapters/registry.js +12 -0
- package/dist/adapters/registry.js.map +1 -1
- package/dist/app.d.ts +1 -0
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +9 -2
- package/dist/app.js.map +1 -1
- package/dist/attachment-types.d.ts +33 -0
- package/dist/attachment-types.d.ts.map +1 -0
- package/dist/attachment-types.js +61 -0
- package/dist/attachment-types.js.map +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -2
- package/dist/index.js.map +1 -1
- package/dist/log-redaction.d.ts +10 -0
- package/dist/log-redaction.d.ts.map +1 -0
- package/dist/log-redaction.js +110 -0
- package/dist/log-redaction.js.map +1 -0
- package/dist/middleware/logger.d.ts.map +1 -1
- package/dist/middleware/logger.js +1 -0
- package/dist/middleware/logger.js.map +1 -1
- package/dist/routes/activity.d.ts.map +1 -1
- package/dist/routes/activity.js +12 -21
- package/dist/routes/activity.js.map +1 -1
- package/dist/routes/agents.d.ts.map +1 -1
- package/dist/routes/agents.js +102 -3
- package/dist/routes/agents.js.map +1 -1
- package/dist/routes/approvals.d.ts.map +1 -1
- package/dist/routes/approvals.js +87 -83
- package/dist/routes/approvals.js.map +1 -1
- package/dist/routes/assets.d.ts.map +1 -1
- package/dist/routes/assets.js +5 -12
- package/dist/routes/assets.js.map +1 -1
- package/dist/routes/issues.d.ts.map +1 -1
- package/dist/routes/issues.js +16 -11
- package/dist/routes/issues.js.map +1 -1
- package/dist/routes/sidebar-badges.d.ts.map +1 -1
- package/dist/routes/sidebar-badges.js +1 -4
- package/dist/routes/sidebar-badges.js.map +1 -1
- package/dist/services/activity-log.d.ts.map +1 -1
- package/dist/services/activity-log.js +4 -2
- package/dist/services/activity-log.js.map +1 -1
- package/dist/services/approvals.d.ts +30 -24
- package/dist/services/approvals.d.ts.map +1 -1
- package/dist/services/approvals.js +51 -42
- package/dist/services/approvals.js.map +1 -1
- package/dist/services/company-portability.d.ts.map +1 -1
- package/dist/services/company-portability.js +5 -1
- package/dist/services/company-portability.js.map +1 -1
- package/dist/services/dashboard.d.ts +0 -1
- package/dist/services/dashboard.d.ts.map +1 -1
- package/dist/services/dashboard.js +0 -7
- package/dist/services/dashboard.js.map +1 -1
- package/dist/services/execution-workspace-policy.d.ts +19 -0
- package/dist/services/execution-workspace-policy.d.ts.map +1 -0
- package/dist/services/execution-workspace-policy.js +117 -0
- package/dist/services/execution-workspace-policy.js.map +1 -0
- package/dist/services/goals.d.ts +26 -0
- package/dist/services/goals.d.ts.map +1 -1
- package/dist/services/goals.js +26 -1
- package/dist/services/goals.js.map +1 -1
- package/dist/services/heartbeat-run-summary.d.ts +2 -0
- package/dist/services/heartbeat-run-summary.d.ts.map +1 -0
- package/dist/services/heartbeat-run-summary.js +30 -0
- package/dist/services/heartbeat-run-summary.js.map +1 -0
- package/dist/services/heartbeat.d.ts +30 -996
- package/dist/services/heartbeat.d.ts.map +1 -1
- package/dist/services/heartbeat.js +236 -47
- package/dist/services/heartbeat.js.map +1 -1
- package/dist/services/index.d.ts +1 -0
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js +1 -0
- package/dist/services/index.js.map +1 -1
- package/dist/services/issue-goal-fallback.d.ts +15 -0
- package/dist/services/issue-goal-fallback.d.ts.map +1 -0
- package/dist/services/issue-goal-fallback.js +15 -0
- package/dist/services/issue-goal-fallback.js.map +1 -0
- package/dist/services/issues.d.ts +5 -278
- package/dist/services/issues.d.ts.map +1 -1
- package/dist/services/issues.js +52 -14
- package/dist/services/issues.js.map +1 -1
- package/dist/services/projects.d.ts +4 -2
- package/dist/services/projects.d.ts.map +1 -1
- package/dist/services/projects.js +49 -6
- package/dist/services/projects.js.map +1 -1
- package/dist/services/workspace-runtime.d.ts +126 -0
- package/dist/services/workspace-runtime.d.ts.map +1 -0
- package/dist/services/workspace-runtime.js +852 -0
- package/dist/services/workspace-runtime.js.map +1 -0
- package/dist/ui-branding.d.ts +4 -0
- package/dist/ui-branding.d.ts.map +1 -0
- package/dist/ui-branding.js +37 -0
- package/dist/ui-branding.js.map +1 -0
- package/package.json +11 -10
- package/skills/paperclip/SKILL.md +23 -19
- package/ui-dist/assets/{_basePickBy-BYrQlacK.js → _basePickBy-B0xbZITw.js} +1 -1
- package/ui-dist/assets/{_baseUniq-DOSawgF3.js → _baseUniq-Cfd5u3qc.js} +1 -1
- package/ui-dist/assets/{arc-CG7T0hfG.js → arc-7Xbu8tBF.js} +1 -1
- package/ui-dist/assets/{architectureDiagram-VXUJARFQ-Bcn7ytDO.js → architectureDiagram-VXUJARFQ-C8F7ZRYc.js} +1 -1
- package/ui-dist/assets/{blockDiagram-VD42YOAC-BQGrx2lv.js → blockDiagram-VD42YOAC-Dp08a65A.js} +1 -1
- package/ui-dist/assets/{c4Diagram-YG6GDRKO-owH9Kb3t.js → c4Diagram-YG6GDRKO-BJfslTgZ.js} +1 -1
- package/ui-dist/assets/channel-BViQDbSq.js +1 -0
- package/ui-dist/assets/{chunk-4BX2VUAB-DY1UIe4g.js → chunk-4BX2VUAB-BhaYWH7e.js} +1 -1
- package/ui-dist/assets/{chunk-55IACEB6-CnWFPfPQ.js → chunk-55IACEB6-BOzJUsYW.js} +1 -1
- package/ui-dist/assets/{chunk-B4BG7PRW-DhlLW80l.js → chunk-B4BG7PRW-CbVcziyE.js} +1 -1
- package/ui-dist/assets/{chunk-DI55MBZ5-DPt7dj6c.js → chunk-DI55MBZ5-DghPtP3y.js} +1 -1
- package/ui-dist/assets/{chunk-FMBD7UC4-GQwzgYa4.js → chunk-FMBD7UC4-CB095Kfn.js} +1 -1
- package/ui-dist/assets/{chunk-QN33PNHL-BFHLVk5s.js → chunk-QN33PNHL-DfpzfDqJ.js} +1 -1
- package/ui-dist/assets/{chunk-QZHKN3VN-CLe3KEAf.js → chunk-QZHKN3VN-Df3d5z1y.js} +1 -1
- package/ui-dist/assets/{chunk-TZMSLE5B-BhccYB4e.js → chunk-TZMSLE5B-B6tX6bZI.js} +1 -1
- package/ui-dist/assets/classDiagram-2ON5EDUG-CjMCmxMT.js +1 -0
- package/ui-dist/assets/classDiagram-v2-WZHVMYZB-CjMCmxMT.js +1 -0
- package/ui-dist/assets/clone-Dbn9wtE1.js +1 -0
- package/ui-dist/assets/{cose-bilkent-S5V4N54A-DqECYL1w.js → cose-bilkent-S5V4N54A-38wg_s9V.js} +1 -1
- package/ui-dist/assets/{dagre-6UL2VRFP-DXeQqIJ2.js → dagre-6UL2VRFP-DPVj3XLS.js} +1 -1
- package/ui-dist/assets/{diagram-PSM6KHXK-DNu3Ctuy.js → diagram-PSM6KHXK-BJh89zUA.js} +1 -1
- package/ui-dist/assets/{diagram-QEK2KX5R-1wUR_z9S.js → diagram-QEK2KX5R-Bw0m_j10.js} +1 -1
- package/ui-dist/assets/{diagram-S2PKOQOG-D3IK8rZb.js → diagram-S2PKOQOG-D7_M2F3u.js} +1 -1
- package/ui-dist/assets/{erDiagram-Q2GNP2WA-DU3L0RbU.js → erDiagram-Q2GNP2WA-CLsjqTWP.js} +1 -1
- package/ui-dist/assets/{flowDiagram-NV44I4VS-CN46A5Ez.js → flowDiagram-NV44I4VS-BZZ7ezVB.js} +1 -1
- package/ui-dist/assets/{ganttDiagram-JELNMOA3-DGbOi1Wz.js → ganttDiagram-JELNMOA3-KzsFuwBt.js} +1 -1
- package/ui-dist/assets/{gitGraphDiagram-V2S2FVAM-D98N7SOj.js → gitGraphDiagram-V2S2FVAM-DSHtY7Vu.js} +1 -1
- package/ui-dist/assets/{graph-Cf7LCNJy.js → graph-luIG1UAS.js} +1 -1
- package/ui-dist/assets/{index-CP1BgxcV.js → index-00kuG4sI.js} +1 -1
- package/ui-dist/assets/{index-DiXE2gv-.js → index-1gX09-Fl.js} +1 -1
- package/ui-dist/assets/{index-CqG5WZHq.js → index-B1ZMzzs0.js} +1 -1
- package/ui-dist/assets/index-BHP9dico.js +1006 -0
- package/ui-dist/assets/{index-cx0y6-1h.js → index-B_3g3Rie.js} +1 -1
- package/ui-dist/assets/{index-CI56poQD.js → index-BeeKMqNU.js} +1 -1
- package/ui-dist/assets/{index-BfG2u5u0.js → index-BfB4lKJN.js} +1 -1
- package/ui-dist/assets/index-BfNaDZnn.css +1 -0
- package/ui-dist/assets/{index-DZdNKByU.js → index-Bv4xCjxl.js} +1 -1
- package/ui-dist/assets/{index--K1VLoF-.js → index-C2SZYIDA.js} +1 -1
- package/ui-dist/assets/{index-DB5nKqAA.js → index-C8XyGAr9.js} +1 -1
- package/ui-dist/assets/{index-C2-SE7P0.js → index-CaR9XM4h.js} +1 -1
- package/ui-dist/assets/{index-DujThSls.js → index-CbGtsjW7.js} +1 -1
- package/ui-dist/assets/{index-D0EsfNYg.js → index-CeDCs_2i.js} +1 -1
- package/ui-dist/assets/{index-OkxoZoQy.js → index-DBy0vJy3.js} +1 -1
- package/ui-dist/assets/{index-BoAYxRAO.js → index-DJf8diAA.js} +1 -1
- package/ui-dist/assets/{index-N1SX_i0z.js → index-DcfLFstG.js} +1 -1
- package/ui-dist/assets/{index-DXgtGequ.js → index-DnIPDZLp.js} +1 -1
- package/ui-dist/assets/{index-Cick_QSL.js → index-DoTq-BeR.js} +1 -1
- package/ui-dist/assets/{index-0BSerEC2.js → index-Ds7vLTSK.js} +1 -1
- package/ui-dist/assets/{index-Beb2ZlSv.js → index-RUBFVv6t.js} +1 -1
- package/ui-dist/assets/{index-TFF7cXd7.js → index-itc7BfMy.js} +1 -1
- package/ui-dist/assets/{index-BD6My-aI.js → index-nFjLambq.js} +1 -1
- package/ui-dist/assets/{index-B-xuGUs-.js → index-uR3zjYaD.js} +1 -1
- package/ui-dist/assets/{infoDiagram-HS3SLOUP-D_b1CK0Y.js → infoDiagram-HS3SLOUP-CDEfWpme.js} +1 -1
- package/ui-dist/assets/{journeyDiagram-XKPGCS4Q-4oCVXUve.js → journeyDiagram-XKPGCS4Q-i7nsbg_Y.js} +1 -1
- package/ui-dist/assets/{kanban-definition-3W4ZIXB7-0VcjP_qf.js → kanban-definition-3W4ZIXB7-DDlx1qVE.js} +1 -1
- package/ui-dist/assets/{layout-BQcYXlNv.js → layout-C7AtmJzX.js} +1 -1
- package/ui-dist/assets/{linear-nz0Lfiys.js → linear-C5jHT-WP.js} +1 -1
- package/ui-dist/assets/{mermaid.core-BaxvgwjG.js → mermaid.core-C8YQ4fcY.js} +4 -4
- package/ui-dist/assets/{mindmap-definition-VGOIOE7T-BnW6nEhl.js → mindmap-definition-VGOIOE7T-B9m9PuUg.js} +1 -1
- package/ui-dist/assets/{pieDiagram-ADFJNKIX-O1tvU_18.js → pieDiagram-ADFJNKIX-SvKywCSE.js} +1 -1
- package/ui-dist/assets/{quadrantDiagram-AYHSOK5B-BfM2aQbf.js → quadrantDiagram-AYHSOK5B-QfBPm7Y1.js} +1 -1
- package/ui-dist/assets/{requirementDiagram-UZGBJVZJ-rXVZupag.js → requirementDiagram-UZGBJVZJ-DnfQQuwi.js} +1 -1
- package/ui-dist/assets/{sankeyDiagram-TZEHDZUN-BNgaPVo6.js → sankeyDiagram-TZEHDZUN-DvLkjzIW.js} +1 -1
- package/ui-dist/assets/{sequenceDiagram-WL72ISMW--KnZ0qRV.js → sequenceDiagram-WL72ISMW-5Lq2rWBc.js} +1 -1
- package/ui-dist/assets/{stateDiagram-FKZM4ZOC-DlGdC88b.js → stateDiagram-FKZM4ZOC-DcYPHDyi.js} +1 -1
- package/ui-dist/assets/stateDiagram-v2-4FDKWEC3-nv50YYrl.js +1 -0
- package/ui-dist/assets/{timeline-definition-IT6M3QCI-CCwriy0-.js → timeline-definition-IT6M3QCI-lrN4JmWa.js} +1 -1
- package/ui-dist/assets/{treemap-GDKQZRPO-C-79yojr.js → treemap-GDKQZRPO-DFJKIBTQ.js} +1 -1
- package/ui-dist/assets/{xychartDiagram-PRI3JC2R-Dj0jcMBZ.js → xychartDiagram-PRI3JC2R-CT47vtdm.js} +1 -1
- package/ui-dist/index.html +4 -2
- package/ui-dist/worktree-favicon-16x16.png +0 -0
- package/ui-dist/worktree-favicon-32x32.png +0 -0
- package/ui-dist/worktree-favicon.ico +0 -0
- package/ui-dist/worktree-favicon.svg +9 -0
- package/skills/release/SKILL.md +0 -261
- package/skills/release-changelog/SKILL.md +0 -178
- package/ui-dist/assets/channel-DdXqC9Qy.js +0 -1
- package/ui-dist/assets/classDiagram-2ON5EDUG-ZV36NLFv.js +0 -1
- package/ui-dist/assets/classDiagram-v2-WZHVMYZB-ZV36NLFv.js +0 -1
- package/ui-dist/assets/clone-CvxIjPQa.js +0 -1
- package/ui-dist/assets/index-BYw6Loly.js +0 -900
- package/ui-dist/assets/index-nfAtmpEH.css +0 -1
- package/ui-dist/assets/stateDiagram-v2-4FDKWEC3-CuVnpOfP.js +0 -1
|
@@ -7,6 +7,7 @@ export interface IssueFilters {
|
|
|
7
7
|
touchedByUserId?: string;
|
|
8
8
|
unreadForUserId?: string;
|
|
9
9
|
projectId?: string;
|
|
10
|
+
parentId?: string;
|
|
10
11
|
labelId?: string;
|
|
11
12
|
q?: string;
|
|
12
13
|
}
|
|
@@ -88,6 +89,7 @@ export declare function issueService(db: Db): {
|
|
|
88
89
|
requestDepth: number;
|
|
89
90
|
billingCode: string | null;
|
|
90
91
|
assigneeAdapterOverrides: Record<string, unknown> | null;
|
|
92
|
+
executionWorkspaceSettings: Record<string, unknown> | null;
|
|
91
93
|
startedAt: Date | null;
|
|
92
94
|
completedAt: Date | null;
|
|
93
95
|
cancelledAt: Date | null;
|
|
@@ -348,144 +350,7 @@ export declare function issueService(db: Db): {
|
|
|
348
350
|
companyId: string;
|
|
349
351
|
color: string;
|
|
350
352
|
}>;
|
|
351
|
-
listComments: (issueId: string) =>
|
|
352
|
-
id: import("drizzle-orm/pg-core").PgColumn<{
|
|
353
|
-
name: "id";
|
|
354
|
-
tableName: "issue_comments";
|
|
355
|
-
dataType: "string";
|
|
356
|
-
columnType: "PgUUID";
|
|
357
|
-
data: string;
|
|
358
|
-
driverParam: string;
|
|
359
|
-
notNull: true;
|
|
360
|
-
hasDefault: true;
|
|
361
|
-
isPrimaryKey: true;
|
|
362
|
-
isAutoincrement: false;
|
|
363
|
-
hasRuntimeDefault: false;
|
|
364
|
-
enumValues: undefined;
|
|
365
|
-
baseColumn: never;
|
|
366
|
-
identity: undefined;
|
|
367
|
-
generated: undefined;
|
|
368
|
-
}, {}, {}>;
|
|
369
|
-
companyId: import("drizzle-orm/pg-core").PgColumn<{
|
|
370
|
-
name: "company_id";
|
|
371
|
-
tableName: "issue_comments";
|
|
372
|
-
dataType: "string";
|
|
373
|
-
columnType: "PgUUID";
|
|
374
|
-
data: string;
|
|
375
|
-
driverParam: string;
|
|
376
|
-
notNull: true;
|
|
377
|
-
hasDefault: false;
|
|
378
|
-
isPrimaryKey: false;
|
|
379
|
-
isAutoincrement: false;
|
|
380
|
-
hasRuntimeDefault: false;
|
|
381
|
-
enumValues: undefined;
|
|
382
|
-
baseColumn: never;
|
|
383
|
-
identity: undefined;
|
|
384
|
-
generated: undefined;
|
|
385
|
-
}, {}, {}>;
|
|
386
|
-
issueId: import("drizzle-orm/pg-core").PgColumn<{
|
|
387
|
-
name: "issue_id";
|
|
388
|
-
tableName: "issue_comments";
|
|
389
|
-
dataType: "string";
|
|
390
|
-
columnType: "PgUUID";
|
|
391
|
-
data: string;
|
|
392
|
-
driverParam: string;
|
|
393
|
-
notNull: true;
|
|
394
|
-
hasDefault: false;
|
|
395
|
-
isPrimaryKey: false;
|
|
396
|
-
isAutoincrement: false;
|
|
397
|
-
hasRuntimeDefault: false;
|
|
398
|
-
enumValues: undefined;
|
|
399
|
-
baseColumn: never;
|
|
400
|
-
identity: undefined;
|
|
401
|
-
generated: undefined;
|
|
402
|
-
}, {}, {}>;
|
|
403
|
-
authorAgentId: import("drizzle-orm/pg-core").PgColumn<{
|
|
404
|
-
name: "author_agent_id";
|
|
405
|
-
tableName: "issue_comments";
|
|
406
|
-
dataType: "string";
|
|
407
|
-
columnType: "PgUUID";
|
|
408
|
-
data: string;
|
|
409
|
-
driverParam: string;
|
|
410
|
-
notNull: false;
|
|
411
|
-
hasDefault: false;
|
|
412
|
-
isPrimaryKey: false;
|
|
413
|
-
isAutoincrement: false;
|
|
414
|
-
hasRuntimeDefault: false;
|
|
415
|
-
enumValues: undefined;
|
|
416
|
-
baseColumn: never;
|
|
417
|
-
identity: undefined;
|
|
418
|
-
generated: undefined;
|
|
419
|
-
}, {}, {}>;
|
|
420
|
-
authorUserId: import("drizzle-orm/pg-core").PgColumn<{
|
|
421
|
-
name: "author_user_id";
|
|
422
|
-
tableName: "issue_comments";
|
|
423
|
-
dataType: "string";
|
|
424
|
-
columnType: "PgText";
|
|
425
|
-
data: string;
|
|
426
|
-
driverParam: string;
|
|
427
|
-
notNull: false;
|
|
428
|
-
hasDefault: false;
|
|
429
|
-
isPrimaryKey: false;
|
|
430
|
-
isAutoincrement: false;
|
|
431
|
-
hasRuntimeDefault: false;
|
|
432
|
-
enumValues: [string, ...string[]];
|
|
433
|
-
baseColumn: never;
|
|
434
|
-
identity: undefined;
|
|
435
|
-
generated: undefined;
|
|
436
|
-
}, {}, {}>;
|
|
437
|
-
body: import("drizzle-orm/pg-core").PgColumn<{
|
|
438
|
-
name: "body";
|
|
439
|
-
tableName: "issue_comments";
|
|
440
|
-
dataType: "string";
|
|
441
|
-
columnType: "PgText";
|
|
442
|
-
data: string;
|
|
443
|
-
driverParam: string;
|
|
444
|
-
notNull: true;
|
|
445
|
-
hasDefault: false;
|
|
446
|
-
isPrimaryKey: false;
|
|
447
|
-
isAutoincrement: false;
|
|
448
|
-
hasRuntimeDefault: false;
|
|
449
|
-
enumValues: [string, ...string[]];
|
|
450
|
-
baseColumn: never;
|
|
451
|
-
identity: undefined;
|
|
452
|
-
generated: undefined;
|
|
453
|
-
}, {}, {}>;
|
|
454
|
-
createdAt: import("drizzle-orm/pg-core").PgColumn<{
|
|
455
|
-
name: "created_at";
|
|
456
|
-
tableName: "issue_comments";
|
|
457
|
-
dataType: "date";
|
|
458
|
-
columnType: "PgTimestamp";
|
|
459
|
-
data: Date;
|
|
460
|
-
driverParam: string;
|
|
461
|
-
notNull: true;
|
|
462
|
-
hasDefault: true;
|
|
463
|
-
isPrimaryKey: false;
|
|
464
|
-
isAutoincrement: false;
|
|
465
|
-
hasRuntimeDefault: false;
|
|
466
|
-
enumValues: undefined;
|
|
467
|
-
baseColumn: never;
|
|
468
|
-
identity: undefined;
|
|
469
|
-
generated: undefined;
|
|
470
|
-
}, {}, {}>;
|
|
471
|
-
updatedAt: import("drizzle-orm/pg-core").PgColumn<{
|
|
472
|
-
name: "updated_at";
|
|
473
|
-
tableName: "issue_comments";
|
|
474
|
-
dataType: "date";
|
|
475
|
-
columnType: "PgTimestamp";
|
|
476
|
-
data: Date;
|
|
477
|
-
driverParam: string;
|
|
478
|
-
notNull: true;
|
|
479
|
-
hasDefault: true;
|
|
480
|
-
isPrimaryKey: false;
|
|
481
|
-
isAutoincrement: false;
|
|
482
|
-
hasRuntimeDefault: false;
|
|
483
|
-
enumValues: undefined;
|
|
484
|
-
baseColumn: never;
|
|
485
|
-
identity: undefined;
|
|
486
|
-
generated: undefined;
|
|
487
|
-
}, {}, {}>;
|
|
488
|
-
}, "single", Record<"issue_comments", "not-null">, false, "where" | "orderBy", {
|
|
353
|
+
listComments: (issueId: string) => Promise<{
|
|
489
354
|
id: string;
|
|
490
355
|
createdAt: Date;
|
|
491
356
|
updatedAt: Date;
|
|
@@ -494,144 +359,7 @@ export declare function issueService(db: Db): {
|
|
|
494
359
|
authorAgentId: string | null;
|
|
495
360
|
authorUserId: string | null;
|
|
496
361
|
body: string;
|
|
497
|
-
}[]
|
|
498
|
-
id: import("drizzle-orm/pg-core").PgColumn<{
|
|
499
|
-
name: "id";
|
|
500
|
-
tableName: "issue_comments";
|
|
501
|
-
dataType: "string";
|
|
502
|
-
columnType: "PgUUID";
|
|
503
|
-
data: string;
|
|
504
|
-
driverParam: string;
|
|
505
|
-
notNull: true;
|
|
506
|
-
hasDefault: true;
|
|
507
|
-
isPrimaryKey: true;
|
|
508
|
-
isAutoincrement: false;
|
|
509
|
-
hasRuntimeDefault: false;
|
|
510
|
-
enumValues: undefined;
|
|
511
|
-
baseColumn: never;
|
|
512
|
-
identity: undefined;
|
|
513
|
-
generated: undefined;
|
|
514
|
-
}, {}, {}>;
|
|
515
|
-
companyId: import("drizzle-orm/pg-core").PgColumn<{
|
|
516
|
-
name: "company_id";
|
|
517
|
-
tableName: "issue_comments";
|
|
518
|
-
dataType: "string";
|
|
519
|
-
columnType: "PgUUID";
|
|
520
|
-
data: string;
|
|
521
|
-
driverParam: string;
|
|
522
|
-
notNull: true;
|
|
523
|
-
hasDefault: false;
|
|
524
|
-
isPrimaryKey: false;
|
|
525
|
-
isAutoincrement: false;
|
|
526
|
-
hasRuntimeDefault: false;
|
|
527
|
-
enumValues: undefined;
|
|
528
|
-
baseColumn: never;
|
|
529
|
-
identity: undefined;
|
|
530
|
-
generated: undefined;
|
|
531
|
-
}, {}, {}>;
|
|
532
|
-
issueId: import("drizzle-orm/pg-core").PgColumn<{
|
|
533
|
-
name: "issue_id";
|
|
534
|
-
tableName: "issue_comments";
|
|
535
|
-
dataType: "string";
|
|
536
|
-
columnType: "PgUUID";
|
|
537
|
-
data: string;
|
|
538
|
-
driverParam: string;
|
|
539
|
-
notNull: true;
|
|
540
|
-
hasDefault: false;
|
|
541
|
-
isPrimaryKey: false;
|
|
542
|
-
isAutoincrement: false;
|
|
543
|
-
hasRuntimeDefault: false;
|
|
544
|
-
enumValues: undefined;
|
|
545
|
-
baseColumn: never;
|
|
546
|
-
identity: undefined;
|
|
547
|
-
generated: undefined;
|
|
548
|
-
}, {}, {}>;
|
|
549
|
-
authorAgentId: import("drizzle-orm/pg-core").PgColumn<{
|
|
550
|
-
name: "author_agent_id";
|
|
551
|
-
tableName: "issue_comments";
|
|
552
|
-
dataType: "string";
|
|
553
|
-
columnType: "PgUUID";
|
|
554
|
-
data: string;
|
|
555
|
-
driverParam: string;
|
|
556
|
-
notNull: false;
|
|
557
|
-
hasDefault: false;
|
|
558
|
-
isPrimaryKey: false;
|
|
559
|
-
isAutoincrement: false;
|
|
560
|
-
hasRuntimeDefault: false;
|
|
561
|
-
enumValues: undefined;
|
|
562
|
-
baseColumn: never;
|
|
563
|
-
identity: undefined;
|
|
564
|
-
generated: undefined;
|
|
565
|
-
}, {}, {}>;
|
|
566
|
-
authorUserId: import("drizzle-orm/pg-core").PgColumn<{
|
|
567
|
-
name: "author_user_id";
|
|
568
|
-
tableName: "issue_comments";
|
|
569
|
-
dataType: "string";
|
|
570
|
-
columnType: "PgText";
|
|
571
|
-
data: string;
|
|
572
|
-
driverParam: string;
|
|
573
|
-
notNull: false;
|
|
574
|
-
hasDefault: false;
|
|
575
|
-
isPrimaryKey: false;
|
|
576
|
-
isAutoincrement: false;
|
|
577
|
-
hasRuntimeDefault: false;
|
|
578
|
-
enumValues: [string, ...string[]];
|
|
579
|
-
baseColumn: never;
|
|
580
|
-
identity: undefined;
|
|
581
|
-
generated: undefined;
|
|
582
|
-
}, {}, {}>;
|
|
583
|
-
body: import("drizzle-orm/pg-core").PgColumn<{
|
|
584
|
-
name: "body";
|
|
585
|
-
tableName: "issue_comments";
|
|
586
|
-
dataType: "string";
|
|
587
|
-
columnType: "PgText";
|
|
588
|
-
data: string;
|
|
589
|
-
driverParam: string;
|
|
590
|
-
notNull: true;
|
|
591
|
-
hasDefault: false;
|
|
592
|
-
isPrimaryKey: false;
|
|
593
|
-
isAutoincrement: false;
|
|
594
|
-
hasRuntimeDefault: false;
|
|
595
|
-
enumValues: [string, ...string[]];
|
|
596
|
-
baseColumn: never;
|
|
597
|
-
identity: undefined;
|
|
598
|
-
generated: undefined;
|
|
599
|
-
}, {}, {}>;
|
|
600
|
-
createdAt: import("drizzle-orm/pg-core").PgColumn<{
|
|
601
|
-
name: "created_at";
|
|
602
|
-
tableName: "issue_comments";
|
|
603
|
-
dataType: "date";
|
|
604
|
-
columnType: "PgTimestamp";
|
|
605
|
-
data: Date;
|
|
606
|
-
driverParam: string;
|
|
607
|
-
notNull: true;
|
|
608
|
-
hasDefault: true;
|
|
609
|
-
isPrimaryKey: false;
|
|
610
|
-
isAutoincrement: false;
|
|
611
|
-
hasRuntimeDefault: false;
|
|
612
|
-
enumValues: undefined;
|
|
613
|
-
baseColumn: never;
|
|
614
|
-
identity: undefined;
|
|
615
|
-
generated: undefined;
|
|
616
|
-
}, {}, {}>;
|
|
617
|
-
updatedAt: import("drizzle-orm/pg-core").PgColumn<{
|
|
618
|
-
name: "updated_at";
|
|
619
|
-
tableName: "issue_comments";
|
|
620
|
-
dataType: "date";
|
|
621
|
-
columnType: "PgTimestamp";
|
|
622
|
-
data: Date;
|
|
623
|
-
driverParam: string;
|
|
624
|
-
notNull: true;
|
|
625
|
-
hasDefault: true;
|
|
626
|
-
isPrimaryKey: false;
|
|
627
|
-
isAutoincrement: false;
|
|
628
|
-
hasRuntimeDefault: false;
|
|
629
|
-
enumValues: undefined;
|
|
630
|
-
baseColumn: never;
|
|
631
|
-
identity: undefined;
|
|
632
|
-
generated: undefined;
|
|
633
|
-
}, {}, {}>;
|
|
634
|
-
}>, "where" | "orderBy">;
|
|
362
|
+
}[]>;
|
|
635
363
|
getComment: (commentId: string) => Promise<{
|
|
636
364
|
id: string;
|
|
637
365
|
createdAt: Date;
|
|
@@ -641,7 +369,7 @@ export declare function issueService(db: Db): {
|
|
|
641
369
|
authorAgentId: string | null;
|
|
642
370
|
authorUserId: string | null;
|
|
643
371
|
body: string;
|
|
644
|
-
}>;
|
|
372
|
+
} | null>;
|
|
645
373
|
addComment: (issueId: string, body: string, actor: {
|
|
646
374
|
agentId?: string;
|
|
647
375
|
userId?: string;
|
|
@@ -787,7 +515,6 @@ export declare function issueService(db: Db): {
|
|
|
787
515
|
projectId: string | null;
|
|
788
516
|
goalId: string | null;
|
|
789
517
|
}[]>;
|
|
790
|
-
staleCount: (companyId: string, minutes?: number) => Promise<number>;
|
|
791
518
|
};
|
|
792
519
|
export {};
|
|
793
520
|
//# sourceMappingURL=issues.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"issues.d.ts","sourceRoot":"","sources":["../../src/services/issues.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAWL,MAAM,EACN,MAAM,EAGP,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"issues.d.ts","sourceRoot":"","sources":["../../src/services/issues.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAWL,MAAM,EACN,MAAM,EAGP,MAAM,iBAAiB,CAAC;AAsCzB,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,CAAC,CAAC,EAAE,MAAM,CAAC;CACZ;AAED,KAAK,QAAQ,GAAG,OAAO,MAAM,CAAC,YAAY,CAAC;AAC3C,KAAK,aAAa,GAAG,OAAO,MAAM,CAAC,YAAY,CAAC;AAChD,KAAK,iBAAiB,GAAG;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,SAAS,EAAE,IAAI,GAAG,IAAI,CAAC;IACvB,UAAU,EAAE,IAAI,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,IAAI,CAAC;CACjB,CAAC;AACF,KAAK,eAAe,GAAG,QAAQ,GAAG;IAAE,MAAM,EAAE,aAAa,EAAE,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC;AAClF,KAAK,qBAAqB,GAAG,eAAe,GAAG;IAAE,SAAS,EAAE,iBAAiB,GAAG,IAAI,CAAA;CAAE,CAAC;AAMvF,KAAK,qBAAqB,GAAG;IAC3B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,SAAS,EAAE,IAAI,GAAG,MAAM,CAAC;IACzB,SAAS,EAAE,IAAI,GAAG,MAAM,CAAC;CAC1B,CAAC;AAqGF,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,qBAAqB,EAC5B,MAAM,EAAE,MAAM,EACd,KAAK,EACD;IACA,eAAe,EAAE,IAAI,GAAG,MAAM,GAAG,IAAI,CAAC;IACtC,YAAY,EAAE,IAAI,GAAG,MAAM,GAAG,IAAI,CAAC;IACnC,qBAAqB,EAAE,IAAI,GAAG,MAAM,GAAG,IAAI,CAAC;CAC7C,GACC,IAAI,GACJ,SAAS;;;;EA4Bd;AAmFD,wBAAgB,YAAY,CAAC,EAAE,EAAE,EAAE;sBAyHP,MAAM,YAAY,YAAY;0CAwIV,MAAM,UAAU,MAAM,WAAW,MAAM;0BAqBvD,MAAM,WAAW,MAAM,UAAU,MAAM,WAAU,IAAI;;;;;;;;;kBAsB7D,MAAM;kCAWU,MAAM;wBAY7B,MAAM,QACX,IAAI,CAAC,OAAO,MAAM,CAAC,YAAY,EAAE,WAAW,CAAC,GAAG;QAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE;iBAsE5D,MAAM,QAAQ,OAAO,CAAC,OAAO,MAAM,CAAC,YAAY,CAAC,GAAG;QAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE;iBA8EjF,MAAM;mBAwBE,MAAM,WAAW,MAAM,oBAAoB,MAAM,EAAE,iBAAiB,MAAM,GAAG,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8BAgItE,MAAM,gBAAgB,MAAM,cAAc,MAAM,GAAG,IAAI;0BAmBpC,MAAM,GAAG,IAAI;;;;;;;;;;;;;kBAmC5C,MAAM,iBAAiB,MAAM,eAAe,MAAM,GAAG,IAAI;4BA0CrD,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uBAGX,MAAM;;;;;;;;6BAOM,MAAM,QAAQ,IAAI,CAAC,OAAO,MAAM,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC;;;;;;;;sBAYvE,MAAM;;;;;;;;4BAON,MAAM;;;;;;;;;;4BAQN,MAAM;;;;;;;;;;0BAUF,MAAM,QAAQ,MAAM,SAAS;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE;;;;;;;;;;8BA8B9D;QAC9B,OAAO,EAAE,MAAM,CAAC;QAChB,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC/B,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;QACf,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACjC,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACjC,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KACjC;;;;;;;;;;;;;;;;;+BAkEgC,MAAM;;;;;;;;;;;;;;;;;4BAwBT,MAAM;;;;;;;;;;;;;;;;;2BAwBP,MAAM;;;;;;;;;;;;;;;;;qCA+BI,MAAM,QAAQ,MAAM;uCAWlB,MAAM;4BA0CjB,MAAM;;gBAgC5B,MAAM;kBACJ,MAAM;yBACC,MAAM,GAAG,IAAI;oBAClB,MAAM;oBACN,MAAM,GAAG,IAAI;wBACT,KAAK,CAAC;gBAChB,EAAE,EAAE,MAAM,CAAC;gBACX,SAAS,EAAE,MAAM,CAAC;gBAClB,SAAS,EAAE,MAAM,CAAC;gBAClB,IAAI,EAAE,MAAM,CAAC;gBACb,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;gBACnB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;gBACvB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;gBACvB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;gBACzC,SAAS,EAAE,OAAO,CAAC;gBACnB,SAAS,EAAE,IAAI,CAAC;gBAChB,SAAS,EAAE,IAAI,CAAC;aACjB,CAAC;8BACgB;gBAChB,EAAE,EAAE,MAAM,CAAC;gBACX,SAAS,EAAE,MAAM,CAAC;gBAClB,SAAS,EAAE,MAAM,CAAC;gBAClB,IAAI,EAAE,MAAM,CAAC;gBACb,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;gBACnB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;gBACvB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;gBACvB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;gBACzC,SAAS,EAAE,OAAO,CAAC;gBACnB,SAAS,EAAE,IAAI,CAAC;gBAChB,SAAS,EAAE,IAAI,CAAC;aACjB,GAAG,IAAI;;;gBAE4B,MAAM;mBAAS,MAAM;yBAAe,MAAM,GAAG,IAAI;mBAAS,MAAM;oBAAU,MAAM;;YA9DhH,MAAM;oBAAc,MAAM,GAAG,IAAI;eAAS,MAAM;qBAAe,MAAM,GAAG,IAAI;gBACxE,MAAM;kBAAY,MAAM;yBACf,MAAM,GAAG,IAAI;mBAAa,MAAM,GAAG,IAAI;gBAAU,MAAM,GAAG,IAAI;;EAwHtF"}
|
package/dist/services/issues.js
CHANGED
|
@@ -2,6 +2,10 @@ import { and, asc, desc, eq, inArray, isNull, or, sql } from "drizzle-orm";
|
|
|
2
2
|
import { agents, assets, companies, companyMemberships, goals, heartbeatRuns, issueAttachments, issueLabels, issueComments, issueReadStates, issues, labels, projectWorkspaces, projects, } from "@paperclipai/db";
|
|
3
3
|
import { extractProjectMentionIds } from "@paperclipai/shared";
|
|
4
4
|
import { conflict, notFound, unprocessable } from "../errors.js";
|
|
5
|
+
import { defaultIssueExecutionWorkspaceSettingsForProject, parseProjectExecutionWorkspacePolicy, } from "./execution-workspace-policy.js";
|
|
6
|
+
import { redactCurrentUserText } from "../log-redaction.js";
|
|
7
|
+
import { resolveIssueGoalId, resolveNextIssueGoalId } from "./issue-goal-fallback.js";
|
|
8
|
+
import { getDefaultCompanyGoal } from "./goals.js";
|
|
5
9
|
const ALL_ISSUE_STATUSES = ["backlog", "todo", "in_progress", "in_review", "blocked", "done", "cancelled"];
|
|
6
10
|
function assertTransition(from, to) {
|
|
7
11
|
if (from === to)
|
|
@@ -24,6 +28,12 @@ function applyStatusSideEffects(status, patch) {
|
|
|
24
28
|
}
|
|
25
29
|
return patch;
|
|
26
30
|
}
|
|
31
|
+
function redactIssueComment(comment) {
|
|
32
|
+
return {
|
|
33
|
+
...comment,
|
|
34
|
+
body: redactCurrentUserText(comment.body),
|
|
35
|
+
};
|
|
36
|
+
}
|
|
27
37
|
function sameRunLock(checkoutRunId, actorRunId) {
|
|
28
38
|
if (actorRunId)
|
|
29
39
|
return checkoutRunId === actorRunId;
|
|
@@ -335,6 +345,8 @@ export function issueService(db) {
|
|
|
335
345
|
}
|
|
336
346
|
if (filters?.projectId)
|
|
337
347
|
conditions.push(eq(issues.projectId, filters.projectId));
|
|
348
|
+
if (filters?.parentId)
|
|
349
|
+
conditions.push(eq(issues.parentId, filters.parentId));
|
|
338
350
|
if (filters?.labelId) {
|
|
339
351
|
const labeledIssueIds = await db
|
|
340
352
|
.select({ issueId: issueLabels.issueId })
|
|
@@ -487,6 +499,17 @@ export function issueService(db) {
|
|
|
487
499
|
throw unprocessable("in_progress issues require an assignee");
|
|
488
500
|
}
|
|
489
501
|
return db.transaction(async (tx) => {
|
|
502
|
+
const defaultCompanyGoal = await getDefaultCompanyGoal(tx, companyId);
|
|
503
|
+
let executionWorkspaceSettings = issueData.executionWorkspaceSettings ?? null;
|
|
504
|
+
if (executionWorkspaceSettings == null && issueData.projectId) {
|
|
505
|
+
const project = await tx
|
|
506
|
+
.select({ executionWorkspacePolicy: projects.executionWorkspacePolicy })
|
|
507
|
+
.from(projects)
|
|
508
|
+
.where(and(eq(projects.id, issueData.projectId), eq(projects.companyId, companyId)))
|
|
509
|
+
.then((rows) => rows[0] ?? null);
|
|
510
|
+
executionWorkspaceSettings =
|
|
511
|
+
defaultIssueExecutionWorkspaceSettingsForProject(parseProjectExecutionWorkspacePolicy(project?.executionWorkspacePolicy));
|
|
512
|
+
}
|
|
490
513
|
const [company] = await tx
|
|
491
514
|
.update(companies)
|
|
492
515
|
.set({ issueCounter: sql `${companies.issueCounter} + 1` })
|
|
@@ -494,7 +517,18 @@ export function issueService(db) {
|
|
|
494
517
|
.returning({ issueCounter: companies.issueCounter, issuePrefix: companies.issuePrefix });
|
|
495
518
|
const issueNumber = company.issueCounter;
|
|
496
519
|
const identifier = `${company.issuePrefix}-${issueNumber}`;
|
|
497
|
-
const values = {
|
|
520
|
+
const values = {
|
|
521
|
+
...issueData,
|
|
522
|
+
goalId: resolveIssueGoalId({
|
|
523
|
+
projectId: issueData.projectId,
|
|
524
|
+
goalId: issueData.goalId,
|
|
525
|
+
defaultGoalId: defaultCompanyGoal?.id ?? null,
|
|
526
|
+
}),
|
|
527
|
+
...(executionWorkspaceSettings ? { executionWorkspaceSettings } : {}),
|
|
528
|
+
companyId,
|
|
529
|
+
issueNumber,
|
|
530
|
+
identifier,
|
|
531
|
+
};
|
|
498
532
|
if (values.status === "in_progress" && !values.startedAt) {
|
|
499
533
|
values.startedAt = new Date();
|
|
500
534
|
}
|
|
@@ -557,6 +591,14 @@ export function issueService(db) {
|
|
|
557
591
|
patch.checkoutRunId = null;
|
|
558
592
|
}
|
|
559
593
|
return db.transaction(async (tx) => {
|
|
594
|
+
const defaultCompanyGoal = await getDefaultCompanyGoal(tx, existing.companyId);
|
|
595
|
+
patch.goalId = resolveNextIssueGoalId({
|
|
596
|
+
currentProjectId: existing.projectId,
|
|
597
|
+
currentGoalId: existing.goalId,
|
|
598
|
+
projectId: issueData.projectId,
|
|
599
|
+
goalId: issueData.goalId,
|
|
600
|
+
defaultGoalId: defaultCompanyGoal?.id ?? null,
|
|
601
|
+
});
|
|
560
602
|
const updated = await tx
|
|
561
603
|
.update(issues)
|
|
562
604
|
.set(patch)
|
|
@@ -800,12 +842,16 @@ export function issueService(db) {
|
|
|
800
842
|
.select()
|
|
801
843
|
.from(issueComments)
|
|
802
844
|
.where(eq(issueComments.issueId, issueId))
|
|
803
|
-
.orderBy(desc(issueComments.createdAt))
|
|
845
|
+
.orderBy(desc(issueComments.createdAt))
|
|
846
|
+
.then((comments) => comments.map(redactIssueComment)),
|
|
804
847
|
getComment: (commentId) => db
|
|
805
848
|
.select()
|
|
806
849
|
.from(issueComments)
|
|
807
850
|
.where(eq(issueComments.id, commentId))
|
|
808
|
-
.then((rows) =>
|
|
851
|
+
.then((rows) => {
|
|
852
|
+
const comment = rows[0] ?? null;
|
|
853
|
+
return comment ? redactIssueComment(comment) : null;
|
|
854
|
+
}),
|
|
809
855
|
addComment: async (issueId, body, actor) => {
|
|
810
856
|
const issue = await db
|
|
811
857
|
.select({ companyId: issues.companyId })
|
|
@@ -814,6 +860,7 @@ export function issueService(db) {
|
|
|
814
860
|
.then((rows) => rows[0] ?? null);
|
|
815
861
|
if (!issue)
|
|
816
862
|
throw notFound("Issue not found");
|
|
863
|
+
const redactedBody = redactCurrentUserText(body);
|
|
817
864
|
const [comment] = await db
|
|
818
865
|
.insert(issueComments)
|
|
819
866
|
.values({
|
|
@@ -821,7 +868,7 @@ export function issueService(db) {
|
|
|
821
868
|
issueId,
|
|
822
869
|
authorAgentId: actor.agentId ?? null,
|
|
823
870
|
authorUserId: actor.userId ?? null,
|
|
824
|
-
body,
|
|
871
|
+
body: redactedBody,
|
|
825
872
|
})
|
|
826
873
|
.returning();
|
|
827
874
|
// Update issue's updatedAt so comment activity is reflected in recency sorting
|
|
@@ -829,7 +876,7 @@ export function issueService(db) {
|
|
|
829
876
|
.update(issues)
|
|
830
877
|
.set({ updatedAt: new Date() })
|
|
831
878
|
.where(eq(issues.id, issueId));
|
|
832
|
-
return comment;
|
|
879
|
+
return redactIssueComment(comment);
|
|
833
880
|
},
|
|
834
881
|
createAttachment: async (input) => {
|
|
835
882
|
const issue = await db
|
|
@@ -1100,15 +1147,6 @@ export function issueService(db) {
|
|
|
1100
1147
|
goal: a.goalId ? goalMap.get(a.goalId) ?? null : null,
|
|
1101
1148
|
}));
|
|
1102
1149
|
},
|
|
1103
|
-
staleCount: async (companyId, minutes = 60) => {
|
|
1104
|
-
const cutoff = new Date(Date.now() - minutes * 60 * 1000);
|
|
1105
|
-
const result = await db
|
|
1106
|
-
.select({ count: sql `count(*)` })
|
|
1107
|
-
.from(issues)
|
|
1108
|
-
.where(and(eq(issues.companyId, companyId), eq(issues.status, "in_progress"), isNull(issues.hiddenAt), sql `${issues.startedAt} < ${cutoff.toISOString()}`))
|
|
1109
|
-
.then((rows) => rows[0]);
|
|
1110
|
-
return Number(result?.count ?? 0);
|
|
1111
|
-
},
|
|
1112
1150
|
};
|
|
1113
1151
|
}
|
|
1114
1152
|
//# sourceMappingURL=issues.js.map
|