@mc1global/opencode-jarvis 0.11.0 → 0.13.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 (63) hide show
  1. package/README.md +21 -1
  2. package/dist/application/azure-sync/task-push-use-cases.d.ts.map +1 -1
  3. package/dist/application/azure-sync/task-push-use-cases.js +21 -3
  4. package/dist/application/azure-sync/task-push-use-cases.js.map +1 -1
  5. package/dist/application/bootstrap/use-cases.d.ts.map +1 -1
  6. package/dist/application/bootstrap/use-cases.js +4 -4
  7. package/dist/application/bootstrap/use-cases.js.map +1 -1
  8. package/dist/application/config/config-service.d.ts +3 -1
  9. package/dist/application/config/config-service.d.ts.map +1 -1
  10. package/dist/application/config/config-service.js +4 -0
  11. package/dist/application/config/config-service.js.map +1 -1
  12. package/dist/application/wiki-feedback/poll-service.d.ts +56 -0
  13. package/dist/application/wiki-feedback/poll-service.d.ts.map +1 -0
  14. package/dist/application/wiki-feedback/poll-service.js +87 -0
  15. package/dist/application/wiki-feedback/poll-service.js.map +1 -0
  16. package/dist/application/wiki-feedback/use-cases.d.ts +115 -0
  17. package/dist/application/wiki-feedback/use-cases.d.ts.map +1 -0
  18. package/dist/application/wiki-feedback/use-cases.js +271 -0
  19. package/dist/application/wiki-feedback/use-cases.js.map +1 -0
  20. package/dist/domain/config/value-objects.d.ts +28 -1
  21. package/dist/domain/config/value-objects.d.ts.map +1 -1
  22. package/dist/domain/config/value-objects.js +10 -0
  23. package/dist/domain/config/value-objects.js.map +1 -1
  24. package/dist/domain/governance/policies.d.ts.map +1 -1
  25. package/dist/domain/governance/policies.js +41 -0
  26. package/dist/domain/governance/policies.js.map +1 -1
  27. package/dist/domain/wiki-feedback/entities.d.ts +101 -0
  28. package/dist/domain/wiki-feedback/entities.d.ts.map +1 -0
  29. package/dist/domain/wiki-feedback/entities.js +154 -0
  30. package/dist/domain/wiki-feedback/entities.js.map +1 -0
  31. package/dist/domain/wiki-feedback/index.d.ts +13 -0
  32. package/dist/domain/wiki-feedback/index.d.ts.map +1 -0
  33. package/dist/domain/wiki-feedback/index.js +11 -0
  34. package/dist/domain/wiki-feedback/index.js.map +1 -0
  35. package/dist/domain/wiki-feedback/ports.d.ts +47 -0
  36. package/dist/domain/wiki-feedback/ports.d.ts.map +1 -0
  37. package/dist/domain/wiki-feedback/ports.js +13 -0
  38. package/dist/domain/wiki-feedback/ports.js.map +1 -0
  39. package/dist/domain/wiki-feedback/repositories.d.ts +33 -0
  40. package/dist/domain/wiki-feedback/repositories.d.ts.map +1 -0
  41. package/dist/domain/wiki-feedback/repositories.js +12 -0
  42. package/dist/domain/wiki-feedback/repositories.js.map +1 -0
  43. package/dist/domain/wiki-feedback/value-objects.d.ts +74 -0
  44. package/dist/domain/wiki-feedback/value-objects.d.ts.map +1 -0
  45. package/dist/domain/wiki-feedback/value-objects.js +144 -0
  46. package/dist/domain/wiki-feedback/value-objects.js.map +1 -0
  47. package/dist/index.d.ts.map +1 -1
  48. package/dist/index.js +46 -0
  49. package/dist/index.js.map +1 -1
  50. package/dist/infrastructure/wiki-feedback/azure-wiki-client.d.ts +36 -0
  51. package/dist/infrastructure/wiki-feedback/azure-wiki-client.d.ts.map +1 -0
  52. package/dist/infrastructure/wiki-feedback/azure-wiki-client.js +106 -0
  53. package/dist/infrastructure/wiki-feedback/azure-wiki-client.js.map +1 -0
  54. package/dist/infrastructure/wiki-feedback/sqlite-feedback-repository.d.ts +31 -0
  55. package/dist/infrastructure/wiki-feedback/sqlite-feedback-repository.d.ts.map +1 -0
  56. package/dist/infrastructure/wiki-feedback/sqlite-feedback-repository.js +149 -0
  57. package/dist/infrastructure/wiki-feedback/sqlite-feedback-repository.js.map +1 -0
  58. package/dist/tools/wiki-feedback-tools.d.ts +9 -0
  59. package/dist/tools/wiki-feedback-tools.d.ts.map +1 -0
  60. package/dist/tools/wiki-feedback-tools.js +189 -0
  61. package/dist/tools/wiki-feedback-tools.js.map +1 -0
  62. package/package.json +1 -1
  63. package/templates/agents-md.template.md +7 -2
