project-logbook 1.3.0 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. package/dist/commands/answer.d.ts +1 -0
  2. package/dist/commands/answer.js +41 -0
  3. package/dist/commands/answer.js.map +1 -0
  4. package/dist/commands/answers.d.ts +6 -0
  5. package/dist/commands/answers.js +37 -0
  6. package/dist/commands/answers.js.map +1 -0
  7. package/dist/commands/ask.d.ts +1 -0
  8. package/dist/commands/ask.js +30 -0
  9. package/dist/commands/ask.js.map +1 -0
  10. package/dist/commands/build.js +18 -2
  11. package/dist/commands/build.js.map +1 -1
  12. package/dist/commands/deprecate-qna.d.ts +1 -0
  13. package/dist/commands/deprecate-qna.js +33 -0
  14. package/dist/commands/deprecate-qna.js.map +1 -0
  15. package/dist/commands/status.js +3 -0
  16. package/dist/commands/status.js.map +1 -1
  17. package/dist/commands/unanswered.d.ts +1 -0
  18. package/dist/commands/unanswered.js +25 -0
  19. package/dist/commands/unanswered.js.map +1 -0
  20. package/dist/index.js +37 -0
  21. package/dist/index.js.map +1 -1
  22. package/dist/lib/config.d.ts +8 -0
  23. package/dist/lib/config.js +10 -0
  24. package/dist/lib/config.js.map +1 -1
  25. package/dist/lib/template-helpers.d.ts +2 -1
  26. package/dist/lib/template-helpers.js +29 -0
  27. package/dist/lib/template-helpers.js.map +1 -1
  28. package/dist/lib/template-types.d.ts +12 -0
  29. package/dist/lib/templates.js +9 -1
  30. package/dist/lib/templates.js.map +1 -1
  31. package/dist/linters/index.js +2 -0
  32. package/dist/linters/index.js.map +1 -1
  33. package/dist/linters/qna.d.ts +3 -0
  34. package/dist/linters/qna.js +120 -0
  35. package/dist/linters/qna.js.map +1 -0
  36. package/dist/templates/hub.js +123 -8
  37. package/dist/templates/qna.md +11 -0
  38. package/dist/templates/steer.txt +2 -0
  39. package/dist/templates/styles.css +53 -0
  40. package/dist/utils/qna.d.ts +46 -0
  41. package/dist/utils/qna.js +157 -0
  42. package/dist/utils/qna.js.map +1 -0
  43. package/dist/watch/__tests__/git-utils.test.d.ts +1 -0
  44. package/dist/watch/__tests__/git-utils.test.js +17 -0
  45. package/dist/watch/__tests__/git-utils.test.js.map +1 -0
  46. package/dist/watch/collectors/acli.js +2 -2
  47. package/dist/watch/collectors/acli.js.map +1 -1
  48. package/dist/watch/collectors/entries.js +3 -3
  49. package/dist/watch/collectors/entries.js.map +1 -1
  50. package/dist/watch/collectors/glab.js +126 -37
  51. package/dist/watch/collectors/glab.js.map +1 -1
  52. package/dist/watch/collectors/jira.js +3 -2
  53. package/dist/watch/collectors/jira.js.map +1 -1
  54. package/dist/watch/dashboard-html.js +8 -0
  55. package/dist/watch/dashboard-html.js.map +1 -1
  56. package/dist/watch/git-utils.d.ts +10 -4
  57. package/dist/watch/git-utils.js +22 -6
  58. package/dist/watch/git-utils.js.map +1 -1
  59. package/dist/watch/hub-state.d.ts +3 -1
  60. package/dist/watch/hub-state.js +2 -0
  61. package/dist/watch/hub-state.js.map +1 -1
  62. package/dist/watch/hub.js +35 -2
  63. package/dist/watch/hub.js.map +1 -1
  64. package/dist/watch/state.d.ts +5 -1
  65. package/dist/watch/state.js.map +1 -1
  66. package/dist/watch/types.d.ts +21 -0
  67. package/dist/watch/types.js.map +1 -1
  68. package/dist/watch/watcher.js +13 -2
  69. package/dist/watch/watcher.js.map +1 -1
  70. package/package.json +7 -2
  71. package/src/templates/hub.js +123 -8
  72. package/src/templates/qna.md +11 -0
  73. package/src/templates/steer.txt +2 -0
  74. package/src/templates/styles.css +53 -0
@@ -19,12 +19,18 @@ export declare function commitsAheadOfRemote(cwd: string): number;
19
19
  * Count commits on the current branch vs the default branch.
20
20
  */
21
21
  export declare function commitsVsDefault(cwd: string, defaultBranch: string): number;
