@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.
Files changed (178) hide show
  1. package/dist/adapters/registry.d.ts.map +1 -1
  2. package/dist/adapters/registry.js +12 -0
  3. package/dist/adapters/registry.js.map +1 -1
  4. package/dist/app.d.ts +1 -0
  5. package/dist/app.d.ts.map +1 -1
  6. package/dist/app.js +9 -2
  7. package/dist/app.js.map +1 -1
  8. package/dist/attachment-types.d.ts +33 -0
  9. package/dist/attachment-types.d.ts.map +1 -0
  10. package/dist/attachment-types.js +61 -0
  11. package/dist/attachment-types.js.map +1 -0
  12. package/dist/index.d.ts.map +1 -1
  13. package/dist/index.js +12 -2
  14. package/dist/index.js.map +1 -1
  15. package/dist/log-redaction.d.ts +10 -0
  16. package/dist/log-redaction.d.ts.map +1 -0
  17. package/dist/log-redaction.js +110 -0
  18. package/dist/log-redaction.js.map +1 -0
  19. package/dist/middleware/logger.d.ts.map +1 -1
  20. package/dist/middleware/logger.js +1 -0
  21. package/dist/middleware/logger.js.map +1 -1
  22. package/dist/routes/activity.d.ts.map +1 -1
  23. package/dist/routes/activity.js +12 -21
  24. package/dist/routes/activity.js.map +1 -1
  25. package/dist/routes/agents.d.ts.map +1 -1
  26. package/dist/routes/agents.js +102 -3
  27. package/dist/routes/agents.js.map +1 -1
  28. package/dist/routes/approvals.d.ts.map +1 -1
  29. package/dist/routes/approvals.js +87 -83
  30. package/dist/routes/approvals.js.map +1 -1
  31. package/dist/routes/assets.d.ts.map +1 -1
  32. package/dist/routes/assets.js +5 -12
  33. package/dist/routes/assets.js.map +1 -1
  34. package/dist/routes/issues.d.ts.map +1 -1
  35. package/dist/routes/issues.js +16 -11
  36. package/dist/routes/issues.js.map +1 -1
  37. package/dist/routes/sidebar-badges.d.ts.map +1 -1
  38. package/dist/routes/sidebar-badges.js +1 -4
  39. package/dist/routes/sidebar-badges.js.map +1 -1
  40. package/dist/services/activity-log.d.ts.map +1 -1
  41. package/dist/services/activity-log.js +4 -2
  42. package/dist/services/activity-log.js.map +1 -1
  43. package/dist/services/approvals.d.ts +30 -24
  44. package/dist/services/approvals.d.ts.map +1 -1
  45. package/dist/services/approvals.js +51 -42
  46. package/dist/services/approvals.js.map +1 -1
  47. package/dist/services/company-portability.d.ts.map +1 -1
  48. package/dist/services/company-portability.js +5 -1
  49. package/dist/services/company-portability.js.map +1 -1
  50. package/dist/services/dashboard.d.ts +0 -1
  51. package/dist/services/dashboard.d.ts.map +1 -1
  52. package/dist/services/dashboard.js +0 -7
  53. package/dist/services/dashboard.js.map +1 -1
  54. package/dist/services/execution-workspace-policy.d.ts +19 -0
  55. package/dist/services/execution-workspace-policy.d.ts.map +1 -0
  56. package/dist/services/execution-workspace-policy.js +117 -0
  57. package/dist/services/execution-workspace-policy.js.map +1 -0
  58. package/dist/services/goals.d.ts +26 -0
  59. package/dist/services/goals.d.ts.map +1 -1
  60. package/dist/services/goals.js +26 -1
  61. package/dist/services/goals.js.map +1 -1
  62. package/dist/services/heartbeat-run-summary.d.ts +2 -0
  63. package/dist/services/heartbeat-run-summary.d.ts.map +1 -0
  64. package/dist/services/heartbeat-run-summary.js +30 -0
  65. package/dist/services/heartbeat-run-summary.js.map +1 -0
  66. package/dist/services/heartbeat.d.ts +30 -996
  67. package/dist/services/heartbeat.d.ts.map +1 -1
  68. package/dist/services/heartbeat.js +236 -47
  69. package/dist/services/heartbeat.js.map +1 -1
  70. package/dist/services/index.d.ts +1 -0
  71. package/dist/services/index.d.ts.map +1 -1
  72. package/dist/services/index.js +1 -0
  73. package/dist/services/index.js.map +1 -1
  74. package/dist/services/issue-goal-fallback.d.ts +15 -0
  75. package/dist/services/issue-goal-fallback.d.ts.map +1 -0
  76. package/dist/services/issue-goal-fallback.js +15 -0
  77. package/dist/services/issue-goal-fallback.js.map +1 -0
  78. package/dist/services/issues.d.ts +5 -278
  79. package/dist/services/issues.d.ts.map +1 -1
  80. package/dist/services/issues.js +52 -14
  81. package/dist/services/issues.js.map +1 -1
  82. package/dist/services/projects.d.ts +4 -2
  83. package/dist/services/projects.d.ts.map +1 -1
  84. package/dist/services/projects.js +49 -6
  85. package/dist/services/projects.js.map +1 -1
  86. package/dist/services/workspace-runtime.d.ts +126 -0
  87. package/dist/services/workspace-runtime.d.ts.map +1 -0
  88. package/dist/services/workspace-runtime.js +852 -0
  89. package/dist/services/workspace-runtime.js.map +1 -0
  90. package/dist/ui-branding.d.ts +4 -0
  91. package/dist/ui-branding.d.ts.map +1 -0
  92. package/dist/ui-branding.js +37 -0
  93. package/dist/ui-branding.js.map +1 -0
  94. package/package.json +11 -10
  95. package/skills/paperclip/SKILL.md +23 -19
  96. package/ui-dist/assets/{_basePickBy-BYrQlacK.js → _basePickBy-B0xbZITw.js} +1 -1
  97. package/ui-dist/assets/{_baseUniq-DOSawgF3.js → _baseUniq-Cfd5u3qc.js} +1 -1
  98. package/ui-dist/assets/{arc-CG7T0hfG.js → arc-7Xbu8tBF.js} +1 -1
  99. package/ui-dist/assets/{architectureDiagram-VXUJARFQ-Bcn7ytDO.js → architectureDiagram-VXUJARFQ-C8F7ZRYc.js} +1 -1
  100. package/ui-dist/assets/{blockDiagram-VD42YOAC-BQGrx2lv.js → blockDiagram-VD42YOAC-Dp08a65A.js} +1 -1
  101. package/ui-dist/assets/{c4Diagram-YG6GDRKO-owH9Kb3t.js → c4Diagram-YG6GDRKO-BJfslTgZ.js} +1 -1
  102. package/ui-dist/assets/channel-BViQDbSq.js +1 -0
  103. package/ui-dist/assets/{chunk-4BX2VUAB-DY1UIe4g.js → chunk-4BX2VUAB-BhaYWH7e.js} +1 -1
  104. package/ui-dist/assets/{chunk-55IACEB6-CnWFPfPQ.js → chunk-55IACEB6-BOzJUsYW.js} +1 -1
  105. package/ui-dist/assets/{chunk-B4BG7PRW-DhlLW80l.js → chunk-B4BG7PRW-CbVcziyE.js} +1 -1
  106. package/ui-dist/assets/{chunk-DI55MBZ5-DPt7dj6c.js → chunk-DI55MBZ5-DghPtP3y.js} +1 -1
  107. package/ui-dist/assets/{chunk-FMBD7UC4-GQwzgYa4.js → chunk-FMBD7UC4-CB095Kfn.js} +1 -1
  108. package/ui-dist/assets/{chunk-QN33PNHL-BFHLVk5s.js → chunk-QN33PNHL-DfpzfDqJ.js} +1 -1
  109. package/ui-dist/assets/{chunk-QZHKN3VN-CLe3KEAf.js → chunk-QZHKN3VN-Df3d5z1y.js} +1 -1
  110. package/ui-dist/assets/{chunk-TZMSLE5B-BhccYB4e.js → chunk-TZMSLE5B-B6tX6bZI.js} +1 -1
  111. package/ui-dist/assets/classDiagram-2ON5EDUG-CjMCmxMT.js +1 -0
  112. package/ui-dist/assets/classDiagram-v2-WZHVMYZB-CjMCmxMT.js +1 -0
  113. package/ui-dist/assets/clone-Dbn9wtE1.js +1 -0
  114. package/ui-dist/assets/{cose-bilkent-S5V4N54A-DqECYL1w.js → cose-bilkent-S5V4N54A-38wg_s9V.js} +1 -1
  115. package/ui-dist/assets/{dagre-6UL2VRFP-DXeQqIJ2.js → dagre-6UL2VRFP-DPVj3XLS.js} +1 -1
  116. package/ui-dist/assets/{diagram-PSM6KHXK-DNu3Ctuy.js → diagram-PSM6KHXK-BJh89zUA.js} +1 -1
  117. package/ui-dist/assets/{diagram-QEK2KX5R-1wUR_z9S.js → diagram-QEK2KX5R-Bw0m_j10.js} +1 -1
  118. package/ui-dist/assets/{diagram-S2PKOQOG-D3IK8rZb.js → diagram-S2PKOQOG-D7_M2F3u.js} +1 -1
  119. package/ui-dist/assets/{erDiagram-Q2GNP2WA-DU3L0RbU.js → erDiagram-Q2GNP2WA-CLsjqTWP.js} +1 -1
  120. package/ui-dist/assets/{flowDiagram-NV44I4VS-CN46A5Ez.js → flowDiagram-NV44I4VS-BZZ7ezVB.js} +1 -1
  121. package/ui-dist/assets/{ganttDiagram-JELNMOA3-DGbOi1Wz.js → ganttDiagram-JELNMOA3-KzsFuwBt.js} +1 -1
  122. package/ui-dist/assets/{gitGraphDiagram-V2S2FVAM-D98N7SOj.js → gitGraphDiagram-V2S2FVAM-DSHtY7Vu.js} +1 -1
  123. package/ui-dist/assets/{graph-Cf7LCNJy.js → graph-luIG1UAS.js} +1 -1
  124. package/ui-dist/assets/{index-CP1BgxcV.js → index-00kuG4sI.js} +1 -1
  125. package/ui-dist/assets/{index-DiXE2gv-.js → index-1gX09-Fl.js} +1 -1
  126. package/ui-dist/assets/{index-CqG5WZHq.js → index-B1ZMzzs0.js} +1 -1
  127. package/ui-dist/assets/index-BHP9dico.js +1006 -0
  128. package/ui-dist/assets/{index-cx0y6-1h.js → index-B_3g3Rie.js} +1 -1
  129. package/ui-dist/assets/{index-CI56poQD.js → index-BeeKMqNU.js} +1 -1
  130. package/ui-dist/assets/{index-BfG2u5u0.js → index-BfB4lKJN.js} +1 -1
  131. package/ui-dist/assets/index-BfNaDZnn.css +1 -0
  132. package/ui-dist/assets/{index-DZdNKByU.js → index-Bv4xCjxl.js} +1 -1
  133. package/ui-dist/assets/{index--K1VLoF-.js → index-C2SZYIDA.js} +1 -1
  134. package/ui-dist/assets/{index-DB5nKqAA.js → index-C8XyGAr9.js} +1 -1
  135. package/ui-dist/assets/{index-C2-SE7P0.js → index-CaR9XM4h.js} +1 -1
  136. package/ui-dist/assets/{index-DujThSls.js → index-CbGtsjW7.js} +1 -1
  137. package/ui-dist/assets/{index-D0EsfNYg.js → index-CeDCs_2i.js} +1 -1
  138. package/ui-dist/assets/{index-OkxoZoQy.js → index-DBy0vJy3.js} +1 -1
  139. package/ui-dist/assets/{index-BoAYxRAO.js → index-DJf8diAA.js} +1 -1
  140. package/ui-dist/assets/{index-N1SX_i0z.js → index-DcfLFstG.js} +1 -1
  141. package/ui-dist/assets/{index-DXgtGequ.js → index-DnIPDZLp.js} +1 -1
  142. package/ui-dist/assets/{index-Cick_QSL.js → index-DoTq-BeR.js} +1 -1
  143. package/ui-dist/assets/{index-0BSerEC2.js → index-Ds7vLTSK.js} +1 -1
  144. package/ui-dist/assets/{index-Beb2ZlSv.js → index-RUBFVv6t.js} +1 -1
  145. package/ui-dist/assets/{index-TFF7cXd7.js → index-itc7BfMy.js} +1 -1
  146. package/ui-dist/assets/{index-BD6My-aI.js → index-nFjLambq.js} +1 -1
  147. package/ui-dist/assets/{index-B-xuGUs-.js → index-uR3zjYaD.js} +1 -1
  148. package/ui-dist/assets/{infoDiagram-HS3SLOUP-D_b1CK0Y.js → infoDiagram-HS3SLOUP-CDEfWpme.js} +1 -1
  149. package/ui-dist/assets/{journeyDiagram-XKPGCS4Q-4oCVXUve.js → journeyDiagram-XKPGCS4Q-i7nsbg_Y.js} +1 -1
  150. package/ui-dist/assets/{kanban-definition-3W4ZIXB7-0VcjP_qf.js → kanban-definition-3W4ZIXB7-DDlx1qVE.js} +1 -1
  151. package/ui-dist/assets/{layout-BQcYXlNv.js → layout-C7AtmJzX.js} +1 -1
  152. package/ui-dist/assets/{linear-nz0Lfiys.js → linear-C5jHT-WP.js} +1 -1
  153. package/ui-dist/assets/{mermaid.core-BaxvgwjG.js → mermaid.core-C8YQ4fcY.js} +4 -4
  154. package/ui-dist/assets/{mindmap-definition-VGOIOE7T-BnW6nEhl.js → mindmap-definition-VGOIOE7T-B9m9PuUg.js} +1 -1
  155. package/ui-dist/assets/{pieDiagram-ADFJNKIX-O1tvU_18.js → pieDiagram-ADFJNKIX-SvKywCSE.js} +1 -1
  156. package/ui-dist/assets/{quadrantDiagram-AYHSOK5B-BfM2aQbf.js → quadrantDiagram-AYHSOK5B-QfBPm7Y1.js} +1 -1
  157. package/ui-dist/assets/{requirementDiagram-UZGBJVZJ-rXVZupag.js → requirementDiagram-UZGBJVZJ-DnfQQuwi.js} +1 -1
  158. package/ui-dist/assets/{sankeyDiagram-TZEHDZUN-BNgaPVo6.js → sankeyDiagram-TZEHDZUN-DvLkjzIW.js} +1 -1
  159. package/ui-dist/assets/{sequenceDiagram-WL72ISMW--KnZ0qRV.js → sequenceDiagram-WL72ISMW-5Lq2rWBc.js} +1 -1
  160. package/ui-dist/assets/{stateDiagram-FKZM4ZOC-DlGdC88b.js → stateDiagram-FKZM4ZOC-DcYPHDyi.js} +1 -1
  161. package/ui-dist/assets/stateDiagram-v2-4FDKWEC3-nv50YYrl.js +1 -0
  162. package/ui-dist/assets/{timeline-definition-IT6M3QCI-CCwriy0-.js → timeline-definition-IT6M3QCI-lrN4JmWa.js} +1 -1
  163. package/ui-dist/assets/{treemap-GDKQZRPO-C-79yojr.js → treemap-GDKQZRPO-DFJKIBTQ.js} +1 -1
  164. package/ui-dist/assets/{xychartDiagram-PRI3JC2R-Dj0jcMBZ.js → xychartDiagram-PRI3JC2R-CT47vtdm.js} +1 -1
  165. package/ui-dist/index.html +4 -2
  166. package/ui-dist/worktree-favicon-16x16.png +0 -0
  167. package/ui-dist/worktree-favicon-32x32.png +0 -0
  168. package/ui-dist/worktree-favicon.ico +0 -0
  169. package/ui-dist/worktree-favicon.svg +9 -0
  170. package/skills/release/SKILL.md +0 -261
  171. package/skills/release-changelog/SKILL.md +0 -178
  172. package/ui-dist/assets/channel-DdXqC9Qy.js +0 -1
  173. package/ui-dist/assets/classDiagram-2ON5EDUG-ZV36NLFv.js +0 -1
  174. package/ui-dist/assets/classDiagram-v2-WZHVMYZB-ZV36NLFv.js +0 -1
  175. package/ui-dist/assets/clone-CvxIjPQa.js +0 -1
  176. package/ui-dist/assets/index-BYw6Loly.js +0 -900
  177. package/ui-dist/assets/index-nfAtmpEH.css +0 -1
  178. package/ui-dist/assets/stateDiagram-v2-4FDKWEC3-CuVnpOfP.js +0 -1