@@ -0,0 +1,271 @@
1
+ /**
2
+ * Wiki Feedback Application — Use Cases
3
+ *
4
+ * Orchestrates wiki feedback operations: scan pages for new comments,
5
+ * list pending items, triage with type/priority, create kanban cards,
6
+ * and dismiss irrelevant feedback. Uses domain entities and repository
7
+ * ports — zero infrastructure dependencies.
8
+ *
9
+ * SOLID: SRP — wiki feedback workflow orchestration only
10
+ * SOLID: DIP — depends on domain ports and repository interfaces
11
+ * DDD: Application Service pattern with Result returns
12
+ */
13
+ import { ok, fail, Timestamp } from "../../domain/shared/value-objects.js";
14
+ import { WikiFeedbackId, CommentAuthor, PageSource, isValidFeedbackType, isValidFeedbackPriority, } from "../../domain/wiki-feedback/value-objects.js";
15
+ import { WikiFeedbackItem } from "../../domain/wiki-feedback/entities.js";
16
+ // ─── Use Cases ────────────────────────────────────────────────────────────────
17
+ /**
18
+ * Application use cases for wiki feedback processing.
19
+ * Orchestrates scan → triage → card creation / dismiss lifecycle.
20
+ */
21
+ export class WikiFeedbackUseCases {
22
+ deps;
23
+ constructor(deps) {
24
+ this.deps = deps;
25
+ }
26
+ // ── Scan ──────────────────────────────────────────────────────────
27
+ /**
28
+ * Scan all monitored wiki pages for new comments.
29
+ * Creates WikiFeedbackItem for each new comment not yet tracked.
30
+ * Filters out auto-reply comments posted by JARVIS.
31
+ */
32
+ async scan() {
33
+ const { feedbackRepo, wikiClient, wikiIdentifier, monitoredPages, autoReplyPrefix } = this.deps;
34
+ if (monitoredPages.length === 0) {
35
+ return fail("No monitored pages configured in wiki-feedback config");
36
+ }
37
+ if (!wikiIdentifier) {
38
+ return fail("wikiIdentifier is not configured in wiki-feedback config");
39
+ }
40
+ let newCommentsFound = 0;
41
+ let existingSkipped = 0;
42
+ let autoRepliesFiltered = 0;
43
+ for (const page of monitoredPages) {
44
+ const commentsResult = await wikiClient.getPageComments({
45
+ wikiIdentifier,
46
+ pageId: page.pageId,
47
+ });
48
+ if (!commentsResult.success) {
49
+ return fail(`Failed to fetch comments for page ${page.path}: ${commentsResult.error}`);
50
+ }
51
+ for (const comment of commentsResult.data) {
52
+ // Filter auto-replies by checking if comment starts with the configured prefix
53
+ if (isAutoReply(comment, autoReplyPrefix)) {
54
+ autoRepliesFiltered++;
55
+ continue;
56
+ }
57
+ // Deduplication: skip if already tracked
58
+ const existing = await feedbackRepo.findByAzureCommentId(comment.id);
59
+ if (existing) {
60
+ existingSkipped++;
61
+ continue;
62
+ }
63
+ // Create new feedback item
64
+ const seq = await feedbackRepo.nextFeedbackSequence();
65
+ const item = WikiFeedbackItem.create({
66
+ id: WikiFeedbackId.create(seq),
67
+ azureCommentId: comment.id,
68
+ commentText: comment.text,
69
+ author: CommentAuthor.create(comment.createdBy.displayName, comment.createdBy.uniqueName),
70
+ pageSource: PageSource.create(page.pageId, page.path, page.defaultType),
71
+ commentCreatedDate: Timestamp.fromISO(comment.createdDate),
72
+ });
73
+ await feedbackRepo.save(item);
74
+ newCommentsFound++;
75
+ }
76
+ }
77
+ return ok({
78
+ pagesScanned: monitoredPages.length,
79
+ newCommentsFound,
80
+ existingSkipped,
81
+ autoRepliesFiltered,
82
+ });
83
+ }
84
+ // ── List ──────────────────────────────────────────────────────────
85
+ /** List pending (untriaged) feedback items. */
86
+ async listPending(limit = 50) {
87
+ try {
88
+ const items = await this.deps.feedbackRepo.findPending(limit);
89
+ return ok(items.map(toFeedbackResponse));
90
+ }
91
+ catch (error) {
92
+ return fail(`Failed to list pending feedback: ${String(error)}`);
93
+ }
94
+ }
95
+ /** List feedback items by status. */
96
+ async listByStatus(status, limit = 50) {
97
+ if (!isValidFeedbackStatus(status)) {
98
+ return fail(`Invalid status: "${status}". Valid: pending, triaged, card_created, dismissed`);
99
+ }
100
+ try {
101
+ const items = await this.deps.feedbackRepo.findByStatus(status, limit);
102
+ return ok(items.map(toFeedbackResponse));
103
+ }
104
+ catch (error) {
105
+ return fail(`Failed to list feedback by status: ${String(error)}`);
106
+ }
107
+ }
108
+ /** List recent feedback items across all statuses. */
109
+ async listRecent(limit = 20) {
110
+ try {
111
+ const items = await this.deps.feedbackRepo.findRecent(limit);
112
+ return ok(items.map(toFeedbackResponse));
113
+ }
114
+ catch (error) {
115
+ return fail(`Failed to list recent feedback: ${String(error)}`);
116
+ }
117
+ }
118
+ // ── Triage ────────────────────────────────────────────────────────
119
+ /** Triage a pending feedback item: assign type and priority. */
120
+ async triage(request) {
121
+ if (!isValidFeedbackType(request.feedbackType)) {
122
+ return fail(`Invalid feedback type: "${request.feedbackType}". ` +
123
+ `Valid: feature, bug, improvement, question, documentation`);
124
+ }
125
+ if (!isValidFeedbackPriority(request.priority)) {
126
+ return fail(`Invalid priority: "${request.priority}". Valid: high, medium, low`);
127
+ }
128
+ try {
129
+ const item = await this.deps.feedbackRepo.findById(WikiFeedbackId.from(request.feedbackId));
130
+ if (!item) {
131
+ return fail(`Feedback item not found: ${request.feedbackId}`);
132
+ }
133
+ item.triage(request.feedbackType, request.priority);
134
+ await this.deps.feedbackRepo.save(item);
135
+ return ok(toFeedbackResponse(item));
136
+ }
137
+ catch (error) {
138
+ return fail(`Failed to triage feedback: ${String(error)}`);
139
+ }
140
+ }
141
+ // ── Create Card ───────────────────────────────────────────────────
142
+ /**
143
+ * Create a kanban card from a triaged feedback item.
144
+ * Optionally posts an auto-reply on the wiki page.
145
+ */
146
+ async createCard(request) {
147
+ try {
148
+ const item = await this.deps.feedbackRepo.findById(WikiFeedbackId.from(request.feedbackId));
149
+ if (!item) {
150
+ return fail(`Feedback item not found: ${request.feedbackId}`);
151
+ }
152
+ if (item.status !== "triaged") {
153
+ return fail(`Feedback ${request.feedbackId} is "${item.status}" — must be "triaged" to create a card`);
154
+ }
155
+ // Build card title from feedback or use custom
156
+ const title = request.title ?? buildCardTitle(item);
157
+ const description = request.description ?? buildCardDescription(item);
158
+ // Create the kanban card via injected callback
159
+ const cardResult = await this.deps.createCard({
160
+ title,
161
+ workspace: this.deps.workspace,
162
+ ...(item.priority !== null ? { priority: item.priority } : {}),
163
+ ...(description !== undefined ? { description } : {}),
164
+ ...(request.epicId !== undefined ? { epicId: request.epicId } : {}),
165
+ });
166
+ if (!cardResult.success) {
167
+ return fail(`Failed to create kanban card: ${cardResult.error}`);
168
+ }
169
+ const cardId = cardResult.data.id;
170
+ item.markCardCreated(cardId);
171
+ await this.deps.feedbackRepo.save(item);
172
+ // Auto-reply on wiki (fire-and-forget, must not block)
173
+ if (this.deps.autoReply) {
174
+ this.postAutoReply(item, cardId).catch(() => {
175
+ // Swallow — auto-reply failure must not affect card creation
176
+ });
177
+ }
178
+ return ok(toFeedbackResponse(item));
179
+ }
180
+ catch (error) {
181
+ return fail(`Failed to create card from feedback: ${String(error)}`);
182
+ }
183
+ }
184
+ // ── Dismiss ───────────────────────────────────────────────────────
185
+ /** Dismiss a feedback item with a reason. */
186
+ async dismiss(request) {
187
+ if (!request.reason.trim()) {
188
+ return fail("Dismiss reason cannot be empty");
189
+ }
190
+ try {
191
+ const item = await this.deps.feedbackRepo.findById(WikiFeedbackId.from(request.feedbackId));
192
+ if (!item) {
193
+ return fail(`Feedback item not found: ${request.feedbackId}`);
194
+ }
195
+ item.dismiss(request.reason);
196
+ await this.deps.feedbackRepo.save(item);
197
+ return ok(toFeedbackResponse(item));
198
+ }
199
+ catch (error) {
200
+ return fail(`Failed to dismiss feedback: ${String(error)}`);
201
+ }
202
+ }
203
+ // ── Auto-Reply ────────────────────────────────────────────────────
204
+ async postAutoReply(item, cardId) {
205
+ const { wikiClient, wikiIdentifier, autoReplyPrefix } = this.deps;
206
+ const text = `**${autoReplyPrefix}**: This feedback has been captured as kanban card **${cardId}**. ` +
207
+ `Thank you for your input!`;
208
+ await wikiClient.postPageComment({
209
+ wikiIdentifier,
210
+ pageId: item.pageSource.pageId,
211
+ text,
212
+ });
213
+ }
214
+ }
215
+ // ─── Helpers ──────────────────────────────────────────────────────────────────
216
+ function toFeedbackResponse(item) {
217
+ const p = item.toProps();
218
+ return {
219
+ id: p.id,
220
+ azureCommentId: p.azureCommentId,
221
+ commentText: p.commentText,
222
+ authorDisplayName: p.authorDisplayName,
223
+ authorUniqueName: p.authorUniqueName,
224
+ pageId: p.pageId,
225
+ pagePath: p.pagePath,
226
+ status: p.status,
227
+ feedbackType: p.feedbackType,
228
+ priority: p.priority,
229
+ cardId: p.cardId,
230
+ dismissReason: p.dismissReason,
231
+ detectedAt: p.detectedAt,
232
+ triagedAt: p.triagedAt,
233
+ resolvedAt: p.resolvedAt,
234
+ commentCreatedDate: p.commentCreatedDate,
235
+ };
236
+ }
237
+ /** Check if a comment is an auto-reply from JARVIS. */
238
+ function isAutoReply(comment, prefix) {
239
+ if (!prefix)
240
+ return false;
241
+ const marker = `**${prefix}**:`;
242
+ return comment.text.trimStart().startsWith(marker);
243
+ }
244
+ /** Validate feedback status string (local helper, not exported from domain). */
245
+ function isValidFeedbackStatus(value) {
246
+ return ["pending", "triaged", "card_created", "dismissed"].includes(value);
247
+ }
248
+ /** Build a default card title from feedback item. */
249
+ function buildCardTitle(item) {
250
+ const typeLabel = item.feedbackType ?? "feedback";
251
+ const prefix = typeLabel.charAt(0).toUpperCase() + typeLabel.slice(1);
252
+ // Truncate comment to ~60 chars for title
253
+ const snippet = item.commentText.length > 60
254
+ ? item.commentText.substring(0, 57) + "..."
255
+ : item.commentText;
256
+ return `[Wiki ${prefix}] ${snippet}`;
257
+ }
258
+ /** Build a default card description from feedback item. */
259
+ function buildCardDescription(item) {
260
+ const lines = [
261
+ `**Source**: Wiki page "${item.pageSource.pagePath}" (page ${item.pageSource.pageId})`,
262
+ `**Author**: ${item.author.displayName} (${item.author.uniqueName})`,
263
+ `**Comment date**: ${item.commentCreatedDate.toISO()}`,
264
+ `**Feedback ID**: ${item.id.value}`,
265
+ "",
266
+ "**Original comment**:",
267
+ item.commentText,
268
+ ];
269
+ return lines.join("\n");
270
+ }
271
+ //# sourceMappingURL=use-cases.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-cases.js","sourceRoot":"","sources":["../../../src/application/wiki-feedback/use-cases.ts"],"names":[],"mappings":"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"}
@@ -12,7 +12,7 @@
12
12
  * Known bounded context names that can request configuration.