22
- /** Extract a ticket ID from a branch name using the configured prefix or a generic pattern. */
23
- export declare function extractTicketFromBranch(branch: string | undefined, jiraPrefix: string | undefined): string | undefined;
22
+ /**
23
+ * Extract a ticket ID from a branch name.
24
+ *
25
+ * Prefers the configured Jira prefix (e.g. "LB-34"), then falls back to a
26
+ * bare numeric GitLab work item segment when a gitlab prefix is configured
27
+ * (e.g. "feat/36-content-api" -> "#36").
28
+ */
29
+ export declare function extractTicketFromBranch(branch: string | undefined, jiraPrefix: string | undefined, gitlabPrefix?: string): string | undefined;
24
30
  /**
25
31
  * Resolve the active ticket ID. Checks lockfile first, then falls back to
26
- * extracting it from the git branch name.
32
+ * extracting it from the git branch name (Jira prefix or GitLab work item).
27
33
  */
28
- export declare function resolveActiveTicketId(cwd: string, branch: string | undefined, jiraPrefix: string | undefined): string | undefined;
34
+ export declare function resolveActiveTicketId(cwd: string, branch: string | undefined, jiraPrefix: string | undefined, gitlabPrefix?: string): string | undefined;
29
35
  /** Read the full active ticket slug from the lockfile (folder name). */
30
36
  export declare function readActiveTicketSlug(cwd: string): string | undefined;
@@ -77,22 +77,38 @@ function ticketIdFromSlug(slug) {
77
77
  const parts = slug.split('-');
78
78
  return parts.length >= 2 ? `${parts[0]}-${parts[1]}` : slug;
79
79
  }