@@ -0,0 +1,117 @@
1
+ import { asString, parseObject } from "../adapters/utils.js";
2
+ function cloneRecord(value) {
3
+ if (!value)
4
+ return null;
5
+ return { ...value };
6
+ }
7
+ function parseExecutionWorkspaceStrategy(raw) {
8
+ const parsed = parseObject(raw);
9
+ const type = asString(parsed.type, "");
10
+ if (type !== "project_primary" && type !== "git_worktree") {
11
+ return null;
12
+ }
13
+ return {
14
+ type,
15
+ ...(typeof parsed.baseRef === "string" ? { baseRef: parsed.baseRef } : {}),
16
+ ...(typeof parsed.branchTemplate === "string" ? { branchTemplate: parsed.branchTemplate } : {}),
17
+ ...(typeof parsed.worktreeParentDir === "string" ? { worktreeParentDir: parsed.worktreeParentDir } : {}),
18
+ ...(typeof parsed.provisionCommand === "string" ? { provisionCommand: parsed.provisionCommand } : {}),
19
+ ...(typeof parsed.teardownCommand === "string" ? { teardownCommand: parsed.teardownCommand } : {}),
20
+ };
21
+ }
22
+ export function parseProjectExecutionWorkspacePolicy(raw) {
23
+ const parsed = parseObject(raw);
24
+ if (Object.keys(parsed).length === 0)
25
+ return null;
26
+ const enabled = typeof parsed.enabled === "boolean" ? parsed.enabled : false;
27
+ const defaultMode = asString(parsed.defaultMode, "");
28
+ const allowIssueOverride = typeof parsed.allowIssueOverride === "boolean" ? parsed.allowIssueOverride : undefined;
29
+ return {
30
+ enabled,
31
+ ...(defaultMode === "project_primary" || defaultMode === "isolated" ? { defaultMode } : {}),
32
+ ...(allowIssueOverride !== undefined ? { allowIssueOverride } : {}),
33
+ ...(parseExecutionWorkspaceStrategy(parsed.workspaceStrategy)
34
+ ? { workspaceStrategy: parseExecutionWorkspaceStrategy(parsed.workspaceStrategy) }
35
+ : {}),
36
+ ...(parsed.workspaceRuntime && typeof parsed.workspaceRuntime === "object" && !Array.isArray(parsed.workspaceRuntime)
37
+ ? { workspaceRuntime: { ...parsed.workspaceRuntime } }
38
+ : {}),
39
+ ...(parsed.branchPolicy && typeof parsed.branchPolicy === "object" && !Array.isArray(parsed.branchPolicy)
40
+ ? { branchPolicy: { ...parsed.branchPolicy } }
41
+ : {}),
42
+ ...(parsed.pullRequestPolicy && typeof parsed.pullRequestPolicy === "object" && !Array.isArray(parsed.pullRequestPolicy)
43
+ ? { pullRequestPolicy: { ...parsed.pullRequestPolicy } }
44
+ : {}),
45
+ ...(parsed.cleanupPolicy && typeof parsed.cleanupPolicy === "object" && !Array.isArray(parsed.cleanupPolicy)
46
+ ? { cleanupPolicy: { ...parsed.cleanupPolicy } }
47
+ : {}),
48
+ };
49
+ }
50
+ export function parseIssueExecutionWorkspaceSettings(raw) {
51
+ const parsed = parseObject(raw);
52
+ if (Object.keys(parsed).length === 0)
53
+ return null;
54
+ const mode = asString(parsed.mode, "");
55
+ return {
56
+ ...(mode === "inherit" || mode === "project_primary" || mode === "isolated" || mode === "agent_default"
57
+ ? { mode }
58
+ : {}),
59
+ ...(parseExecutionWorkspaceStrategy(parsed.workspaceStrategy)
60
+ ? { workspaceStrategy: parseExecutionWorkspaceStrategy(parsed.workspaceStrategy) }
61
+ : {}),
62
+ ...(parsed.workspaceRuntime && typeof parsed.workspaceRuntime === "object" && !Array.isArray(parsed.workspaceRuntime)
63
+ ? { workspaceRuntime: { ...parsed.workspaceRuntime } }
64
+ : {}),
65
+ };
66
+ }
67
+ export function defaultIssueExecutionWorkspaceSettingsForProject(projectPolicy) {
68
+ if (!projectPolicy?.enabled)
69
+ return null;
70
+ return {
71
+ mode: projectPolicy.defaultMode === "isolated" ? "isolated" : "project_primary",
72
+ };
73
+ }
74
+ export function resolveExecutionWorkspaceMode(input) {
75
+ const issueMode = input.issueSettings?.mode;
76
+ if (issueMode && issueMode !== "inherit") {
77
+ return issueMode;
78
+ }
79
+ if (input.projectPolicy?.enabled) {
80
+ return input.projectPolicy.defaultMode === "isolated" ? "isolated" : "project_primary";
81
+ }
82
+ if (input.legacyUseProjectWorkspace === false) {
83
+ return "agent_default";
84
+ }
85
+ return "project_primary";
86
+ }
87
+ export function buildExecutionWorkspaceAdapterConfig(input) {
88
+ const nextConfig = { ...input.agentConfig };
89
+ const projectHasPolicy = Boolean(input.projectPolicy?.enabled);
90
+ const issueHasWorkspaceOverrides = Boolean(input.issueSettings?.mode ||
91
+ input.issueSettings?.workspaceStrategy ||
92
+ input.issueSettings?.workspaceRuntime);
93
+ const hasWorkspaceControl = projectHasPolicy || issueHasWorkspaceOverrides || input.legacyUseProjectWorkspace === false;
94
+ if (hasWorkspaceControl) {
95
+ if (input.mode === "isolated") {
96
+ const strategy = input.issueSettings?.workspaceStrategy ??
97
+ input.projectPolicy?.workspaceStrategy ??
98
+ parseExecutionWorkspaceStrategy(nextConfig.workspaceStrategy) ??
99
+ { type: "git_worktree" };
100
+ nextConfig.workspaceStrategy = strategy;
101
+ }
102
+ else {
103
+ delete nextConfig.workspaceStrategy;
104
+ }
105
+ if (input.mode === "agent_default") {
106
+ delete nextConfig.workspaceRuntime;
107
+ }
108
+ else if (input.issueSettings?.workspaceRuntime) {
109
+ nextConfig.workspaceRuntime = cloneRecord(input.issueSettings.workspaceRuntime) ?? undefined;
110
+ }
111
+ else if (input.projectPolicy?.workspaceRuntime) {
112
+ nextConfig.workspaceRuntime = cloneRecord(input.projectPolicy.workspaceRuntime) ?? undefined;
113
+ }
114
+ }
115
+ return nextConfig;
116
+ }
117
+ //# sourceMappingURL=execution-workspace-policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execution-workspace-policy.js","sourceRoot":"","sources":["../../src/services/execution-workspace-policy.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,18 @@
1
1
  import type { Db } from "@paperclipai/db";
