@ibgib/vcs-gib 0.0.23 → 0.0.26

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 (66) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/VCS_CLI_USER_GUIDE.md +94 -89
  3. package/dist/AUTO-GENERATED-version.d.mts +1 -1
  4. package/dist/AUTO-GENERATED-version.mjs +1 -1
  5. package/dist/cli/cli-arg-parser.d.mts +1 -0
  6. package/dist/cli/cli-arg-parser.d.mts.map +1 -1
  7. package/dist/cli/cli-arg-parser.mjs +5 -1
  8. package/dist/cli/cli-arg-parser.mjs.map +1 -1
  9. package/dist/cli/cli-constants.d.mts +6 -0
  10. package/dist/cli/cli-constants.d.mts.map +1 -1
  11. package/dist/cli/cli-constants.mjs +12 -0
  12. package/dist/cli/cli-constants.mjs.map +1 -1
  13. package/dist/cli/commands/add-cmd.d.mts.map +1 -1
  14. package/dist/cli/commands/add-cmd.mjs +5 -2
  15. package/dist/cli/commands/add-cmd.mjs.map +1 -1
  16. package/dist/cli/commands/commit-cmd.d.mts +5 -4
  17. package/dist/cli/commands/commit-cmd.d.mts.map +1 -1
  18. package/dist/cli/commands/commit-cmd.mjs +149 -33
  19. package/dist/cli/commands/commit-cmd.mjs.map +1 -1
  20. package/dist/cli/commands/generate-comment-cmd.d.mts +19 -0
  21. package/dist/cli/commands/generate-comment-cmd.d.mts.map +1 -0
  22. package/dist/cli/commands/generate-comment-cmd.mjs +140 -0
  23. package/dist/cli/commands/generate-comment-cmd.mjs.map +1 -0
  24. package/dist/cli/commands/log-cmd.d.mts +12 -3
  25. package/dist/cli/commands/log-cmd.d.mts.map +1 -1
  26. package/dist/cli/commands/log-cmd.mjs +236 -38
  27. package/dist/cli/commands/log-cmd.mjs.map +1 -1
  28. package/dist/cli/commands/status-cmd.d.mts +5 -6
  29. package/dist/cli/commands/status-cmd.d.mts.map +1 -1
  30. package/dist/cli/commands/status-cmd.mjs +50 -205
  31. package/dist/cli/commands/status-cmd.mjs.map +1 -1
  32. package/dist/cli/vcs-cli-main.d.mts.map +1 -1
  33. package/dist/cli/vcs-cli-main.mjs +25 -4
  34. package/dist/cli/vcs-cli-main.mjs.map +1 -1
  35. package/dist/engine/index/index-helper.d.mts.map +1 -1
  36. package/dist/engine/index/index-helper.mjs +3 -0
  37. package/dist/engine/index/index-helper.mjs.map +1 -1
  38. package/dist/engine/item/item-helper.d.mts.map +1 -1
  39. package/dist/engine/item/item-helper.mjs +5 -2
  40. package/dist/engine/item/item-helper.mjs.map +1 -1
  41. package/dist/engine/merge/b2tfs-3way-graft-strategy.d.mts +28 -0
  42. package/dist/engine/merge/b2tfs-3way-graft-strategy.d.mts.map +1 -1
  43. package/dist/engine/merge/b2tfs-3way-graft-strategy.mjs +84 -12
  44. package/dist/engine/merge/b2tfs-3way-graft-strategy.mjs.map +1 -1
  45. package/dist/engine/status/status-helper.d.mts +89 -0
  46. package/dist/engine/status/status-helper.d.mts.map +1 -0
  47. package/dist/engine/status/status-helper.mjs +285 -0
  48. package/dist/engine/status/status-helper.mjs.map +1 -0
  49. package/package.json +3 -3
  50. package/src/AUTO-GENERATED-version.mts +1 -1
  51. package/src/cli/cli-arg-parser.mts +5 -0
  52. package/src/cli/cli-constants.mts +13 -0
  53. package/src/cli/commands/add-cmd.mts +5 -2
  54. package/src/cli/commands/commit-cmd.mts +165 -42
  55. package/src/cli/commands/commit-log-cmd.respec.mts +216 -3
  56. package/src/cli/commands/generate-comment-cmd.mts +171 -0
  57. package/src/cli/commands/log-cmd.mts +288 -41
  58. package/src/cli/commands/status-cmd.mts +57 -256
  59. package/src/cli/vcs-cli-main.mts +25 -4
  60. package/src/engine/index/index-helper.mts +3 -0
  61. package/src/engine/item/item-helper.mts +5 -2
  62. package/src/engine/merge/b2tfs-3way-graft-strategy.mts +89 -10
  63. package/src/engine/merge/b2tfs-sync-comments.respec.mts +399 -0
  64. package/src/engine/status/status-helper.mts +380 -0
  65. package/tsconfig.test.tsbuildinfo +1 -1
  66. package/tsconfig.tsbuildinfo +1 -1
