project-logbook 0.4.0 → 1.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.
- package/README.md +36 -1
- package/dist/commands/build.js +34 -76
- package/dist/commands/build.js.map +1 -0
- package/dist/commands/init.js +1 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/lint.js +7 -2
- package/dist/commands/lint.js.map +1 -0
- package/dist/commands/list.js +4 -16
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/log.d.ts +1 -3
- package/dist/commands/log.js +4 -3
- package/dist/commands/log.js.map +1 -0
- package/dist/commands/new.js +1 -0
- package/dist/commands/new.js.map +1 -0
- package/dist/commands/preview.js +1 -0
- package/dist/commands/preview.js.map +1 -0
- package/dist/commands/release.js +1 -0
- package/dist/commands/release.js.map +1 -0
- package/dist/commands/start.d.ts +1 -1
- package/dist/commands/start.js +53 -12
- package/dist/commands/start.js.map +1 -0
- package/dist/commands/status.js +7 -18
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/steer.js +1 -0
- package/dist/commands/steer.js.map +1 -0
- package/dist/commands/upgrade.js +1 -0
- package/dist/commands/upgrade.js.map +1 -0
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -0
- package/dist/lib/about-content.js +1 -0
- package/dist/lib/about-content.js.map +1 -0
- package/dist/lib/adr-renderer.d.ts +12 -0
- package/dist/lib/adr-renderer.js +53 -0
- package/dist/lib/adr-renderer.js.map +1 -0
- package/dist/lib/build-helpers.js +8 -3
- package/dist/lib/build-helpers.js.map +1 -0
- package/dist/lib/build-steps.d.ts +20 -2
- package/dist/lib/build-steps.js +107 -13
- package/dist/lib/build-steps.js.map +1 -0
- package/dist/lib/config.d.ts +8 -0
- package/dist/lib/config.js +19 -1
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/entry-id.js +1 -0
- package/dist/lib/entry-id.js.map +1 -0
- package/dist/lib/entry-paths.js +1 -0
- package/dist/lib/entry-paths.js.map +1 -0
- package/dist/lib/git-helpers.d.ts +5 -16
- package/dist/lib/git-helpers.js +52 -78
- package/dist/lib/git-helpers.js.map +1 -0
- package/dist/lib/git-url-helpers.d.ts +16 -0
- package/dist/lib/git-url-helpers.js +76 -0
- package/dist/lib/git-url-helpers.js.map +1 -0
- package/dist/lib/hast-helpers.js +1 -0
- package/dist/lib/hast-helpers.js.map +1 -0
- package/dist/lib/html-attributes.js +1 -0
- package/dist/lib/html-attributes.js.map +1 -0
- package/dist/lib/html-escape.js +1 -0
- package/dist/lib/html-escape.js.map +1 -0
- package/dist/lib/image-helpers.js +20 -30
- package/dist/lib/image-helpers.js.map +1 -0
- package/dist/lib/jira-helpers.js +1 -0
- package/dist/lib/jira-helpers.js.map +1 -0
- package/dist/lib/lint-runner.js +1 -0
- package/dist/lib/lint-runner.js.map +1 -0
- package/dist/lib/lint-types.js +1 -0
- package/dist/lib/lint-types.js.map +1 -0
- package/dist/lib/lockfile.js +1 -0
- package/dist/lib/lockfile.js.map +1 -0
- package/dist/lib/logbook-client.js +1 -0
- package/dist/lib/logbook-client.js.map +1 -0
- package/dist/lib/markdown-processors.js +1 -0
- package/dist/lib/markdown-processors.js.map +1 -0
- package/dist/lib/migrations.js +1 -0
- package/dist/lib/migrations.js.map +1 -0
- package/dist/lib/package-version.js +1 -0
- package/dist/lib/package-version.js.map +1 -0
- package/dist/lib/rss.js +1 -0
- package/dist/lib/rss.js.map +1 -0
- package/dist/lib/session.js +47 -35
- package/dist/lib/session.js.map +1 -0
- package/dist/lib/styles.js +1 -0
- package/dist/lib/styles.js.map +1 -0
- package/dist/lib/template-helpers.d.ts +6 -1
- package/dist/lib/template-helpers.js +64 -0
- package/dist/lib/template-helpers.js.map +1 -0
- package/dist/lib/template-types.d.ts +22 -2
- package/dist/lib/template-types.js +1 -0
- package/dist/lib/template-types.js.map +1 -0
- package/dist/lib/templates.d.ts +7 -2
- package/dist/lib/templates.js +54 -34
- package/dist/lib/templates.js.map +1 -0
- package/dist/lib/theme.js +1 -0
- package/dist/lib/theme.js.map +1 -0
- package/dist/lib/url-helpers.js +1 -0
- package/dist/lib/url-helpers.js.map +1 -0
- package/dist/linters/diff-to-narrative.d.ts +2 -1
- package/dist/linters/diff-to-narrative.js +3 -10
- package/dist/linters/diff-to-narrative.js.map +1 -0
- package/dist/linters/frontmatter.js +1 -0
- package/dist/linters/frontmatter.js.map +1 -0
- package/dist/linters/index.js +1 -0
- package/dist/linters/index.js.map +1 -0
- package/dist/linters/jira-prefix.js +1 -0
- package/dist/linters/jira-prefix.js.map +1 -0
- package/dist/linters/links.js +26 -4
- package/dist/linters/links.js.map +1 -0
- package/dist/linters/lockfile.js +1 -0
- package/dist/linters/lockfile.js.map +1 -0
- package/dist/linters/placeholders.js +6 -4
- package/dist/linters/placeholders.js.map +1 -0
- package/dist/linters/project-integrity.js +1 -0
- package/dist/linters/project-integrity.js.map +1 -0
- package/dist/linters/readability.js +2 -3
- package/dist/linters/readability.js.map +1 -0
- package/dist/linters/technical-log.js +1 -0
- package/dist/linters/technical-log.js.map +1 -0
- package/dist/linters/workspaces.js +1 -0
- package/dist/linters/workspaces.js.map +1 -0
- package/dist/templates/WELCOME.md +12 -0
- package/dist/templates/index.md +2 -1
- package/dist/templates/logbook-client.js +29 -0
- package/dist/templates/styles.css +205 -32
- package/dist/utils/date.js +1 -0
- package/dist/utils/date.js.map +1 -0
- package/dist/utils/frontmatter.d.ts +9 -0
- package/dist/utils/frontmatter.js +16 -0
- package/dist/utils/frontmatter.js.map +1 -0
- package/dist/utils/fs.d.ts +10 -0
- package/dist/utils/fs.js +112 -0
- package/dist/utils/fs.js.map +1 -0
- package/dist/utils/id.js +1 -0
- package/dist/utils/id.js.map +1 -0
- package/dist/utils/log-timeline.d.ts +2 -1
- package/dist/utils/log-timeline.js +1 -0
- package/dist/utils/log-timeline.js.map +1 -0
- package/dist/utils/slug.js +1 -0
- package/dist/utils/slug.js.map +1 -0
- package/dist/utils/string.js +1 -0
- package/dist/utils/string.js.map +1 -0
- package/dist/utils/timeline-helpers.d.ts +2 -2
- package/dist/utils/timeline-helpers.js +5 -2
- package/dist/utils/timeline-helpers.js.map +1 -0
- package/dist/utils/validation.d.ts +5 -0
- package/dist/utils/validation.js +21 -0
- package/dist/utils/validation.js.map +1 -0
- package/package.json +10 -4
- package/src/templates/WELCOME.md +12 -0
- package/src/templates/index.md +2 -1
- package/src/templates/logbook-client.js +29 -0
- package/src/templates/styles.css +205 -32
package/dist/commands/status.js
CHANGED
|
@@ -2,6 +2,7 @@ import fs from 'fs-extra';
|
|
|
2
2
|
import { join } from 'node:path';
|
|
3
3
|
import { getConfig, getLogbookDirPath } from '../lib/config.js';
|
|
4
4
|
import { getLogbookEntries } from '../utils/fs.js';
|
|
5
|
+
import { hasUnfilledPlaceholders } from '../utils/validation.js';
|
|
5
6
|
import { getActiveEntry } from '../lib/session.js';
|
|
6
7
|
import { parseTicketId } from '../utils/id.js';
|
|
7
8
|
import { error, neutral, highlight, bold, warning } from '../lib/theme.js';
|
|
@@ -31,23 +32,7 @@ export async function status() {
|
|
|
31
32
|
draftCount++;
|
|
32
33
|
continue;
|
|
33
34
|
}
|
|
34
|
-
|
|
35
|
-
// Check frontmatter field values for bracket-style unfilled placeholders
|
|
36
|
-
const dataValues = Object.values(data)
|
|
37
|
-
.filter((v) => typeof v === 'string')
|
|
38
|
-
.join('\n');
|
|
39
|
-
const frontmatterHasPlaceholders = dataValues.includes('[DATE_END]') ||
|
|
40
|
-
dataValues.includes('[DATE_START]') ||
|
|
41
|
-
dataValues.includes('[WRITE_SUMMARY_HERE]') ||
|
|
42
|
-
dataValues.includes('[PROMPTER]') ||
|
|
43
|
-
dataValues.includes('[HARNESS]') ||
|
|
44
|
-
dataValues.includes('[LLM]');
|
|
45
|
-
// Check body content for unfilled template hints (strip inline code spans to avoid false positives)
|
|
46
|
-
const contentWithoutCode = content.replace(/`[^`]*`/g, '');
|
|
47
|
-
const bodyHasPlaceholders = contentWithoutCode.includes('TODO:') ||
|
|
48
|
-
content.includes('Write a polished, highly readable "short story" of the change here.');
|
|
49
|
-
const hasPlaceholders = frontmatterHasPlaceholders || bodyHasPlaceholders;
|
|
50
|
-
if (hasPlaceholders) {
|
|
35
|
+
if (hasUnfilledPlaceholders(entry)) {
|
|
51
36
|
draftCount++;
|
|
52
37
|
}
|
|
53
38
|
else if (!isActive) {
|
|
@@ -114,6 +99,9 @@ export async function status() {
|
|
|
114
99
|
console.log(` ${bold('Project Name:')} ${config.projectName}`);
|
|
115
100
|
console.log(` ${bold('Logbook Directory:')} ${config.logbookDir}`);
|
|
116
101
|
console.log(` ${bold('Output Directory:')} ${config.outputDir}`);
|
|
102
|
+
if (config.adrDir) {
|
|
103
|
+
console.log(` ${bold('ADR Directory:')} ${config.adrDir}`);
|
|
104
|
+
}
|
|
117
105
|
console.log(` ${bold('Primary Color:')} ${config.primaryColor}`);
|
|
118
106
|
if (config.jiraBaseUrl) {
|
|
119
107
|
console.log(` ${bold('Jira Base URL:')} ${config.jiraBaseUrl}`);
|
|
@@ -122,7 +110,7 @@ export async function status() {
|
|
|
122
110
|
console.log(` ${bold('Jira Prefix:')} ${config.jiraPrefix}`);
|
|
123
111
|
}
|
|
124
112
|
if (config.repositoryUrl) {
|
|
125
|
-
console.log(` ${bold('Repository URL:')}
|
|
113
|
+
console.log(` ${bold('Repository URL:')} ${config.repositoryUrl}`);
|
|
126
114
|
}
|
|
127
115
|
if (config.tags?.allowed) {
|
|
128
116
|
console.log(` ${bold('Allowed Tags:')} ${config.tags.allowed.join(', ')}`);
|
|
@@ -136,3 +124,4 @@ export async function status() {
|
|
|
136
124
|
console.log(` ${bold('Latest Entry:')} ${latestText}`);
|
|
137
125
|
console.log('');
|
|
138
126
|
}
|
|
127
|
+
//# sourceMappingURL=status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/steer.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"steer.js","sourceRoot":"","sources":["../../src/commands/steer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EACL,OAAO,IAAI,YAAY,EACvB,MAAM,EACN,KAAK,IAAI,UAAU,EACnB,OAAO,EACP,YAAY,EACZ,IAAI,EACJ,SAAS,GACV,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,MAAM,CAAC,KAAK,UAAU,KAAK;IACzB,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,EAAE,EAAE,WAAW,CAAC,CAAC;IAEvD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC9B,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,8BAA8B,CAAC,CAAC,CAAC;QACrE,OAAO;IACT,CAAC;IAED,MAAM,QAAQ,GAAG,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAEpD,gDAAgD;IAChD,MAAM,SAAS,GAAG,QAAQ;SACvB,OAAO,CAAC,uBAAuB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;SAC3D,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SAC1C,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;SAC1C,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;SACrC,OAAO,CAAC,aAAa,EAAE,YAAY,CAAC,YAAY,CAAC,CAAC;SAClD,OAAO,CAAC,qBAAqB,EAAE,YAAY,CAAC,oBAAoB,CAAC,CAAC;SAClE,OAAO,CAAC,gBAAgB,EAAE,UAAU,CAAC,eAAe,CAAC,CAAC,CAAC;IAE1D,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AACzB,CAAC"}
|
package/dist/commands/upgrade.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upgrade.js","sourceRoot":"","sources":["../../src/commands/upgrade.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAExD,MAAM,CAAC,KAAK,UAAU,OAAO;IAC3B,MAAM,aAAa,GAAG,MAAM,gBAAgB,EAAE,CAAC;IAC/C,IAAI,YAAY,GAAG,CAAC,CAAC;IAErB,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;QACjC,IAAI,IAAI,CAAC,MAAM,KAAK,YAAY,EAAE,CAAC;YACjC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,gBAAgB,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACnD,CAAC;aAAM,CAAC;YACN,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;YACzD,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YAC5F,YAAY,EAAE,CAAC;QACjB,CAAC;IACH,CAAC;IAED,IAAI,YAAY,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,qCAAqC,CAAC,CAAC,CAAC;IAC7D,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,2BAA2B,YAAY,SAAS,CAAC,CAAC,CAAC;IACzE,CAAC;AACH,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -78,10 +78,9 @@ program
|
|
|
78
78
|
program
|
|
79
79
|
.command('log <message>')
|
|
80
80
|
.description('Append a timestamped log entry to the active log.md (e.g. logbook log "Did a thing")')
|
|
81
|
-
.
|
|
82
|
-
.action(async (message, options) => {
|
|
81
|
+
.action(async (message) => {
|
|
83
82
|
const { log } = await import('./commands/log.js');
|
|
84
|
-
await log([message]
|
|
83
|
+
await log([message]);
|
|
85
84
|
});
|
|
86
85
|
program
|
|
87
86
|
.command('steer')
|
|
@@ -91,3 +90,4 @@ program
|
|
|
91
90
|
await steer();
|
|
92
91
|
});
|
|
93
92
|
program.parse();
|
|
93
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"about-content.js","sourceRoot":"","sources":["../../src/lib/about-content.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE1D,MAAM,UAAU,eAAe;IAC7B,OAAO,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,uBAAuB,CAAC,EAAE,MAAM,CAAC,CAAC;AACxE,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { LogbookConfig } from './config.js';
|
|
2
|
+
import type { TimelineAdrItem } from './template-types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Compiles a parsed ADR into its own beautiful, static detail HTML page.
|
|
5
|
+
*/
|
|
6
|
+
export declare function renderAdr(adr: TimelineAdrItem, ctx: {
|
|
7
|
+
adrDir: string;
|
|
8
|
+
outputDir: string;
|
|
9
|
+
config: LogbookConfig;
|
|
10
|
+
version: string;
|
|
11
|
+
buildTime: string;
|
|
12
|
+
}): Promise<void>;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import fs from 'fs-extra';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import matter from 'gray-matter';
|
|
4
|
+
import { layout } from './templates.js';
|
|
5
|
+
import { mdToHtml, generateBuildMeta } from './build-helpers.js';
|
|
6
|
+
import { escapeHtml } from './html-escape.js';
|
|
7
|
+
import { html, getAdrStatusInfo } from './template-helpers.js';
|
|
8
|
+
/**
|
|
9
|
+
* Compiles a parsed ADR into its own beautiful, static detail HTML page.
|
|
10
|
+
*/
|
|
11
|
+
export async function renderAdr(adr, ctx) {
|
|
12
|
+
const adrSourcePath = join(ctx.adrDir, adr.filepath.split('/').pop() || '');
|
|
13
|
+
const mdContent = await fs.readFile(adrSourcePath, 'utf8');
|
|
14
|
+
const { content } = matter(mdContent);
|
|
15
|
+
const bodyHtml = await mdToHtml(content);
|
|
16
|
+
const buildMeta = generateBuildMeta(ctx.version, ctx.buildTime);
|
|
17
|
+
const adrId = `ADR-${String(adr.id).padStart(4, '0')}`;
|
|
18
|
+
const status = adr.status.toLowerCase();
|
|
19
|
+
const { badgeClass: statusBadgeClass, icon: statusIcon } = getAdrStatusInfo(status);
|
|
20
|
+
const tagsHtml = adr.tags && adr.tags.length > 0
|
|
21
|
+
? adr.tags.map((tag) => `<span class="tag-badge tag-workspace">${escapeHtml(tag)}</span>`).join('')
|
|
22
|
+
: '';
|
|
23
|
+
const pageHtml = layout({
|
|
24
|
+
title: adr.title,
|
|
25
|
+
projectName: ctx.config.projectName,
|
|
26
|
+
basePath: '../../',
|
|
27
|
+
buildMeta,
|
|
28
|
+
header: html `<header>
|
|
29
|
+
<div class="header-inner">
|
|
30
|
+
<h1><a href="../../index.html">${escapeHtml(ctx.config.projectName)}</a></h1>
|
|
31
|
+
<p class="tagline">Architecture Decision Record</p>
|
|
32
|
+
</div>
|
|
33
|
+
</header>`,
|
|
34
|
+
content: html `<article class="post-card adr-detail-card">
|
|
35
|
+
<div class="item-meta adr-detail-meta">
|
|
36
|
+
<span class="${statusBadgeClass} adr-status-badge">${statusIcon} ${status}</span>
|
|
37
|
+
<strong>${adrId}</strong> • Created by <strong>${escapeHtml(adr.author)}</strong> on
|
|
38
|
+
<strong>${escapeHtml(adr.displayDate)}</strong>
|
|
39
|
+
</div>
|
|
40
|
+
<h2 class="adr-detail-title">${escapeHtml(adr.title)}</h2>
|
|
41
|
+
<div class="markdown-body adr-detail-body">${bodyHtml}</div>
|
|
42
|
+
<div class="tags-wrapper adr-detail-tags">
|
|
43
|
+
<span class="tag-badge adr-indicator-badge">ADR</span>
|
|
44
|
+
${tagsHtml}
|
|
45
|
+
</div>
|
|
46
|
+
</article>`,
|
|
47
|
+
});
|
|
48
|
+
const stem = adr.filepath.split('/').pop()?.replace(/\.md$/i, '') || '';
|
|
49
|
+
const outDir = join(ctx.outputDir, 'adr', stem);
|
|
50
|
+
await fs.mkdirp(outDir);
|
|
51
|
+
await fs.writeFile(join(outDir, 'index.html'), pageHtml);
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=adr-renderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adr-renderer.js","sourceRoot":"","sources":["../../src/lib/adr-renderer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import fs from 'fs-extra';
|
|
2
|
-
import { join
|
|
2
|
+
import { join } from 'node:path';
|
|
3
3
|
import matter from 'gray-matter';
|
|
4
4
|
import { layout, postTemplate } from './templates.js';
|
|
5
5
|
import { getGitCommits } from './git-helpers.js';
|
|
@@ -70,8 +70,8 @@ async function renderLinkedMdFiles(markdownSources, entryPath, entryOutputDir, c
|
|
|
70
70
|
continue;
|
|
71
71
|
}
|
|
72
72
|
// Path traversal protection: ensure resolved path stays within project boundaries
|
|
73
|
-
const resolvedPath =
|
|
74
|
-
const projectRoot =
|
|
73
|
+
const resolvedPath = fs.realpathSync(sourcePath);
|
|
74
|
+
const projectRoot = fs.realpathSync(process.cwd());
|
|
75
75
|
if (!resolvedPath.startsWith(projectRoot + '/') && resolvedPath !== projectRoot) {
|
|
76
76
|
console.warn(` Path traversal blocked: ${href}`);
|
|
77
77
|
continue;
|
|
@@ -129,6 +129,8 @@ export async function renderPost(data, i, allEntries, ctx) {
|
|
|
129
129
|
});
|
|
130
130
|
const descriptionRaw = typeof data.summary === 'string' ? data.summary.replace(/[*#`]/g, '').trim() : '';
|
|
131
131
|
const buildMeta = generateBuildMeta(ctx.version, ctx.buildTime);
|
|
132
|
+
const prevUrl = prev ? `../${prev.slug}/index.html` : undefined;
|
|
133
|
+
const nextUrl = next ? `../${next.slug}/index.html` : undefined;
|
|
132
134
|
const postHtml = layout({
|
|
133
135
|
title: data.title ?? data.slug,
|
|
134
136
|
projectName: ctx.config.projectName,
|
|
@@ -138,6 +140,8 @@ export async function renderPost(data, i, allEntries, ctx) {
|
|
|
138
140
|
buildMeta,
|
|
139
141
|
header: postHeader,
|
|
140
142
|
content: postMainContent,
|
|
143
|
+
prevUrl,
|
|
144
|
+
nextUrl,
|
|
141
145
|
});
|
|
142
146
|
const entryOutputDir = join(ctx.outputDir, data.slug);
|
|
143
147
|
await fs.mkdirp(entryOutputDir);
|
|
@@ -156,3 +160,4 @@ export async function renderPost(data, i, allEntries, ctx) {
|
|
|
156
160
|
export function generateBuildMeta(version, buildTime) {
|
|
157
161
|
return `Generated by <a href="https://www.npmjs.com/package/project-logbook" target="_blank" rel="noopener noreferrer">Project Logbook CLI</a> v${version} • ${buildTime}`;
|
|
158
162
|
}
|
|
163
|
+
//# sourceMappingURL=build-helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build-helpers.js","sourceRoot":"","sources":["../../src/lib/build-helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import type { LogbookConfig } from './config.js';
|
|
2
|
+
import type { TimelineEntry } from './template-types.js';
|
|
3
|
+
import type { EntryMeta } from '../utils/fs.js';
|
|
2
4
|
/**
|
|
3
5
|
* Set up the output directory: create it, copy static assets (favicon, styles, script).
|
|
4
6
|
*/
|
|
@@ -13,8 +15,24 @@ export declare function processReadme(projectRoot: string): Promise<{
|
|
|
13
15
|
/**
|
|
14
16
|
* Copy README images to the output directory.
|
|
15
17
|
*/
|
|
16
|
-
export declare
|
|
18
|
+
export declare const copyReadmeImages: (projectRoot: string, outputDir: string, imagePaths: string[]) => Promise<void>;
|
|
17
19
|
/**
|
|
18
20
|
* Process the About content and return rendered HTML.
|
|
19
21
|
*/
|
|
20
|
-
export declare
|
|
22
|
+
export declare const processAboutContent: (aboutContent: string) => Promise<string>;
|
|
23
|
+
/**
|
|
24
|
+
* Process the Welcome content and return rendered HTML.
|
|
25
|
+
*/
|
|
26
|
+
export declare function processWelcomeContent(): Promise<string>;
|
|
27
|
+
/**
|
|
28
|
+
* Generate and write RSS feed to the output directory.
|
|
29
|
+
*/
|
|
30
|
+
export declare function buildRssFeed(outputDir: string, timelineEntries: TimelineEntry[], config: LogbookConfig, version: string): Promise<void>;
|
|
31
|
+
/**
|
|
32
|
+
* Processes raw logbook entry metadata into chronological timeline entries.
|
|
33
|
+
*/
|
|
34
|
+
export declare function processTimelineEntries(logbookEntries: EntryMeta[], activeEntry: {
|
|
35
|
+
slug: string;
|
|
36
|
+
} | null | undefined, availableWorkspaces: string[]): (TimelineEntry & {
|
|
37
|
+
monthGroup: string;
|
|
38
|
+
})[];
|
package/dist/lib/build-steps.js
CHANGED
|
@@ -4,21 +4,27 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import fs from 'fs-extra';
|
|
6
6
|
import { join } from 'node:path';
|
|
7
|
-
import { warning } from './theme.js';
|
|
8
|
-
import { URL } from 'node:url';
|
|
7
|
+
import { warning, error, neutral } from './theme.js';
|
|
8
|
+
import { URL, fileURLToPath } from 'node:url';
|
|
9
9
|
import { mdToHtmlWithImages, copyImages } from './image-helpers.js';
|
|
10
10
|
import { getStyles } from './styles.js';
|
|
11
11
|
import { getClientScript } from './logbook-client.js';
|
|
12
12
|
import { mdToHtml } from './build-helpers.js';
|
|
13
|
+
import { generateRssFeed, validateRssXml } from './rss.js';
|
|
14
|
+
import { asString, asStringArray, toDisplayString } from '../utils/frontmatter.js';
|
|
15
|
+
import { formatAbsoluteDate, getMonthYear, getSortTime } from '../utils/date.js';
|
|
16
|
+
import { getEntryDisplayId, getEntryDisplayTitle } from './entry-id.js';
|
|
13
17
|
/**
|
|
14
18
|
* Set up the output directory: create it, copy static assets (favicon, styles, script).
|
|
15
19
|
*/
|
|
16
20
|
export async function setupOutputDirectory(outputDir, config) {
|
|
17
21
|
await fs.remove(outputDir);
|
|
18
22
|
await fs.mkdirp(outputDir);
|
|
19
|
-
await
|
|
20
|
-
|
|
21
|
-
|
|
23
|
+
await Promise.all([
|
|
24
|
+
fs.copyFile(new URL('../templates/favicon.svg', import.meta.url), join(outputDir, 'favicon.svg')),
|
|
25
|
+
fs.writeFile(join(outputDir, 'style.css'), getStyles(config.primaryColor)),
|
|
26
|
+
fs.writeFile(join(outputDir, 'logbook.js'), getClientScript()),
|
|
27
|
+
]);
|
|
22
28
|
}
|
|
23
29
|
/**
|
|
24
30
|
* Process README.md if it exists and return rendered HTML + image paths.
|
|
@@ -29,8 +35,7 @@ export async function processReadme(projectRoot) {
|
|
|
29
35
|
let readmeImages = [];
|
|
30
36
|
try {
|
|
31
37
|
if (await fs.pathExists(readmePath)) {
|
|
32
|
-
const
|
|
33
|
-
const { html, imagePaths } = await mdToHtmlWithImages(readmeContent);
|
|
38
|
+
const { html, imagePaths } = await mdToHtmlWithImages(await fs.readFile(readmePath, 'utf8'));
|
|
34
39
|
readmeHtml = html;
|
|
35
40
|
readmeImages = imagePaths;
|
|
36
41
|
}
|
|
@@ -44,14 +49,103 @@ export async function processReadme(projectRoot) {
|
|
|
44
49
|
/**
|
|
45
50
|
* Copy README images to the output directory.
|
|
46
51
|
*/
|
|
47
|
-
export
|
|
48
|
-
|
|
49
|
-
|
|
52
|
+
export const copyReadmeImages = (projectRoot, outputDir, imagePaths) => imagePaths.length > 0 ? copyImages(projectRoot, outputDir, imagePaths) : Promise.resolve();
|
|
53
|
+
/**
|
|
54
|
+
* Process the About content and return rendered HTML.
|
|
55
|
+
*/
|
|
56
|
+
export const processAboutContent = (aboutContent) => mdToHtml(aboutContent);
|
|
57
|
+
/**
|
|
58
|
+
* Process the Welcome content and return rendered HTML.
|
|
59
|
+
*/
|
|
60
|
+
export async function processWelcomeContent() {
|
|
61
|
+
try {
|
|
62
|
+
const welcomePath = fileURLToPath(new URL('../templates/WELCOME.md', import.meta.url));
|
|
63
|
+
if (await fs.pathExists(welcomePath)) {
|
|
64
|
+
return await mdToHtml(await fs.readFile(welcomePath, 'utf8'));
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
catch (error) {
|
|
68
|
+
console.warn(warning(`Warning: Failed to read WELCOME.md: ${error instanceof Error ? error.message : error}`));
|
|
50
69
|
}
|
|
70
|
+
return '';
|
|
51
71
|
}
|
|
52
72
|
/**
|
|
53
|
-
*
|
|
73
|
+
* Generate and write RSS feed to the output directory.
|
|
54
74
|
*/
|
|
55
|
-
export async function
|
|
56
|
-
|
|
75
|
+
export async function buildRssFeed(outputDir, timelineEntries, config, version) {
|
|
76
|
+
const rssConfig = {
|
|
77
|
+
title: `${config.projectName} - Recent Updates`,
|
|
78
|
+
description: `Latest logbook entries from ${config.projectName}`,
|
|
79
|
+
language: 'en',
|
|
80
|
+
feed_url: `${config.projectName.toLowerCase().replace(/\s+/g, '-')}/rss.xml`,
|
|
81
|
+
site_url: config.projectName,
|
|
82
|
+
generator: `Project Logbook CLI v${version}`,
|
|
83
|
+
};
|
|
84
|
+
const rssXml = generateRssFeed(timelineEntries, rssConfig);
|
|
85
|
+
// Basic validation
|
|
86
|
+
if (!validateRssXml(rssXml)) {
|
|
87
|
+
console.warn(error('Warning: Generated RSS feed failed basic validation. Skipping rss.xml generation.'));
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
await fs.writeFile(join(outputDir, 'rss.xml'), rssXml);
|
|
91
|
+
console.log(neutral(` Generated RSS feed with ${Math.min(50, timelineEntries.length)} entries`));
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Processes raw logbook entry metadata into chronological timeline entries.
|
|
96
|
+
*/
|
|
97
|
+
export function processTimelineEntries(logbookEntries, activeEntry, availableWorkspaces) {
|
|
98
|
+
const timelineEntries = [];
|
|
99
|
+
for (const entry of logbookEntries) {
|
|
100
|
+
if (!entry.hasIndex)
|
|
101
|
+
continue;
|
|
102
|
+
const { data, content, slug } = entry;
|
|
103
|
+
let summary = data.summary;
|
|
104
|
+
if (!summary) {
|
|
105
|
+
const firstParagraph = content.split('\n\n').find((p) => p.trim() && !p.trim().startsWith('#'));
|
|
106
|
+
summary = firstParagraph
|
|
107
|
+
? firstParagraph.trim().substring(0, 200).replace(/[*#`]/g, '') + '...'
|
|
108
|
+
: 'No summary available.';
|
|
109
|
+
}
|
|
110
|
+
const entryWorkspaces = asStringArray(data.workspaces).filter((ws) => availableWorkspaces.includes(ws));
|
|
111
|
+
const dateStartValue = data.dateStart;
|
|
112
|
+
const dateStart = typeof dateStartValue === 'string'
|
|
113
|
+
? dateStartValue
|
|
114
|
+
: dateStartValue instanceof Date
|
|
115
|
+
? dateStartValue.toISOString()
|
|
116
|
+
: '';
|
|
117
|
+
// Skip DRAFT entries (no valid dateStart) — they break the timeline
|
|
118
|
+
if (!dateStart || dateStart.includes('{{') || dateStart === '[DATE_START]') {
|
|
119
|
+
console.log(warning(`[DRAFT SKIPPED] Entry '${slug}' was excluded from the built site (missing valid dateStart).`));
|
|
120
|
+
if (activeEntry && activeEntry.slug === slug) {
|
|
121
|
+
console.log(warning(` → Your active session resolves to this entry. Run 'logbook start ${slug.split('-')[0]}' to initialize dateStart and make it visible.`));
|
|
122
|
+
}
|
|
123
|
+
continue;
|
|
124
|
+
}
|
|
125
|
+
const dateEndValue = data.dateEnd;
|
|
126
|
+
const dateEnd = typeof dateEndValue === 'string' && dateEndValue !== '[DATE_END]'
|
|
127
|
+
? dateEndValue
|
|
128
|
+
: dateEndValue instanceof Date
|
|
129
|
+
? dateEndValue.toISOString()
|
|
130
|
+
: undefined;
|
|
131
|
+
timelineEntries.push({
|
|
132
|
+
kind: 'entry',
|
|
133
|
+
slug,
|
|
134
|
+
dateStart,
|
|
135
|
+
dateEnd,
|
|
136
|
+
displayDate: formatAbsoluteDate(dateStart),
|
|
137
|
+
sortTime: getSortTime(dateStart, dateEnd),
|
|
138
|
+
summary: asString(summary, 'No summary available.') || '',
|
|
139
|
+
ticket: getEntryDisplayId(asString(data.ticket), slug),
|
|
140
|
+
monthGroup: getMonthYear(dateStart),
|
|
141
|
+
tags: asStringArray(data.tags),
|
|
142
|
+
workspaces: entryWorkspaces,
|
|
143
|
+
title: getEntryDisplayTitle(asString(data.title), slug),
|
|
144
|
+
harness: toDisplayString(data.harness),
|
|
145
|
+
llm: toDisplayString(data.llm),
|
|
146
|
+
prompter: toDisplayString(data.prompter),
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
return timelineEntries;
|
|
57
150
|
}
|
|
151
|
+
//# sourceMappingURL=build-steps.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build-steps.js","sourceRoot":"","sources":["../../src/lib/build-steps.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/config.d.ts
CHANGED
|
@@ -10,6 +10,7 @@ export interface LogbookConfig {
|
|
|
10
10
|
tags?: {
|
|
11
11
|
allowed: string[];
|
|
12
12
|
};
|
|
13
|
+
adrDir?: string;
|
|
13
14
|
}
|
|
14
15
|
export declare const DEFAULT_CONFIG: LogbookConfig;
|
|
15
16
|
export declare function getConfig(cwd?: string): LogbookConfig;
|
|
@@ -29,3 +30,10 @@ export declare function getLogbookDirPath(config: LogbookConfig, cwd?: string):
|
|
|
29
30
|
* @returns Absolute path to the output directory
|
|
30
31
|
*/
|
|
31
32
|
export declare function getOutputDirPath(config: LogbookConfig, cwd?: string): string;
|
|
33
|
+
/**
|
|
34
|
+
* Get the absolute path to the ADR directory.
|
|
35
|
+
* @param config - The logbook config
|
|
36
|
+
* @param cwd - Optional working directory (defaults to process.cwd())
|
|
37
|
+
* @returns Absolute path to the ADR directory or null if not configured
|
|
38
|
+
*/
|
|
39
|
+
export declare function getAdrDirPath(config: LogbookConfig, cwd?: string): string | null;
|
package/dist/lib/config.js
CHANGED
|
@@ -21,6 +21,7 @@ export const DEFAULT_CONFIG = {
|
|
|
21
21
|
logbookDir: 'logbook',
|
|
22
22
|
outputDir: 'dist/logbook',
|
|
23
23
|
primaryColor: '#2563eb',
|
|
24
|
+
adrDir: 'docs/adr',
|
|
24
25
|
tags: {
|
|
25
26
|
allowed: ['#bugfix', '#feature', '#refactor'],
|
|
26
27
|
},
|
|
@@ -31,7 +32,14 @@ export function getConfig(cwd = process.cwd()) {
|
|
|
31
32
|
if (existsSync(configPath)) {
|
|
32
33
|
try {
|
|
33
34
|
const userConfig = JSON.parse(readFileSync(configPath, 'utf8'));
|
|
34
|
-
config = {
|
|
35
|
+
config = {
|
|
36
|
+
...DEFAULT_CONFIG,
|
|
37
|
+
...userConfig,
|
|
38
|
+
tags: {
|
|
39
|
+
...DEFAULT_CONFIG.tags,
|
|
40
|
+
...(userConfig.tags || {}),
|
|
41
|
+
},
|
|
42
|
+
};
|
|
35
43
|
}
|
|
36
44
|
catch (err) {
|
|
37
45
|
const errorMessage = err instanceof Error ? err.message : String(err);
|
|
@@ -63,3 +71,13 @@ export function getLogbookDirPath(config, cwd = process.cwd()) {
|
|
|
63
71
|
export function getOutputDirPath(config, cwd = process.cwd()) {
|
|
64
72
|
return join(cwd, config.outputDir);
|
|
65
73
|
}
|
|
74
|
+
/**
|
|
75
|
+
* Get the absolute path to the ADR directory.
|
|
76
|
+
* @param config - The logbook config
|
|
77
|
+
* @param cwd - Optional working directory (defaults to process.cwd())
|
|
78
|
+
* @returns Absolute path to the ADR directory or null if not configured
|
|
79
|
+
*/
|
|
80
|
+
export function getAdrDirPath(config, cwd = process.cwd()) {
|
|
81
|
+
return config.adrDir ? join(cwd, config.adrDir) : null;
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/entry-id.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entry-id.js","sourceRoot":"","sources":["../../src/lib/entry-id.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;GAOG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAA0B,EAAE,IAAY;IACxE,OAAO,MAAM,IAAI,IAAI,CAAC;AACxB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,oBAAoB,CAAC,KAAyB,EAAE,IAAY;IAC1E,OAAO,KAAK,IAAI,IAAI,CAAC;AACvB,CAAC"}
|
package/dist/lib/entry-paths.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entry-paths.js","sourceRoot":"","sources":["../../src/lib/entry-paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC;;;GAGG;AAEH;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,UAAkB,EAAE,SAAiB;IAChE,OAAO,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;AACrC,CAAC;AAED;;;;;GAKG;AACH,SAAS,iBAAiB,CAAC,UAAkB,EAAE,SAAiB;IAC9D,OAAO,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,SAAS,CAAC,EAAE,UAAU,CAAC,CAAC;AAC/D,CAAC;AAED;;;;;GAKG;AACH,SAAS,kBAAkB,CAAC,UAAkB,EAAE,SAAiB;IAC/D,OAAO,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,SAAS,CAAC,EAAE,WAAW,CAAC,CAAC;AAChE,CAAC;AAED;;;;;GAKG;AACH,SAAS,eAAe,CAAC,UAAkB,EAAE,SAAiB;IAC5D,OAAO,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,SAAS,CAAC,EAAE,QAAQ,CAAC,CAAC;AAC7D,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAAC,UAAkB,EAAE,SAAiB;IACrE,OAAO;QACL,KAAK,EAAE,iBAAiB,CAAC,UAAU,EAAE,SAAS,CAAC;QAC/C,MAAM,EAAE,kBAAkB,CAAC,UAAU,EAAE,SAAS,CAAC;QACjD,GAAG,EAAE,eAAe,CAAC,UAAU,EAAE,SAAS,CAAC;KAC5C,CAAC;AACJ,CAAC"}
|
|
@@ -1,16 +1,5 @@
|
|
|
1
1
|
import type { GitCommit } from './template-types.js';
|
|
2
|
-
|
|
3
|
-
* Clean the repository URL by removing trailing slashes and .git extensions.
|
|
4
|
-
*/
|
|
5
|
-
export declare function cleanRepositoryUrl(url: string): string;
|
|
6
|
-
/**
|
|
7
|
-
* Generate a URL to view a specific commit in a web interface (GitHub, GitLab, Bitbucket, etc.).
|
|
8
|
-
*/
|
|
9
|
-
export declare function getCommitUrl(repositoryUrl: string | undefined, sha: string): string | undefined;
|
|
10
|
-
/**
|
|
11
|
-
* Generate a URL to view a specific tag in a web interface (GitHub, GitLab, Bitbucket, etc.).
|
|
12
|
-
*/
|
|
13
|
-
export declare function getTagUrl(repositoryUrl: string | undefined, tag: string): string | undefined;
|
|
2
|
+
export { cleanRepositoryUrl, getCommitUrl, getTagUrl, parseRemoteUrlToWebUrl } from './git-url-helpers.js';
|
|
14
3
|
/**
|
|
15
4
|
* Parse the raw output of `git log --pretty=format:"%H|%s|%aI"` into GitCommit objects.
|
|
16
5
|
* Pure function (no I/O) — unit-testable without spawning git.
|
|
@@ -39,15 +28,15 @@ export declare function getGitTags(): Promise<{
|
|
|
39
28
|
* Synchronous execution — safe to use during synchronous config parsing.
|
|
40
29
|
*/
|
|
41
30
|
export declare function getGitRemoteUrl(cwd?: string): string | undefined;
|
|
42
|
-
/**
|
|
43
|
-
* Parse a git remote URL (SSH or HTTPS) into a clean web/HTTP(S) repository homepage URL.
|
|
44
|
-
*/
|
|
45
|
-
export declare function parseRemoteUrlToWebUrl(remoteUrl: string | undefined): string | undefined;
|
|
46
31
|
/**
|
|
47
32
|
* Synchronous branch detection — used in session resolution (not the build pipeline).
|
|
48
33
|
* Kept synchronous intentionally; simple-git is used for the heavier async build operations.
|
|
49
34
|
*/
|
|
50
35
|
export declare function getCurrentBranch(cwd?: string): string | undefined;
|
|
36
|
+
/**
|
|
37
|
+
* Dynamically detect the default branch (usually main or master).
|
|
38
|
+
*/
|
|
39
|
+
export declare function getDefaultBranch(cwd?: string): string;
|
|
51
40
|
/**
|
|
52
41
|
* Calculate the changed LOC (insertions + deletions) for the active branch or main working tree.
|
|
53
42
|
*/
|