@ibgib/vcs-gib 0.0.30 → 0.0.32

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/dist/AUTO-GENERATED-version.d.mts +1 -1
  2. package/dist/AUTO-GENERATED-version.mjs +1 -1
  3. package/dist/bootstrap/node-bootstrap.mjs +1 -1
  4. package/dist/bootstrap/node-bootstrap.mjs.map +1 -1
  5. package/dist/cli/commands/add-cmd.d.mts +2 -3
  6. package/dist/cli/commands/add-cmd.d.mts.map +1 -1
  7. package/dist/cli/commands/add-cmd.mjs +30 -283
  8. package/dist/cli/commands/add-cmd.mjs.map +1 -1
  9. package/dist/cli/commands/branch-cmd.d.mts +8 -8
  10. package/dist/cli/commands/branch-cmd.d.mts.map +1 -1
  11. package/dist/cli/commands/branch-cmd.mjs +45 -176
  12. package/dist/cli/commands/branch-cmd.mjs.map +1 -1
  13. package/dist/cli/commands/checkout-cmd.d.mts +2 -4
  14. package/dist/cli/commands/checkout-cmd.d.mts.map +1 -1
  15. package/dist/cli/commands/checkout-cmd.mjs +31 -110
  16. package/dist/cli/commands/checkout-cmd.mjs.map +1 -1
  17. package/dist/cli/commands/commit-cmd.d.mts +7 -8
  18. package/dist/cli/commands/commit-cmd.d.mts.map +1 -1
  19. package/dist/cli/commands/commit-cmd.mjs +40 -390
  20. package/dist/cli/commands/commit-cmd.mjs.map +1 -1
  21. package/dist/cli/commands/generate-comment-cmd.d.mts.map +1 -1
  22. package/dist/cli/commands/generate-comment-cmd.mjs +5 -2
  23. package/dist/cli/commands/generate-comment-cmd.mjs.map +1 -1
  24. package/dist/cli/commands/init-cmd.d.mts +2 -2
  25. package/dist/cli/commands/init-cmd.d.mts.map +1 -1
  26. package/dist/cli/commands/init-cmd.mjs +20 -70
  27. package/dist/cli/commands/init-cmd.mjs.map +1 -1
  28. package/dist/cli/commands/log-cmd.d.mts +2 -3
  29. package/dist/cli/commands/log-cmd.d.mts.map +1 -1
  30. package/dist/cli/commands/log-cmd.mjs +42 -271
  31. package/dist/cli/commands/log-cmd.mjs.map +1 -1
  32. package/dist/cli/commands/merge-cmd.d.mts +3 -17
  33. package/dist/cli/commands/merge-cmd.d.mts.map +1 -1
  34. package/dist/cli/commands/merge-cmd.mjs +32 -218
  35. package/dist/cli/commands/merge-cmd.mjs.map +1 -1
  36. package/dist/cli/commands/reset-cmd.d.mts +1 -1
  37. package/dist/cli/commands/reset-cmd.d.mts.map +1 -1
  38. package/dist/cli/commands/reset-cmd.mjs +17 -19
  39. package/dist/cli/commands/reset-cmd.mjs.map +1 -1
  40. package/dist/cli/commands/restore-cmd.d.mts +8 -7
  41. package/dist/cli/commands/restore-cmd.d.mts.map +1 -1
  42. package/dist/cli/commands/restore-cmd.mjs +44 -62
  43. package/dist/cli/commands/restore-cmd.mjs.map +1 -1
  44. package/dist/cli/commands/status-cmd.d.mts +2 -2
  45. package/dist/cli/commands/status-cmd.d.mts.map +1 -1
  46. package/dist/cli/commands/status-cmd.mjs +63 -62
  47. package/dist/cli/commands/status-cmd.mjs.map +1 -1
  48. package/dist/cli/vcs-projection-helper.d.mts +23 -0
  49. package/dist/cli/vcs-projection-helper.d.mts.map +1 -0
  50. package/dist/cli/vcs-projection-helper.mjs +91 -0
  51. package/dist/cli/vcs-projection-helper.mjs.map +1 -0
  52. package/dist/test/test-helpers.d.mts +2 -2
  53. package/dist/test/test-helpers.d.mts.map +1 -1
  54. package/package.json +3 -3
  55. package/src/AUTO-GENERATED-version.mts +1 -1
  56. package/src/bootstrap/node-bootstrap.mts +1 -1
  57. package/src/cli/cli-e2e.respec.mts +4 -4
  58. package/src/cli/commands/add-cmd.mts +32 -347
  59. package/src/cli/commands/branch-cmd.mts +56 -225
  60. package/src/cli/commands/checkout-cmd.mts +34 -138
  61. package/src/cli/commands/commit-cmd.mts +46 -473
  62. package/src/cli/commands/commit-log-cmd.respec.mts +11 -7
  63. package/src/cli/commands/generate-comment-cmd.mts +6 -2
  64. package/src/cli/commands/init-cmd.mts +20 -73
  65. package/src/cli/commands/log-cmd.mts +41 -331
  66. package/src/cli/commands/merge-cmd.mts +32 -252
  67. package/src/cli/commands/reset-cmd.mts +17 -19
  68. package/src/cli/commands/restore-cmd.mts +52 -72
  69. package/src/cli/commands/status-add-cmd.respec.mts +3 -3
  70. package/src/cli/commands/status-cmd.mts +68 -63
  71. package/src/cli/vcs-projection-helper.mts +112 -0
  72. package/src/engine/branch/branch-space.respec.mts +5 -5
  73. package/src/engine/merge/b2tfs-sync-comments.respec.mts +4 -4
  74. package/src/test/test-helpers.mts +2 -2
  75. package/src/vcs-gib.respec.mts +11 -8
  76. package/tsconfig.test.tsbuildinfo +1 -1
  77. package/tsconfig.tsbuildinfo +1 -1
  78. package/dist/engine/branch/branch-graph-helper.d.mts +0 -28
  79. package/dist/engine/branch/branch-graph-helper.d.mts.map +0 -1
  80. package/dist/engine/branch/branch-graph-helper.mjs +0 -81
  81. package/dist/engine/branch/branch-graph-helper.mjs.map +0 -1
  82. package/dist/engine/branch/branch-helper.d.mts +0 -40
  83. package/dist/engine/branch/branch-helper.d.mts.map +0 -1
  84. package/dist/engine/branch/branch-helper.mjs +0 -78
  85. package/dist/engine/branch/branch-helper.mjs.map +0 -1
  86. package/dist/engine/branch/branch-space-helper.d.mts +0 -23
  87. package/dist/engine/branch/branch-space-helper.d.mts.map +0 -1
  88. package/dist/engine/branch/branch-space-helper.mjs +0 -78
  89. package/dist/engine/branch/branch-space-helper.mjs.map +0 -1
  90. package/dist/engine/branch/branch-types.d.mts +0 -26
  91. package/dist/engine/branch/branch-types.d.mts.map +0 -1
  92. package/dist/engine/branch/branch-types.mjs +0 -7
  93. package/dist/engine/branch/branch-types.mjs.map +0 -1
  94. package/dist/engine/diff/line-diff-helper.d.mts +0 -76
  95. package/dist/engine/diff/line-diff-helper.d.mts.map +0 -1
  96. package/dist/engine/diff/line-diff-helper.mjs +0 -144
  97. package/dist/engine/diff/line-diff-helper.mjs.map +0 -1
  98. package/dist/engine/filter/glob-helper.d.mts +0 -51
  99. package/dist/engine/filter/glob-helper.d.mts.map +0 -1
  100. package/dist/engine/filter/glob-helper.mjs +0 -132
  101. package/dist/engine/filter/glob-helper.mjs.map +0 -1
  102. package/dist/engine/index/index-helper.d.mts +0 -113
  103. package/dist/engine/index/index-helper.d.mts.map +0 -1
  104. package/dist/engine/index/index-helper.mjs +0 -533
  105. package/dist/engine/index/index-helper.mjs.map +0 -1
  106. package/dist/engine/index/index-types.d.mts +0 -63
  107. package/dist/engine/index/index-types.d.mts.map +0 -1
  108. package/dist/engine/index/index-types.mjs +0 -7
  109. package/dist/engine/index/index-types.mjs.map +0 -1
  110. package/dist/engine/item/item-atom-helper.d.mts +0 -20
  111. package/dist/engine/item/item-atom-helper.d.mts.map +0 -1
  112. package/dist/engine/item/item-atom-helper.mjs +0 -30
  113. package/dist/engine/item/item-atom-helper.mjs.map +0 -1
  114. package/dist/engine/item/item-helper.d.mts +0 -94
  115. package/dist/engine/item/item-helper.d.mts.map +0 -1
  116. package/dist/engine/item/item-helper.mjs +0 -424
  117. package/dist/engine/item/item-helper.mjs.map +0 -1
  118. package/dist/engine/item/item-types.d.mts +0 -128
  119. package/dist/engine/item/item-types.d.mts.map +0 -1
  120. package/dist/engine/item/item-types.mjs +0 -16
  121. package/dist/engine/item/item-types.mjs.map +0 -1
  122. package/dist/engine/merge/b2tfs-3way-graft-strategy.d.mts +0 -74
  123. package/dist/engine/merge/b2tfs-3way-graft-strategy.d.mts.map +0 -1
  124. package/dist/engine/merge/b2tfs-3way-graft-strategy.mjs +0 -570
  125. package/dist/engine/merge/b2tfs-3way-graft-strategy.mjs.map +0 -1
  126. package/dist/engine/merge/b2tfs-3way-graft-types.d.mts +0 -34
  127. package/dist/engine/merge/b2tfs-3way-graft-types.d.mts.map +0 -1
  128. package/dist/engine/merge/b2tfs-3way-graft-types.mjs +0 -2
  129. package/dist/engine/merge/b2tfs-3way-graft-types.mjs.map +0 -1
  130. package/dist/engine/status/status-helper.d.mts +0 -90
  131. package/dist/engine/status/status-helper.d.mts.map +0 -1
  132. package/dist/engine/status/status-helper.mjs +0 -286
  133. package/dist/engine/status/status-helper.mjs.map +0 -1
  134. package/src/engine/branch/branch-graph-helper.mts +0 -117
  135. package/src/engine/branch/branch-helper.mts +0 -112
  136. package/src/engine/branch/branch-space-helper.mts +0 -110
  137. package/src/engine/branch/branch-types.mts +0 -29
  138. package/src/engine/diff/line-diff-helper.mts +0 -210
  139. package/src/engine/diff/line-diff-helper.respec.mts +0 -84
  140. package/src/engine/filter/glob-helper.mts +0 -165
  141. package/src/engine/filter/glob-helper.respec.mts +0 -94
  142. package/src/engine/index/index-helper.mts +0 -705
  143. package/src/engine/index/index-types.mts +0 -66
  144. package/src/engine/item/item-atom-helper.mts +0 -30
  145. package/src/engine/item/item-helper.mts +0 -544
  146. package/src/engine/item/item-types.mts +0 -137
  147. package/src/engine/item/item.respec.mts +0 -92
  148. package/src/engine/merge/b2tfs-3way-graft-strategy.mts +0 -630
  149. package/src/engine/merge/b2tfs-3way-graft-strategy.respec.mts +0 -346
  150. package/src/engine/merge/b2tfs-3way-graft-types.mts +0 -34
  151. package/src/engine/status/status-helper.mts +0 -383