13
13
  * Each maps to a top-level section in config/jarvis.yaml.
14
14
  */
15
- export type ConfigContextName = "rag" | "pipeline" | "agent-registry" | "kanban" | "governance" | "token-metrics" | "vault" | "workspace-registry" | "environment" | "domain-map" | "azure-sync" | "mcp-server";
15
+ export type ConfigContextName = "rag" | "pipeline" | "agent-registry" | "kanban" | "governance" | "token-metrics" | "vault" | "workspace-registry" | "environment" | "domain-map" | "azure-sync" | "mcp-server" | "wiki-feedback";
16
16
  /** Chunk size/overlap pair for a single language. */
17
17
  export interface ChunkConfigEntry {
18
18
  readonly chunkSize: number;
@@ -94,6 +94,30 @@ export interface TokenMetricsConfig {
94
94
  /** Budget utilization threshold (0-1) that triggers an alert. Default: 0.8. */
95
95
  readonly budgetAlertThreshold: number;
96
96
  }
97
+ /** Configuration for a monitored wiki page. */
98
+ export interface MonitoredPageConfig {
99
+ readonly path: string;
100
+ readonly pageId: number;
101
+ readonly defaultType: "feature" | "bug" | "improvement" | "question" | "documentation";
102
+ }
103
+ /**
104
+ * Wiki Feedback bounded context configuration.
105
+ * Controls which wiki pages are monitored and how feedback is processed.
106
+ */
107
+ export interface WikiFeedbackConfig {
108
+ /** Wiki identifier (e.g., "IA.wiki"). */
109
+ readonly wikiIdentifier: string;
110
+ /** Enable background polling for new wiki comments. */
111
+ readonly pollEnabled: boolean;
112
+ /** Poll interval in seconds (minimum 60, default 300). */
113
+ readonly pollIntervalSecs: number;
114
+ /** Wiki pages to monitor for feedback comments. */
115
+ readonly monitoredPages: readonly MonitoredPageConfig[];
116
+ /** Post auto-reply comment on wiki when a card is created from feedback. */
117
+ readonly autoReply: boolean;
118
+ /** Prefix for auto-reply comments (e.g., "JARVIS"). */
119
+ readonly autoReplyPrefix: string;
120
+ }
97
121
  /**
98
122
  * Maps context names to their typed config interfaces.
99
123
  * Used by ConfigService for type-safe config retrieval.
@@ -106,6 +130,7 @@ export interface ConfigMap {
106
130
  "mcp-server": McpServerConfig;
107
131
  kanban: KanbanConfig;
108
132
  "token-metrics": TokenMetricsConfig;
133
+ "wiki-feedback": WikiFeedbackConfig;
109
134
  }
110
135
  /** Default RAG configuration (used when YAML is absent or incomplete). */
111
136
  export declare const DEFAULT_RAG_CONFIG: RagConfig;
@@ -121,6 +146,8 @@ export declare const DEFAULT_MCP_SERVER_CONFIG: McpServerConfig;
121
146
  export declare const DEFAULT_KANBAN_CONFIG: KanbanConfig;
122
147
  /** Default Token Metrics configuration. */
123
148
  export declare const DEFAULT_TOKEN_METRICS_CONFIG: TokenMetricsConfig;
149
+ /** Default Wiki Feedback configuration. */
150
+ export declare const DEFAULT_WIKI_FEEDBACK_CONFIG: WikiFeedbackConfig;
124
151
  /**
125
152
  * All defaults indexed by context name.
126
153
  * Used by ConfigService for fallback resolution.
@@ -1 +1 @@
1
- {"version":3,"file":"value-objects.d.ts","sourceRoot":"","sources":["../../../src/domain/config/value-objects.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"value-objects.d.ts","sourceRoot":"","sources":["../../../src/domain/config/value-objects.ts"],"names":[],"mappings":"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"}
@@ -85,6 +85,15 @@ export const DEFAULT_TOKEN_METRICS_CONFIG = {
85
85
  sprintBudgetUsd: null,
86
86
  budgetAlertThreshold: 0.8,
87
87
  };
88
+ /** Default Wiki Feedback configuration. */
89
+ export const DEFAULT_WIKI_FEEDBACK_CONFIG = {
90
+ wikiIdentifier: "",
91
+ pollEnabled: false,
92
+ pollIntervalSecs: 300,
93
+ monitoredPages: [],
94
+ autoReply: true,
95
+ autoReplyPrefix: "JARVIS",
96
+ };
88
97
  /**
89
98
  * All defaults indexed by context name.
90
99
  * Used by ConfigService for fallback resolution.
@@ -97,5 +106,6 @@ export const CONFIG_DEFAULTS = {
97
106
  "mcp-server": DEFAULT_MCP_SERVER_CONFIG,
98
107
  kanban: DEFAULT_KANBAN_CONFIG,
99
108
  "token-metrics": DEFAULT_TOKEN_METRICS_CONFIG,
109
+ "wiki-feedback": DEFAULT_WIKI_FEEDBACK_CONFIG,
100
110
  };
101
111
  //# sourceMappingURL=value-objects.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"value-objects.js","sourceRoot":"","sources":["../../../src/domain/config/value-objects.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"value-objects.js","sourceRoot":"","sources":["../../../src/domain/config/value-objects.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"policies.d.ts","sourceRoot":"","sources":["../../../src/domain/governance/policies.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,0CAA0C;AAC1C,oBAAY,iBAAiB;IAC3B,qCAAqC;IACrC,KAAK,UAAU;IACf,+CAA+C;IAC/C,OAAO,YAAY;CACpB;AAED,4CAA4C;AAC5C,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAC;CACtC;AAED,iEAAiE;AACjE,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACxC;AAED,qEAAqE;AACrE,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,qBAAqB,KAAK,SAAS,GAAG,IAAI,CAAC;CACrE;AA+VD,wCAAwC;AACxC,eAAO,MAAM,gBAAgB,EAAE,SAAS,UAAU,EAmBjD,CAAC"}
1
+ {"version":3,"file":"policies.d.ts","sourceRoot":"","sources":["../../../src/domain/governance/policies.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,0CAA0C;AAC1C,oBAAY,iBAAiB;IAC3B,qCAAqC;IACrC,KAAK,UAAU;IACf,+CAA+C;IAC/C,OAAO,YAAY;CACpB;AAED,4CAA4C;AAC5C,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAC;CACtC;AAED,iEAAiE;AACjE,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACxC;AAED,qEAAqE;AACrE,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,qBAAqB,KAAK,SAAS,GAAG,IAAI,CAAC;CACrE;AA2YD,wCAAwC;AACxC,eAAO,MAAM,gBAAgB,EAAE,SAAS,UAAU,EAqBjD,CAAC"}
@@ -284,6 +284,45 @@ const blockShellSensitiveFileRead = {
284
284
  return null;
285
285
  },
286
286
  };
287
+ // ── Git Workflow Policies ──────────────────────────────────────────────
288
+ /**
289
+ * Block git push commands targeting main or master branches directly.
290
+ * Enforces the Epic branch strategy: all work must happen on dedicated
291
+ * branches (epic/<id>-<slug>, feature/*, etc.) and merge via PR.
292
+ *
293
+ * Catches patterns like:
294
+ * - git push origin main
295
+ * - git push origin master
296
+ * - git push --set-upstream origin main
297
+ *
298
+ * Allows:
299
+ * - git push origin feature/x
300
+ * - git push origin epic/EP-012-slug
301
+ * - git push (without explicit branch — relies on tracking config)
302
+ * - git pull origin main (reads are fine)
303
+ */
304
+ const MAIN_PUSH_PATTERN = /\bgit\s+push\b.*\b(?:origin|upstream)\s+(?:main|master)\b/;
305
+ const blockMainPush = {
306
+ id: "shell.block-main-push",
307
+ description: "Block direct push to main/master. Use Epic branches (epic/<id>-<slug>) " +
308
+ "and merge via PR.",
309
+ evaluate(ctx) {
310
+ if (ctx.toolName !== "bash")
311
+ return null;
312
+ const cmd = getCommand(ctx.args);
313
+ if (cmd === null)
314
+ return null;
315
+ if (MAIN_PUSH_PATTERN.test(cmd)) {
316
+ return {
317
+ rule: this.id,
318
+ message: "Direct push to main/master is forbidden. Work on an Epic branch " +
319
+ "(epic/<id>-<slug>) and merge via PR when complete.",
320
+ severity: ViolationSeverity.Error,
321
+ };
322
+ }
323
+ return null;
324
+ },
325
+ };
287
326
  // ── Pipeline Governance ───────────────────────────────────────────────
288
327
  /** Warn when pipeline-init is called without a card_id argument. */
289
328
  const warnPipelineNoCard = {
@@ -360,6 +399,8 @@ export const DEFAULT_POLICIES = [
360
399
  blockForcePush,
361
400
  blockDirectSqlite,
362
401
  warnDestructiveOps,
402
+ // Git workflow
403
+ blockMainPush,
363
404
  // Security: secret leakage prevention
364
405
  blockEnvDump,
365
406
  blockShellEnvFileRead,
@@ -1 +1 @@
1
- {"version":3,"file":"policies.js","sourceRoot":"","sources":["../../../src/domain/governance/policies.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"policies.js","sourceRoot":"","sources":["../../../src/domain/governance/policies.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,101 @@
1
+ /**
2
+ * Wiki Feedback Domain — Entities
3
+ *
4
+ * WikiFeedbackItem tracks a wiki comment through the feedback lifecycle:
5
+ * pending → triaged → card_created / dismissed.
6
+ *
7
+ * SOLID: SRP — entity manages its own state and invariants
8
+ * DDD: Entity with identity and lifecycle, mutable state with guards
9
+ */
10
+ import { Timestamp } from "../shared/value-objects.js";
11
+ import { WikiFeedbackId, CommentAuthor, PageSource } from "./value-objects.js";
12
+ import type { FeedbackStatus, FeedbackType, FeedbackPriority } from "./value-objects.js";
13
+ /** Serializable properties for WikiFeedbackItem persistence. */
14
+ export interface WikiFeedbackItemProps {
15
+ readonly id: string;
16
+ readonly azureCommentId: number;
17
+ readonly commentText: string;
18
+ readonly authorDisplayName: string;
19
+ readonly authorUniqueName: string;
20
+ readonly pageId: number;
21
+ readonly pagePath: string;
22
+ readonly pageDefaultType: string;
23
+ readonly status: string;
24
+ readonly feedbackType: string | null;
25
+ readonly priority: string | null;
26
+ readonly cardId: string | null;
27
+ readonly dismissReason: string | null;
28
+ readonly detectedAt: string;
29
+ readonly triagedAt: string | null;
30
+ readonly resolvedAt: string | null;
31
+ readonly commentCreatedDate: string;
32
+ }
33
+ /**
34
+ * Represents a wiki comment captured from Azure DevOps Wiki.
35
+ * Tracks the comment through a feedback lifecycle from detection
36
+ * to either card creation or dismissal.
37
+ *
38
+ * Lifecycle: pending → triaged → card_created / dismissed
39
+ * (dismiss can also happen directly from pending)
40
+ */
41
+ export declare class WikiFeedbackItem {
42
+ private readonly _id;
43
+ private readonly _azureCommentId;
44
+ private readonly _commentText;
45
+ private readonly _author;
46
+ private readonly _pageSource;
47
+ private readonly _detectedAt;
48
+ private readonly _commentCreatedDate;
49
+ private _status;
50
+ private _feedbackType;
51
+ private _priority;
52
+ private _cardId;
53
+ private _dismissReason;
54
+ private _triagedAt;
55
+ private _resolvedAt;
56
+ private constructor();
57
+ /** Create a new feedback item from a detected wiki comment. */
58
+ static create(params: {
59
+ id: WikiFeedbackId;
60
+ azureCommentId: number;
61
+ commentText: string;
62
+ author: CommentAuthor;
63
+ pageSource: PageSource;
64
+ commentCreatedDate: Timestamp;
65
+ }): WikiFeedbackItem;
66
+ /** Reconstitute from persistence (trusted data, no validation). */
67
+ static reconstitute(props: WikiFeedbackItemProps): WikiFeedbackItem;
68
+ get id(): WikiFeedbackId;
69
+ get azureCommentId(): number;
70
+ get commentText(): string;
71
+ get author(): CommentAuthor;
72
+ get pageSource(): PageSource;
73
+ get status(): FeedbackStatus;
74
+ get feedbackType(): FeedbackType | null;
75
+ get priority(): FeedbackPriority | null;
76
+ get cardId(): string | null;
77
+ get dismissReason(): string | null;
78
+ get detectedAt(): Timestamp;
79
+ get triagedAt(): Timestamp | null;
80
+ get resolvedAt(): Timestamp | null;
81
+ get commentCreatedDate(): Timestamp;
82
+ /**
83
+ * Triage this feedback item: assign type and priority.
84
+ * Transition: pending → triaged
85
+ */
86
+ triage(feedbackType: FeedbackType, priority: FeedbackPriority): void;
87
+ /**
88
+ * Mark this feedback as having a kanban card created from it.
89
+ * Transition: triaged → card_created
90
+ */
91
+ markCardCreated(cardId: string): void;
92
+ /**
93
+ * Dismiss this feedback item with a reason.
94
+ * Transition: pending → dismissed OR triaged → dismissed
95
+ */
96
+ dismiss(reason: string): void;
97
+ /** Whether this feedback item has been resolved (card created or dismissed). */
98
+ get isResolved(): boolean;
99
+ toProps(): WikiFeedbackItemProps;
100
+ }
101
+ //# sourceMappingURL=entities.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entities.d.ts","sourceRoot":"","sources":["../../../src/domain/wiki-feedback/entities.ts"],"names":[],"mappings":"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"}