@vibe-commit/capture 0.1.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 (141) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +66 -0
  3. package/dist/agents/claude_code.d.ts +11 -0
  4. package/dist/agents/claude_code.js +162 -0
  5. package/dist/agents/claude_code.js.map +1 -0
  6. package/dist/agents/codex_cli.d.ts +15 -0
  7. package/dist/agents/codex_cli.js +67 -0
  8. package/dist/agents/codex_cli.js.map +1 -0
  9. package/dist/agents/cursor.d.ts +21 -0
  10. package/dist/agents/cursor.js +89 -0
  11. package/dist/agents/cursor.js.map +1 -0
  12. package/dist/agents/registry.d.ts +184 -0
  13. package/dist/agents/registry.js +212 -0
  14. package/dist/agents/registry.js.map +1 -0
  15. package/dist/agents/types.d.ts +279 -0
  16. package/dist/agents/types.js +67 -0
  17. package/dist/agents/types.js.map +1 -0
  18. package/dist/commands/connect.d.ts +36 -0
  19. package/dist/commands/connect.js +499 -0
  20. package/dist/commands/connect.js.map +1 -0
  21. package/dist/commands/context.d.ts +45 -0
  22. package/dist/commands/context.js +14 -0
  23. package/dist/commands/context.js.map +1 -0
  24. package/dist/commands/report.d.ts +105 -0
  25. package/dist/commands/report.js +430 -0
  26. package/dist/commands/report.js.map +1 -0
  27. package/dist/commands/status.d.ts +29 -0
  28. package/dist/commands/status.js +236 -0
  29. package/dist/commands/status.js.map +1 -0
  30. package/dist/commands/why.d.ts +349 -0
  31. package/dist/commands/why.js +937 -0
  32. package/dist/commands/why.js.map +1 -0
  33. package/dist/consent.d.ts +59 -0
  34. package/dist/consent.js +111 -0
  35. package/dist/consent.js.map +1 -0
  36. package/dist/copy/claims.d.ts +79 -0
  37. package/dist/copy/claims.js +343 -0
  38. package/dist/copy/claims.js.map +1 -0
  39. package/dist/copy/grades.d.ts +117 -0
  40. package/dist/copy/grades.js +96 -0
  41. package/dist/copy/grades.js.map +1 -0
  42. package/dist/copy/index.d.ts +12 -0
  43. package/dist/copy/index.js +13 -0
  44. package/dist/copy/index.js.map +1 -0
  45. package/dist/copy/strings.d.ts +1328 -0
  46. package/dist/copy/strings.js +1243 -0
  47. package/dist/copy/strings.js.map +1 -0
  48. package/dist/copy/time.d.ts +27 -0
  49. package/dist/copy/time.js +43 -0
  50. package/dist/copy/time.js.map +1 -0
  51. package/dist/credential.d.ts +211 -0
  52. package/dist/credential.js +298 -0
  53. package/dist/credential.js.map +1 -0
  54. package/dist/exit.d.ts +59 -0
  55. package/dist/exit.js +60 -0
  56. package/dist/exit.js.map +1 -0
  57. package/dist/git.d.ts +299 -0
  58. package/dist/git.js +653 -0
  59. package/dist/git.js.map +1 -0
  60. package/dist/hooks/entry.d.ts +277 -0
  61. package/dist/hooks/entry.js +1092 -0
  62. package/dist/hooks/entry.js.map +1 -0
  63. package/dist/hooks/post_commit.d.ts +59 -0
  64. package/dist/hooks/post_commit.js +160 -0
  65. package/dist/hooks/post_commit.js.map +1 -0
  66. package/dist/hooks/post_rewrite.d.ts +59 -0
  67. package/dist/hooks/post_rewrite.js +161 -0
  68. package/dist/hooks/post_rewrite.js.map +1 -0
  69. package/dist/hooks/session_end.d.ts +101 -0
  70. package/dist/hooks/session_end.js +120 -0
  71. package/dist/hooks/session_end.js.map +1 -0
  72. package/dist/index.d.ts +34 -0
  73. package/dist/index.js +360 -0
  74. package/dist/index.js.map +1 -0
  75. package/dist/install.d.ts +153 -0
  76. package/dist/install.js +284 -0
  77. package/dist/install.js.map +1 -0
  78. package/dist/json.d.ts +100 -0
  79. package/dist/json.js +94 -0
  80. package/dist/json.js.map +1 -0
  81. package/dist/oauth/discovery.d.ts +96 -0
  82. package/dist/oauth/discovery.js +163 -0
  83. package/dist/oauth/discovery.js.map +1 -0
  84. package/dist/oauth/lock.d.ts +100 -0
  85. package/dist/oauth/lock.js +287 -0
  86. package/dist/oauth/lock.js.map +1 -0
  87. package/dist/oauth/loopback.d.ts +85 -0
  88. package/dist/oauth/loopback.js +124 -0
  89. package/dist/oauth/loopback.js.map +1 -0
  90. package/dist/oauth/pkce.d.ts +58 -0
  91. package/dist/oauth/pkce.js +77 -0
  92. package/dist/oauth/pkce.js.map +1 -0
  93. package/dist/oauth/read.d.ts +120 -0
  94. package/dist/oauth/read.js +144 -0
  95. package/dist/oauth/read.js.map +1 -0
  96. package/dist/oauth/session.d.ts +80 -0
  97. package/dist/oauth/session.js +112 -0
  98. package/dist/oauth/session.js.map +1 -0
  99. package/dist/oauth/signin.d.ts +178 -0
  100. package/dist/oauth/signin.js +225 -0
  101. package/dist/oauth/signin.js.map +1 -0
  102. package/dist/oauth/token.d.ts +139 -0
  103. package/dist/oauth/token.js +183 -0
  104. package/dist/oauth/token.js.map +1 -0
  105. package/dist/paths.d.ts +366 -0
  106. package/dist/paths.js +460 -0
  107. package/dist/paths.js.map +1 -0
  108. package/dist/policy.d.ts +195 -0
  109. package/dist/policy.js +244 -0
  110. package/dist/policy.js.map +1 -0
  111. package/dist/post.d.ts +302 -0
  112. package/dist/post.js +384 -0
  113. package/dist/post.js.map +1 -0
  114. package/dist/project.d.ts +99 -0
  115. package/dist/project.js +192 -0
  116. package/dist/project.js.map +1 -0
  117. package/dist/redact.d.ts +175 -0
  118. package/dist/redact.js +700 -0
  119. package/dist/redact.js.map +1 -0
  120. package/dist/runtime.d.ts +30 -0
  121. package/dist/runtime.js +37 -0
  122. package/dist/runtime.js.map +1 -0
  123. package/dist/spawn_budget.d.ts +101 -0
  124. package/dist/spawn_budget.js +124 -0
  125. package/dist/spawn_budget.js.map +1 -0
  126. package/dist/spool.d.ts +390 -0
  127. package/dist/spool.js +556 -0
  128. package/dist/spool.js.map +1 -0
  129. package/dist/state.d.ts +109 -0
  130. package/dist/state.js +217 -0
  131. package/dist/state.js.map +1 -0
  132. package/dist/system_message.d.ts +101 -0
  133. package/dist/system_message.js +141 -0
  134. package/dist/system_message.js.map +1 -0
  135. package/dist/term.d.ts +112 -0
  136. package/dist/term.js +134 -0
  137. package/dist/term.js.map +1 -0
  138. package/dist/version.d.ts +16 -0
  139. package/dist/version.js +17 -0
  140. package/dist/version.js.map +1 -0
  141. package/package.json +50 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claims.js","sourceRoot":"","sources":["../../src/copy/claims.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,117 @@
