@shipwithai/loopnote 0.0.0-stage → 2.0.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 (151) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +202 -2
  3. package/THIRD_PARTY_NOTICES.md +580 -0
  4. package/dist/bin/loopnote.mjs +5 -0
  5. package/dist/cli/confirm.js +38 -0
  6. package/dist/cli/picker.js +342 -0
  7. package/dist/cli/request.js +120 -0
  8. package/dist/cli/run.js +970 -0
  9. package/dist/contracts/api.js +640 -0
  10. package/dist/contracts/comparison.js +178 -0
  11. package/dist/contracts/draft.js +606 -0
  12. package/dist/contracts/request.js +124 -0
  13. package/dist/domain/anchor.js +122 -0
  14. package/dist/domain/comparison-key.js +51 -0
  15. package/dist/domain/errors.js +43 -0
  16. package/dist/domain/path-bytes.js +82 -0
  17. package/dist/domain/product-identity.js +66 -0
  18. package/dist/domain/source.js +4 -0
  19. package/dist/draft/mutate-draft.js +87 -0
  20. package/dist/export/render-review-markdown.js +163 -0
  21. package/dist/export/review-export.js +273 -0
  22. package/dist/git/availability.js +92 -0
  23. package/dist/git/candidates.js +413 -0
  24. package/dist/git/comparison.js +263 -0
  25. package/dist/git/exact-patch.js +702 -0
  26. package/dist/git/ignore-status.js +23 -0
  27. package/dist/git/inventory.js +160 -0
  28. package/dist/git/numstat.js +111 -0
  29. package/dist/git/objects.js +95 -0
  30. package/dist/git/raw-diff.js +84 -0
  31. package/dist/git/repository.js +144 -0
  32. package/dist/git/runner.js +145 -0
  33. package/dist/git/selector-drift.js +169 -0
  34. package/dist/git/standalone-resolution.js +174 -0
  35. package/dist/git/worktree-content.js +97 -0
  36. package/dist/git/worktree-inventory.js +391 -0
  37. package/dist/native/directory_exchange.node +0 -0
  38. package/dist/server/app.js +171 -0
  39. package/dist/server/attached-completion.js +85 -0
  40. package/dist/server/capabilities.js +1572 -0
  41. package/dist/server/draft-loader.js +134 -0
  42. package/dist/server/draft-recovery.js +5 -0
  43. package/dist/server/draft-store.js +380 -0
  44. package/dist/server/export-store.js +291 -0
  45. package/dist/server/gitignore-capability.js +197 -0
  46. package/dist/server/image-content.js +101 -0
  47. package/dist/server/lifecycle.js +72 -0
  48. package/dist/server/native-exchange-capability.js +45 -0
  49. package/dist/server/patch-snapshot.js +500 -0
  50. package/dist/server/routes.js +418 -0
  51. package/dist/server/security.js +123 -0
  52. package/dist/server/snapshot-fs.js +58 -0
  53. package/dist/server/support-client.js +76 -0
  54. package/dist/server/support-store.js +194 -0
  55. package/dist/server/worktree-snapshot.js +553 -0
  56. package/dist/web/assets/abap-08VXUWAP.js +1 -0
  57. package/dist/web/assets/apex-BWPQTe0t.js +1 -0
  58. package/dist/web/assets/azcli-Bc_sGQ0U.js +1 -0
  59. package/dist/web/assets/bat-i0X4ZdIN.js +1 -0
  60. package/dist/web/assets/bicep-B5-_aFwp.js +2 -0
  61. package/dist/web/assets/cameligo-DMUM7wLl.js +1 -0
  62. package/dist/web/assets/clojure-Cm7r79vr.js +1 -0
  63. package/dist/web/assets/codicon-ngg6Pgfi.ttf +0 -0
  64. package/dist/web/assets/coffee-Ba7i2nA0.js +1 -0
  65. package/dist/web/assets/cpp-C7h46wYY.js +1 -0
  66. package/dist/web/assets/csharp-BKxtCVv1.js +1 -0
  67. package/dist/web/assets/csp-bTuwJoIa.js +1 -0
  68. package/dist/web/assets/css-DIMkf-bt.js +3 -0
  69. package/dist/web/assets/css.worker-yKcq13f2.js +89 -0
  70. package/dist/web/assets/cssMode-CpBTfhMg.js +1 -0
  71. package/dist/web/assets/cypher-CVaqCwHa.js +1 -0
  72. package/dist/web/assets/dart-onAF5SnQ.js +1 -0
  73. package/dist/web/assets/dockerfile-DZFCIeNp.js +1 -0
  74. package/dist/web/assets/ecl-D05T4iGw.js +1 -0
  75. package/dist/web/assets/editor.worker-tytyn86m.js +26 -0
  76. package/dist/web/assets/elixir-6RTg0lbw.js +1 -0
  77. package/dist/web/assets/flow9-C5_-GSwl.js +1 -0
  78. package/dist/web/assets/freemarker2-skQ63wb7.js +3 -0
  79. package/dist/web/assets/fsharp-C8Ef5oNN.js +1 -0
  80. package/dist/web/assets/go-C-y9NEjX.js +1 -0
  81. package/dist/web/assets/graphql-fmXr3nnJ.js +1 -0
  82. package/dist/web/assets/handlebars-CqvPAZY8.js +1 -0
  83. package/dist/web/assets/hcl-CpzslTdj.js +1 -0
  84. package/dist/web/assets/html-BDAqstpo.js +1 -0
  85. package/dist/web/assets/html.worker-DSJ9zmd7.js +502 -0
  86. package/dist/web/assets/htmlMode-BRYA3pnT.js +1 -0
  87. package/dist/web/assets/index-CCeYBqPo.js +1111 -0
  88. package/dist/web/assets/index-CRj9ojWJ.css +1 -0
  89. package/dist/web/assets/ini-sBoK_t0W.js +1 -0
  90. package/dist/web/assets/java-BEtHBSE6.js +1 -0
  91. package/dist/web/assets/javascript-1Ywytw67.js +1 -0
  92. package/dist/web/assets/json.worker-Oa9UrkKE.js +58 -0
  93. package/dist/web/assets/jsonMode-AO1C_0kX.js +7 -0
  94. package/dist/web/assets/julia-Bri6UV-V.js +1 -0
  95. package/dist/web/assets/kotlin-BOotOW0E.js +1 -0
  96. package/dist/web/assets/less-B9JPFI3C.js +2 -0
  97. package/dist/web/assets/lexon-CfSJPG6W.js +1 -0
  98. package/dist/web/assets/liquid-CkkqyyGc.js +1 -0
  99. package/dist/web/assets/lspLanguageFeatures-CYOFEMZp.js +4 -0
  100. package/dist/web/assets/lua-CsQS60Ue.js +1 -0
  101. package/dist/web/assets/m3-D-oSqn_W.js +1 -0
  102. package/dist/web/assets/markdown-Cimd5fb3.js +1 -0
  103. package/dist/web/assets/mdx-Bd3Wlfqw.js +1 -0
  104. package/dist/web/assets/mips-CIPQ_RoX.js +1 -0
  105. package/dist/web/assets/msdax-DauUninz.js +1 -0
  106. package/dist/web/assets/mysql-SOo6toE5.js +1 -0
  107. package/dist/web/assets/objective-c-FvmIjYaQ.js +1 -0
  108. package/dist/web/assets/pascal-DrH0SRf2.js +1 -0
  109. package/dist/web/assets/pascaligo-D-ptJ9y-.js +1 -0
  110. package/dist/web/assets/perl-oz_6vUea.js +1 -0
  111. package/dist/web/assets/pgsql-DTj74zXo.js +1 -0
  112. package/dist/web/assets/php-nr791fC2.js +1 -0
  113. package/dist/web/assets/pla-CopQ2nXW.js +1 -0
  114. package/dist/web/assets/postiats-43DmfD33.js +1 -0
  115. package/dist/web/assets/powerquery-D3hlyOfw.js +1 -0
  116. package/dist/web/assets/powershell-DmHpPYUd.js +1 -0
  117. package/dist/web/assets/protobuf-C531GsRP.js +2 -0
  118. package/dist/web/assets/pug-Z5eAx3Zn.js +1 -0
  119. package/dist/web/assets/python-CET4IumD.js +1 -0
  120. package/dist/web/assets/qsharp-DkqhCAOL.js +1 -0
  121. package/dist/web/assets/r-BwWrilGY.js +1 -0
  122. package/dist/web/assets/razor-d-reaHeT.js +1 -0
  123. package/dist/web/assets/redis-ClamHrr6.js +1 -0
  124. package/dist/web/assets/redshift-DT7zqm-g.js +1 -0
  125. package/dist/web/assets/restructuredtext-BYgofb2h.js +1 -0
  126. package/dist/web/assets/ruby-DezsRK8O.js +1 -0
  127. package/dist/web/assets/rust-DdL9SqIa.js +1 -0
  128. package/dist/web/assets/sb-CcwsVR0C.js +1 -0
  129. package/dist/web/assets/scala-DHpiXF5c.js +1 -0
  130. package/dist/web/assets/scheme-BeGwcela.js +1 -0
  131. package/dist/web/assets/scss-gp-XZpBa.js +3 -0
  132. package/dist/web/assets/shell-CC2rA5mh.js +1 -0
  133. package/dist/web/assets/solidity-BEEn4gHE.js +1 -0
  134. package/dist/web/assets/sophia-CRfGWb83.js +1 -0
  135. package/dist/web/assets/sparql-D_Lu-MrJ.js +1 -0
  136. package/dist/web/assets/sql-NEE52Syq.js +1 -0
  137. package/dist/web/assets/st-DbInun42.js +1 -0
  138. package/dist/web/assets/swift-Bxkupp3x.js +1 -0
  139. package/dist/web/assets/systemverilog-Bz4Y3fRF.js +1 -0
  140. package/dist/web/assets/tcl-DISqw1ZD.js +1 -0
  141. package/dist/web/assets/ts.worker-BtjBFNHX.js +67734 -0
  142. package/dist/web/assets/tsMode-DLxSAtkD.js +11 -0
  143. package/dist/web/assets/twig-De2hgUGE.js +1 -0
  144. package/dist/web/assets/typescript-DprEVA-S.js +1 -0
  145. package/dist/web/assets/typespec-B8J7ngcE.js +1 -0
  146. package/dist/web/assets/vb-DV3o63ZY.js +1 -0
  147. package/dist/web/assets/wgsl-DpFanUEy.js +298 -0
  148. package/dist/web/assets/xml-B7ZwKOhJ.js +1 -0
  149. package/dist/web/assets/yaml-OQ9Asg7B.js +1 -0
  150. package/dist/web/index.html +14 -0
  151. package/package.json +87 -4