@@ -1,90 +0,0 @@
1
- /**
2
- * @module status-helper
3
- *
4
- * Pure status inspection helpers and pending `.ib.*.md` comment metadata detection.
5
- */
6
- import { B2tFSItemIbGib_V1 } from '../item/item-types.mjs';
7
- export interface VcsStatusItem {
8
- path: string;
9
- fsType: 'file' | 'folder';
10
- status: 'untracked' | 'modified' | 'deleted' | 'staged';
11
- }
12
- export interface PendingCommentInfo {
13
- /** Relative path of the companion file, e.g. "src/.ib.index.mts.md" or ".ib.architecture.md" */
14
- commentRelPath: string;
15
- /** Full disk path of the companion file */
16
- commentFullPath: string;
17
- /** Target relative path this comment attaches to, e.g. "src/index.mts" or "src" (folder) or "" (root) */
18
- targetRelPath: string;
19
- /** 'file' if .ib.<filename>.md matches a file, or 'folder' */
20
- targetType: 'file' | 'folder';
21
- /** The topic name (the * in .ib.*.md) or filename */
22
- topicName: string;
23
- /** Raw text content of the markdown comment file */
24
- content: string;
25
- }
26
- export interface RepoStatusResult {
27
- branchName: string;
28
- activeWorktreeDir: string;
29
- staged: VcsStatusItem[];
30
- modified: VcsStatusItem[];
31
- deleted: VcsStatusItem[];
32
- untracked: VcsStatusItem[];
33
- pendingComments: PendingCommentInfo[];
34
- }
35
- /**
36
- * Returns true if filename is a `.ib.*.md` comment metadata file.
37
- */
38
- export declare function isCommentMetadataFilename(filename: string): boolean;
39
- /**
40
- * Extracts the inner topic / filename from `.ib.<topic>.md`.
41
- */
42
- export declare function extractCommentTopicName(filename: string): string;
43
- /**
44
- * Pure helper to walk the branch graph items.
45
- */
46
- export declare function walkBranchGraph({ item, space, metaspace, currentRelPath, outMap, }: {
47
- item: B2tFSItemIbGib_V1;
48
- space: any;
49
- metaspace?: any;
50
- currentRelPath: string;
51
- outMap: Map<string, {
52
- relPath: string;
53
- fileHash?: string;
54
- fsType: 'file' | 'folder';
55
- }>;
56
- }): Promise<void>;
57
- /**
58
- * Pure helper to scan physical workspace, separating source files from `.ib.*.md` comment files.
59
- */
60
- export declare function scanPhysicalWorkspace({ dirPath, baseDir, vcsFolderName, filterPatterns, outSourceMap, outCommentFiles, }: {
61
- dirPath: string;
62
- baseDir: string;
63
- vcsFolderName: string;
64
- filterPatterns: string[];
65
- outSourceMap: Map<string, {
66
- relPath: string;
67
- fullPath: string;
68
- isDirectory: boolean;
69
- fileHash?: string;
70
- }>;
71
- outCommentFiles: Array<{
72
- relPath: string;
73
- fullPath: string;
74
- parentRelPath: string;
75
- filename: string;
76
- }>;
77
- }): Promise<void>;
78
- /**
79
- * Computes complete repository status, including staged, modified, deleted, untracked,
80
- * and mapped pending `.ib.*.md` comment files.
81
- */
82
- export declare function getRepoStatus({ metaspace, localSpace, vcsPath, repoRoot, targetDir, vcsFolderName, }: {
83
- metaspace: any;
84
- localSpace: any;
85
- vcsPath: string;
86
- repoRoot: string;
87
- targetDir?: string;
88
- vcsFolderName?: string;
89
- }): Promise<RepoStatusResult>;
90
- //# sourceMappingURL=status-helper.d.mts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"status-helper.d.mts","sourceRoot":"","sources":["../../../src/engine/status/status-helper.mts"],"names":[],"mappings":"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"}
@@ -1,286 +0,0 @@
1
- /**
2
- * @module status-helper
3
- *
4
- * Pure status inspection helpers and pending `.ib.*.md` comment metadata detection.
5
- */
6
- import path from 'node:path';
7
- import fs from 'node:fs/promises';
8
- import crypto from 'node:crypto';
9
- import { B2TFS_CHILD_ITEM_REL8N_NAME } from '../item/item-types.mjs';
10
- import { getIbGibWithMetaspaceFallback } from '../item/item-helper.mjs';
11
- import { isPathFiltered, parseFilterFileContent } from '../filter/glob-helper.mjs';
12
- import { getB2tFSIndexIbGib } from '../index/index-helper.mjs';
13
- import { getOrCreateBranchSpace } from '../branch/branch-space-helper.mjs';
14
- import { resolveContextualBranchName } from '../branch/branch-helper.mjs';
15
- /**
16
- * Returns true if filename is a `.ib.*.md` comment metadata file.
17
- */
18
- export function isCommentMetadataFilename(filename) {
19
- return filename.startsWith('.ib.') && filename.endsWith('.md') && filename.length > '.ib..md'.length;
20
- }
21
- /**
22
- * Extracts the inner topic / filename from `.ib.<topic>.md`.
23
- */
24
- export function extractCommentTopicName(filename) {
25
- if (!isCommentMetadataFilename(filename)) {
26
- return '';
27
- }
28
- return filename.slice(4, -3); // strips leading '.ib.' and trailing '.md'
29
- }
30
- /**
31
- * Pure helper to walk the branch graph items.
32
- */
33
- export async function walkBranchGraph({ item, space, metaspace, currentRelPath, outMap, }) {
34
- if (!item || !item.data) {
35
- return;
36
- }
37
- const { fsType, fileHash } = item.data;
38
- if (currentRelPath) {
39
- outMap.set(currentRelPath, { relPath: currentRelPath, fileHash, fsType });
40
- }
41
- if (fsType === 'folder') {
42
- const childAddrs = item.rel8ns?.[B2TFS_CHILD_ITEM_REL8N_NAME] || [];
43
- for (const childAddr of childAddrs) {
44
- const childItem = await getIbGibWithMetaspaceFallback({
45
- addr: childAddr,
46
- space,
47
- metaspace,
48
- });
49
- if (childItem && childItem.data) {
50
- const childRelPath = currentRelPath
51
- ? `${currentRelPath}/${childItem.data.name}`
52
- : childItem.data.name;
53
- await walkBranchGraph({
54
- item: childItem,
55
- space,
56
- metaspace,
57
- currentRelPath: childRelPath,
58
- outMap,
59
- });
60
- }
61
- }
62
- }
63
- }
64
- /**
65
- * Pure helper to scan physical workspace, separating source files from `.ib.*.md` comment files.
66
- */
67
- export async function scanPhysicalWorkspace({ dirPath, baseDir, vcsFolderName, filterPatterns, outSourceMap, outCommentFiles, }) {
68
- let entries = [];
69
- try {
70
- entries = await fs.readdir(dirPath, { withFileTypes: true });
71
- }
72
- catch {
73
- return;
74
- }
75
- for (const entry of entries) {
76
- const fullEntryPath = path.join(dirPath, entry.name);
77
- const relPath = path.relative(baseDir, fullEntryPath).replace(/\\/g, '/');
78
- // Ignore vcs storage folder, .git, and worktrees folder b
79
- if (relPath === vcsFolderName || relPath.startsWith(vcsFolderName + '/') ||
80
- relPath === '.git' || relPath.startsWith('.git/') ||
81
- relPath === 'b' || relPath.startsWith('b/')) {
82
- continue;
83
- }
84
- if (isPathFiltered({ relativePath: relPath, isDirectory: entry.isDirectory(), filterPatterns })) {
85
- continue;
86
- }
87
- if (entry.isDirectory()) {
88
- outSourceMap.set(relPath, { relPath, fullPath: fullEntryPath, isDirectory: true });
89
- await scanPhysicalWorkspace({
90
- dirPath: fullEntryPath,
91
- baseDir,
92
- vcsFolderName,
93
- filterPatterns,
94
- outSourceMap,
95
- outCommentFiles,
96
- });
97
- }
98
- else if (entry.isFile()) {
99
- if (isCommentMetadataFilename(entry.name)) {
100
- const parentRelPath = path.relative(baseDir, dirPath).replace(/\\/g, '/');
101
- outCommentFiles.push({
102
- relPath,
103
- fullPath: fullEntryPath,
104
- parentRelPath: parentRelPath === '.' ? '' : parentRelPath,
105
- filename: entry.name,
106
- });
107
- }
108
- else {
109
- let fileHash;
110
- try {
111
- const fileData = await fs.readFile(fullEntryPath);
112
- fileHash = crypto.createHash('sha256').update(fileData).digest('hex');
113
- }
114
- catch {
115
- // File unreadable
116
- }
117
- outSourceMap.set(relPath, { relPath, fullPath: fullEntryPath, isDirectory: false, fileHash });
118
- }
119
- }
120
- }
121
- }
122
- /**
123
- * Computes complete repository status, including staged, modified, deleted, untracked,
124
- * and mapped pending `.ib.*.md` comment files.
125
- */
126
- export async function getRepoStatus({ metaspace, localSpace, vcsPath, repoRoot, targetDir = repoRoot, vcsFolderName = '.vcsgib', }) {
127
- const indexIbGib = await getB2tFSIndexIbGib({ space: localSpace, vcsPath });
128
- const branchName = resolveContextualBranchName({ targetDir, repoRoot, indexIbGib });
129
- const activeWorktreeDir = branchName === 'main' ? repoRoot : path.join(repoRoot, 'b', branchName);
130
- const { space: activeBranchSpace } = await getOrCreateBranchSpace({
131
- metaspace,
132
- vcsPath,
133
- branchName,
134
- });
135
- const stagedMap = new Map();
136
- const indexStagedPaths = indexIbGib?.data?.stagedPaths || {};
137
- for (const [relPath, itemRec] of Object.entries(indexStagedPaths)) {
138
- stagedMap.set(relPath, itemRec);
139
- }
140
- let rootItemAddr;
141
- const branchAddrs = [
142
- ...(indexIbGib?.rel8ns?.branch || []),
143
- ...(indexIbGib?.rel8ns?.branch_tjp || []),
144
- ];
145
- if (branchAddrs.length > 0) {
146
- let branchIbGibs = [];
147
- for (const bAddr of branchAddrs) {
148
- const bIbGib = await getIbGibWithMetaspaceFallback({
149
- addr: bAddr,
150
- space: activeBranchSpace,
151
- metaspace,
152
- });
153
- if (bIbGib) {
154
- branchIbGibs.push(bIbGib);
155
- }
156
- }
157
- const activeBranchIbGib = branchIbGibs.find((b) => b?.data?.name === branchName) || branchIbGibs.at(0);
158
- rootItemAddr = activeBranchIbGib?.rel8ns?.b2tFS_item?.at(0) || activeBranchIbGib?.rel8ns?.b2tfs_item?.at(0);
159
- }
160
- let filterPatterns = [];
161
- const ignorePath = path.join(activeWorktreeDir, '.ibgibignore');
162
- try {
163
- const ignoreContent = await fs.readFile(ignorePath, 'utf8');
164
- filterPatterns = parseFilterFileContent(ignoreContent);
165
- }
166
- catch {
167
- // Ignore file missing is fine
168
- }
169
- const branchItemsMap = new Map();
170
- if (rootItemAddr) {
171
- const rootItem = await getIbGibWithMetaspaceFallback({
172
- addr: rootItemAddr,
173
- space: activeBranchSpace,
174
- metaspace,
175
- });
176
- if (rootItem) {
177
- await walkBranchGraph({
178
- item: rootItem,
179
- space: activeBranchSpace,
180
- metaspace,
181
- currentRelPath: '',
182
- outMap: branchItemsMap,
183
- });
184
- }
185
- }
186
- const physicalItemsMap = new Map();
187
- const rawCommentFiles = [];
188
- await scanPhysicalWorkspace({
189
- dirPath: activeWorktreeDir,
190
- baseDir: activeWorktreeDir,
191
- vcsFolderName,
192
- filterPatterns,
193
- outSourceMap: physicalItemsMap,
194
- outCommentFiles: rawCommentFiles,
195
- });
196
- const staged = [];
197
- const modified = [];
198
- const deleted = [];
199
- const untracked = [];
200
- for (const [relPath, stagedRec] of stagedMap.entries()) {
201
- staged.push({
202
- path: relPath,
203
- fsType: stagedRec.fsType || 'file',
204
- status: 'staged',
205
- });
206
- }
207
- for (const [relPath, physItem] of physicalItemsMap.entries()) {
208
- if (stagedMap.has(relPath)) {
209
- continue;
210
- }
211
- const branchItem = branchItemsMap.get(relPath);
212
- if (!branchItem) {
213
- untracked.push({
214
- path: relPath,
215
- fsType: physItem.isDirectory ? 'folder' : 'file',
216
- status: 'untracked',
217
- });
218
- }
219
- else {
220
- if (!physItem.isDirectory && physItem.fileHash && branchItem.fileHash && physItem.fileHash !== branchItem.fileHash) {
221
- modified.push({
222
- path: relPath,
223
- fsType: 'file',
224
- status: 'modified',
225
- });
226
- }
227
- }
228
- }
229
- for (const [relPath, branchItem] of branchItemsMap.entries()) {
230
- if (!relPath || relPath === '.' || relPath === '') {
231
- continue;
232
- }
233
- if (!physicalItemsMap.has(relPath) && !stagedMap.has(relPath)) {
234
- deleted.push({
235
- path: relPath,
236
- fsType: branchItem.fsType,
237
- status: 'deleted',
238
- });
239
- }
240
- }
241
- // Map raw comment files to targets (file or folder)
242
- const pendingComments = [];
243
- for (const raw of rawCommentFiles) {
244
- const topicName = extractCommentTopicName(raw.filename);
245
- const candidateFileRelPath = raw.parentRelPath ? `${raw.parentRelPath}/${topicName}` : topicName;
246
- let targetType = 'folder';
247
- let targetRelPath = raw.parentRelPath;
248
- if (physicalItemsMap.has(candidateFileRelPath) && !physicalItemsMap.get(candidateFileRelPath)?.isDirectory) {
249
- targetType = 'file';
250
- targetRelPath = candidateFileRelPath;
251
- }
252
- else if (branchItemsMap.has(candidateFileRelPath) && branchItemsMap.get(candidateFileRelPath)?.fsType === 'file') {
253
- targetType = 'file';
254
- targetRelPath = candidateFileRelPath;
255
- }
256
- else if (stagedMap.has(candidateFileRelPath)) {
257
- targetType = 'file';
258
- targetRelPath = candidateFileRelPath;
259
- }
260
- let content = '';
261
- try {
262
- content = await fs.readFile(raw.fullPath, 'utf8');
263
- }
264
- catch {
265
- // Unreadable comment file
266
- }
267
- pendingComments.push({
268
- commentRelPath: raw.relPath,
269
- commentFullPath: raw.fullPath,
270
- targetRelPath,
271
- targetType,
272
- topicName,
273
- content,
274
- });
275
- }
276
- return {
277
- branchName,
278
- activeWorktreeDir,
279
- staged,
280
- modified,
281
- deleted,
282
- untracked,
283
- pendingComments,
284
- };
285
- }
286
- //# sourceMappingURL=status-helper.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"status-helper.mjs","sourceRoot":"","sources":["../../../src/engine/status/status-helper.mts"],"names":[],"mappings":"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"}
@@ -1,117 +0,0 @@
1
- /**
2
- * @module branch-graph-helper
3
- *
4
- * Helper for populating branch spaces via SyncSagaCoordinator.
5
- */
6
-
7
- import { clone, extractErrorMsg } from '@ibgib/helper-gib/dist/helpers/utils-helper.mjs';
8
- import { IbGib_V1 } from '@ibgib/ts-gib/dist/V1/types.mjs';
9
- import { IbGibSpaceAny } from '@ibgib/core-gib/dist/witness/space/space-base-v1.mjs';
10
- import { MetaspaceService } from '@ibgib/core-gib/dist/witness/space/metaspace/metaspace-types.mjs';
11
- import { SyncSagaCoordinator } from '@ibgib/core-gib/dist/sync/sync-saga-coordinator.mjs';
12
- import { SyncPeerInnerspace_V1 } from '@ibgib/core-gib/dist/sync/sync-peer/sync-peer-innerspace/sync-peer-innerspace-v1.mjs';
13
- import { SYNC_PEER_INNERSPACE_DEFAULT_DATA_V1 } from '@ibgib/core-gib/dist/sync/sync-peer/sync-peer-innerspace/sync-peer-innerspace-constants.mjs';
14
-
15
- import { GLOBAL_LOG_A_LOT } from '../../vcs-gib-constants.mjs';
16
- import { B2tFSBranchIbGib_V1 } from './branch-types.mjs';
17
- import { createB2tFSBranchIbGib } from './branch-helper.mjs';
18
-
19
- const lcFile = `[branch-graph-helper]`;
20
- const logalot = GLOBAL_LOG_A_LOT;
21
-
22
- export interface PopulateBranchSpaceFromGraphOpts {
23
- sourceSpace: IbGibSpaceAny;
24
- targetBranchSpace: IbGibSpaceAny;
25
- rootItemIbGib: IbGib_V1;
26
- branchName?: string;
27
- metaspace?: MetaspaceService;
28
- }
29
-
30
- export interface PopulateBranchSpaceFromGraphResult {
31
- syncedCount: number;
32
- branchIbGib?: B2tFSBranchIbGib_V1;
33
- }
34
-
35
- /**
36
- * Executes SSM (Space - Sync - Metadata) for branch space initialization:
37
- * 1. Space: Target branch space targetBranchSpace (b2s_<branchName>).
38
- * 2. Sync: Syncs rootItemIbGib from sourceSpace -> targetBranchSpace using SyncSagaCoordinator.
39
- * 3. Metadata: Creates B2tFSBranchIbGib_V1 metadata node in targetBranchSpace pointing to rootItem.
40
- */
41
- export async function populateBranchSpaceFromGraph({
42
- sourceSpace,
43
- targetBranchSpace,
44
- rootItemIbGib,
45
- branchName,
46
- metaspace,
47
- }: PopulateBranchSpaceFromGraphOpts): Promise<PopulateBranchSpaceFromGraphResult> {
48
- const lc = `${lcFile}[${populateBranchSpaceFromGraph.name}]`;
49
- try {
50
- if (logalot) {
51
- console.log(`${lc} starting... (I: 1a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d)`);
52
- }
53
-
54
- if (!sourceSpace || !targetBranchSpace || !rootItemIbGib || !metaspace) {
55
- throw new Error(`sourceSpace, targetBranchSpace, rootItemIbGib, and metaspace are required (E: 2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e)`);
56
- }
57
-
58
- // 1. Space: targetBranchSpace provided/instantiated
59
-
60
- // 2. Sync: Execute SyncSagaCoordinator space-to-space sync (sourceSpace -> targetBranchSpace)
61
- const senderCoordinator = new SyncSagaCoordinator();
62
- const receiverCoordinator = new SyncSagaCoordinator();
63
-
64
- const peer = new SyncPeerInnerspace_V1(clone(SYNC_PEER_INNERSPACE_DEFAULT_DATA_V1));
65
- await peer.initialized;
66
- await peer.initializeOpts({
67
- localMetaspace: metaspace,
68
- localSpace: sourceSpace,
69
- receiverSpace: targetBranchSpace,
70
- receiverCoordinator,
71
- receiverMetaspace: metaspace,
72
- });
73
-
74
- const resSync = await senderCoordinator.sync({
75
- peer,
76
- localSpace: sourceSpace,
77
- metaspace,
78
- domainIbGibs: [rootItemIbGib],
79
- });
80
-
81
- await resSync.done;
82
-
83
- if (logalot) {
84
- console.log(`${lc} SyncSagaCoordinator sync initiated for ${rootItemIbGib.ib} (I: 3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f)`);
85
- }
86
-
87
- const syncedCount = 1;
88
-
89
- // 3. Metadata: Create B2tFSBranchIbGib_V1 metadata node in targetBranchSpace pointing to rootItem
90
- let branchIbGib: B2tFSBranchIbGib_V1 | undefined;
91
- if (branchName && metaspace) {
92
- branchIbGib = await createB2tFSBranchIbGib({
93
- branchName,
94
- rootItem: rootItemIbGib as any,
95
- space: targetBranchSpace,
96
- metaspace,
97
- });
98
- }
99
-
100
- if (logalot) {
101
- console.log(`${lc} Populated target branch space via SyncSagaCoordinator (I: 4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f)`);
102
- }
103
-
104
- return {
105
- syncedCount,
106
- branchIbGib,
107
- };
108
- } catch (error) {
109
- console.error(`${lc} ${extractErrorMsg(error)} (E: 4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a)`);
110
- throw error;
111
- } finally {
112
- if (logalot) {
113
- console.log(`${lc} complete. (I: 5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b)`);
114
- }
115
- }
116
- }
117
-
@@ -1,112 +0,0 @@
1
- /**
2
- * @module branch-helper
3
- *
4
- * B2tFS Branch Helper functions: dedicated branch spaces (`b2s_...`), branch creation,
5
- * and branch timeline tracking.
6
- */
7
-
8
- import path from 'node:path';
9
- import { getUUID } from '@ibgib/helper-gib/dist/helpers/utils-helper.mjs';
10
- import { ROOT } from '@ibgib/ts-gib/dist/V1/constants.mjs';
11
- import { getIbGibAddr } from '@ibgib/ts-gib/dist/helper.mjs';
12
- import { Factory_V1 } from '@ibgib/ts-gib/dist/V1/factory.mjs';
13
- import { MetaspaceService } from '@ibgib/core-gib/dist/witness/space/metaspace/metaspace-types.mjs';
14
- import { IbGibSpaceAny } from '@ibgib/core-gib/dist/witness/space/space-base-v1.mjs';
15
- import { putInSpace, persistTransformResult } from '@ibgib/core-gib/dist/witness/space/space-helper.mjs';
16
-
17
- import { GLOBAL_LOG_A_LOT } from '../../vcs-gib-constants.mjs';
18
- import { B2tFSBranchIbGib_V1, B2tFSBranchData_V1, B2tFSBranchRel8ns_V1 } from './branch-types.mjs';
19
- import { B2tFSItemIbGib_V1 } from '../item/item-types.mjs';
20
-
21
- const lcFile = `[branch-helper]`;
22
- const logalot = GLOBAL_LOG_A_LOT;
23
-
24
- export const B2TFS_BRANCH_SPACE_PREFIX = 'b2s_';
25
-
26
- /**
27
- * Generates a dedicated branch space name.
28
- * Example: 'main' -> 'b2s_main'
29
- */
30
- export function getB2tFSBranchSpaceName(branchName: string): string {
31
- const safeName = branchName.replace(/[^a-zA-Z0-9_\-]/g, '_');
32
- return `${B2TFS_BRANCH_SPACE_PREFIX}${safeName}`;
33
- }
34
-
35
- /**
36
- * Creates a new B2tFSBranchIbGib pointing to a root folder item.
37
- */
38
- export async function createB2tFSBranchIbGib(opts: {
39
- branchName: string;
40
- rootItem: B2tFSItemIbGib_V1;
41
- space: IbGibSpaceAny;
42
- metaspace: MetaspaceService;
43
- }): Promise<B2tFSBranchIbGib_V1> {
44
- const lc = `${lcFile}[${createB2tFSBranchIbGib.name}]`;
45
- const { branchName, rootItem, space, metaspace } = opts;
46
-
47
- if (!branchName || !rootItem) {
48
- throw new Error(`branchName and rootItem required (E: 9012a472c9104b2d)`);
49
- }
50
-
51
- const uuid = await getUUID();
52
- const rootAddr = getIbGibAddr({ ibGib: rootItem });
53
-
54
- const data: B2tFSBranchData_V1 = {
55
- name: branchName,
56
- uuid,
57
- classname: 'B2tFSBranchIbGib_V1',
58
- };
59
-
60
- const rel8ns: B2tFSBranchRel8ns_V1 = {
61
- b2tfs_item: [rootAddr],
62
- };
63
-
64
- const res = await Factory_V1.firstGen({
65
- parentIbGib: ROOT,
66
- ib: `b2tfs_branch ${branchName} v1 ${uuid}`,
67
- data,
68
- rel8ns,
69
- });
70
-
71
- const branchIbGib = res.newIbGib as B2tFSBranchIbGib_V1;
72
- await persistTransformResult({ resTransform: res, space });
73
- await metaspace.registerNewIbGib({ ibGib: branchIbGib });
74
-
75
- if (logalot) {
76
- console.log(`${lc} Created branch IbGib: ${branchIbGib.ib}`);
77
- }
78
-
79
- return branchIbGib;
80
- }
81
-
82
- /**
83
- * Resolves the contextual branch name given the target directory and repository root.
84
- * If targetDir is physically located inside a secondary branch worktree (`repoRoot/b/<branchName>`),
85
- * that worktree's branchName is returned. Otherwise, the index's activeBranch (defaulting to 'main') is returned.
86
- */
87
- export function resolveContextualBranchName({
88
- targetDir,
89
- repoRoot,
90
- indexIbGib,
91
- }: {
92
- targetDir: string;
93
- repoRoot: string;
94
- indexIbGib?: { data?: { activeBranch?: string } } | null;
95
- }): string {
96
- const absTarget = path.resolve(targetDir);
97
- const absRoot = path.resolve(repoRoot);
98
- const rel = path.relative(absRoot, absTarget).replace(/\\/g, '/');
99
-
100
- if (rel.startsWith('b/') || rel === 'b') {
101
- const parts = rel.split('/').filter(Boolean);
102
- if (parts.length >= 2 && parts[0] === 'b') {
103
- const candidateBranch = parts[1];
104
- if (candidateBranch) {
105
- return candidateBranch;
106
- }
107
- }
108
- }
109
-
110
- return indexIbGib?.data?.activeBranch || 'main';
111
- }
112
-