canopycms 0.0.58 → 0.0.60

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 (134) hide show
  1. package/dist/api/__test__/mock-client.js +4 -4
  2. package/dist/api/__test__/mock-client.js.map +1 -1
  3. package/dist/api/branch-merge.d.ts.map +1 -1
  4. package/dist/api/branch-merge.js +2 -6
  5. package/dist/api/branch-merge.js.map +1 -1
  6. package/dist/api/branch-withdraw.d.ts.map +1 -1
  7. package/dist/api/branch-withdraw.js +19 -4
  8. package/dist/api/branch-withdraw.js.map +1 -1
  9. package/dist/api/entries.d.ts.map +1 -1
  10. package/dist/api/entries.js +22 -3
  11. package/dist/api/entries.js.map +1 -1
  12. package/dist/api/groups.d.ts +3 -0
  13. package/dist/api/groups.d.ts.map +1 -1
  14. package/dist/api/groups.js +89 -68
  15. package/dist/api/groups.js.map +1 -1
  16. package/dist/api/permissions.d.ts +1 -0
  17. package/dist/api/permissions.d.ts.map +1 -1
  18. package/dist/api/permissions.js +23 -20
  19. package/dist/api/permissions.js.map +1 -1
  20. package/dist/api/schema.d.ts.map +1 -1
  21. package/dist/api/schema.js +29 -15
  22. package/dist/api/schema.js.map +1 -1
  23. package/dist/authorization/groups/index.d.ts +1 -1
  24. package/dist/authorization/groups/index.d.ts.map +1 -1
  25. package/dist/authorization/groups/index.js +1 -1
  26. package/dist/authorization/groups/index.js.map +1 -1
  27. package/dist/authorization/groups/loader.d.ts +25 -4
  28. package/dist/authorization/groups/loader.d.ts.map +1 -1
  29. package/dist/authorization/groups/loader.js +39 -20
  30. package/dist/authorization/groups/loader.js.map +1 -1
  31. package/dist/authorization/groups/schema.d.ts +8 -7
  32. package/dist/authorization/groups/schema.d.ts.map +1 -1
  33. package/dist/authorization/groups/schema.js +8 -4
  34. package/dist/authorization/groups/schema.js.map +1 -1
  35. package/dist/authorization/index.d.ts +4 -3
  36. package/dist/authorization/index.d.ts.map +1 -1
  37. package/dist/authorization/index.js +6 -3
  38. package/dist/authorization/index.js.map +1 -1
  39. package/dist/authorization/path.d.ts +8 -0
  40. package/dist/authorization/path.d.ts.map +1 -1
  41. package/dist/authorization/path.js +16 -1
  42. package/dist/authorization/path.js.map +1 -1
  43. package/dist/authorization/permissions/index.d.ts +1 -1
  44. package/dist/authorization/permissions/index.d.ts.map +1 -1
  45. package/dist/authorization/permissions/index.js +1 -1
  46. package/dist/authorization/permissions/index.js.map +1 -1
  47. package/dist/authorization/permissions/loader.d.ts +18 -4
  48. package/dist/authorization/permissions/loader.d.ts.map +1 -1
  49. package/dist/authorization/permissions/loader.js +35 -24
  50. package/dist/authorization/permissions/loader.js.map +1 -1
  51. package/dist/authorization/permissions/schema.d.ts +8 -7
  52. package/dist/authorization/permissions/schema.d.ts.map +1 -1
  53. package/dist/authorization/permissions/schema.js +8 -4
  54. package/dist/authorization/permissions/schema.js.map +1 -1
  55. package/dist/authorization/settings-file-store.d.ts +127 -0
  56. package/dist/authorization/settings-file-store.d.ts.map +1 -0
  57. package/dist/authorization/settings-file-store.js +156 -0
  58. package/dist/authorization/settings-file-store.js.map +1 -0
  59. package/dist/branch-metadata.d.ts +11 -0
  60. package/dist/branch-metadata.d.ts.map +1 -1
  61. package/dist/branch-metadata.js +22 -0
  62. package/dist/branch-metadata.js.map +1 -1
  63. package/dist/branch-workspace.d.ts.map +1 -1
  64. package/dist/branch-workspace.js +1 -0
  65. package/dist/branch-workspace.js.map +1 -1
  66. package/dist/cli/cli.d.ts +20 -0
  67. package/dist/cli/cli.d.ts.map +1 -1
  68. package/dist/cli/cli.js +9618 -246
  69. package/dist/cli/cli.js.map +1 -1
  70. package/dist/cli/generate-ai-content.js +101 -12
  71. package/dist/cli/init.d.ts.map +1 -1
  72. package/dist/cli/init.js +25 -3
  73. package/dist/cli/init.js.map +1 -1
  74. package/dist/cli/migrate.d.ts.map +1 -1
  75. package/dist/cli/migrate.js +39 -11
  76. package/dist/cli/migrate.js.map +1 -1
  77. package/dist/cli/template-files/Dockerfile.cms.template +33 -1
  78. package/dist/cli/template-files/deploy-cms.yml.template +9 -1
  79. package/dist/cli/template-files/dockerignore.template +13 -0
  80. package/dist/cli/template-files/middleware-clerk.ts.template +12 -5
  81. package/dist/cli/template-files/middleware.ts.template +10 -5
  82. package/dist/cli/templates.d.ts +1 -0
  83. package/dist/cli/templates.d.ts.map +1 -1
  84. package/dist/cli/templates.js +3 -0
  85. package/dist/cli/templates.js.map +1 -1
  86. package/dist/config/index.d.ts +1 -1
  87. package/dist/config/index.d.ts.map +1 -1
  88. package/dist/config/index.js.map +1 -1
  89. package/dist/config/schemas/config.d.ts +68 -6
  90. package/dist/config/schemas/config.d.ts.map +1 -1
  91. package/dist/config/schemas/config.js +32 -2
  92. package/dist/config/schemas/config.js.map +1 -1
  93. package/dist/config/types.d.ts +31 -1
  94. package/dist/config/types.d.ts.map +1 -1
  95. package/dist/context.d.ts +3 -0
  96. package/dist/context.d.ts.map +1 -1
  97. package/dist/context.js +25 -3
  98. package/dist/context.js.map +1 -1
  99. package/dist/editor/BranchManager.d.ts +3 -0
  100. package/dist/editor/BranchManager.d.ts.map +1 -1
  101. package/dist/editor/BranchManager.js +18 -5
  102. package/dist/editor/BranchManager.js.map +1 -1
  103. package/dist/editor/hooks/useBranchManager.d.ts +3 -1
  104. package/dist/editor/hooks/useBranchManager.d.ts.map +1 -1
  105. package/dist/editor/hooks/useBranchManager.js +2 -0
  106. package/dist/editor/hooks/useBranchManager.js.map +1 -1
  107. package/dist/editor/hooks/useGroupManager.d.ts.map +1 -1
  108. package/dist/editor/hooks/useGroupManager.js +13 -2
  109. package/dist/editor/hooks/useGroupManager.js.map +1 -1
  110. package/dist/editor/hooks/usePermissionManager.d.ts.map +1 -1
  111. package/dist/editor/hooks/usePermissionManager.js +13 -2
  112. package/dist/editor/hooks/usePermissionManager.js.map +1 -1
  113. package/dist/git-manager.d.ts +39 -0
  114. package/dist/git-manager.d.ts.map +1 -1
  115. package/dist/git-manager.js +104 -8
  116. package/dist/git-manager.js.map +1 -1
  117. package/dist/schema/schema-store.d.ts +98 -0
  118. package/dist/schema/schema-store.d.ts.map +1 -1
  119. package/dist/schema/schema-store.js +187 -29
  120. package/dist/schema/schema-store.js.map +1 -1
  121. package/dist/settings-workspace.d.ts.map +1 -1
  122. package/dist/settings-workspace.js +1 -0
  123. package/dist/settings-workspace.js.map +1 -1
  124. package/dist/types.d.ts +13 -0
  125. package/dist/types.d.ts.map +1 -1
  126. package/dist/utils/git.d.ts +19 -0
  127. package/dist/utils/git.d.ts.map +1 -1
  128. package/dist/utils/git.js +47 -0
  129. package/dist/utils/git.js.map +1 -1
  130. package/dist/worker/cms-worker.d.ts +64 -0
  131. package/dist/worker/cms-worker.d.ts.map +1 -1
  132. package/dist/worker/cms-worker.js +318 -28
  133. package/dist/worker/cms-worker.js.map +1 -1
  134. package/package.json +1 -1