@@ -0,0 +1,285 @@
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
+ /**
15
+ * Returns true if filename is a `.ib.*.md` comment metadata file.
16
+ */
17
+ export function isCommentMetadataFilename(filename) {
18
+ return filename.startsWith('.ib.') && filename.endsWith('.md') && filename.length > '.ib..md'.length;
19
+ }
20
+ /**
21
+ * Extracts the inner topic / filename from `.ib.<topic>.md`.
22
+ */
23
+ export function extractCommentTopicName(filename) {
24
+ if (!isCommentMetadataFilename(filename)) {
25
+ return '';
26
+ }
27
+ return filename.slice(4, -3); // strips leading '.ib.' and trailing '.md'
28
+ }
29
+ /**
30
+ * Pure helper to walk the branch graph items.
31
+ */
32
+ export async function walkBranchGraph({ item, space, metaspace, currentRelPath, outMap, }) {
33
+ if (!item || !item.data) {
34
+ return;
35
+ }
36
+ const { fsType, fileHash } = item.data;
37
+ if (currentRelPath) {
38
+ outMap.set(currentRelPath, { relPath: currentRelPath, fileHash, fsType });
39
+ }
40
+ if (fsType === 'folder') {
41
+ const childAddrs = item.rel8ns?.[B2TFS_CHILD_ITEM_REL8N_NAME] || [];
42
+ for (const childAddr of childAddrs) {
43
+ const childItem = await getIbGibWithMetaspaceFallback({
44
+ addr: childAddr,
45
+ space,
46
+ metaspace,
47
+ });
48
+ if (childItem && childItem.data) {
49
+ const childRelPath = currentRelPath
50
+ ? `${currentRelPath}/${childItem.data.name}`
51
+ : childItem.data.name;
52
+ await walkBranchGraph({
53
+ item: childItem,
54
+ space,
55
+ metaspace,
56
+ currentRelPath: childRelPath,
57
+ outMap,
58
+ });
59
+ }
60
+ }
61
+ }
62
+ }
63
+ /**
64
+ * Pure helper to scan physical workspace, separating source files from `.ib.*.md` comment files.
65
+ */
66
+ export async function scanPhysicalWorkspace({ dirPath, baseDir, vcsFolderName, filterPatterns, outSourceMap, outCommentFiles, }) {
67
+ let entries = [];
68
+ try {
69
+ entries = await fs.readdir(dirPath, { withFileTypes: true });
70
+ }
71
+ catch {
72
+ return;
73
+ }
74
+ for (const entry of entries) {
75
+ const fullEntryPath = path.join(dirPath, entry.name);
76
+ const relPath = path.relative(baseDir, fullEntryPath).replace(/\\/g, '/');
77
+ // Ignore vcs storage folder, .git, and worktrees folder b
78
+ if (relPath === vcsFolderName || relPath.startsWith(vcsFolderName + '/') ||
79
+ relPath === '.git' || relPath.startsWith('.git/') ||
80
+ relPath === 'b' || relPath.startsWith('b/')) {
81
+ continue;
82
+ }
83
+ if (isPathFiltered({ relativePath: relPath, isDirectory: entry.isDirectory(), filterPatterns })) {
84
+ continue;
85
+ }
86
+ if (entry.isDirectory()) {
87
+ outSourceMap.set(relPath, { relPath, fullPath: fullEntryPath, isDirectory: true });
88
+ await scanPhysicalWorkspace({
89
+ dirPath: fullEntryPath,
90
+ baseDir,
91
+ vcsFolderName,
92
+ filterPatterns,
93
+ outSourceMap,
94
+ outCommentFiles,
95
+ });
96
+ }
97
+ else if (entry.isFile()) {
98
+ if (isCommentMetadataFilename(entry.name)) {
99
+ const parentRelPath = path.relative(baseDir, dirPath).replace(/\\/g, '/');
100
+ outCommentFiles.push({
101
+ relPath,
102
+ fullPath: fullEntryPath,
103
+ parentRelPath: parentRelPath === '.' ? '' : parentRelPath,
104
+ filename: entry.name,
105
+ });
106
+ }
107
+ else {
108
+ let fileHash;
109
+ try {
110
+ const fileData = await fs.readFile(fullEntryPath);
111
+ fileHash = crypto.createHash('sha256').update(fileData).digest('hex');
112
+ }
113
+ catch {
114
+ // File unreadable
115
+ }
116
+ outSourceMap.set(relPath, { relPath, fullPath: fullEntryPath, isDirectory: false, fileHash });
117
+ }
118
+ }
119
+ }
120
+ }
121
+ /**
122
+ * Computes complete repository status, including staged, modified, deleted, untracked,
123
+ * and mapped pending `.ib.*.md` comment files.
124
+ */
125
+ export async function getRepoStatus({ metaspace, localSpace, vcsPath, repoRoot, vcsFolderName = '.vcsgib', }) {
126
+ const indexIbGib = await getB2tFSIndexIbGib({ space: localSpace, vcsPath });
127
+ const branchName = indexIbGib?.data?.activeBranch || 'main';
128
+ const activeWorktreeDir = branchName === 'main' ? repoRoot : path.join(repoRoot, 'b', branchName);
129
+ const { space: activeBranchSpace } = await getOrCreateBranchSpace({
130
+ metaspace,
131
+ vcsPath,
132
+ branchName,
133
+ });
134
+ const stagedMap = new Map();
135
+ const indexStagedPaths = indexIbGib?.data?.stagedPaths || {};
136
+ for (const [relPath, itemRec] of Object.entries(indexStagedPaths)) {
137
+ stagedMap.set(relPath, itemRec);
138
+ }
139
+ let rootItemAddr;
140
+ const branchAddrs = [
141
+ ...(indexIbGib?.rel8ns?.branch || []),
142
+ ...(indexIbGib?.rel8ns?.branch_tjp || []),
143
+ ];
144
+ if (branchAddrs.length > 0) {
145
+ let branchIbGibs = [];
146
+ for (const bAddr of branchAddrs) {
147
+ const bIbGib = await getIbGibWithMetaspaceFallback({
148
+ addr: bAddr,
149
+ space: activeBranchSpace,
150
+ metaspace,
151
+ });
152
+ if (bIbGib) {
153
+ branchIbGibs.push(bIbGib);
154
+ }
155
+ }
156
+ const activeBranchIbGib = branchIbGibs.find((b) => b?.data?.name === branchName) || branchIbGibs.at(0);
157
+ rootItemAddr = activeBranchIbGib?.rel8ns?.b2tFS_item?.at(0) || activeBranchIbGib?.rel8ns?.b2tfs_item?.at(0);
158
+ }
159
+ let filterPatterns = [];
160
+ const ignorePath = path.join(activeWorktreeDir, '.ibgibignore');
161
+ try {
162
+ const ignoreContent = await fs.readFile(ignorePath, 'utf8');
163
+ filterPatterns = parseFilterFileContent(ignoreContent);
164
+ }
165
+ catch {
166
+ // Ignore file missing is fine
167
+ }
168
+ const branchItemsMap = new Map();
169
+ if (rootItemAddr) {
170
+ const rootItem = await getIbGibWithMetaspaceFallback({
171
+ addr: rootItemAddr,
172
+ space: activeBranchSpace,
173
+ metaspace,
174
+ });
175
+ if (rootItem) {
176
+ await walkBranchGraph({
177
+ item: rootItem,
178
+ space: activeBranchSpace,
179
+ metaspace,
180
+ currentRelPath: '',
181
+ outMap: branchItemsMap,
182
+ });
183
+ }
184
+ }
185
+ const physicalItemsMap = new Map();
186
+ const rawCommentFiles = [];
187
+ await scanPhysicalWorkspace({
188
+ dirPath: activeWorktreeDir,
189
+ baseDir: activeWorktreeDir,
190
+ vcsFolderName,
191
+ filterPatterns,
192
+ outSourceMap: physicalItemsMap,
193
+ outCommentFiles: rawCommentFiles,
194
+ });
195
+ const staged = [];
196
+ const modified = [];
197
+ const deleted = [];
198
+ const untracked = [];
199
+ for (const [relPath, stagedRec] of stagedMap.entries()) {
200
+ staged.push({
201
+ path: relPath,
202
+ fsType: stagedRec.fsType || 'file',
203
+ status: 'staged',
204
+ });
205
+ }
206
+ for (const [relPath, physItem] of physicalItemsMap.entries()) {
207
+ if (stagedMap.has(relPath)) {
208
+ continue;
209
+ }
210
+ const branchItem = branchItemsMap.get(relPath);
211
+ if (!branchItem) {
212
+ untracked.push({
213
+ path: relPath,
214
+ fsType: physItem.isDirectory ? 'folder' : 'file',
215
+ status: 'untracked',
216
+ });
217
+ }
218
+ else {
219
+ if (!physItem.isDirectory && physItem.fileHash && branchItem.fileHash && physItem.fileHash !== branchItem.fileHash) {
220
+ modified.push({
221
+ path: relPath,
222
+ fsType: 'file',
223
+ status: 'modified',
224
+ });
225
+ }
226
+ }
227
+ }
228
+ for (const [relPath, branchItem] of branchItemsMap.entries()) {
229
+ if (!relPath || relPath === '.' || relPath === '') {
230
+ continue;
231
+ }
232
+ if (!physicalItemsMap.has(relPath) && !stagedMap.has(relPath)) {
233
+ deleted.push({
234
+ path: relPath,
235
+ fsType: branchItem.fsType,
236
+ status: 'deleted',
237
+ });
238
+ }
239
+ }
240
+ // Map raw comment files to targets (file or folder)
241
+ const pendingComments = [];
242
+ for (const raw of rawCommentFiles) {
243
+ const topicName = extractCommentTopicName(raw.filename);
244
+ const candidateFileRelPath = raw.parentRelPath ? `${raw.parentRelPath}/${topicName}` : topicName;
245
+ let targetType = 'folder';
246
+ let targetRelPath = raw.parentRelPath;
247
+ if (physicalItemsMap.has(candidateFileRelPath) && !physicalItemsMap.get(candidateFileRelPath)?.isDirectory) {
248
+ targetType = 'file';
249
+ targetRelPath = candidateFileRelPath;
250
+ }
251
+ else if (branchItemsMap.has(candidateFileRelPath) && branchItemsMap.get(candidateFileRelPath)?.fsType === 'file') {
252
+ targetType = 'file';
253
+ targetRelPath = candidateFileRelPath;
254
+ }
255
+ else if (stagedMap.has(candidateFileRelPath)) {
256
+ targetType = 'file';
257
+ targetRelPath = candidateFileRelPath;
258
+ }
259
+ let content = '';
260
+ try {
261
+ content = await fs.readFile(raw.fullPath, 'utf8');
262
+ }
263
+ catch {
264
+ // Unreadable comment file
265
+ }
266
+ pendingComments.push({
267
+ commentRelPath: raw.relPath,
268
+ commentFullPath: raw.fullPath,
269
+ targetRelPath,
270
+ targetType,
271
+ topicName,
272
+ content,
273
+ });
274
+ }
275
+ return {
276
+ branchName,
277
+ activeWorktreeDir,
278
+ staged,
279
+ modified,
280
+ deleted,
281
+ untracked,
282
+ pendingComments,
283
+ };
284
+ }
285
+ //# sourceMappingURL=status-helper.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status-helper.mjs","sourceRoot":"","sources":["../../../src/engine/status/status-helper.mts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ibgib/vcs-gib",
3
- "version": "0.0.23",
3
+ "version": "0.0.26",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "main": "dist/index.mjs",
@@ -22,7 +22,7 @@
22
22
  "@ibgib/helper-gib": "^0.0.37",