@@ -0,0 +1,178 @@
1
+ import { z } from 'zod';
2
+ export const GitObjectIdSchema = z
3
+ .string()
4
+ .regex(/^(?:[0-9a-f]{40}|[0-9a-f]{64})$/);
5
+ export const BranchSourceIdentitySchema = z.strictObject({
6
+ kind: z.literal('branch'),
7
+ id: z.string().min(1),
8
+ refName: z.string().min(1),
9
+ });
10
+ export const WorktreeSourceIdentitySchema = z.strictObject({
11
+ kind: z.literal('worktree'),
12
+ id: z.string().min(1),
13
+ path: z.string().min(1),
14
+ detached: z.boolean(),
15
+ dirty: z.boolean(),
16
+ });
17
+ export const SelectedSourceIdentitySchema = z.discriminatedUnion('kind', [
18
+ BranchSourceIdentitySchema,
19
+ WorktreeSourceIdentitySchema,
20
+ ]);
21
+ export const ComparisonSelectionSchema = z.strictObject({
22
+ label: z.string().min(1),
23
+ revision: z.string().min(1),
24
+ source: SelectedSourceIdentitySchema.optional(),
25
+ });
26
+ export const PinnedEndpointSchema = z.strictObject({
27
+ label: z.string().min(1),
28
+ oid: GitObjectIdSchema,
29
+ source: SelectedSourceIdentitySchema.optional(),
30
+ });
31
+ export const RangeReviewScopeSchema = z
32
+ .strictObject({
33
+ kind: z.literal('revisions'),
34
+ requestedBase: z.string().min(1),
35
+ requestedHead: z.string().min(1),
36
+ baseOid: GitObjectIdSchema,
37
+ headOid: GitObjectIdSchema,
38
+ pathspecs: z.array(z.string()).readonly(),
39
+ reviewKey: z.string().regex(/^[0-9a-f]{64}$/),
40
+ })
41
+ .readonly();
42
+ export const ExactPatchValidationTargetSchema = z
43
+ .discriminatedUnion('kind', [
44
+ z.strictObject({ kind: z.literal('repository') }),
45
+ z.strictObject({ kind: z.literal('worktree') }),
46
+ ])
47
+ .readonly();
48
+ export const ExactPatchScopeSchema = z
49
+ .strictObject({
50
+ kind: z.literal('exact-patch'),
51
+ digest: z.string().regex(/^[0-9a-f]{64}$/),
52
+ validationTarget: ExactPatchValidationTargetSchema,
53
+ submittedByteLength: z.number().int().positive().max(1_048_576),
54
+ })
55
+ .readonly();
56
+ export const ExactPathSchema = z
57
+ .strictObject({
58
+ bytesBase64url: z.string().regex(/^[A-Za-z0-9_-]+$/),
59
+ display: z.string(),
60
+ utf8: z.string().optional(),
61
+ })
62
+ .readonly();
63
+ export const ChangedFileStatusKindSchema = z.enum([
64
+ 'added',
65
+ 'copied',
66
+ 'deleted',
67
+ 'modified',
68
+ 'renamed',
69
+ 'type-changed',
70
+ 'unsupported',
71
+ ]);
72
+ export const ChangedFileStatusSchema = z
73
+ .strictObject({
74
+ code: z.string().regex(/^[A-Z]$/),
75
+ kind: ChangedFileStatusKindSchema,
76
+ similarity: z.number().int().min(0).max(100).nullable(),
77
+ })
78
+ .readonly();
79
+ export const GitModeSchema = z.string().regex(/^[0-7]{6}$/);
80
+ export const UnsupportedAvailabilityReasonSchema = z.enum([
81
+ 'binary',
82
+ 'non-utf8',
83
+ 'oversized',
84
+ 'submodule',
85
+ 'symlink',
86
+ 'mode-or-type',
87
+ 'changed-during-capture',
88
+ ]);
89
+ export const AvailabilitySchema = z
90
+ .discriminatedUnion('kind', [
91
+ z.strictObject({ kind: z.literal('text') }),
92
+ z.strictObject({
93
+ kind: z.literal('unsupported'),
94
+ reason: UnsupportedAvailabilityReasonSchema,
95
+ }),
96
+ z.strictObject({
97
+ kind: z.literal('unavailable'),
98
+ reason: z.literal('missing-object'),
99
+ }),
100
+ ])
101
+ .readonly();
102
+ export const ChangedFileSchema = z
103
+ .strictObject({
104
+ id: z.string().regex(/^file_[A-Za-z0-9_-]{43}$/),
105
+ status: ChangedFileStatusSchema,
106
+ oldMode: GitModeSchema,
107
+ newMode: GitModeSchema,
108
+ oldBlobOid: GitObjectIdSchema,
109
+ newBlobOid: GitObjectIdSchema,
110
+ oldPath: ExactPathSchema.optional(),
111
+ newPath: ExactPathSchema.optional(),
112
+ additions: z.number().int().nonnegative().nullable(),
113
+ deletions: z.number().int().nonnegative().nullable(),
114
+ availability: AvailabilitySchema,
115
+ standaloneGitState: z
116
+ .enum(['modified-uncommitted', 'untracked', 'unchanged'])
117
+ .optional(),
118
+ })
119
+ .readonly();
120
+ export const UncommittedScopeSchema = z
121
+ .strictObject({
122
+ kind: z.literal('uncommitted'),
123
+ sourceKind: z.enum(['staged', 'unstaged', 'worktree', 'standalone']),
124
+ repositoryRoot: z.string().min(1),
125
+ objectFormat: z.enum(['sha1', 'sha256']),
126
+ baseCommitOid: GitObjectIdSchema.optional(),
127
+ mergeBaseOid: GitObjectIdSchema.optional(),
128
+ standaloneArguments: z.array(z.string().min(1)).max(256).optional(),
129
+ changedFiles: z.array(ChangedFileSchema).readonly(),
130
+ })
131
+ .superRefine((scope, context) => {
132
+ const hasBase = scope.baseCommitOid !== undefined;
133
+ const hasMergeBase = scope.mergeBaseOid !== undefined;
134
+ const isNoBaseKind = scope.sourceKind === 'unstaged' || scope.sourceKind === 'standalone';
135
+ if (isNoBaseKind) {
136
+ if (hasBase || hasMergeBase) {
137
+ context.addIssue({
138
+ code: 'custom',
139
+ message: 'Unstaged and Standalone comparisons must not have a base commit.',
140
+ path: ['baseCommitOid'],
141
+ });
142
+ }
143
+ }
144
+ else if (!hasBase || !hasMergeBase) {
145
+ context.addIssue({
146
+ code: 'custom',
147
+ message: 'Staged and Working tree comparisons require a base commit.',
148
+ path: ['baseCommitOid'],
149
+ });
150
+ }
151
+ const hasStandaloneArguments = scope.standaloneArguments !== undefined;
152
+ const isStandalone = scope.sourceKind === 'standalone';
153
+ if (isStandalone && !hasStandaloneArguments) {
154
+ context.addIssue({
155
+ code: 'custom',
156
+ message: 'Standalone comparisons require standaloneArguments.',
157
+ path: ['standaloneArguments'],
158
+ });
159
+ }
160
+ else if (!isStandalone && hasStandaloneArguments) {
161
+ context.addIssue({
162
+ code: 'custom',
163
+ message: 'Only Standalone comparisons may have standaloneArguments.',
164
+ path: ['standaloneArguments'],
165
+ });
166
+ }
167
+ })
168
+ .readonly();
169
+ export const PinnedComparisonSchema = z.strictObject({
170
+ repositoryRoot: z.string().min(1),
171
+ objectFormat: z.enum(['sha1', 'sha256']),
172
+ base: PinnedEndpointSchema,
173
+ head: PinnedEndpointSchema,
174
+ mergeBaseOid: GitObjectIdSchema,
175
+ changedFiles: z.array(ChangedFileSchema).readonly(),
176
+ hasCommittedChanges: z.boolean(),
177
+ range: RangeReviewScopeSchema.optional(),
178
+ });