1
+ /**
2
+ * Edge grades and the ONE function that renders a commit header.
3
+ *
4
+ * D61 §PS6 (claims audit of `why` / `report`) requires that the qualifier a grade
5
+ * carries is adjacent to the sentence that introduces turns. Adjacency is beyond
6
+ * grep, so it is enforced STRUCTURALLY instead: exactly one function renders a
7
+ * commit header, it takes the grade, and no other code path renders one. A
8
+ * table-driven test with one row per grade (and a failing blank cell) holds the
9
+ * line — see `test/copy-grades.test.ts`.
10
+ *
11
+ * Do not add a second header renderer. Do not inline a header string in a
12
+ * command body. Both defeat the mechanism.
13
+ *
14
+ * ⚠ `renderCommitIdentity` is NOT a second one — see its own note. It renders
15
+ * §R3's identity line and CANNOT render an evidence sentence, because it takes
16
+ * no grade. That is the point: the absence screens must be able to say which
17
+ * commit they hold no record for, without acquiring a way to claim evidence.
18
+ */
19
+ /**
20
+ * How we came to hold an edge between a capture and a commit (D56 plan §D9).
21
+ *
22
+ * - `derived` — a `Bash(git commit …)` tool_use appears inside the hash-chained
23
+ * transcript bytes. The strongest grade we can hold.
24
+ * - `observed` — a `post-commit` hook recorded the commit alongside the session.
25
+ * Evidence beside the chain, not inside it. ALSO covers a human
26
+ * committing in a second terminal, which is why it carries a
27
+ * mandatory second clause.
28
+ * - `declared` — agent narration. Testimony, never fact.
29
+ *
30
+ * ⛔ **THIS LINE SAID "a client-side git PROBE" UNTIL W20, AND NO PROBE HAS EVER
31
+ * EXISTED.** The polling design was rejected at `D154` and `D183` records that it
32
+ * STAYS rejected; what shipped is `CR-170`'s `post-commit` hook, which fires once
33
+ * per commit rather than sampling. Corrected as a mechanism word, and named here
34
+ * because the retired word had already been copied into the claims register.
35
+ *
36
+ * ⛔ **`GRADE_COPY.observed`'s qualifier below is NOT part of this correction and
37
+ * must not be "fixed" to match.** Dead-or-stale copy behind a corrected mechanism
38
+ * is a different defect from FALSE copy, and only the second is a copy edit: that
39
+ * sentence is still true of every rung the hook can produce — the commit command
40
+ * genuinely is not in the transcript, and the working tree genuinely may hold
41
+ * work from outside the session. The claims register says so in terms.
42
+ */
43
+ export type EdgeGrade = "derived" | "observed" | "declared";
44
+ /**
45
+ * The floor of a mixed-grade commit: the weakest grade present.
46
+ * Throws on an empty set — a commit with no edges has no header to render, and
47
+ * silently defaulting to the strongest grade is exactly the failure this guards.
48
+ */
49
+ export declare function gradeFloor(grades: readonly EdgeGrade[]): EdgeGrade;
50
+ /**
51
+ * Per-grade header clauses — `claims-audit-why.md` §R3's decision table.
52
+ *
53
+ * ## ⚠ `lead` IS NOW §R3's ROW 1 AND IT IS DATA, NOT A SENTENCE — `CR-086`
54
+ *
55
+ * It used to be a fixed sentence, identical at all three grades:
56
+ * *"Conversation turns recorded against the commit that last changed this
57
+ * FILE."* §R3 has no such row, and the sentence was not merely a paraphrase —
58
+ * **it identified a different commit from the one `why` selects.** `why` is
59
+ * LINE-addressed (the verbatim-approved `--help` line, D61 §PS6; §R3's row 1 is
60
+ * `Line 47 → a8f2c91`), and the commit that last changed a FILE is not the
61
+ * commit that last changed a LINE whenever the file was touched again
62
+ * afterwards. A scope caveat had been moved onto the sentence that names the
63
+ * commit, where it reads as a fact about WHICH commit, and is false.
64
+ *
65
+ * D61 §PS6's file-scope rule is satisfied where §R3 puts it: on the sentence
66
+ * that INTRODUCES TURNS (`WHY.turnsIntro` — *"Turns that touched X in this
67
+ * commit"*), which renders on the same screen as the line number. It does not
68
+ * belong on the sentence that IDENTIFIES the commit.
69
+ *
70
+ * `qualifier` is §R3's row 2 — the per-grade evidence sentence, which must sit
71
+ * adjacent to the identity line and above the turn list. A blank qualifier is
72
+ * legal only where a grade genuinely carries no caveat; the table-driven test
73
+ * asserts each one explicitly so a blank cell fails rather than passes silently.
74
+ */
75
+ interface GradeCopy {
76
+ readonly qualifier: string;
77
+ }
78
+ /**
79
+ * The facts §R3's row 1 renders. All three are LOCAL — `git blame` answers them
80
+ * on this machine — so the identity line is constructible with the read lane
81
+ * entirely absent, which is what lets every failure branch still say WHICH
82
+ * commit it was talking about.
83
+ */
84
+ export interface BlamedCommit {
85
+ /** The line the user asked about. Renders ONCE, here (§10.4). */
86
+ readonly line: number;
87
+ /** Abbreviated SHA, as `git blame` prints it. */
88
+ readonly sha: string;
89
+ /** Author date, `YYYY-MM-DD`. */
90
+ readonly date: string;
91
+ }
92
+ /**
93
+ * THE header renderer. One function, takes the grade, no other path renders a
94
+ * commit header — and it now returns §R3's TWO LINES rather than one, because
95
+ * the identity line and the evidence sentence are one unit: rendering either
96
+ * without the other is what the structural rule exists to prevent.
97
+ *
98
+ * @param grades every edge grade held for the commit. The floor governs.
99
+ */
100
+ export declare function renderCommitHeader(grades: readonly EdgeGrade[], commit: BlamedCommit): string[];
101
+ /**
102
+ * The identity line ALONE — for the screens that hold no edge and therefore
103
+ * have no grade to render beside it (cold start, no-edge, squash-resolved,
104
+ * and every read-lane failure).
105
+ *
106
+ * ⚠ This is NOT a second header renderer and must not become one: it takes no
107
+ * grade and it cannot produce an evidence sentence. The rule it protects is the
108
+ * inverse of the one `renderCommitHeader` protects — a screen may not claim
109
+ * evidence without a grade, and `gradeFloor` throws on an empty set, so without
110
+ * this the absence screens would have no way to say WHICH commit they are
111
+ * silent about. §10.6 draws the identity line on states A and E.
112
+ */
113
+ export declare function renderCommitIdentity(commit: BlamedCommit): string;
114
+ /** Exposed for the table-driven test; not for command bodies. */
115
+ export declare function gradeCopyFor(grade: EdgeGrade): GradeCopy;
116
+ export declare const ALL_GRADES: ReadonlyArray<EdgeGrade>;
117
+ export {};
@@ -0,0 +1,96 @@
1
+ /**
2
+ * Edge grades and the ONE function that renders a commit header.
3
+ *
4
+ * D61 §PS6 (claims audit of `why` / `report`) requires that the qualifier a grade
5
+ * carries is adjacent to the sentence that introduces turns. Adjacency is beyond
6
+ * grep, so it is enforced STRUCTURALLY instead: exactly one function renders a
7
+ * commit header, it takes the grade, and no other code path renders one. A
8
+ * table-driven test with one row per grade (and a failing blank cell) holds the
9
+ * line — see `test/copy-grades.test.ts`.
10
+ *
11
+ * Do not add a second header renderer. Do not inline a header string in a
12
+ * command body. Both defeat the mechanism.
13
+ *
14
+ * ⚠ `renderCommitIdentity` is NOT a second one — see its own note. It renders
15
+ * §R3's identity line and CANNOT render an evidence sentence, because it takes
16
+ * no grade. That is the point: the absence screens must be able to say which
17
+ * commit they hold no record for, without acquiring a way to claim evidence.
18
+ */
19
+ /**
20
+ * Confidence ordering, weakest first. Used to compute the floor on a
21
+ * mixed-grade commit — D61 §PS6: "On a mixed-grade commit the header takes the
22
+ * floor." The weakest grade present governs the whole header, because a header
23
+ * that reported the strongest grade would describe evidence we do not hold for
24
+ * every edge on that commit.
25
+ */
26
+ const GRADE_RANK = ["declared", "observed", "derived"];
27
+ /**
28
+ * The floor of a mixed-grade commit: the weakest grade present.
29
+ * Throws on an empty set — a commit with no edges has no header to render, and
30
+ * silently defaulting to the strongest grade is exactly the failure this guards.
31
+ */
32
+ export function gradeFloor(grades) {
33
+ if (grades.length === 0) {
34
+ throw new Error("gradeFloor: no edges — a commit with no edge has no header");
35
+ }
36
+ let floor = "derived";
37
+ for (const g of grades) {
38
+ if (GRADE_RANK.indexOf(g) < GRADE_RANK.indexOf(floor))
39
+ floor = g;
40
+ }
41
+ return floor;
42
+ }
43
+ const GRADE_COPY = {
44
+ derived: {
45
+ qualifier: "The commit command is recorded in this session's transcript.",
46
+ },
47
+ observed: {
48
+ // ⚠ TWO SENTENCES, AND THE FIRST ONE WAS MISSING. D61 §PS6 makes the second
49
+ // mandatory — `observed` also covers a human committing in a second
50
+ // terminal — but the first is the one that says what `observed` MEANS, and
51
+ // §R3 approves both.
52
+ qualifier: "This commit appeared while the session was running. The commit command was not in the transcript, so it may include work from outside this session.",
53
+ },
54
+ declared: {
55
+ qualifier: "The agent reported this commit. It is not in the transcript record.",
56
+ },
57
+ };
58
+ /**
59
+ * §R3 row 1. The `→` and `·` are U+2192 and U+00B7 — one column, several bytes
60
+ * each, which is why every width check in this package counts COLUMNS.
61
+ */
62
+ function identityLine(commit) {
63
+ return `Line ${commit.line} → ${commit.sha} · ${commit.date} (git blame)`;
64
+ }
65
+ /**
66
+ * THE header renderer. One function, takes the grade, no other path renders a
67
+ * commit header — and it now returns §R3's TWO LINES rather than one, because
68
+ * the identity line and the evidence sentence are one unit: rendering either
69
+ * without the other is what the structural rule exists to prevent.
70
+ *
71
+ * @param grades every edge grade held for the commit. The floor governs.
72
+ */
73
+ export function renderCommitHeader(grades, commit) {
74
+ return [identityLine(commit), GRADE_COPY[gradeFloor(grades)].qualifier];
75
+ }
76
+ /**
77
+ * The identity line ALONE — for the screens that hold no edge and therefore
78
+ * have no grade to render beside it (cold start, no-edge, squash-resolved,
79
+ * and every read-lane failure).
80
+ *
81
+ * ⚠ This is NOT a second header renderer and must not become one: it takes no
82
+ * grade and it cannot produce an evidence sentence. The rule it protects is the
83
+ * inverse of the one `renderCommitHeader` protects — a screen may not claim
84
+ * evidence without a grade, and `gradeFloor` throws on an empty set, so without
85
+ * this the absence screens would have no way to say WHICH commit they are
86
+ * silent about. §10.6 draws the identity line on states A and E.
87
+ */
88
+ export function renderCommitIdentity(commit) {
89
+ return identityLine(commit);
90
+ }
91
+ /** Exposed for the table-driven test; not for command bodies. */
92
+ export function gradeCopyFor(grade) {
93
+ return GRADE_COPY[grade];
94
+ }
95
+ export const ALL_GRADES = ["derived", "observed", "declared"];
96
+ //# sourceMappingURL=grades.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grades.js","sourceRoot":"","sources":["../../src/copy/grades.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AA4BH;;;;;;GAMG;AACH,MAAM,UAAU,GAA6B,CAAC,UAAU,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;AAEjF;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAC,MAA4B;IACrD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;IAChF,CAAC;IACD,IAAI,KAAK,GAAc,SAAS,CAAC;IACjC,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC;YAAE,KAAK,GAAG,CAAC,CAAC;IACnE,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AA8CD,MAAM,UAAU,GAA2C;IACzD,OAAO,EAAE;QACP,SAAS,EAAE,8DAA8D;KAC1E;IACD,QAAQ,EAAE;QACR,4EAA4E;QAC5E,oEAAoE;QACpE,2EAA2E;QAC3E,qBAAqB;QACrB,SAAS,EACP,qJAAqJ;KACxJ;IACD,QAAQ,EAAE;QACR,SAAS,EAAE,qEAAqE;KACjF;CACF,CAAC;AAEF;;;GAGG;AACH,SAAS,YAAY,CAAC,MAAoB;IACxC,OAAO,QAAQ,MAAM,CAAC,IAAI,MAAM,MAAM,CAAC,GAAG,MAAM,MAAM,CAAC,IAAI,cAAc,CAAC;AAC5E,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,kBAAkB,CAChC,MAA4B,EAC5B,MAAoB;IAEpB,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;AAC1E,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAoB;IACvD,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC;AAC9B,CAAC;AAED,iEAAiE;AACjE,MAAM,UAAU,YAAY,CAAC,KAAgB;IAC3C,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC;AAC3B,CAAC;AAED,MAAM,CAAC,MAAM,UAAU,GAA6B,CAAC,SAAS,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Single entry point for all user-facing copy.
3
+ *
4
+ * Command bodies import from HERE and nowhere else. If you find yourself typing
5
+ * a quoted user-facing string inside a command, it belongs in `strings.ts`; if
6
+ * it describes a commit's evidence, it belongs in `grades.ts` behind the one
7
+ * header renderer.
8
+ */
9
+ export { HELP, USAGE, STATUS, CONNECT, SIGNIN, OFF, WHY, REPORT, ABSENCE, type AbsenceStateName, type AbsenceState, type AbsenceField, ERRORS, INTERNAL, CREDENTIAL, RUNTIME, SYSTEM_MESSAGE, REDACTION, COMMANDS, URLS, COMMIT_HOOK, PATH_CLASH, } from "./strings.js";
10
+ export { relativeAge } from "./time.js";
11
+ export { renderCommitHeader, renderCommitIdentity, gradeFloor, gradeCopyFor, ALL_GRADES, type BlamedCommit, type EdgeGrade, } from "./grades.js";
12
+ export { BLOCKED_PHRASES, findClaimViolations, type Surface, type BlockedPhrase, type ClaimViolation, } from "./claims.js";
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Single entry point for all user-facing copy.
3
+ *
4
+ * Command bodies import from HERE and nowhere else. If you find yourself typing
5
+ * a quoted user-facing string inside a command, it belongs in `strings.ts`; if
6
+ * it describes a commit's evidence, it belongs in `grades.ts` behind the one
7
+ * header renderer.
8
+ */
9
+ export { HELP, USAGE, STATUS, CONNECT, SIGNIN, OFF, WHY, REPORT, ABSENCE, ERRORS, INTERNAL, CREDENTIAL, RUNTIME, SYSTEM_MESSAGE, REDACTION, COMMANDS, URLS, COMMIT_HOOK, PATH_CLASH, } from "./strings.js";
10
+ export { relativeAge } from "./time.js";
11
+ export { renderCommitHeader, renderCommitIdentity, gradeFloor, gradeCopyFor, ALL_GRADES, } from "./grades.js";
12
+ export { BLOCKED_PHRASES, findClaimViolations, } from "./claims.js";
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/copy/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EACL,IAAI,EACJ,KAAK,EACL,MAAM,EACN,OAAO,EACP,MAAM,EACN,GAAG,EACH,GAAG,EACH,MAAM,EACN,OAAO,EAIP,MAAM,EACN,QAAQ,EACR,UAAU,EACV,OAAO,EACP,cAAc,EACd,SAAS,EACT,QAAQ,EACR,IAAI,EACJ,WAAW,EACX,UAAU,GACX,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,UAAU,EACV,YAAY,EACZ,UAAU,GAGX,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,eAAe,EACf,mBAAmB,GAIpB,MAAM,aAAa,CAAC"}