ai-dev-worklog 0.5.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.
package/dist/index.js ADDED
@@ -0,0 +1,537 @@
1
+ #!/usr/bin/env node
2
+ import { execFile } from "node:child_process";
3
+ import { mkdir, writeFile } from "node:fs/promises";
4
+ import path from "node:path";
5
+ import process from "node:process";
6
+ import { promisify } from "node:util";
7
+ import { fileURLToPath } from "node:url";
8
+ const execFileAsync = promisify(execFile);
9
+ const outputDirectoryName = ".ai-dev-worklog";
10
+ const toolName = "ai-dev-worklog";
11
+ const toolVersion = "0.5.0";
12
+ const scanCommand = "ai-dev-worklog scan";
13
+ const statusPorcelainCommand = "git status --porcelain";
14
+ const diffNameStatusCommand = "git diff --name-status";
15
+ const continuationPrompt = "Use this local git evidence to continue the development session. Review the changed files, verify the listed commands, and decide the next implementation or validation step from the current repository state.";
16
+ export function parseStatusPorcelain(output) {
17
+ return splitLines(output).map((line) => {
18
+ const status = line.slice(0, 2).padEnd(2, " ");
19
+ const rawPath = line.length > 3 ? line.slice(3) : "";
20
+ const renameSeparator = " -> ";
21
+ const renameIndex = rawPath.indexOf(renameSeparator);
22
+ if (renameIndex >= 0) {
23
+ return {
24
+ indexStatus: status[0],
25
+ workingTreeStatus: status[1],
26
+ previousPath: rawPath.slice(0, renameIndex),
27
+ path: rawPath.slice(renameIndex + renameSeparator.length),
28
+ raw: line,
29
+ };
30
+ }
31
+ return {
32
+ indexStatus: status[0],
33
+ workingTreeStatus: status[1],
34
+ path: rawPath,
35
+ raw: line,
36
+ };
37
+ });
38
+ }
39
+ export function parseNameStatus(output) {
40
+ return splitLines(output).map((line) => {
41
+ const parts = line.split("\t");
42
+ const status = parts[0] ?? "";
43
+ if ((status.startsWith("R") || status.startsWith("C")) && parts.length >= 3) {
44
+ return {
45
+ status,
46
+ previousPath: parts[1],
47
+ path: parts[2],
48
+ raw: line,
49
+ };
50
+ }
51
+ return {
52
+ status,
53
+ path: parts.slice(1).join("\t"),
54
+ raw: line,
55
+ };
56
+ });
57
+ }
58
+ export function buildObservedFiles(statusEntries, diffNameStatusEntries) {
59
+ const filesByPath = new Map();
60
+ for (const entry of statusEntries) {
61
+ upsertObservedFile(filesByPath, {
62
+ path: entry.path,
63
+ previousPath: entry.previousPath ?? null,
64
+ status: mapStatusEntryToFileStatus(entry),
65
+ source: statusPorcelainCommand,
66
+ });
67
+ }
68
+ for (const entry of diffNameStatusEntries) {
69
+ upsertObservedFile(filesByPath, {
70
+ path: entry.path,
71
+ previousPath: entry.previousPath ?? null,
72
+ status: mapNameStatusEntryToFileStatus(entry),
73
+ source: diffNameStatusCommand,
74
+ });
75
+ }
76
+ return Array.from(filesByPath.values());
77
+ }
78
+ export function buildRiskSignals(files) {
79
+ const items = [];
80
+ const untrackedPaths = pathsWithStatus(files, "untracked");
81
+ const deletedPaths = pathsWithStatus(files, "deleted");
82
+ const renamedPaths = pathsWithStatus(files, "renamed");
83
+ if (untrackedPaths.length > 0) {
84
+ items.push({
85
+ kind: "untracked_files",
86
+ severity: "info",
87
+ message: "Untracked files are present.",
88
+ paths: untrackedPaths,
89
+ });
90
+ }
91
+ if (deletedPaths.length > 0) {
92
+ items.push({
93
+ kind: "deleted_files",
94
+ severity: "warning",
95
+ message: "Deleted files are present.",
96
+ paths: deletedPaths,
97
+ });
98
+ }
99
+ if (renamedPaths.length > 0) {
100
+ items.push({
101
+ kind: "renamed_files",
102
+ severity: "info",
103
+ message: "Renamed files are present.",
104
+ paths: renamedPaths,
105
+ });
106
+ }
107
+ return { items };
108
+ }
109
+ export async function scanRepository(cwd = process.cwd(), options = {}) {
110
+ const gitRoot = await resolveGitRoot(cwd);
111
+ const [statusPorcelain, diffStat, diffNameStatus] = await Promise.all([
112
+ runGit(["status", "--porcelain"], gitRoot),
113
+ runGit(["diff", "--stat"], gitRoot),
114
+ runGit(["diff", "--name-status"], gitRoot),
115
+ ]);
116
+ assertGitCommandSucceeded(statusPorcelain);
117
+ assertGitCommandSucceeded(diffStat);
118
+ assertGitCommandSucceeded(diffNameStatus);
119
+ const statusEntries = parseStatusPorcelain(statusPorcelain.stdout);
120
+ const diffNameStatusEntries = parseNameStatus(diffNameStatus.stdout);
121
+ const files = buildObservedFiles(statusEntries, diffNameStatusEntries);
122
+ const validation = {
123
+ status: "not_recorded",
124
+ commands: [],
125
+ };
126
+ const riskSignals = buildRiskSignals(files);
127
+ return {
128
+ schemaVersion: "0.3",
129
+ generatedAt: new Date().toISOString(),
130
+ tool: {
131
+ name: toolName,
132
+ version: toolVersion,
133
+ command: scanCommand,
134
+ },
135
+ repository: {
136
+ cwd: path.resolve(cwd),
137
+ gitRoot,
138
+ },
139
+ declaredIntent: buildDeclaredIntent(options.intent),
140
+ summary: {
141
+ statusEntryCount: statusEntries.length,
142
+ diffNameStatusEntryCount: diffNameStatusEntries.length,
143
+ changedFileCount: files.length,
144
+ hasWorkingTreeChanges: statusEntries.length > 0,
145
+ validationStatus: validation.status,
146
+ riskSignalCount: riskSignals.items.length,
147
+ },
148
+ evidence: {
149
+ git: {
150
+ statusPorcelain,
151
+ diffStat,
152
+ diffNameStatus,
153
+ },
154
+ },
155
+ observedChanges: {
156
+ statusEntries,
157
+ diffNameStatusEntries,
158
+ files,
159
+ },
160
+ validation,
161
+ riskSignals,
162
+ nextSteps: {
163
+ items: [],
164
+ continuationPrompt,
165
+ },
166
+ };
167
+ }
168
+ export async function writeScanOutputs(scan) {
169
+ const outputDirectory = path.join(scan.repository.gitRoot, outputDirectoryName);
170
+ const markdownPath = path.join(outputDirectory, "latest.md");
171
+ const jsonPath = path.join(outputDirectory, "latest.json");
172
+ const continuePromptPath = path.join(outputDirectory, "continue-prompt.md");
173
+ await mkdir(outputDirectory, { recursive: true });
174
+ await Promise.all([
175
+ writeFile(markdownPath, renderMarkdown(scan), "utf8"),
176
+ writeFile(jsonPath, `${JSON.stringify(scan, null, 2)}\n`, "utf8"),
177
+ writeFile(continuePromptPath, renderContinuePrompt(scan), "utf8"),
178
+ ]);
179
+ return { markdownPath, jsonPath, continuePromptPath };
180
+ }
181
+ export function renderMarkdown(scan) {
182
+ const changedFileRows = renderObservedFileRows(scan.observedChanges.files);
183
+ const statusRows = scan.observedChanges.statusEntries
184
+ .map((entry) => {
185
+ const status = `${entry.indexStatus}${entry.workingTreeStatus}`;
186
+ return `| ${escapeMarkdownTableCell(status)} | ${escapeMarkdownTableCell(entry.path)} | ${escapeMarkdownTableCell(entry.previousPath ?? "")} |`;
187
+ })
188
+ .join("\n");
189
+ const diffRows = scan.observedChanges.diffNameStatusEntries
190
+ .map((entry) => {
191
+ return `| ${escapeMarkdownTableCell(entry.status)} | ${escapeMarkdownTableCell(entry.path)} | ${escapeMarkdownTableCell(entry.previousPath ?? "")} |`;
192
+ })
193
+ .join("\n");
194
+ return [
195
+ "# AI Dev Worklog Scan",
196
+ "",
197
+ `Generated: ${scan.generatedAt}`,
198
+ `Repository: ${scan.repository.gitRoot}`,
199
+ `Working directory: ${scan.repository.cwd}`,
200
+ "",
201
+ "## Summary",
202
+ "",
203
+ `- Git status entries: ${scan.summary.statusEntryCount}`,
204
+ `- Git diff name-status entries: ${scan.summary.diffNameStatusEntryCount}`,
205
+ `- Changed files: ${scan.summary.changedFileCount}`,
206
+ `- Working tree has changes: ${scan.summary.hasWorkingTreeChanges ? "yes" : "no"}`,
207
+ `- Validation: ${scan.summary.validationStatus}`,
208
+ `- Risk signals: ${scan.summary.riskSignalCount}`,
209
+ `- Declared intent: ${renderDeclaredIntent(scan.declaredIntent)}`,
210
+ "",
211
+ "## Changed Files",
212
+ "",
213
+ "| Status | Path | Previous path | Sources |",
214
+ "| --- | --- | --- | --- |",
215
+ changedFileRows || "| | | | |",
216
+ "",
217
+ "## Changed Files From Status",
218
+ "",
219
+ "| Status | Path | Previous path |",
220
+ "| --- | --- | --- |",
221
+ statusRows || "| | | |",
222
+ "",
223
+ "## Changed Files From Diff",
224
+ "",
225
+ "| Status | Path | Previous path |",
226
+ "| --- | --- | --- |",
227
+ diffRows || "| | | |",
228
+ "",
229
+ "## git status --porcelain",
230
+ "",
231
+ codeBlock(scan.evidence.git.statusPorcelain.stdout),
232
+ "",
233
+ "## git diff --stat",
234
+ "",
235
+ codeBlock(scan.evidence.git.diffStat.stdout),
236
+ "",
237
+ "## git diff --name-status",
238
+ "",
239
+ codeBlock(scan.evidence.git.diffNameStatus.stdout),
240
+ "",
241
+ "## Continue Prompt",
242
+ "",
243
+ scan.nextSteps.continuationPrompt,
244
+ "",
245
+ ].join("\n");
246
+ }
247
+ export function renderContinuePrompt(scan) {
248
+ return [
249
+ "# Continue This Development Session",
250
+ "",
251
+ "## Original Task Goal",
252
+ "",
253
+ renderDeclaredIntent(scan.declaredIntent),
254
+ "",
255
+ "## Repository",
256
+ "",
257
+ `- Working directory: ${scan.repository.cwd}`,
258
+ `- Git root: ${scan.repository.gitRoot}`,
259
+ "",
260
+ "## Changed Files",
261
+ "",
262
+ renderChangedFilesForPrompt(scan.observedChanges.files),
263
+ "",
264
+ "## Command Results",
265
+ "",
266
+ renderCommandResults(scan),
267
+ "",
268
+ "## Risk Signals",
269
+ "",
270
+ renderRiskSignals(scan.riskSignals),
271
+ "",
272
+ "## Remaining Checks",
273
+ "",
274
+ renderRemainingChecks(scan.validation),
275
+ "",
276
+ "## Suggested Next Steps",
277
+ "",
278
+ scan.nextSteps.continuationPrompt,
279
+ "",
280
+ ].join("\n");
281
+ }
282
+ export async function runCli(argv = process.argv.slice(2), cwd = process.cwd()) {
283
+ const [command, ...args] = argv;
284
+ if (command === "scan") {
285
+ const parsed = parseScanArgs(args);
286
+ if (parsed.error !== undefined) {
287
+ console.error(parsed.error);
288
+ printHelp();
289
+ return 1;
290
+ }
291
+ const scan = await scanRepository(cwd, parsed.options);
292
+ const outputs = await writeScanOutputs(scan);
293
+ console.log(`Wrote ${outputs.markdownPath}`);
294
+ console.log(`Wrote ${outputs.jsonPath}`);
295
+ console.log(`Wrote ${outputs.continuePromptPath}`);
296
+ return 0;
297
+ }
298
+ if (command === "--help" || command === "-h" || command === undefined) {
299
+ printHelp();
300
+ return 0;
301
+ }
302
+ console.error(`Unknown command: ${command}`);
303
+ printHelp();
304
+ return 1;
305
+ }
306
+ function parseScanArgs(args) {
307
+ const options = {};
308
+ for (let index = 0; index < args.length; index += 1) {
309
+ const arg = args[index];
310
+ if (arg === "--intent") {
311
+ const value = args[index + 1];
312
+ if (value === undefined || value.startsWith("--")) {
313
+ return { options, error: "--intent requires a non-empty value." };
314
+ }
315
+ const intent = value.trim();
316
+ if (intent.length === 0) {
317
+ return { options, error: "--intent requires a non-empty value." };
318
+ }
319
+ options.intent = intent;
320
+ index += 1;
321
+ continue;
322
+ }
323
+ if (arg.startsWith("--intent=")) {
324
+ const intent = arg.slice("--intent=".length).trim();
325
+ if (intent.length === 0) {
326
+ return { options, error: "--intent requires a non-empty value." };
327
+ }
328
+ options.intent = intent;
329
+ continue;
330
+ }
331
+ return { options, error: `Unknown scan option: ${arg}` };
332
+ }
333
+ return { options };
334
+ }
335
+ async function resolveGitRoot(cwd) {
336
+ const result = await runGit(["rev-parse", "--show-toplevel"], cwd);
337
+ assertGitCommandSucceeded(result);
338
+ return path.resolve(result.stdout.trim());
339
+ }
340
+ async function runGit(args, cwd) {
341
+ const command = `git ${args.join(" ")}`;
342
+ try {
343
+ const { stdout, stderr } = await execFileAsync("git", args, {
344
+ cwd,
345
+ maxBuffer: 10 * 1024 * 1024,
346
+ });
347
+ return {
348
+ command,
349
+ stdout: trimTrailingNewline(stdout),
350
+ stderr: trimTrailingNewline(stderr),
351
+ exitCode: 0,
352
+ };
353
+ }
354
+ catch (error) {
355
+ const execError = error;
356
+ return {
357
+ command,
358
+ stdout: trimTrailingNewline(execError.stdout ?? ""),
359
+ stderr: trimTrailingNewline(execError.stderr ?? execError.message),
360
+ exitCode: typeof execError.code === "number" ? execError.code : 1,
361
+ };
362
+ }
363
+ }
364
+ function assertGitCommandSucceeded(result) {
365
+ if (result.exitCode !== 0) {
366
+ throw new Error(`${result.command} failed with exit code ${result.exitCode}: ${result.stderr}`);
367
+ }
368
+ }
369
+ function upsertObservedFile(filesByPath, input) {
370
+ const existing = filesByPath.get(input.path);
371
+ if (existing === undefined) {
372
+ filesByPath.set(input.path, {
373
+ path: input.path,
374
+ previousPath: input.previousPath,
375
+ status: input.status,
376
+ sources: [input.source],
377
+ });
378
+ return;
379
+ }
380
+ if (existing.previousPath === null && input.previousPath !== null) {
381
+ existing.previousPath = input.previousPath;
382
+ }
383
+ if (existing.status === "unknown" && input.status !== "unknown") {
384
+ existing.status = input.status;
385
+ }
386
+ if (!existing.sources.includes(input.source)) {
387
+ existing.sources.push(input.source);
388
+ }
389
+ }
390
+ function mapStatusEntryToFileStatus(entry) {
391
+ const statuses = [entry.indexStatus, entry.workingTreeStatus];
392
+ if (entry.indexStatus === "?" && entry.workingTreeStatus === "?") {
393
+ return "untracked";
394
+ }
395
+ if (statuses.includes("R")) {
396
+ return "renamed";
397
+ }
398
+ if (statuses.includes("C")) {
399
+ return "copied";
400
+ }
401
+ if (statuses.includes("D")) {
402
+ return "deleted";
403
+ }
404
+ if (statuses.includes("A")) {
405
+ return "added";
406
+ }
407
+ if (statuses.includes("M")) {
408
+ return "modified";
409
+ }
410
+ return "unknown";
411
+ }
412
+ function mapNameStatusEntryToFileStatus(entry) {
413
+ const statusKind = entry.status[0];
414
+ if (statusKind === "R") {
415
+ return "renamed";
416
+ }
417
+ if (statusKind === "C") {
418
+ return "copied";
419
+ }
420
+ if (statusKind === "D") {
421
+ return "deleted";
422
+ }
423
+ if (statusKind === "A") {
424
+ return "added";
425
+ }
426
+ if (statusKind === "M") {
427
+ return "modified";
428
+ }
429
+ return "unknown";
430
+ }
431
+ function pathsWithStatus(files, status) {
432
+ return files.filter((file) => file.status === status).map((file) => file.path);
433
+ }
434
+ function buildDeclaredIntent(intent) {
435
+ const summary = intent?.trim();
436
+ if (summary === undefined || summary.length === 0) {
437
+ return {
438
+ status: "not_provided",
439
+ source: "not_provided",
440
+ summary: null,
441
+ };
442
+ }
443
+ return {
444
+ status: "provided",
445
+ source: "cli_option",
446
+ summary,
447
+ };
448
+ }
449
+ function renderObservedFileRows(files) {
450
+ return files
451
+ .map((entry) => {
452
+ return `| ${escapeMarkdownTableCell(entry.status)} | ${escapeMarkdownTableCell(entry.path)} | ${escapeMarkdownTableCell(entry.previousPath ?? "")} | ${escapeMarkdownTableCell(entry.sources.join(", "))} |`;
453
+ })
454
+ .join("\n");
455
+ }
456
+ function renderChangedFilesForPrompt(files) {
457
+ if (files.length === 0) {
458
+ return "No changed files observed.";
459
+ }
460
+ return [
461
+ "| Status | Path | Previous path | Sources |",
462
+ "| --- | --- | --- | --- |",
463
+ renderObservedFileRows(files),
464
+ ].join("\n");
465
+ }
466
+ function renderDeclaredIntent(declaredIntent) {
467
+ if (declaredIntent.status === "not_provided") {
468
+ return "Not provided by this local scan.";
469
+ }
470
+ return declaredIntent.summary ?? "Not provided by this local scan.";
471
+ }
472
+ function renderCommandResults(scan) {
473
+ return [
474
+ scan.evidence.git.statusPorcelain,
475
+ scan.evidence.git.diffStat,
476
+ scan.evidence.git.diffNameStatus,
477
+ ].map((result) => `- \`${result.command}\`: exit code ${result.exitCode}`).join("\n");
478
+ }
479
+ function renderRiskSignals(riskSignals) {
480
+ if (riskSignals.items.length === 0) {
481
+ return "No risk signals recorded.";
482
+ }
483
+ return riskSignals.items
484
+ .map((item) => {
485
+ const paths = item.paths.length > 0 ? ` Paths: ${item.paths.join(", ")}.` : "";
486
+ return `- ${item.severity}: ${item.kind} - ${item.message}${paths}`;
487
+ })
488
+ .join("\n");
489
+ }
490
+ function renderRemainingChecks(validation) {
491
+ const checks = [
492
+ "- Review the changed files.",
493
+ "- Run project validation commands if needed.",
494
+ "- Decide whether to commit, continue editing, or discard local changes.",
495
+ ];
496
+ if (validation.status === "not_recorded") {
497
+ return [
498
+ "- Validation has not been recorded by this local scan.",
499
+ ...checks,
500
+ ].join("\n");
501
+ }
502
+ return checks.join("\n");
503
+ }
504
+ function splitLines(output) {
505
+ if (output.length === 0) {
506
+ return [];
507
+ }
508
+ return output.split(/\r?\n/).filter((line) => line.length > 0);
509
+ }
510
+ function codeBlock(value) {
511
+ return ["```text", value || "(no output)", "```"].join("\n");
512
+ }
513
+ function escapeMarkdownTableCell(value) {
514
+ return value.replaceAll("\\", "\\\\").replaceAll("|", "\\|").replace(/\r?\n/g, " ");
515
+ }
516
+ function printHelp() {
517
+ console.log("Usage: ai-dev-worklog scan [--intent <summary>]");
518
+ console.log(" ai-dev-worklog scan [--intent=<summary>]");
519
+ }
520
+ function trimTrailingNewline(value) {
521
+ return value.toString().replace(/\r?\n$/, "");
522
+ }
523
+ function isDirectExecution() {
524
+ if (process.argv[1] === undefined) {
525
+ return false;
526
+ }
527
+ return path.resolve(fileURLToPath(import.meta.url)) === path.resolve(process.argv[1]);
528
+ }
529
+ if (isDirectExecution()) {
530
+ runCli().then((exitCode) => {
531
+ process.exitCode = exitCode;
532
+ }).catch((error) => {
533
+ console.error(error instanceof Error ? error.message : String(error));
534
+ process.exitCode = 1;
535
+ });
536
+ }
537
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,48 @@
1
+ {
2
+ "name": "ai-dev-worklog",
3
+ "version": "0.5.0",
4
+ "description": "Local worklog CLI for AI-assisted development sessions.",
5
+ "type": "module",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "git+https://github.com/alexan780/ai-dev-worklog.git"
9
+ },
10
+ "bugs": {
11
+ "url": "https://github.com/alexan780/ai-dev-worklog/issues"
12
+ },
13
+ "homepage": "https://github.com/alexan780/ai-dev-worklog#readme",
14
+ "keywords": [
15
+ "ai-agents",
16
+ "cli",
17
+ "codex",
18
+ "developer-tools",
19
+ "local-first",
20
+ "typescript",
21
+ "worklog"
22
+ ],
23
+ "bin": {
24
+ "ai-dev-worklog": "dist/index.js"
25
+ },
26
+ "main": "dist/index.js",
27
+ "scripts": {
28
+ "build": "tsc -p tsconfig.json",
29
+ "test": "node --test dist/index.test.js"
30
+ },
31
+ "files": [
32
+ "dist/index.d.ts",
33
+ "dist/index.js",
34
+ "dist/index.js.map",
35
+ "schema/worklog.schema.json",
36
+ "CHANGELOG.md",
37
+ "README.md",
38
+ "LICENSE"
39
+ ],
40
+ "engines": {
41
+ "node": ">=20"
42
+ },
43
+ "license": "MIT",
44
+ "devDependencies": {
45
+ "@types/node": "^20.14.9",
46
+ "typescript": "^5.4.5"
47
+ }
48
+ }