@@ -36,12 +36,19 @@ export const getBranchPermissions = (branch, user) => {
36
36
  const canPerformWorkflowActions = userIsCreator || userInACL || isSystemBranch || userIsAdmin || userIsReviewer;
37
37
  // Submit: Can perform workflow actions AND branch is in editing status
38
38
  const canSubmit = canPerformWorkflowActions && branch.status === 'editing';
39
- // Withdraw: Can perform workflow actions AND branch is in submitted status
39
+ // Withdraw: Can perform workflow actions AND branch is in submitted status.
40
+ // Allowed even when the PR was closed without merging -- that's the
41
+ // deliberate recovery path for a closed-unmerged PR (a later resubmit
42
+ // opens a fresh PR). The server skips the now-impossible draft conversion
43
+ // in that case; see api/branch-withdraw.ts.
40
44
  const canWithdraw = canPerformWorkflowActions && branch.status === 'submitted';
41
45
  // Delete: Admin or creator (but not if submitted)
42
46
  const canDelete = (userIsAdmin || userIsCreator) && branch.status !== 'submitted';
43
- // Request changes: Only Reviewers or Admins can request changes on submitted branches
44
- const canRequestChanges = (userIsAdmin || userIsReviewer) && branch.status === 'submitted';
47
+ // Request changes: Only Reviewers or Admins can request changes on submitted
48
+ // branches. Same closed-PR restriction as withdraw applies (converts PR to draft).
49
+ const canRequestChanges = (userIsAdmin || userIsReviewer) &&
50
+ branch.status === 'submitted' &&
51
+ branch.pullRequestState !== 'closed';
45
52
  return { canSubmit, canWithdraw, canDelete, canRequestChanges };
46
53
  };