2
2
  import { goals } from "@paperclipai/db";
3
+ type GoalReader = Pick<Db, "select">;
4
+ export declare function getDefaultCompanyGoal(db: GoalReader, companyId: string): Promise<{
5
+ id: string;
6
+ description: string | null;
7
+ status: string;
8
+ createdAt: Date;
9
+ updatedAt: Date;
10
+ companyId: string;
11
+ title: string;
12
+ level: string;
13
+ parentId: string | null;
14
+ ownerAgentId: string | null;
15
+ }>;
3
16
  export declare function goalService(db: Db): {
4
17
  list: (companyId: string) => Omit<import("drizzle-orm/pg-core").PgSelectBase<"goals", {
5
18
  id: import("drizzle-orm/pg-core").PgColumn<{
@@ -367,6 +380,18 @@ export declare function goalService(db: Db): {
367
380
  parentId: string | null;
368
381
  ownerAgentId: string | null;
369
382
  }>;
383
+ getDefaultCompanyGoal: (companyId: string) => Promise<{
384
+ id: string;
385
+ description: string | null;
386
+ status: string;
387
+ createdAt: Date;
388
+ updatedAt: Date;
389
+ companyId: string;
390
+ title: string;
391
+ level: string;
392
+ parentId: string | null;
393
+ ownerAgentId: string | null;
394
+ }>;
370
395
  create: (companyId: string, data: Omit<typeof goals.$inferInsert, "companyId">) => Promise<{
371
396
  id: string;
372
397
  description: string | null;
@@ -404,4 +429,5 @@ export declare function goalService(db: Db): {
404
429
  ownerAgentId: string | null;
405
430
  }>;
406
431
  };
432
+ export {};
407
433
  //# sourceMappingURL=goals.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"goals.d.ts","sourceRoot":"","sources":["../../src/services/goals.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAExC,wBAAgB,WAAW,CAAC,EAAE,EAAE,EAAE;sBAEZ,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAEV,MAAM;;;;;;;;;;;;wBAOA,MAAM,QAAQ,IAAI,CAAC,OAAO,KAAK,CAAC,YAAY,EAAE,WAAW,CAAC;;;;;;;;;;;;iBAOjE,MAAM,QAAQ,OAAO,CAAC,OAAO,KAAK,CAAC,YAAY,CAAC;;;;;;;;;;;;iBAQhD,MAAM;;;;;;;;;;;;EAOtB"}
1
+ {"version":3,"file":"goals.d.ts","sourceRoot":"","sources":["../../src/services/goals.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAExC,KAAK,UAAU,GAAG,IAAI,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;AAErC,wBAAsB,qBAAqB,CAAC,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM;;;;;;;;;;;GAoC5E;AAED,wBAAgB,WAAW,CAAC,EAAE,EAAE,EAAE;sBAEZ,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAEV,MAAM;;;;;;;;;;;;uCAOe,MAAM;;;;;;;;;;;;wBAErB,MAAM,QAAQ,IAAI,CAAC,OAAO,KAAK,CAAC,YAAY,EAAE,WAAW,CAAC;;;;;;;;;;;;iBAOjE,MAAM,QAAQ,OAAO,CAAC,OAAO,KAAK,CAAC,YAAY,CAAC;;;;;;;;;;;;iBAQhD,MAAM;;;;;;;;;;;;EAOtB"}
@@ -1,5 +1,29 @@
1
- import { eq } from "drizzle-orm";
1
+ import { and, asc, eq, isNull } from "drizzle-orm";
2
2
  import { goals } from "@paperclipai/db";
3
+ export async function getDefaultCompanyGoal(db, companyId) {
4
+ const activeRootGoal = await db
5
+ .select()
6
+ .from(goals)
7
+ .where(and(eq(goals.companyId, companyId), eq(goals.level, "company"), eq(goals.status, "active"), isNull(goals.parentId)))
8
+ .orderBy(asc(goals.createdAt))
9
+ .then((rows) => rows[0] ?? null);
10
+ if (activeRootGoal)
11
+ return activeRootGoal;
12
+ const anyRootGoal = await db
13
+ .select()
14
+ .from(goals)
15
+ .where(and(eq(goals.companyId, companyId), eq(goals.level, "company"), isNull(goals.parentId)))
16
+ .orderBy(asc(goals.createdAt))
17
+ .then((rows) => rows[0] ?? null);
18
+ if (anyRootGoal)
19
+ return anyRootGoal;
20
+ return db
21
+ .select()
22
+ .from(goals)
23
+ .where(and(eq(goals.companyId, companyId), eq(goals.level, "company")))
24
+ .orderBy(asc(goals.createdAt))
25
+ .then((rows) => rows[0] ?? null);
26
+ }
3
27
  export function goalService(db) {
4
28
  return {
5
29
  list: (companyId) => db.select().from(goals).where(eq(goals.companyId, companyId)),
@@ -8,6 +32,7 @@ export function goalService(db) {
8
32
  .from(goals)
9
33
  .where(eq(goals.id, id))
10
34
  .then((rows) => rows[0] ?? null),
35
+ getDefaultCompanyGoal: (companyId) => getDefaultCompanyGoal(db, companyId),
11
36
  create: (companyId, data) => db
12
37
  .insert(goals)
13
38
  .values({ ...data, companyId })
@@ -1 +1 @@
1
- {"version":3,"file":"goals.js","sourceRoot":"","sources":["../../src/services/goals.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAEjC,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAExC,MAAM,UAAU,WAAW,CAAC,EAAM;IAChC,OAAO;QACL,IAAI,EAAE,CAAC,SAAiB,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAE1F,OAAO,EAAE,CAAC,EAAU,EAAE,EAAE,CACtB,EAAE;aACC,MAAM,EAAE;aACR,IAAI,CAAC,KAAK,CAAC;aACX,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;aACvB,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;QAEpC,MAAM,EAAE,CAAC,SAAiB,EAAE,IAAkD,EAAE,EAAE,CAChF,EAAE;aACC,MAAM,CAAC,KAAK,CAAC;aACb,MAAM,CAAC,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,CAAC;aAC9B,SAAS,EAAE;aACX,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAE5B,MAAM,EAAE,CAAC,EAAU,EAAE,IAAwC,EAAE,EAAE,CAC/D,EAAE;aACC,MAAM,CAAC,KAAK,CAAC;aACb,GAAG,CAAC,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC;aACvC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;aACvB,SAAS,EAAE;aACX,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;QAEpC,MAAM,EAAE,CAAC,EAAU,EAAE,EAAE,CACrB,EAAE;aACC,MAAM,CAAC,KAAK,CAAC;aACb,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;aACvB,SAAS,EAAE;aACX,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;KACrC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"goals.js","sourceRoot":"","sources":["../../src/services/goals.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function summarizeHeartbeatRunResultJson(resultJson: Record<string, unknown> | null | undefined): Record<string, unknown> | null;
2
+ //# sourceMappingURL=heartbeat-run-summary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"heartbeat-run-summary.d.ts","sourceRoot":"","sources":["../../src/services/heartbeat-run-summary.ts"],"names":[],"mappings":"AASA,wBAAgB,+BAA+B,CAC7C,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG,SAAS,GACrD,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAuBhC"}
@@ -0,0 +1,30 @@
1
+ function truncateSummaryText(value, maxLength = 500) {
2
+ if (typeof value !== "string")
3
+ return null;
4
+ return value.length > maxLength ? value.slice(0, maxLength) : value;
5
+ }
6
+ function readNumericField(record, key) {
7
+ return key in record ? record[key] ?? null : undefined;
8
+ }
9
+ export function summarizeHeartbeatRunResultJson(resultJson) {
10
+ if (!resultJson || typeof resultJson !== "object" || Array.isArray(resultJson)) {
11
+ return null;
12
+ }
13
+ const summary = {};
14
+ const textFields = ["summary", "result", "message", "error"];
15
+ for (const key of textFields) {
16
+ const value = truncateSummaryText(resultJson[key]);
17
+ if (value !== null) {
18
+ summary[key] = value;
19
+ }
20
+ }
21
+ const numericFieldAliases = ["total_cost_usd", "cost_usd", "costUsd"];
22
+ for (const key of numericFieldAliases) {
23
+ const value = readNumericField(resultJson, key);
24
+ if (value !== undefined && value !== null) {
25
+ summary[key] = value;
26
+ }
27
+ }
28
+ return Object.keys(summary).length > 0 ? summary : null;
29
+ }
30
+ //# sourceMappingURL=heartbeat-run-summary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"heartbeat-run-summary.js","sourceRoot":"","sources":["../../src/services/heartbeat-run-summary.ts"],"names":[],"mappings":"AAAA,SAAS,mBAAmB,CAAC,KAAc,EAAE,SAAS,GAAG,GAAG;IAC1D,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC3C,OAAO,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AACtE,CAAC;AAED,SAAS,gBAAgB,CAAC,MAA+B,EAAE,GAAW;IACpE,OAAO,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,+BAA+B,CAC7C,UAAsD;IAEtD,IAAI,CAAC,UAAU,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/E,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,OAAO,GAA4B,EAAE,CAAC;IAC5C,MAAM,UAAU,GAAG,CAAC,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,CAAU,CAAC;IACtE,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,mBAAmB,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;QACnD,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACnB,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACvB,CAAC;IACH,CAAC;IAED,MAAM,mBAAmB,GAAG,CAAC,gBAAgB,EAAE,UAAU,EAAE,SAAS,CAAU,CAAC;IAC/E,KAAK,MAAM,GAAG,IAAI,mBAAmB,EAAE,CAAC;QACtC,MAAM,KAAK,GAAG,gBAAgB,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;QAChD,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YAC1C,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACvB,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;AAC1D,CAAC"}