23
23
  "@ibgib/ts-gib": "^0.5.34",
24
24
  "@ibgib/encrypt-gib": "^0.3.1",
25
- "@ibgib/core-gib": "^0.1.74",
26
- "@ibgib/node-gib": "^0.0.19"
25
+ "@ibgib/core-gib": "^0.1.75",
26
+ "@ibgib/node-gib": "^0.0.20"
27
27
  }
28
28
  }
@@ -2,4 +2,4 @@
2
2
  * @module AUTO-GENERATED-version
3
3
  * Auto-generated version constant. Do NOT edit directly.
4
4
  */
5
- export const AUTO_GENERATED_VERSION = '0.0.23';
5
+ export const AUTO_GENERATED_VERSION = '0.0.26';
@@ -18,6 +18,7 @@ import {
18
18
  VCS_PARAM_YES,
19
19
  VCS_PARAM_STAGED,
20
20
  VCS_PARAM_WORKTREE,
21
+ VCS_PARAM_COMMENTS,
21
22
  } from './cli-constants.mjs';
22
23
 
23
24
  export type VcsSubcommand = typeof VCS_SUBCOMMANDS[keyof typeof VCS_SUBCOMMANDS];
@@ -36,6 +37,7 @@ export interface ParsedVcsArgs {
36
37
  yes?: boolean;
37
38
  staged?: boolean;
38
39
  worktree?: boolean;
40
+ comments?: boolean;
39
41
  };