80
- /** Extract a ticket ID from a branch name using the configured prefix or a generic pattern. */
81
- export function extractTicketFromBranch(branch, jiraPrefix) {
80
+ /**
81
+ * Extract a ticket ID from a branch name.
82
+ *
83
+ * Prefers the configured Jira prefix (e.g. "LB-34"), then falls back to a
84
+ * bare numeric GitLab work item segment when a gitlab prefix is configured
85
+ * (e.g. "feat/36-content-api" -> "#36").
86
+ */
87
+ export function extractTicketFromBranch(branch, jiraPrefix, gitlabPrefix) {
82
88
  if (!branch)
83
89
  return undefined;
84
90
  const regex = jiraPrefix ? new RegExp(`\\b${jiraPrefix}-\\d+\\b`, 'i') : /\b[A-Z]+-\d+\b/;
85
- return branch.match(regex)?.[0]?.toUpperCase();
91
+ const jira = branch.match(regex)?.[0]?.toUpperCase();
92
+ if (jira)
93
+ return jira;
94
+ // GitLab work items appear as a bare numeric branch segment after a slash or
95
+ // dash, e.g. "feat/36-content-api-garbage-endpoints" -> "#36".
96
+ if (gitlabPrefix) {
97
+ const gl = branch.match(/(?:^|[\/\\_#-])(\d+)(?:-|$)/);
98
+ if (gl)
99
+ return `${gitlabPrefix}${gl[1]}`;
100
+ }
101
+ return undefined;
86
102
  }
87
103
  /**
88
104
  * Resolve the active ticket ID. Checks lockfile first, then falls back to
89
- * extracting it from the git branch name.
105
+ * extracting it from the git branch name (Jira prefix or GitLab work item).
90
106
  */
91
- export function resolveActiveTicketId(cwd, branch, jiraPrefix) {
107
+ export function resolveActiveTicketId(cwd, branch, jiraPrefix, gitlabPrefix) {
92
108
  const slug = readLockfileSlug(cwd);
93
109
  if (slug)
94
110
  return ticketIdFromSlug(slug);
95
- return extractTicketFromBranch(branch, jiraPrefix);
111
+ return extractTicketFromBranch(branch, jiraPrefix, gitlabPrefix);
96
112
  }
97
113
  /** Read the full active ticket slug from the lockfile (folder name). */
98
114
  export function readActiveTicketSlug(cwd) {
@@ -1 +1 @@
1
- {"version":3,"file":"git-utils.js","sourceRoot":"","sources":["../../src/watch/git-utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"git-utils.js","sourceRoot":"","sources":["../../src/watch/git-utils.ts"],"names":[],"mappings":"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"}
@@ -5,7 +5,7 @@
5
5
  * MRs, plus HTTP helper functions used by the route handler.
6
6
  */
7
7
  import type { IncomingMessage, ServerResponse } from 'node:http';
8
- import type { ActivityEvent, GitLabMr, JiraIssue, ProjectStatus } from './types.js';
8
+ import type { ActivityEvent, GitLabMr, GitLabWorkItem, JiraIssue, ProjectStatus } from './types.js';
9
9
  /** Connected SSE clients. */
10
10
  export declare const sseClients: Set<ServerResponse>;
11
11
  /** Current state of all registered projects. */
@@ -16,6 +16,8 @@ export declare const projectEvents: Map<string, ActivityEvent[]>;
16
16
  export declare const jiraIssues: Map<string, JiraIssue>;
17
17
  /** GitLab open MRs, deduplicated by projectUrl+iid. */
18
18
  export declare const gitlabMrs: Map<string, GitLabMr>;
19
+ /** GitLab open work items, deduplicated by projectUrl+iid. */
20
+ export declare const gitlabWorkItems: Map<string, GitLabWorkItem>;
19
21
  /** Maximum number of events to keep per project. */
20
22
  export declare const MAX_EVENTS_PER_PROJECT = 50;
21
23
  /**
@@ -14,6 +14,8 @@ export const projectEvents = new Map();
14
14
  export const jiraIssues = new Map();
15
15
  /** GitLab open MRs, deduplicated by projectUrl+iid. */
16
16
  export const gitlabMrs = new Map();
17
+ /** GitLab open work items, deduplicated by projectUrl+iid. */
18
+ export const gitlabWorkItems = new Map();
17
19
  /** Maximum number of events to keep per project. */
18
20
  export const MAX_EVENTS_PER_PROJECT = 50;
19
21
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"hub-state.js","sourceRoot":"","sources":["../../src/watch/hub-state.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,6BAA6B;AAC7B,MAAM,CAAC,MAAM,UAAU,GAAwB,IAAI,GAAG,EAAE,CAAC;AAEzD,gDAAgD;AAChD,MAAM,CAAC,MAAM,aAAa,GAA+B,IAAI,GAAG,EAAE,CAAC;AAEnE,uFAAuF;AACvF,MAAM,CAAC,MAAM,aAAa,GAAiC,IAAI,GAAG,EAAE,CAAC;AAErE,6DAA6D;AAC7D,MAAM,CAAC,MAAM,UAAU,GAA2B,IAAI,GAAG,EAAE,CAAC;AAE5D,uDAAuD;AACvD,MAAM,CAAC,MAAM,SAAS,GAA0B,IAAI,GAAG,EAAE,CAAC;AAE1D,oDAAoD;AACpD,MAAM,CAAC,MAAM,sBAAsB,GAAG,EAAE,CAAC;AAEzC;;;;GAIG;AACH,MAAM,UAAU,SAAS,CAAC,IAAa;IACrC,MAAM,OAAO,GAAG,SAAS,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC;IACpD,KAAK,MAAM,MAAM,IAAI,UAAU,EAAE,CAAC;QAChC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACxB,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,QAAQ,CAAC,GAAoB;IAC3C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QACtD,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACrE,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,GAAmB,EAAE,MAAc,EAAE,IAAa;IAC7E,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAClC,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE;QACpB,cAAc,EAAE,kBAAkB;QAClC,gBAAgB,EAAE,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC;KAC1C,CAAC,CAAC;IACH,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"hub-state.js","sourceRoot":"","sources":["../../src/watch/hub-state.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,6BAA6B;AAC7B,MAAM,CAAC,MAAM,UAAU,GAAwB,IAAI,GAAG,EAAE,CAAC;AAEzD,gDAAgD;AAChD,MAAM,CAAC,MAAM,aAAa,GAA+B,IAAI,GAAG,EAAE,CAAC;AAEnE,uFAAuF;AACvF,MAAM,CAAC,MAAM,aAAa,GAAiC,IAAI,GAAG,EAAE,CAAC;AAErE,6DAA6D;AAC7D,MAAM,CAAC,MAAM,UAAU,GAA2B,IAAI,GAAG,EAAE,CAAC;AAE5D,uDAAuD;AACvD,MAAM,CAAC,MAAM,SAAS,GAA0B,IAAI,GAAG,EAAE,CAAC;AAE1D,8DAA8D;AAC9D,MAAM,CAAC,MAAM,eAAe,GAAgC,IAAI,GAAG,EAAE,CAAC;AAEtE,oDAAoD;AACpD,MAAM,CAAC,MAAM,sBAAsB,GAAG,EAAE,CAAC;AAEzC;;;;GAIG;AACH,MAAM,UAAU,SAAS,CAAC,IAAa;IACrC,MAAM,OAAO,GAAG,SAAS,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC;IACpD,KAAK,MAAM,MAAM,IAAI,UAAU,EAAE,CAAC;QAChC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACxB,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,QAAQ,CAAC,GAAoB;IAC3C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QACtD,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACrE,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,GAAmB,EAAE,MAAc,EAAE,IAAa;IAC7E,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAClC,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE;QACpB,cAAc,EAAE,kBAAkB;QAClC,gBAAgB,EAAE,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC;KAC1C,CAAC,CAAC;IACH,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC"}
package/dist/watch/hub.js CHANGED
@@ -1,9 +1,11 @@
1
+ /* eslint-disable max-lines */
1
2
  /** Hub server — serves the dashboard UI and bridges watchers ↔ SSE. */
2
3
  import { createServer } from 'node:http';
3
4
  import { getPackageVersion } from '../lib/package-version.js';
4
5
  import { generateDashboardHtml } from './dashboard.js';
5
6
  import { getStrategyMetadata } from './strategies/index.js';
6
- import { broadcast, gitlabMrs, jiraIssues, jsonResponse, MAX_EVENTS_PER_PROJECT, projectEvents, projectStates, readBody, sseClients, } from './hub-state.js';
7
+ import { broadcast, gitlabMrs, gitlabWorkItems, jiraIssues, jsonResponse, MAX_EVENTS_PER_PROJECT, projectEvents, projectStates, readBody, sseClients, } from './hub-state.js';
8
+ import { logTime } from './watcher-http.js';
7
9
  async function handleRequest(req, res) {
8
10
  const url = req.url ?? '/';
9
11
  const method = req.method ?? 'GET';
@@ -76,6 +78,32 @@ async function handleRequest(req, res) {
76
78
  }
77
79
  return;
78
80
  }
81
+ if (url === '/_logbook/gitlab-work-items' && method === 'GET') {
82
+ jsonResponse(res, 200, [...gitlabWorkItems.values()]);
83
+ return;
84
+ }
85
+ if (url === '/_logbook/gitlab-work-items' && method === 'POST') {
86
+ const body = await readBody(req);
87
+ try {
88
+ const payload = JSON.parse(body);
89
+ if (Array.isArray(payload.workItems)) {
90
+ const projUrl = payload.workItems[0]?.projectUrl;
91
+ if (projUrl) {
92
+ for (const [key] of gitlabWorkItems) {
93
+ if (key.startsWith(`${projUrl}::`))
94
+ gitlabWorkItems.delete(key);
95
+ }
96
+ }
97
+ for (const wi of payload.workItems)
98
+ gitlabWorkItems.set(`${wi.projectUrl}::${wi.iid}`, wi);
99
+ }
100
+ jsonResponse(res, 200, { ok: true });
101
+ }
102
+ catch {
103
+ jsonResponse(res, 400, { error: 'Invalid JSON' });
104
+ }
105
+ return;
106
+ }
79
107
  if (url === '/_logbook/events' && method === 'GET') {
80
108
  res.writeHead(200, { 'Content-Type': 'text/event-stream', 'Cache-Control': 'no-cache', Connection: 'keep-alive' });
81
109
  res.write('\n');
@@ -95,7 +123,10 @@ async function handleRequest(req, res) {
95
123
  jsonResponse(res, 400, { error: 'projectPath and projectName required' });
96
124
  return;
97
125
  }
98
- if (!projectStates.has(payload.projectPath)) {
126
+ if (projectStates.has(payload.projectPath)) {
127
+ console.log(`[${logTime()}] WARNING: another watcher already registered for ${payload.projectPath} — its status updates will overwrite this one. Kill stale 'logbook watch' processes.`);
128
+ }
129
+ else {
99
130
  projectStates.set(payload.projectPath, {
100
131
  projectPath: payload.projectPath,
101
132
  projectName: payload.projectName,
@@ -109,8 +140,10 @@ async function handleRequest(req, res) {
109
140
  renderedLog: undefined,
110
141
  renderedTicket: undefined,
111
142
  mrUrl: undefined,
143
+ mrStatus: undefined,
112
144
  jiraStatus: undefined,
113
145
  jiraBaseUrl: undefined,
146
+ gitlabBaseUrl: undefined,
114
147
  repositoryUrl: undefined,
115
148
  primaryColor: undefined,
116
149
  agentName: undefined,
@@ -1 +1 @@
1
- {"version":3,"file":"hub.js","sourceRoot":"","sources":["../../src/watch/hub.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hub.js","sourceRoot":"","sources":["../../src/watch/hub.ts"],"names":[],"mappings":"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"}
@@ -9,7 +9,7 @@
9
9
  * After any collector runs, strategies are re-evaluated against the current
10
10
  * snapshot.
11
11
  */
12
- import type { GitLabMr, JiraIssue, WatcherMetrics } from './types.js';
12
+ import type { GitLabMr, GitLabWorkItem, JiraIssue, WatcherMetrics } from './types.js';
13
13
  /**
14
14
  * The mutable watcher state. Extends WatcherMetrics with fields for future
15
15
  * collectors (glab, acli, etc.).
@@ -19,12 +19,16 @@ export interface WatcherState extends WatcherMetrics {
19
19
  mrTitle?: string;
20
20
  /** All open MRs for the project (for GitLab tab). */
21
21
  glabOpenMrs?: GitLabMr[];
22
+ /** All open work items for the project (for GitLab Work Items tab). */
23
+ glabWorkItems?: GitLabWorkItem[];
22
24
  /** Jira ticket assignee. */
23
25
  jiraAssignee?: string;
24
26
  /** All Jira issues assigned to the current user (for Jira tab). */
25
27
  jiraAssignedIssues?: JiraIssue[];
26
28
  /** ISO timestamp of last successful GitLab collector run. */
27
29
  glabLastUpdated?: string;
30
+ /** ISO timestamp of last successful GitLab work items run. */
31
+ glabWorkItemsLastUpdated?: string;
28
32
  /** ISO timestamp of last successful Jira collector run. */
29
33
  jiraLastUpdated?: string;
30
34
  }
@@ -1 +1 @@
1
- {"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/watch/state.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AA4BH;;GAEG;AACH,MAAM,UAAU,gBAAgB;IAC9B,OAAO;QACL,MAAM,EAAE,SAAS;QACjB,aAAa,EAAE,MAAM;QACrB,eAAe,EAAE,KAAK;QACtB,cAAc,EAAE,SAAS;QACzB,gBAAgB,EAAE,SAAS;QAC3B,SAAS,EAAE,SAAS;QACpB,kBAAkB,EAAE,SAAS;QAC7B,OAAO,EAAE,KAAK;QACd,WAAW,EAAE,CAAC;QACd,aAAa,EAAE,CAAC;QAChB,eAAe,EAAE,KAAK;QACtB,wBAAwB,EAAE,KAAK;QAC/B,UAAU,EAAE,KAAK;QACjB,WAAW,EAAE,KAAK;QAClB,cAAc,EAAE,KAAK;QACrB,oBAAoB,EAAE,CAAC;QACvB,qBAAqB,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KAChD,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/watch/state.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAgCH;;GAEG;AACH,MAAM,UAAU,gBAAgB;IAC9B,OAAO;QACL,MAAM,EAAE,SAAS;QACjB,aAAa,EAAE,MAAM;QACrB,eAAe,EAAE,KAAK;QACtB,cAAc,EAAE,SAAS;QACzB,gBAAgB,EAAE,SAAS;QAC3B,SAAS,EAAE,SAAS;QACpB,kBAAkB,EAAE,SAAS;QAC7B,OAAO,EAAE,KAAK;QACd,WAAW,EAAE,CAAC;QACd,aAAa,EAAE,CAAC;QAChB,eAAe,EAAE,KAAK;QACtB,wBAAwB,EAAE,KAAK;QAC/B,UAAU,EAAE,KAAK;QACjB,WAAW,EAAE,KAAK;QAClB,cAAc,EAAE,KAAK;QACrB,oBAAoB,EAAE,CAAC;QACvB,qBAAqB,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KAChD,CAAC;AACJ,CAAC"}
@@ -92,10 +92,14 @@ export interface ProjectStatus {
92
92
  renderedTicket: string | undefined;
93
93
  /** MR web URL for linking in the dashboard. */
94
94
  mrUrl: string | undefined;
95
+ /** MR status for the current branch (e.g., "approval-optional", "none"). */
96
+ mrStatus: string | undefined;
95
97
  /** Jira ticket status (e.g., "In Progress", "Done"). */
96
98
  jiraStatus: string | undefined;
97
99
  /** Jira base URL for constructing ticket links. */
98
100
  jiraBaseUrl: string | undefined;
101
+ /** GitLab base URL for constructing work item links. */
102
+ gitlabBaseUrl: string | undefined;
99
103
  /** Repository web URL for constructing branch links. */
100
104
  repositoryUrl: string | undefined;
101
105
  /** Primary accent color from the project's .project-logbook config. */
@@ -169,6 +173,23 @@ export interface JiraIssue {
169
173
  /** ISO timestamp of the last update in Jira. */
170
174
  updated: string;
171
175
  }
176
+ /** A GitLab work item (issue) for the GitLab Work Items tab. */
177
+ export interface GitLabWorkItem {
178
+ /** Work item IID (project-scoped). */
179
+ iid: number;
180
+ /** Work item title. */
181
+ title: string;
182
+ /** Current state (e.g. "opened"). */
183
+ status: string;
184
+ /** Web URL to open the work item. */
185
+ url: string;
186
+ /** Project web URL (for grouping/dedup). */
187
+ projectUrl: string;
188
+ /** Project name (human-readable). */
189
+ projectName: string;
190
+ /** ISO timestamp of the last update. */
191
+ updated: string;
192
+ }
172
193
  /** A GitLab merge request for the GitLab tab. */
173
194
  export interface GitLabMr {
174
195
  /** MR IID (project-scoped). */
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/watch/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA0JH,kDAAkD;AAClD,MAAM,kBAAkB,GAAG,IAAI,CAAC;AAEhC;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB;IAC9B,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;IAC/C,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QACrC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,IAAI,MAAM,GAAG,KAAK;YAAE,OAAO,MAAM,CAAC;IACpE,CAAC;IACD,OAAO,kBAAkB,CAAC;AAC5B,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/watch/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA8JH,kDAAkD;AAClD,MAAM,kBAAkB,GAAG,IAAI,CAAC;AAEhC;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB;IAC9B,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;IAC/C,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QACrC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,IAAI,MAAM,GAAG,KAAK;YAAE,OAAO,MAAM,CAAC;IACpE,CAAC;IACD,OAAO,kBAAkB,CAAC;AAC5B,CAAC"}
@@ -17,7 +17,7 @@ const LOCKFILE_NAME = '.logbook-active';
17
17
  /**
18
18
  * Build and push a full status snapshot to the hub.
19
19
  */
20
- async function pushStatus(cwd, port, projectName, state, reason, jiraBaseUrl, repositoryUrl, primaryColor, agentName) {
20
+ async function pushStatus(cwd, port, projectName, state, reason, jiraBaseUrl, gitlabBaseUrl, repositoryUrl, primaryColor, agentName) {
21
21
  const statuses = evaluateStatuses(state);
22
22
  const details = await collectDetails(cwd);
23
23
  // Render previews: read entry files, strip frontmatter, render to HTML.
@@ -63,14 +63,18 @@ async function pushStatus(cwd, port, projectName, state, reason, jiraBaseUrl, re
63
63
  renderedLog,
64
64
  renderedTicket,
65
65
  mrUrl: state.mrUrl,
66
+ mrStatus: state.mrStatus ?? undefined,
66
67
  jiraStatus: state.jiraStatus,
67
68
  jiraBaseUrl,
69
+ gitlabBaseUrl,
68
70
  repositoryUrl,
69
71
  primaryColor,
70
72
  agentName,
71
73
  glabLastUpdated: state.glabLastUpdated,
72
74
  jiraLastUpdated: state.jiraLastUpdated,
73
75
  };
76
+ // Debug: correlate what the watcher actually pushes for the MR badge.
77
+ console.log(`[${logTime()}] ${reason}: PUSH branch='${state.branch}' mrStatus='${state.mrStatus ?? 'none'}' mrUrl=${state.mrUrl ?? '(none)'} statuses=[${statuses.map((s) => s.id).join(',')}]`);
74
78
  await postToHub(port, '/_logbook/status', status);
75
79
  if (state.jiraAssignedIssues) {
76
80
  await postToHub(port, '/_logbook/jira-issues', {
@@ -84,6 +88,12 @@ async function pushStatus(cwd, port, projectName, state, reason, jiraBaseUrl, re
84
88
  mrs: state.glabOpenMrs,
85
89
  });
86
90
  }
91
+ if (state.glabWorkItems) {
92
+ await postToHub(port, '/_logbook/gitlab-work-items', {
93
+ projectPath: cwd,
94
+ workItems: state.glabWorkItems,
95
+ });
96
+ }
87
97
  console.log(info(`[${logTime()}] ${reason}`));
88
98
  }
89
99
  /**
@@ -116,11 +126,12 @@ export async function startWatcher(cwd, port) {
116
126
  const agentName = undefined;
117
127
  const pushCfg = {
118
128
  jiraBaseUrl: config.jiraBaseUrl ?? '',
129
+ gitlabBaseUrl: config.gitlabBaseUrl ?? '',
119
130
  repositoryUrl: config.repositoryUrl,
120
131
  primaryColor: config.primaryColor,
121
132
  agentName,
122
133
  };
123
- const ps = (reason) => pushStatus(cwd, port, projectName, state, reason, pushCfg.jiraBaseUrl, pushCfg.repositoryUrl, pushCfg.primaryColor, pushCfg.agentName);
134
+ const ps = (reason) => pushStatus(cwd, port, projectName, state, reason, pushCfg.jiraBaseUrl, pushCfg.gitlabBaseUrl, pushCfg.repositoryUrl, pushCfg.primaryColor, pushCfg.agentName);
124
135
  await ps('Initial status collected');
125
136
  const runAndPush = async (collector, reason) => {
126
137
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"watcher.js","sourceRoot":"","sources":["../../src/watch/watcher.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"watcher.js","sourceRoot":"","sources":["../../src/watch/watcher.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "project-logbook",
3
- "version": "1.3.0",
3
+ "version": "1.4.0",
4
4
  "description": "A command-line tool for project logbooks.",
5
5
  "workspaces": [
6
6
  "demo-app"
@@ -31,7 +31,12 @@
31
31
  "pre": "npm run format && npm run lint && npm run test && npm run build && npm run knip && npm run madge && npm run jscpd && npm run dev build && npm run dev lint && npm audit --audit-level=high",
32
32
  "next": "node scripts/create-ticket-from-backlog.js",
33
33
  "link": "npm run build && npm link",
34
- "open": "npm run dev build && node scripts/open-and-view-dist.js"
34
+ "open": "npm run dev build && node scripts/open-and-view-dist.js",
35
+ "agent": "node scripts/pi/run.js",
36
+ "agent:build": "docker compose build agent",
37
+ "agent:shell": "node scripts/pi/run.js shell",
38
+ "watch": "node scripts/watch.js",
39
+ "watch:terminal": "node scripts/watch.js --terminal"
35
40
  },
36
41
  "keywords": [
37
42
  "logbook",
@@ -176,8 +176,12 @@
176
176
 
177
177
  function renderTicketMeta(p) {
178
178
  var ticket = p.activeTicket || 'none';
179
- var ticketUrl =
180
- p.jiraBaseUrl && p.activeTicket
179
+ var isGl = ticket.charAt(0) === '#' && p.gitlabBaseUrl;
180
+ var ticketUrl = isGl
181
+ ? p.gitlabBaseUrl.replace(/\/+$/, '') +
182
+ '/' +
183
+ encodeURIComponent(ticket.replace(/^#/, '').match(/^\d+/)?.[0] || ticket)
184
+ : p.jiraBaseUrl && p.activeTicket
181
185
  ? p.jiraBaseUrl.replace(/\/+$/, '') + '/browse/' + encodeURIComponent(p.activeTicket)
182
186
  : null;
183
187
  var value = ticketUrl
@@ -187,7 +191,7 @@
187
191
  escapeHtml(ticket) +
188
192
  '<span class="link-icon">\u00A0&#x2197;</span></a>'
189
193
  : escapeHtml(ticket);
190
- var jiraLabel = p.jiraStatus ? ' <span class="jira-status">' + escapeHtml(p.jiraStatus) + '</span>' : '';
194
+ var jiraLabel = !isGl && p.jiraStatus ? ' <span class="jira-status">' + escapeHtml(p.jiraStatus) + '</span>' : '';
191
195
  return (
192
196
  '<div class="meta-item"><span class="meta-label">ticket:</span> <span class="meta-value">' +
193
197
  value +
@@ -506,10 +510,16 @@
506
510
  html +=
507
511
  '<table class="help-table"><thead><tr><th>Title</th><th>Status</th><th>Comments</th><th>Branch</th></tr></thead><tbody>';
508
512
  items.forEach(function (m) {
509
- var statusBadge =
510
- m.status === 'draft'
511
- ? '<span class="badge badge-info">Draft</span>'
512
- : '<span class="badge badge-success">Open</span>';
513
+ var statusBadge;
514
+ if (m.status === 'draft') {
515
+ statusBadge = '<span class="badge badge-info">Draft</span>';
516
+ } else if (m.status === 'merged') {
517
+ statusBadge = '<span class="badge badge-success">Merged</span>';
518
+ } else if (m.status === 'closed') {
519
+ statusBadge = '<span class="badge badge-warning">Closed</span>';
520
+ } else {
521
+ statusBadge = '<span class="badge badge-info">Open</span>';
522
+ }
513
523
  var branchUrl = projUrl ? projUrl.replace(/\/$/, '') + '/-/tree/' + encodeURIComponent(m.sourceBranch) : '';
514
524
  var branchCell = branchUrl
515
525
  ? '<a class="meta-link" href="' +
@@ -553,6 +563,87 @@
553
563
  loadGitLabMrs();
554
564
  setInterval(loadGitLabMrs, 5 * 60 * 1000);
555
565
 
566
+ // --- GitLab Work Items tab ---
567
+ function loadWorkItems() {
568
+ fetch('/_logbook/gitlab-work-items')
569
+ .then(function (r) {
570
+ return r.json();
571
+ })
572
+ .then(function (items) {
573
+ var container = document.getElementById('workitems-content');
574
+ var countEl4 = document.getElementById('workitems-count');
575
+ var count = items ? items.length : 0;
576
+ countEl4.textContent = count;
577
+ countEl4.style.display = count > 0 ? '' : 'none';
578
+ if (!items || items.length === 0) {
579
+ container.innerHTML =
580
+ '<div class="placeholder-msg">No open work items found.<br>Install the <code>glab</code> CLI and run <code>glab auth login</code> to connect.</div>';
581
+ return;
582
+ }
583
+ var grouped = {};
584
+ items.forEach(function (w) {
585
+ if (!grouped[w.projectUrl]) grouped[w.projectUrl] = [];
586
+ grouped[w.projectUrl].push(w);
587
+ });
588
+ var html = '';
589
+ for (var projUrl in grouped) {
590
+ if (!grouped.hasOwnProperty(projUrl)) continue;
591
+ var wis = grouped[projUrl];
592
+ var fullName = wis[0].projectName || projUrl;
593
+ var projName = fullName.includes(' / ') ? fullName.split(' / ').pop() : fullName;
594
+ html +=
595
+ '<h3 class="group-heading">' +
596
+ '<a href="' +
597
+ escapeHtml(projUrl) +
598
+ '" target="_blank" rel="noopener">' +
599
+ escapeHtml(projName) +
600
+ '<span class="group-link-icon"> &#x2197;</span></a></h3>';
601
+ html +=
602
+ '<table class="help-table"><thead><tr><th>#</th><th>Summary</th><th>State</th><th>Last Update</th></tr></thead><tbody>';
603
+ wis.forEach(function (w) {
604
+ var titleCell = w.url
605
+ ? '<a class="meta-link" href="' +
606
+ escapeHtml(w.url) +
607
+ '" target="_blank" rel="noopener">' +
608
+ escapeHtml(w.title) +
609
+ '<span class="link-icon">\u00A0&#x2197;</span></a>'
610
+ : escapeHtml(w.title);
611
+ var stateBadge =
612
+ w.status === 'opened'
613
+ ? '<span class="badge badge-info">Open</span>'
614
+ : '<span class="badge badge-' +
615
+ (w.status === 'closed' ? 'success' : 'warning') +
616
+ '">' +
617
+ escapeHtml(w.status) +
618
+ '</span>';
619
+ html +=
620
+ '<tr>' +
621
+ '<td class="cell-mono">#' +
622
+ w.iid +
623
+ '</td>' +
624
+ '<td>' +
625
+ titleCell +
626
+ '</td>' +
627
+ '<td>' +
628
+ stateBadge +
629
+ '</td>' +
630
+ '<td class="cell-time">' +
631
+ relativeTime(w.updated) +
632
+ '</td>' +
633
+ '</tr>';
634
+ });
635
+ html += '</tbody></table>';
636
+ }
637
+ container.innerHTML = html;
638
+ })
639
+ .catch(function () {
640
+ document.getElementById('workitems-content').innerHTML =
641
+ '<div class="placeholder-msg">Failed to load work items.</div>';
642
+ });
643
+ }
644
+ loadWorkItems();
645
+ setInterval(loadWorkItems, 5 * 60 * 1000);
646
+
556
647
  // --- SSE connection ---
557
648
  function connect() {
558
649
  var es = new EventSource('/_logbook/events');
@@ -565,6 +656,20 @@
565
656
  var data = JSON.parse(e.data);
566
657
  if (data.type === 'status-update') {
567
658
  projects[data.project.projectPath] = data.project;
659
+ console.log(
660
+ '[logbook-debug] status-update',
661
+ data.project.projectPath,
662
+ 'mrStatus=',
663
+ data.project.mrStatus,
664
+ 'mrUrl=',
665
+ data.project.mrUrl,
666
+ 'statuses=',
667
+ (data.project.statuses || [])
668
+ .map(function (s) {
669
+ return s.id;
670
+ })
671
+ .join(','),
672
+ );
568
673
  renderProjects();
569
674
  updateTabFooters();
570
675
  } else if (data.type === 'project-removed') {
@@ -572,7 +677,17 @@
572
677
  delete projectEvents[data.projectPath];
573
678
  renderProjects();
574
679
  } else if (data.type === 'full-state') {
575
- for (var i = 0; i < data.projects.length; i++) projects[data.projects[i].projectPath] = data.projects[i];
680
+ for (var i = 0; i < data.projects.length; i++) {
681
+ projects[data.projects[i].projectPath] = data.projects[i];
682
+ console.log(
683
+ '[logbook-debug] full-state',
684
+ data.projects[i].projectPath,
685
+ 'mrStatus=',
686
+ data.projects[i].mrStatus,
687
+ 'mrUrl=',
688
+ data.projects[i].mrUrl,
689
+ );
690
+ }
576
691
  if (data.events)
577
692
  for (var path in data.events) {
578
693
  if (data.events.hasOwnProperty(path)) projectEvents[path] = data.events[path];
@@ -0,0 +1,11 @@
1
+ ---
2
+ id: {{id}}
3
+ status: asked
4
+ dateAsked: {{dateAsked}}
5
+ ---
6
+
7
+ ### Question
8
+ {{question}}
9
+
10
+ ### Answer
11
+
@@ -6,6 +6,7 @@ Do NOT run `logbook new` or `logbook release` — these are prompter responsibil
6
6
  Phase 1: Understand
7
7
  1. Read `ticket.md` in the active entry. This is your source of truth for requirements.
8
8
  2. Review `AGENTS.md` and `CONTRIBUTING.md` if you need architectural or workflow context.
9
+ 3. Check existing QnAs with `logbook answers` or check open questions with `logbook unanswered`.
9
10
 
10
11
  Phase 2: Execute & Trace
11
12
 
@@ -29,6 +30,7 @@ You MUST log your work continuously using `logbook log "<message>"`. This is not
29
30
  3. **One message per command call.** For multiple entries, call the command multiple times.
30
31
  4. Do NOT reconstruct the log at the end. If the log is empty when you finish, you did it wrong.
31
32
  5. Stick to the active entry; never modify past entries in the logbook folder.
33
+ 6. For short technical questions and findings, record them via `logbook ask "<question>"` and resolve them with `logbook answer <id> "<answer>"`.
32
34
 
33
35
  Phase 3: Synthesize
34
36
  1. When implementation is finished, write the narrative in `index.md`.