47
54
  const statusColorMap = {
@@ -74,10 +81,16 @@ export const BranchManager = ({ branches, mode, user, onSelect, onCreate, onDele
74
81
  variant: 'light',
75
82
  };
76
83
  const perms = getBranchPermissions(b, user);
77
- return (_jsx(Paper, { withBorder: true, radius: "md", p: "md", shadow: "xs", "data-testid": `branch-list-item-${b.name}`, children: _jsxs(Group, { justify: "space-between", align: "flex-start", children: [_jsxs(Stack, { gap: 4, children: [_jsxs(Group, { gap: "xs", children: [_jsx(Text, { fw: 600, children: b.name }), _jsx(Badge, { color: statusColor.color, variant: statusColor.variant, "data-testid": `branch-status-badge-${b.name}`, children: b.status }), b.pullRequestNumber && (_jsxs(Badge, { color: "blue", variant: "light", children: ["PR #", b.pullRequestNumber] })), b.commentCount !== undefined && b.commentCount > 0 && (_jsxs(Badge, { color: "grape", variant: "light", children: [b.commentCount, " ", b.commentCount === 1 ? 'comment' : 'comments'] }))] }), _jsxs(Group, { gap: "xs", align: "center", children: [b.updatedAt && (_jsxs(Text, { size: "xs", c: "dimmed", children: ["Updated ", b.updatedAt] })), b.createdBy && (_jsxs(_Fragment, { children: [_jsx(Text, { size: "xs", c: "dimmed", children: "\u2022" }), _jsx(Text, { size: "xs", c: "dimmed", children: "Owner:" }), onGetUserMetadata ? (_jsx(UserBadge, { userId: b.createdBy, getUserMetadata: onGetUserMetadata, variant: "avatar-name", size: "xs", showEmailTooltip: true, showBadge: true, badgeVariant: "light", color: "gray" })) : (_jsx(Text, { size: "xs", c: "dimmed", children: b.createdBy }))] })), b.pullRequestUrl && (_jsxs(_Fragment, { children: [_jsx(Text, { size: "xs", c: "dimmed", children: "\u2022" }), _jsx(Text, { size: "xs", c: "blue", component: "a", href: b.pullRequestUrl, target: "_blank", rel: "noopener noreferrer", style: {
84
+ return (_jsx(Paper, { withBorder: true, radius: "md", p: "md", shadow: "xs", "data-testid": `branch-list-item-${b.name}`, children: _jsxs(Group, { justify: "space-between", align: "flex-start", children: [_jsxs(Stack, { gap: 4, children: [_jsxs(Group, { gap: "xs", children: [_jsx(Text, { fw: 600, children: b.name }), _jsx(Badge, { color: statusColor.color, variant: statusColor.variant, "data-testid": `branch-status-badge-${b.name}`, children: b.status }), b.status === 'archived' && b.mergedAt && (_jsx(Badge, { color: "teal", variant: "light", "data-testid": `branch-merged-badge-${b.name}`, children: "Merged" })), b.pullRequestNumber && (_jsxs(Badge, { color: b.pullRequestState === 'closed'
85
+ ? 'red'
86
+ : b.pullRequestState === 'merged'
87
+ ? 'violet'
88
+ : 'blue', variant: "light", children: ["PR #", b.pullRequestNumber, b.pullRequestState === 'closed' ? ' (closed)' : ''] })), b.commentCount !== undefined && b.commentCount > 0 && (_jsxs(Badge, { color: "grape", variant: "light", children: [b.commentCount, " ", b.commentCount === 1 ? 'comment' : 'comments'] }))] }), _jsxs(Group, { gap: "xs", align: "center", children: [b.updatedAt && (_jsxs(Text, { size: "xs", c: "dimmed", children: ["Updated ", b.updatedAt] })), b.createdBy && (_jsxs(_Fragment, { children: [_jsx(Text, { size: "xs", c: "dimmed", children: "\u2022" }), _jsx(Text, { size: "xs", c: "dimmed", children: "Owner:" }), onGetUserMetadata ? (_jsx(UserBadge, { userId: b.createdBy, getUserMetadata: onGetUserMetadata, variant: "avatar-name", size: "xs", showEmailTooltip: true, showBadge: true, badgeVariant: "light", color: "gray" })) : (_jsx(Text, { size: "xs", c: "dimmed", children: b.createdBy }))] })), b.pullRequestUrl && (_jsxs(_Fragment, { children: [_jsx(Text, { size: "xs", c: "dimmed", children: "\u2022" }), _jsx(Text, { size: "xs", c: "blue", component: "a", href: b.pullRequestUrl, target: "_blank", rel: "noopener noreferrer", style: {
78
89
  textDecoration: 'underline',
79
90
  cursor: 'pointer',
80
- }, children: "View PR" })] }))] }), b.access && (_jsxs(Group, { gap: 6, children: [b.access.users?.map((u) => onGetUserMetadata ? (_jsx(UserBadge, { userId: u, getUserMetadata: onGetUserMetadata, variant: "avatar-only", size: "xs", showEmailTooltip: true }, u)) : (_jsx(Badge, { variant: "outline", color: "neutral", children: u }, u))), b.access.groups?.map((g) => (_jsx(Badge, { variant: "outline", color: "neutral", children: g }, g)))] }))] }), _jsxs(Group, { gap: 8, children: [_jsx(Button, { size: "xs", variant: "light", onClick: () => onSelect?.(b.name), "data-testid": `switch-to-branch-button-${b.name}`, children: "Open" }), b.status === 'submitted' ? (_jsx(Tooltip, { label: "Only the branch creator can withdraw", disabled: perms.canWithdraw, children: _jsx(Button, { size: "xs", variant: "light", color: "orange", onClick: () => onWithdraw?.(b.name), disabled: !perms.canWithdraw, "data-testid": `withdraw-branch-button-${b.name}`, children: "Withdraw" }) })) : (_jsx(Tooltip, { label: "Only the branch creator can submit", disabled: perms.canSubmit, children: _jsx(Button, { size: "xs", variant: "light", color: "green", onClick: () => onSubmit?.(b.name), disabled: !perms.canSubmit, "data-testid": `submit-branch-button-${b.name}`, children: "Submit" }) })), _jsx(Tooltip, { label: "Only Reviewers or Admins can request changes", disabled: perms.canRequestChanges, children: _jsx(Button, { size: "xs", variant: "outline", color: "neutral", onClick: () => onRequestChanges?.(b.name), disabled: !perms.canRequestChanges, "data-testid": `request-changes-branch-button-${b.name}`, children: "Request changes" }) }), _jsx(Tooltip, { label: b.status === 'submitted'
91
+ }, children: "View PR" })] }))] }), b.access && (_jsxs(Group, { gap: 6, children: [b.access.users?.map((u) => onGetUserMetadata ? (_jsx(UserBadge, { userId: u, getUserMetadata: onGetUserMetadata, variant: "avatar-only", size: "xs", showEmailTooltip: true }, u)) : (_jsx(Badge, { variant: "outline", color: "neutral", children: u }, u))), b.access.groups?.map((g) => (_jsx(Badge, { variant: "outline", color: "neutral", children: g }, g)))] }))] }), _jsxs(Group, { gap: 8, children: [_jsx(Button, { size: "xs", variant: "light", onClick: () => onSelect?.(b.name), "data-testid": `switch-to-branch-button-${b.name}`, children: "Open" }), b.status === 'submitted' ? (_jsx(Tooltip, { label: "Only the branch creator can withdraw", disabled: perms.canWithdraw, children: _jsx(Button, { size: "xs", variant: "light", color: "orange", onClick: () => onWithdraw?.(b.name), disabled: !perms.canWithdraw, "data-testid": `withdraw-branch-button-${b.name}`, children: "Withdraw" }) })) : (_jsx(Tooltip, { label: "Only the branch creator can submit", disabled: perms.canSubmit, children: _jsx(Button, { size: "xs", variant: "light", color: "green", onClick: () => onSubmit?.(b.name), disabled: !perms.canSubmit, "data-testid": `submit-branch-button-${b.name}`, children: "Submit" }) })), _jsx(Tooltip, { label: b.pullRequestState === 'closed'
92
+ ? 'PR was closed on GitHub without merging'
93
+ : 'Only Reviewers or Admins can request changes', disabled: perms.canRequestChanges, children: _jsx(Button, { size: "xs", variant: "outline", color: "neutral", onClick: () => onRequestChanges?.(b.name), disabled: !perms.canRequestChanges, "data-testid": `request-changes-branch-button-${b.name}`, children: "Request changes" }) }), _jsx(Tooltip, { label: b.status === 'submitted'
81
94
  ? 'Cannot delete branch with open PR'
82
95
  : 'Only Admin or branch creator can delete', disabled: perms.canDelete, children: _jsx(Button, { size: "xs", variant: "outline", color: "red", onClick: () => onDelete?.(b.name), disabled: !perms.canDelete, "data-testid": `delete-branch-button-${b.name}`, children: "Delete" }) })] })] }) }, b.name));
83
96
  }) })) })] }));
@@ -1 +1 @@
1
- {"version":3,"file":"BranchManager.js","sourceRoot":"","sources":["../../src/editor/BranchManager.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"BranchManager.js","sourceRoot":"","sources":["../../src/editor/BranchManager.tsx"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { BranchMetadata } from '../../types';
1
+ import type { BranchMetadata, PullRequestState } from '../../types';
2
2
  import type { OperatingMode } from '../../operating-mode';
3
3
  import type { CommentThread } from '../../comment-store';
4
4
  /**
@@ -15,6 +15,8 @@ export interface BranchSummary {
15
15
  };
16
16
  pullRequestUrl?: string;
17
17
  pullRequestNumber?: number;
18
+ pullRequestState?: PullRequestState;
19
+ mergedAt?: string;
18
20
  commentCount: number;
19
21
  }
20
22
  export interface UseBranchManagerOptions {
@@ -1 +1 @@
1
- {"version":3,"file":"useBranchManager.d.ts","sourceRoot":"","sources":["../../../src/editor/hooks/useBranchManager.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AACjD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AA+CxD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE;QACN,KAAK,EAAE,MAAM,EAAE,GAAG,SAAS,CAAA;QAC3B,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,CAAA;KAC7B,CAAA;IACD,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,YAAY,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,WAAW,uBAAuB;IACtC;;OAEG;IACH,aAAa,EAAE,MAAM,CAAA;IAErB;;OAEG;IACH,aAAa,EAAE,aAAa,CAAA;IAE5B;;OAEG;IACH,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;IAEhC;;OAEG;IACH,QAAQ,EAAE,aAAa,EAAE,CAAA;CAC1B;AAED,MAAM,WAAW,sBAAsB;IACrC,UAAU,EAAE,MAAM,CAAA;IAClB,aAAa,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IACrC,QAAQ,EAAE,cAAc,EAAE,CAAA;IAC1B,eAAe,EAAE,aAAa,EAAE,CAAA;IAChC,aAAa,EAAE,cAAc,GAAG,SAAS,CAAA;IACzC,YAAY,EAAE,MAAM,CAAA;IACpB,YAAY,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACnD,cAAc,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACrD,oBAAoB,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC3D,YAAY,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACnD,sBAAsB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAC3C,YAAY,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAClC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,uBAAuB,GAAG,sBAAsB,CA6MzF"}
1
+ {"version":3,"file":"useBranchManager.d.ts","sourceRoot":"","sources":["../../../src/editor/hooks/useBranchManager.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AACnE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AA+CxD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE;QACN,KAAK,EAAE,MAAM,EAAE,GAAG,SAAS,CAAA;QAC3B,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,CAAA;KAC7B,CAAA;IACD,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,gBAAgB,CAAC,EAAE,gBAAgB,CAAA;IACnC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,YAAY,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,WAAW,uBAAuB;IACtC;;OAEG;IACH,aAAa,EAAE,MAAM,CAAA;IAErB;;OAEG;IACH,aAAa,EAAE,aAAa,CAAA;IAE5B;;OAEG;IACH,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;IAEhC;;OAEG;IACH,QAAQ,EAAE,aAAa,EAAE,CAAA;CAC1B;AAED,MAAM,WAAW,sBAAsB;IACrC,UAAU,EAAE,MAAM,CAAA;IAClB,aAAa,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IACrC,QAAQ,EAAE,cAAc,EAAE,CAAA;IAC1B,eAAe,EAAE,aAAa,EAAE,CAAA;IAChC,aAAa,EAAE,cAAc,GAAG,SAAS,CAAA;IACzC,YAAY,EAAE,MAAM,CAAA;IACpB,YAAY,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACnD,cAAc,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACrD,oBAAoB,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC3D,YAAY,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACnD,sBAAsB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAC3C,YAAY,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAClC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,uBAAuB,GAAG,sBAAsB,CA+MzF"}
@@ -88,6 +88,8 @@ export function useBranchManager(options) {
88
88
  },
89
89
  pullRequestUrl: b.pullRequestUrl,
90
90
  pullRequestNumber: b.pullRequestNumber,
91
+ pullRequestState: b.pullRequestState,
92
+ mergedAt: b.mergedAt,
91
93
  commentCount: unresolvedCount,
92
94
  };
93
95
  });
@@ -1 +1 @@
1
- {"version":3,"file":"useBranchManager.js","sourceRoot":"","sources":["../../../src/editor/hooks/useBranchManager.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useBranchManager.js","sourceRoot":"","sources":["../../../src/editor/hooks/useBranchManager.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AACpD,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAA;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AAItD,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAEzC;;GAEG;AACH,MAAM,sBAAsB,GAAG,CAC7B,UAAkB,EAClB,SAA8B,EAC9B,QAAoB,EACpB,EAAE;IACF,MAAM,CAAC,gBAAgB,CAAC;QACtB,KAAK,EAAE,0BAA0B;QACjC,QAAQ,EAAE,CACR,KAAC,IAAI,IAAC,IAAI,EAAC,IAAI,EAAC,KAAK,EAAE,EAAE,UAAU,EAAE,UAAU,EAAE,YAC9C,oCAAoC,UAAU,mJAAmJ,GAC7L,CACR;QACD,MAAM,EAAE,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,QAAQ,EAAE;QACtD,YAAY,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE;QAChC,QAAQ;QACR,SAAS;KACV,CAAC,CAAA;AACJ,CAAC,CAAA;AAED;;GAEG;AACH,MAAM,wBAAwB,GAAG,CAC/B,UAAkB,EAClB,SAA8B,EAC9B,QAAoB,EACpB,EAAE;IACF,MAAM,CAAC,gBAAgB,CAAC;QACtB,KAAK,EAAE,6BAA6B;QACpC,QAAQ,EAAE,CACR,KAAC,IAAI,IAAC,IAAI,EAAC,IAAI,EAAC,KAAK,EAAE,EAAE,UAAU,EAAE,UAAU,EAAE,YAC9C,sCAAsC,UAAU,+IAA+I,GAC3L,CACR;QACD,MAAM,EAAE,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,EAAE,QAAQ,EAAE;QACxD,YAAY,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE;QACjC,QAAQ;QACR,SAAS;KACV,CAAC,CAAA;AACJ,CAAC,CAAA;AA0DD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAgC;IAC/D,MAAM,SAAS,GAAG,YAAY,EAAE,CAAA;IAChC,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAS,OAAO,CAAC,aAAa,CAAC,CAAA;IAC3E,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAmB,EAAE,CAAC,CAAA;IAE9D,MAAM,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAA;IACjE,MAAM,YAAY,GAAG,aAAa,EAAE,MAAM,IAAI,SAAS,CAAA;IAEvD,+CAA+C;IAC/C,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,EAAE;QACnC,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YACxB,MAAM,cAAc,GAAG,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAA;YACpE,MAAM,eAAe,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAA;YACxE,OAAO;gBACL,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,MAAM,EAAE,CAAC,CAAC,MAAM;gBAChB,SAAS,EAAE,CAAC,CAAC,SAAS;gBACtB,SAAS,EAAE,CAAC,CAAC,SAAS;gBACtB,MAAM,EAAE;oBACN,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,YAAY;oBAC5B,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,aAAa;iBAC/B;gBACD,cAAc,EAAE,CAAC,CAAC,cAAc;gBAChC,iBAAiB,EAAE,CAAC,CAAC,iBAAiB;gBACtC,gBAAgB,EAAE,CAAC,CAAC,gBAAgB;gBACpC,QAAQ,EAAE,CAAC,CAAC,QAAQ;gBACpB,YAAY,EAAE,eAAe;aAC9B,CAAA;QACH,CAAC,CAAC,CAAA;IACJ,CAAC,EAAE,CAAC,QAAQ,EAAE,UAAU,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAA;IAE5C,MAAM,YAAY,GAAG,KAAK,IAAI,EAAE;QAC9B,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;QACrB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAA;YAC9C,IAAI,MAAM,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBAC1B,qEAAqE;gBACrE,mEAAmE;gBACnE,+DAA+D;gBAC/D,WAAW,CAAC,EAAE,CAAC,CAAA;gBACf,OAAM;YACR,CAAC;YACD,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;gBACf,oEAAoE;gBACpE,oDAAoD;gBACpD,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI,4BAA4B,MAAM,CAAC,MAAM,EAAE,CAAC,CAAA;YAC9E,CAAC;YACD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,EAAE,QAAQ,IAAI,EAAE,CAAA;YACxC,WAAW,CAAC,IAAI,CAAC,CAAA;YACjB,uEAAuE;YACvE,0EAA0E;YAC1E,aAAa,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAA;YACjD,iEAAiE;YACjE,8DAA8D;YAC9D,IAAI,CAAC,UAAU,IAAI,MAAM,CAAC,IAAI,EAAE,aAAa,EAAE,CAAC;gBAC9C,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;YAC1C,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;YAClB,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,yBAAyB,CAAA;YAC9E,0EAA0E;YAC1E,8DAA8D;YAC9D,aAAa,CAAC,IAAI,CAAC;gBACjB,EAAE,EAAE,6BAA6B;gBACjC,OAAO;gBACP,KAAK,EAAE,KAAK;gBACZ,SAAS,EAAE,KAAK;aACjB,CAAC,CAAA;QACJ,CAAC;gBAAS,CAAC;YACT,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;QACxB,CAAC;IACH,CAAC,CAAA;IAED,MAAM,YAAY,GAAG,KAAK,EAAE,kBAA0B,EAAE,EAAE;QACxD,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC3C,sBAAsB,CACpB,kBAAkB,EAClB,KAAK,IAAI,EAAE;gBACT,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;gBACrB,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC;wBAC7C,MAAM,EAAE,kBAAkB;qBAC3B,CAAC,CAAA;oBACF,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;wBACf,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI,yBAAyB,CAAC,CAAA;oBAC5D,CAAC;oBACD,aAAa,CAAC,IAAI,CAAC;wBACjB,OAAO,EAAE,6BAA6B;wBACtC,KAAK,EAAE,OAAO;qBACf,CAAC,CAAA;oBACF,MAAM,YAAY,EAAE,CAAA;oBACpB,OAAO,EAAE,CAAA;gBACX,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,yBAAyB,CAAA;oBAC9E,aAAa,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;oBAC7C,MAAM,CAAC,GAAG,CAAC,CAAA;gBACb,CAAC;wBAAS,CAAC;oBACT,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;gBACxB,CAAC;YACH,CAAC,EACD,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC,CACjD,CAAA;QACH,CAAC,CAAC,CAAA;IACJ,CAAC,CAAA;IAED,MAAM,cAAc,GAAG,KAAK,EAAE,oBAA4B,EAAE,EAAE;QAC5D,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC3C,wBAAwB,CACtB,oBAAoB,EACpB,KAAK,IAAI,EAAE;gBACT,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;gBACrB,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC;wBAC/C,MAAM,EAAE,oBAAoB;qBAC7B,CAAC,CAAA;oBACF,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;wBACf,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI,2BAA2B,CAAC,CAAA;oBAC9D,CAAC;oBACD,aAAa,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,kBAAkB,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;oBAClE,MAAM,YAAY,EAAE,CAAA;oBACpB,OAAO,EAAE,CAAA;gBACX,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,2BAA2B,CAAA;oBAChF,aAAa,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;oBAC7C,MAAM,CAAC,GAAG,CAAC,CAAA;gBACb,CAAC;wBAAS,CAAC;oBACT,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;gBACxB,CAAC;YACH,CAAC,EACD,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC,CACnD,CAAA;QACH,CAAC,CAAC,CAAA;IACJ,CAAC,CAAA;IAED,MAAM,oBAAoB,GAAG,KAAK,EAAE,oBAA4B,EAAE,EAAE;QAClE,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;QACrB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE,oBAAoB,EAAE,CAAC,CAAA;YACxF,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;gBACf,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI,2BAA2B,CAAC,CAAA;YAC9D,CAAC;YACD,aAAa,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,mBAAmB,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAA;YACrE,MAAM,YAAY,EAAE,CAAA;QACtB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,2BAA2B,CAAA;YAChF,aAAa,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;QAC/C,CAAC;gBAAS,CAAC;YACT,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;QACxB,CAAC;IACH,CAAC,CAAA;IAED,MAAM,YAAY,GAAG,KAAK,EAAE,kBAA0B,EAAE,EAAE;QACxD,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;QACrB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAC7C,MAAM,EAAE,kBAAkB;aAC3B,CAAC,CAAA;YACF,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;gBACf,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI,yBAAyB,CAAC,CAAA;YAC5D,CAAC;YACD,aAAa,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAA;YACjE,MAAM,YAAY,EAAE,CAAA;QACtB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,yBAAyB,CAAA;YAC9E,aAAa,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;QAC/C,CAAC;gBAAS,CAAC;YACT,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;QACxB,CAAC;IACH,CAAC,CAAA;IAED,MAAM,sBAAsB,GAAG,KAAK,IAAI,EAAE;QACxC,MAAM,YAAY,EAAE,CAAA;IACtB,CAAC,CAAA;IAED,qDAAqD;IAErD,SAAS,CAAC,GAAG,EAAE;QACb,YAAY,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;QACnC,iGAAiG;IACnG,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAA;IAEhB,+BAA+B;IAC/B,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,OAAO,MAAM,KAAK,WAAW;YAAE,OAAM;QACzC,IAAI,CAAC,UAAU;YAAE,OAAM;QACvB,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;QACzC,MAAM,OAAO,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QAC9C,IAAI,OAAO,KAAK,UAAU,EAAE,CAAC;YAC3B,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAA;YAC1C,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAA;QACrD,CAAC;IACH,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAA;IAEhB,OAAO;QACL,UAAU;QACV,aAAa;QACb,QAAQ;QACR,eAAe;QACf,aAAa;QACb,YAAY;QACZ,YAAY;QACZ,cAAc;QACd,oBAAoB;QACpB,YAAY;QACZ,sBAAsB;QACtB,YAAY;KACb,CAAA;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"useGroupManager.d.ts","sourceRoot":"","sources":["../../../src/editor/hooks/useGroupManager.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACxD,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAGvE,MAAM,WAAW,sBAAsB;IACrC;;;OAGG;IACH,MAAM,EAAE,OAAO,CAAA;CAChB;AAED,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,aAAa,EAAE,CAAA;IAC3B,aAAa,EAAE,OAAO,CAAA;IACtB,gBAAgB,EAAE,CAAC,MAAM,EAAE,aAAa,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC5D,iBAAiB,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAA;IACjF,qBAAqB,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAA;IAC3E,0BAA0B,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,aAAa,EAAE,CAAC,CAAA;IACvE,UAAU,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAChC;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG,qBAAqB,CA2FtF"}
1
+ {"version":3,"file":"useGroupManager.d.ts","sourceRoot":"","sources":["../../../src/editor/hooks/useGroupManager.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACxD,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAGvE,MAAM,WAAW,sBAAsB;IACrC;;;OAGG;IACH,MAAM,EAAE,OAAO,CAAA;CAChB;AAED,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,aAAa,EAAE,CAAA;IAC3B,aAAa,EAAE,OAAO,CAAA;IACtB,gBAAgB,EAAE,CAAC,MAAM,EAAE,aAAa,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC5D,iBAAiB,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAA;IACjF,qBAAqB,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAA;IAC3E,0BAA0B,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,aAAa,EAAE,CAAC,CAAA;IACvE,UAAU,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAChC;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG,qBAAqB,CAsGtF"}
@@ -1,4 +1,4 @@
1
- import { useCallback, useEffect, useState } from 'react';
1
+ import { useCallback, useEffect, useRef, useState } from 'react';
2
2
  import { notifications } from '@mantine/notifications';
3
3
  import { useApiClient } from '../context/index.js';
4
4
  /**
@@ -28,6 +28,13 @@ export function useGroupManager(options) {
28
28
  const apiClient = useApiClient();
29
29
  const [groupsData, setGroupsData] = useState([]);
30
30
  const [groupsLoading, setGroupsLoading] = useState(false);
31
+ // Last-loaded version, sent back as expectedContentVersion on save so the
32
+ // server can detect a conflicting edit from another user (see
33
+ // api/groups.ts's updateInternalGroupsHandler). Deliberately NOT
34
+ // auto-updated on a 409 — the user must reopen the manager (which reloads)
35
+ // to pick up the latest version, rather than silently retrying and risking
36
+ // an overwrite.
37
+ const versionRef = useRef(0);
31
38
  const loadGroups = async () => {
32
39
  setGroupsLoading(true);
33
40
  try {
@@ -35,6 +42,7 @@ export function useGroupManager(options) {
35
42
  if (!result.ok)
36
43
  throw new Error('Failed to load groups');
37
44
  setGroupsData(result.data?.groups ?? []);
45
+ versionRef.current = result.data?.version ?? 0;
38
46
  }
39
47
  catch (err) {
40
48
  console.error('Failed to load groups:', err);
@@ -46,7 +54,10 @@ export function useGroupManager(options) {
46
54
  };
47
55
  const handleSaveGroups = useCallback(async (groups) => {
48
56
  try {
49
- const result = await apiClient.groups.updateInternal({ groups });
57
+ const result = await apiClient.groups.updateInternal({
58
+ groups,
59
+ expectedContentVersion: versionRef.current,
60
+ });
50
61
  if (!result.ok) {
51
62
  throw new Error(result.error || 'Failed to save groups');
52
63
  }
@@ -1 +1 @@
1
- {"version":3,"file":"useGroupManager.js","sourceRoot":"","sources":["../../../src/editor/hooks/useGroupManager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useGroupManager.js","sourceRoot":"","sources":["../../../src/editor/hooks/useGroupManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AAGtD,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAoBzC;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,UAAU,eAAe,CAAC,OAA+B;IAC7D,MAAM,SAAS,GAAG,YAAY,EAAE,CAAA;IAChC,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAkB,EAAE,CAAC,CAAA;IACjE,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IACzD,0EAA0E;IAC1E,8DAA8D;IAC9D,iEAAiE;IACjE,2EAA2E;IAC3E,2EAA2E;IAC3E,gBAAgB;IAChB,MAAM,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;IAE5B,MAAM,UAAU,GAAG,KAAK,IAAI,EAAE;QAC5B,gBAAgB,CAAC,IAAI,CAAC,CAAA;QACtB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,WAAW,EAAE,CAAA;YACnD,IAAI,CAAC,MAAM,CAAC,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAA;YACxD,aAAa,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,IAAI,EAAE,CAAC,CAAA;YACxC,UAAU,CAAC,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,OAAO,IAAI,CAAC,CAAA;QAChD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,GAAG,CAAC,CAAA;YAC5C,aAAa,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,uBAAuB,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;QACxE,CAAC;gBAAS,CAAC;YACT,gBAAgB,CAAC,KAAK,CAAC,CAAA;QACzB,CAAC;IACH,CAAC,CAAA;IAED,MAAM,gBAAgB,GAAG,WAAW,CAAC,KAAK,EAAE,MAAuB,EAAE,EAAE;QACrE,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,cAAc,CAAC;gBACnD,MAAM;gBACN,sBAAsB,EAAE,UAAU,CAAC,OAAO;aAC3C,CAAC,CAAA;YACF,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;gBACf,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI,uBAAuB,CAAC,CAAA;YAC1D,CAAC;YACD,aAAa,CAAC,IAAI,CAAC;gBACjB,KAAK,EAAE,cAAc;gBACrB,OAAO,EAAE,mCAAmC;gBAC5C,KAAK,EAAE,OAAO;aACf,CAAC,CAAA;YACF,MAAM,UAAU,EAAE,CAAA;QACpB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,uBAAuB,CAAA;YAC5E,aAAa,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;YAC7C,MAAM,GAAG,CAAA;QACX,CAAC;IACH,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,MAAM,iBAAiB,GAAG,WAAW,CAAC,KAAK,EAAE,KAAa,EAAE,KAAc,EAAE,EAAE;QAC5E,IAAI,CAAC;YACH,MAAM,MAAM,GAA2B,EAAE,CAAC,EAAE,KAAK,EAAE,CAAA;YACnD,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;YAC9B,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,WAAW,CAAC,WAAW,CAAC,MAAM,CAAC,CAAA;YAC9D,IAAI,CAAC,MAAM,CAAC,EAAE;gBAAE,OAAO,EAAE,CAAA;YACzB,OAAO,MAAM,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE,CAAA;QACjC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,qBAAqB,EAAE,GAAG,CAAC,CAAA;YACzC,OAAO,EAAE,CAAA;QACX,CAAC;IACH,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,MAAM,qBAAqB,GAAG,WAAW,CAAC,KAAK,EAAE,MAAc,EAAE,EAAE;QACjE,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,WAAW,CAAC,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC,CAAA;YACtE,IAAI,CAAC,MAAM,CAAC,EAAE;gBAAE,OAAO,IAAI,CAAA;YAC3B,OAAO,MAAM,CAAC,IAAI,EAAE,IAAI,IAAI,IAAI,CAAA;QAClC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,GAAG,CAAC,CAAA;YAC/C,OAAO,IAAI,CAAA;QACb,CAAC;IACH,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,MAAM,0BAA0B,GAAG,WAAW,CAAC,KAAK,EAAE,KAAa,EAAE,EAAE;QACrE,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAAA;YAClE,IAAI,CAAC,MAAM,CAAC,EAAE;gBAAE,OAAO,EAAE,CAAA;YACzB,OAAO,MAAM,CAAC,IAAI,EAAE,MAAM,IAAI,EAAE,CAAA;QAClC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,GAAG,CAAC,CAAA;YACnD,OAAO,EAAE,CAAA;QACX,CAAC;IACH,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,uCAAuC;IACvC,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,UAAU,EAAE,CAAA;QACd,CAAC;IACH,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAA;IAEpB,OAAO;QACL,UAAU;QACV,aAAa;QACb,gBAAgB;QAChB,iBAAiB;QACjB,qBAAqB;QACrB,0BAA0B;QAC1B,UAAU;KACX,CAAA;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"usePermissionManager.d.ts","sourceRoot":"","sources":["../../../src/editor/hooks/usePermissionManager.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAClD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAGrD,MAAM,WAAW,2BAA2B;IAC1C;;;OAGG;IACH,MAAM,EAAE,OAAO,CAAA;CAChB;AAED,MAAM,WAAW,0BAA0B;IACzC,eAAe,EAAE,cAAc,EAAE,CAAA;IACjC,kBAAkB,EAAE,OAAO,CAAA;IAC3B,qBAAqB,EAAE,CAAC,WAAW,EAAE,cAAc,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACvE,gBAAgB,EAAE,MAAM,OAAO,CAAC,aAAa,EAAE,CAAC,CAAA;IAChD,eAAe,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CACrC;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,2BAA2B,GACnC,0BAA0B,CAkE5B"}
1
+ {"version":3,"file":"usePermissionManager.d.ts","sourceRoot":"","sources":["../../../src/editor/hooks/usePermissionManager.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAClD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAGrD,MAAM,WAAW,2BAA2B;IAC1C;;;OAGG;IACH,MAAM,EAAE,OAAO,CAAA;CAChB;AAED,MAAM,WAAW,0BAA0B;IACzC,eAAe,EAAE,cAAc,EAAE,CAAA;IACjC,kBAAkB,EAAE,OAAO,CAAA;IAC3B,qBAAqB,EAAE,CAAC,WAAW,EAAE,cAAc,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACvE,gBAAgB,EAAE,MAAM,OAAO,CAAC,aAAa,EAAE,CAAC,CAAA;IAChD,eAAe,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CACrC;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,2BAA2B,GACnC,0BAA0B,CA6E5B"}
@@ -1,4 +1,4 @@
1
- import { useEffect, useState } from 'react';
1
+ import { useEffect, useRef, useState } from 'react';
2
2
  import { notifications } from '@mantine/notifications';
3
3
  import { useApiClient } from '../context/index.js';
4
4
  /**
@@ -27,6 +27,13 @@ export function usePermissionManager(options) {
27
27
  const apiClient = useApiClient();
28
28
  const [permissionsData, setPermissionsData] = useState([]);
29
29
  const [permissionsLoading, setPermissionsLoading] = useState(false);
30
+ // Last-loaded version, sent back as expectedContentVersion on save so the
31
+ // server can detect a conflicting edit from another user (see
32
+ // api/permissions.ts's updatePermissionsHandler). Deliberately NOT
33
+ // auto-updated on a 409 — the user must reopen the manager (which reloads)
34
+ // to pick up the latest version, rather than silently retrying and risking
35
+ // an overwrite.
36
+ const versionRef = useRef(0);
30
37
  const loadPermissions = async () => {
31
38
  setPermissionsLoading(true);
32
39
  try {
@@ -34,6 +41,7 @@ export function usePermissionManager(options) {
34
41
  if (!result.ok)
35
42
  throw new Error('Failed to load permissions');
36
43
  setPermissionsData(result.data?.permissions ?? []);
44
+ versionRef.current = result.data?.version ?? 0;
37
45
  }
38
46
  catch (err) {
39
47
  console.error('Failed to load permissions:', err);
@@ -48,7 +56,10 @@ export function usePermissionManager(options) {
48
56
  };
49
57
  const handleSavePermissions = async (permissions) => {
50
58
  try {
51
- const result = await apiClient.permissions.update({ permissions });
59
+ const result = await apiClient.permissions.update({
60
+ permissions,
61
+ expectedContentVersion: versionRef.current,
62
+ });
52
63
  if (!result.ok) {
53
64
  throw new Error(result.error || 'Failed to save permissions');
54
65
  }
@@ -1 +1 @@
1
- {"version":3,"file":"usePermissionManager.js","sourceRoot":"","sources":["../../../src/editor/hooks/usePermissionManager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"usePermissionManager.js","sourceRoot":"","sources":["../../../src/editor/hooks/usePermissionManager.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,7 @@
1
1
  import { type SimpleGitOptions, type StatusResult } from 'simple-git';
2
2
  import type { OperatingMode } from './operating-mode';
3
+ /** @internal — exported for tests only. */
4
+ export declare function gitChildEnv(overrides: Record<string, string>): Record<string, string>;
3
5
  /**
4
6
  * Add a pattern to a repo's .git/info/exclude (a per-repository gitignore that
5
7
  * never gets committed) so runtime metadata like .canopy-meta/ can't be staged
@@ -30,6 +32,12 @@ export interface ResolveRemoteUrlOptions {
30
32
  defaultRemoteUrl?: string;
31
33
  baseBranch: string;
32
34
  sourceRoot?: string;
35
+ /**
36
+ * Escape hatch: allow a resolved NETWORK remote URL (from remoteUrl/
37
+ * defaultRemoteUrl/the strategy env var) in prod mode. See CanopyConfig's
38
+ * `allowNetworkRemoteInProd` doc comment. Has no effect in dev mode.
39
+ */
40
+ allowNetworkRemoteInProd?: boolean;
33
41
  }
34
42
  export interface InitializeWorkspaceOptions {
35
43
  workspacePath: string;
@@ -40,6 +48,12 @@ export interface InitializeWorkspaceOptions {
40
48
  defaultRemoteUrl?: string;
41
49
  remoteUrl?: string;
42
50
  remoteName?: string;
51
+ /**
52
+ * Escape hatch: allow a resolved NETWORK remote URL in prod mode. Threaded
53
+ * through to `resolveRemoteUrl` — see its option of the same name and
54
+ * CanopyConfig's `allowNetworkRemoteInProd` doc comment.
55
+ */
56
+ allowNetworkRemoteInProd?: boolean;
43
57
  branchType: 'content' | 'orphan';
44
58
  /** Git author name for internal commits (e.g., orphan branch init). */
45
59
  gitBotAuthorName: string;
@@ -118,6 +132,26 @@ export declare class GitManager {
118
132
  * @throws Error if git repo doesn't exist
119
133
  */
120
134
  static validateGitRepoExists(repoPath: string): Promise<void>;
135
+ /**
136
+ * Guards prod mode against pointing git operations at a NETWORK remote
137
+ * (http(s)://, ssh://, git://, or scp-like `user@host:path`).
138
+ *
139
+ * In the intended prod architecture the CMS Lambda has no internet access:
140
+ * all git network I/O happens on the EC2 worker against the EFS-local bare
141
+ * repo `{workspace}/remote.git`, which the Lambda reaches via auto-detect
142
+ * (see `resolveRemoteUrl`'s auto-detect step, which always yields a local
143
+ * path by construction — never checked here). A network URL supplied via
144
+ * any of the three resolvable sources (explicit param, config, env var) is
145
+ * almost always a misconfiguration: the internet-less Lambda would try to
146
+ * clone/fetch/push it directly and hang until timeout.
147
+ *
148
+ * Dev mode is never restricted here — this only fires for `mode === 'prod'`.
149
+ * `file://` URLs and plain filesystem paths are LOCAL and always allowed.
150
+ *
151
+ * @param source - Human-readable description of where `url` came from, used
152
+ * only in the thrown error message (e.g. "config.defaultRemoteUrl").
153
+ */
154
+ private static assertRemoteUrlAllowedInMode;
121
155
  /**
122
156
  * Resolves the remote URL for git operations following the priority:
123
157
  * 1. Explicit remoteUrl parameter
@@ -127,6 +161,11 @@ export declare class GitManager {
127
161
  *
128
162
  * Uses strategy flags to determine behavior, GitManager executes the logic.
129
163
  *
164
+ * In prod mode, a resolved network URL from any of the first three sources
165
+ * is rejected unless `options.allowNetworkRemoteInProd` is set — see
166
+ * `assertRemoteUrlAllowedInMode`. Auto-detect/auto-init (source 4) are never
167
+ * checked: they always yield a local filesystem path by construction.
168
+ *
130
169
  * @param options.sourceRoot - Optional source directory for monorepos. When provided,
131
170
  * this directory (relative to git root) is used as the source for the simulated remote.
132
171
  * Defaults to process.cwd().
@@ -1 +1 @@
1
- {"version":3,"file":"git-manager.d.ts","sourceRoot":"","sources":["../src/git-manager.ts"],"names":[],"mappings":"AAGA,OAAO,EAIL,KAAK,gBAAgB,EACrB,KAAK,YAAY,EAClB,MAAM,YAAY,CAAA;AAInB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAYrD;;;;;GAKG;AACH,wBAAsB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA4B9F;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf;;;;;OAKG;IACH,eAAe,CAAC,EAAE,OAAO,CAAA;CAC1B;AAED,MAAM,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,EAAE,OAAO,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,GAAG,UAAU,CAAC,CAAA;AAEjG,qBAAa,gBAAiB,SAAQ,KAAK;aACb,eAAe,EAAE,MAAM,EAAE;gBAAzB,eAAe,EAAE,MAAM,EAAE;CAItD;AAED,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,aAAa,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,0BAA0B;IACzC,aAAa,EAAE,MAAM,CAAA;IACrB,UAAU,EAAE,MAAM,CAAA;IAClB,IAAI,EAAE,aAAa,CAAA;IACnB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,SAAS,GAAG,QAAQ,CAAA;IAChC,uEAAuE;IACvE,gBAAgB,EAAE,MAAM,CAAA;IACxB,wEAAwE;IACxE,iBAAiB,EAAE,MAAM,CAAA;IACzB;;;;;;OAMG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAC3B;AAED,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAW;IAC/B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAQ;IACjC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAQ;IACnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAQ;IAC/B,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;gBAE7B,OAAO,EAAE,iBAAiB,EAAE,UAAU,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC;WAYjE,SAAS,CACpB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,UAAU,SAAS,GAClB,OAAO,CAAC,IAAI,CAAC;IAWhB;;;;;;;;;;;;;;OAcG;WACU,0BAA0B,CAAC,OAAO,EAAE;QAC/C,UAAU,EAAE,MAAM,CAAA;QAClB,UAAU,EAAE,MAAM,CAAA;QAClB,UAAU,EAAE,MAAM,CAAA;QAClB,YAAY,CAAC,EAAE,MAAM,CAAA;KACtB,GAAG,OAAO,CAAC,IAAI,CAAC;IAkJjB;;;;;;;;;;;;OAYG;mBACkB,mBAAmB;IAaxC;;;;;;;;OAQG;mBACkB,uBAAuB;IAuD5C;;;OAGG;WACU,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC;IAY3C;;;;OAIG;WACU,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAcnE;;;;;;;;;;;;;;OAcG;WACU,gBAAgB,CAAC,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAgD5F;;;;;;;;;;OAUG;WACU,mBAAmB,CAAC,OAAO,EAAE,0BAA0B,GAAG,OAAO,CAAC,UAAU,CAAC;IAoIpF,MAAM,IAAI,OAAO,CAAC,SAAS,CAAC;IAWlC;;;;;;;;;;;;;;;;OAgBG;YACW,wBAAwB;IAQhC,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YAQrC,mBAAmB;IAuC3B,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;YAQjB,aAAa;IAoBrB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;YAQ1B,sBAAsB;IAmB9B,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;YAQvB,mBAAmB;IAiB3B,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAK5C,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAItC,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBpC,YAAY,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAwBpE,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA0BpD;;OAEG;IACG,qBAAqB,IAAI,OAAO,CAAC,OAAO,CAAC;IAK/C;;OAEG;IACG,mBAAmB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAK9C;;;OAGG;IACG,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAM/C;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAMjD;;;;;;;;OAQG;IACG,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAItD;;;;;;;;;;;OAWG;IACG,0BAA0B,CAC9B,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACnC,OAAO,CAAC,IAAI,CAAC;YASF,+BAA+B;CA4C9C"}
1
+ {"version":3,"file":"git-manager.d.ts","sourceRoot":"","sources":["../src/git-manager.ts"],"names":[],"mappings":"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"}
@@ -5,9 +5,34 @@ import { invalidateContentIndexesForRoot } from './content-index-registry.js';
5
5
  import { invalidateBranchContentCaches } from './content-index-generation.js';
6
6
  import { createDebugLogger } from './utils/debug.js';
7
7
  import { getErrorMessage, isNotFoundError } from './utils/error.js';
8
- import { resolveBaseBranch } from './utils/git.js';
8
+ import { isNetworkRemoteUrl, resolveBaseBranch } from './utils/git.js';
9
9
  import { acquireProvisioningLock } from './utils/provisioning-lock.js';
10
10
  const log = createDebugLogger({ prefix: 'GitManager' });
11
+ /**
12
+ * Child environment for spawned git processes. simple-git's .env() REPLACES
13
+ * the child env entirely (deploy-proven 2026-07-24: every Lambda git spawn
14
+ * failed with "dubious ownership" on the uid-1000-owned EFS clones because
15
+ * the child env lost the runtime's git variables). Spreading ALL of
16
+ * process.env trips simple-git's unsafe-variable blocklist on hosts where
17
+ * GIT_EDITOR/GIT_SSH_COMMAND etc. are set - so pass through a deterministic
18
+ * ALLOWLIST of process basics + author/tracing families.
19
+ *
20
+ * GIT_CONFIG_* is deliberately NOT passed through: simple-git hard-blocks
21
+ * env-based git config (allowUnsafeConfigEnvCount) since it can inject
22
+ * arbitrary settings. Host-level config like the safe.directory workaround
23
+ * for uid-mismatched EFS clones belongs in the image's SYSTEM gitconfig -
24
+ * see Dockerfile.cms.template's `git config --system` line.
25
+ */
26
+ const GIT_ENV_PASSTHROUGH = /^(PATH|HOME|USER|LANG|LC_[A-Z]+|TZ|TMPDIR|GIT_(AUTHOR|COMMITTER)_(NAME|EMAIL|DATE)|GIT_TERMINAL_PROMPT|GIT_TRACE[0-9A-Z_]*)$/;
27
+ /** @internal — exported for tests only. */
28
+ export function gitChildEnv(overrides) {
29
+ const env = {};
30
+ for (const [key, value] of Object.entries(process.env)) {
31
+ if (value !== undefined && GIT_ENV_PASSTHROUGH.test(key))
32
+ env[key] = value;
33
+ }
34
+ return { ...env, ...overrides };
35
+ }
11
36
  // In-memory lock to prevent concurrent remote.git initialization
12
37
  // Maps remotePath -> Promise<void> to serialize access
13
38
  const remoteInitLocks = new Map();
@@ -57,10 +82,26 @@ export class GitManager {
57
82
  this.remote = options.remote ?? 'origin';
58
83
  this.skipIndexMarker = options.skipIndexMarker ?? false;
59
84
  this.git = simpleGit({ baseDir: this.repoPath, ...gitOptions });
85
+ // `this.git` is for LOCAL working-tree ops in the intended prod topology,
86
+ // where `origin` resolves to a local path (an auto-detected/initialized
87
+ // `remote.git`) - its env is the allowlist from gitChildEnv, which
88
+ // intentionally drops HTTPS_PROXY/GIT_SSL_*/GIT_SSH_COMMAND/etc. Do NOT
89
+ // route GitHub network I/O through it - the worker uses fresh full-env
90
+ // simpleGit() instances for push/fetch so proxy/TLS vars survive.
91
+ //
92
+ // Under the `allowNetworkRemoteInProd` escape hatch, `this.remote` CAN be
93
+ // a network URL, and this.git.fetch(this.remote, ...)/this.git.raw(['push',
94
+ // ...]) do hit it - those calls still run with the restricted allowlist
95
+ // env above, so they will drop HTTPS_PROXY/GIT_SSL_*/GIT_SSH_COMMAND. This
96
+ // is a known limitation of that escape hatch (tracked in
97
+ // .claude/future-tasks/network-escape-hatch-git-env.md), not a bug: full
98
+ // proxy/TLS-env support for `this.remote` ops when the escape hatch is on
99
+ // is still open work.
100
+ //
60
101
  // Prevent git from traversing above repoPath to find a parent .git directory.
61
102
  // If the workspace's .git is corrupt/missing, git should fail rather than
62
103
  // silently operating on the host repo above.
63
- this.git.env('GIT_CEILING_DIRECTORIES', path.dirname(this.repoPath));
104
+ this.git.env(gitChildEnv({ GIT_CEILING_DIRECTORIES: path.dirname(this.repoPath) }));
64
105
  }
65
106
  static async cloneRepo(remoteUrl, targetPath, baseBranch = 'main') {
66
107
  log.debug('git', 'Cloning repository', {
@@ -334,6 +375,41 @@ export class GitManager {
334
375
  throw err;
335
376
  }
336
377
  }
378
+ /**
379
+ * Guards prod mode against pointing git operations at a NETWORK remote
380
+ * (http(s)://, ssh://, git://, or scp-like `user@host:path`).
381
+ *
382
+ * In the intended prod architecture the CMS Lambda has no internet access:
383
+ * all git network I/O happens on the EC2 worker against the EFS-local bare
384
+ * repo `{workspace}/remote.git`, which the Lambda reaches via auto-detect
385
+ * (see `resolveRemoteUrl`'s auto-detect step, which always yields a local
386
+ * path by construction — never checked here). A network URL supplied via
387
+ * any of the three resolvable sources (explicit param, config, env var) is
388
+ * almost always a misconfiguration: the internet-less Lambda would try to
389
+ * clone/fetch/push it directly and hang until timeout.
390
+ *
391
+ * Dev mode is never restricted here — this only fires for `mode === 'prod'`.
392
+ * `file://` URLs and plain filesystem paths are LOCAL and always allowed.
393
+ *
394
+ * @param source - Human-readable description of where `url` came from, used
395
+ * only in the thrown error message (e.g. "config.defaultRemoteUrl").
396
+ */
397
+ static assertRemoteUrlAllowedInMode(mode, url, source, allowNetworkRemoteInProd) {
398
+ if (mode !== 'prod')
399
+ return;
400
+ if (allowNetworkRemoteInProd)
401
+ return;
402
+ if (!isNetworkRemoteUrl(url))
403
+ return;
404
+ throw new Error(`CanopyCMS: refusing to use a network remote URL in prod mode (from ${source}: "${url}"). ` +
405
+ `The standard AWS Lambda+EC2-worker topology runs the CMS Lambda with no internet ` +
406
+ `access — the EC2 worker owns all network git I/O, and the Lambda is expected to reach ` +
407
+ `the EFS-local bare repo ({workspace}/remote.git) via auto-detect instead. Pointing a ` +
408
+ `network URL here would make the internet-less Lambda try to clone/fetch/push it ` +
409
+ `directly and hang until timeout. If this prod host genuinely has internet access and ` +
410
+ `intentionally runs git against a network remote (e.g. a single-VM deployment), set ` +
411
+ `config.allowNetworkRemoteInProd: true to acknowledge this.`);
412
+ }
337
413
  /**
338
414
  * Resolves the remote URL for git operations following the priority:
339
415
  * 1. Explicit remoteUrl parameter
@@ -343,6 +419,11 @@ export class GitManager {
343
419
  *
344
420
  * Uses strategy flags to determine behavior, GitManager executes the logic.
345
421
  *
422
+ * In prod mode, a resolved network URL from any of the first three sources
423
+ * is rejected unless `options.allowNetworkRemoteInProd` is set — see
424
+ * `assertRemoteUrlAllowedInMode`. Auto-detect/auto-init (source 4) are never
425
+ * checked: they always yield a local filesystem path by construction.
426
+ *
346
427
  * @param options.sourceRoot - Optional source directory for monorepos. When provided,
347
428
  * this directory (relative to git root) is used as the source for the simulated remote.
348
429
  * Defaults to process.cwd().
@@ -356,12 +437,19 @@ export class GitManager {
356
437
  const strategy = operatingStrategy(options.mode);
357
438
  const config = strategy.getRemoteUrlConfig();
358
439
  // Centralized priority chain (no duplication across strategies)
359
- if (options.remoteUrl)
440
+ if (options.remoteUrl) {
441
+ this.assertRemoteUrlAllowedInMode(options.mode, options.remoteUrl, 'the explicit remoteUrl parameter', options.allowNetworkRemoteInProd);
360
442
  return options.remoteUrl;
361
- if (options.defaultRemoteUrl)
443
+ }
444
+ if (options.defaultRemoteUrl) {
445
+ this.assertRemoteUrlAllowedInMode(options.mode, options.defaultRemoteUrl, 'config.defaultRemoteUrl', options.allowNetworkRemoteInProd);
362
446
  return options.defaultRemoteUrl;
363
- if (process.env[config.envVarName])
364
- return process.env[config.envVarName];
447
+ }
448
+ const envUrl = process.env[config.envVarName];
449
+ if (envUrl) {
450
+ this.assertRemoteUrlAllowedInMode(options.mode, envUrl, `the ${config.envVarName} environment variable`, options.allowNetworkRemoteInProd);
451
+ return envUrl;
452
+ }
365
453
  // Auto-detect: check if a pre-existing remote.git exists at the expected path
366
454
  // (e.g., created by EC2 worker on EFS in prod mode)
367
455
  if (config.autoDetectRemotePath) {
@@ -421,7 +509,7 @@ export class GitManager {
421
509
  try {
422
510
  const checkGit = simpleGit({ baseDir: options.workspacePath });
423
511
  // Ceiling prevents git from traversing to a parent repo if .git is corrupt
424
- checkGit.env('GIT_CEILING_DIRECTORIES', path.dirname(options.workspacePath));
512
+ checkGit.env(gitChildEnv({ GIT_CEILING_DIRECTORIES: path.dirname(options.workspacePath) }));
425
513
  await checkGit.raw(['rev-parse', '--git-dir']);
426
514
  repoExists = true;
427
515
  }
@@ -452,6 +540,7 @@ export class GitManager {
452
540
  defaultRemoteUrl: options.defaultRemoteUrl,
453
541
  baseBranch,
454
542
  sourceRoot: options.sourceRoot,
543
+ allowNetworkRemoteInProd: options.allowNetworkRemoteInProd,
455
544
  });
456
545
  // Require remoteUrl for cloning
457
546
  if (!remoteUrl) {
@@ -473,7 +562,7 @@ export class GitManager {
473
562
  // global gitconfig, and internal commits (e.g., orphan branch init) need one.
474
563
  // The real bot author is set later via ensureAuthor() before user-facing commits.
475
564
  const freshGit = simpleGit({ baseDir: options.workspacePath });
476
- freshGit.env('GIT_CEILING_DIRECTORIES', path.dirname(options.workspacePath));
565
+ freshGit.env(gitChildEnv({ GIT_CEILING_DIRECTORIES: path.dirname(options.workspacePath) }));
477
566
  await freshGit.addConfig('canopycms.managed', 'true');
478
567
  await freshGit.addConfig('user.name', options.gitBotAuthorName);
479
568
  await freshGit.addConfig('user.email', options.gitBotAuthorEmail);
@@ -505,6 +594,7 @@ export class GitManager {
505
594
  defaultRemoteUrl: options.defaultRemoteUrl,
506
595
  baseBranch,
507
596
  sourceRoot: options.sourceRoot,
597
+ allowNetworkRemoteInProd: options.allowNetworkRemoteInProd,
508
598
  });
509
599
  if (remoteUrl) {
510
600
  await git.ensureRemote(remoteUrl);
@@ -513,6 +603,12 @@ export class GitManager {
513
603
  // 6. Checkout or create branch based on type
514
604
  if (options.branchType === 'orphan') {
515
605
  await git.createOrphanSettingsBranch(options.branchName, {});
606
+ // Settings mutations hold an OCC lockfile (<file>.lock, see
607
+ // authorization/settings-file-store.ts) inside this git-committed
608
+ // workspace. Commits here use scoped `git add <file>` today, but a
609
+ // crash-orphaned lock dir must never be committable by a future broad
610
+ // stage either. Runs on every init, so existing clones pick it up.
611
+ await git.ensureGitExclude('*.lock');
516
612
  }
517
613
  else {
518
614
  await git.checkoutBranch(options.branchName);