40
42
  rawArgs: string[];
41
43
  }
@@ -104,6 +106,9 @@ export function parseVcsArgs(argv: string[]): ParsedVcsArgs {
104
106
  } else if (matchesParam(arg, VCS_PARAM_WORKTREE)) {
105
107
  flags.worktree = true;
106
108
  i++;
109
+ } else if (matchesParam(arg, VCS_PARAM_COMMENTS)) {
110
+ flags.comments = true;
111
+ i++;
107
112
  } else if (!arg.startsWith('-')) {
108
113
  if (command === VCS_SUBCOMMANDS.HELP) {
109
114
  const normalized = arg.toLowerCase();
@@ -19,10 +19,23 @@ export const VCS_SUBCOMMANDS = {
19
19
  MERGE: 'merge',
20
20
  RESET: 'reset',
21
21
  RESTORE: 'restore',
22
+ GENERATE_COMMENT: 'generate-comment',
23
+ GEN_COMMENT: 'gen-comment',
24
+ GEN_MSG: 'gen-msg',
25
+ GCOMM: 'gcomm',
26
+ GMSG: 'gmsg',
22
27
  HELP: 'help',
23
28
  VERSION: 'version',
24
29
  } as const;
25
30
 
31
+ export const VCS_PARAM_COMMENTS: RCLIParamInfo = {
32
+ name: 'comments',
33
+ synonyms: ['c'],
34
+ description: 'Show full pending comment texts in status',
35
+ isFlag: true,
36
+ argTypeName: 'boolean',
37
+ };
38
+
26
39
  export const VCS_PARAM_MESSAGE: RCLIParamInfo = {
27
40
  name: 'message',
28
41
  synonyms: ['m'],
@@ -20,6 +20,7 @@ import { putInSpace, persistTransformResult } from '@ibgib/core-gib/dist/witness
20
20
 
21
21
  import { bootstrapVcsMetaspace } from '../../bootstrap/node-bootstrap.mjs';
22
22
  import { getOrCreateBranchSpace } from '../../engine/branch/branch-space-helper.mjs';
23
+ import { isCommentMetadataFilename } from '../../engine/status/status-helper.mjs';
23
24
  import { getB2tFSItemIb } from '../../engine/item/item-atom-helper.mjs';
24
25
  import { B2tFSItemIbGib_V1, B2TFS_CHILD_ITEM_REL8N_NAME } from '../../engine/item/item-types.mjs';
25
26
  import { getIbGibWithMetaspaceFallback, createB2tFSItemIbGib, evolveB2tFSItemIbGib } from '../../engine/item/item-helper.mjs';
@@ -186,7 +187,7 @@ export async function executeAddCmd({
186
187
  throw new Error(`No files matched glob pattern: ${relOrAbs} (E: e23d4c5f6a7b8c9d0e1f2a3b4c5d6e7f)`);
187
188
  }
188
189
  } else {
189
- const fullPath = path.resolve(targetDir, relOrAbs);
190
+ const fullPath = path.isAbsolute(relOrAbs) ? relOrAbs : path.resolve(absTargetDir, relOrAbs);
190
191
  let stat;
191
192
  try {
192
193
  stat = await fs.stat(fullPath);
@@ -420,7 +421,9 @@ async function addCmd_collectFilesRecursively({
420
421
  outFiles,
421
422
  });
422
423
  } else if (entry.isFile()) {
423
- outFiles.push(fullPath);
424
+ if (!isCommentMetadataFilename(entry.name)) {
425
+ outFiles.push(fullPath);
426
+ }
424
427
  }
425
428
  }
426
429
  }