reflectt-node 0.1.7 → 0.1.8

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 (80) hide show
  1. package/README.md +13 -0
  2. package/defaults/gitignore.template +23 -0
  3. package/dist/boardHealthWorker.d.ts +4 -0
  4. package/dist/boardHealthWorker.d.ts.map +1 -1
  5. package/dist/boardHealthWorker.js +36 -1
  6. package/dist/boardHealthWorker.js.map +1 -1
  7. package/dist/buildInfo.d.ts.map +1 -1
  8. package/dist/buildInfo.js +47 -10
  9. package/dist/buildInfo.js.map +1 -1
  10. package/dist/chat.d.ts +4 -0
  11. package/dist/chat.d.ts.map +1 -1
  12. package/dist/chat.js +6 -2
  13. package/dist/chat.js.map +1 -1
  14. package/dist/cli.js +37 -12
  15. package/dist/cli.js.map +1 -1
  16. package/dist/cloud.d.ts.map +1 -1
  17. package/dist/cloud.js +131 -64
  18. package/dist/cloud.js.map +1 -1
  19. package/dist/continuity-loop.d.ts.map +1 -1
  20. package/dist/continuity-loop.js +297 -29
  21. package/dist/continuity-loop.js.map +1 -1
  22. package/dist/deploy-monitor.d.ts +18 -0
  23. package/dist/deploy-monitor.d.ts.map +1 -0
  24. package/dist/deploy-monitor.js +165 -0
  25. package/dist/deploy-monitor.js.map +1 -0
  26. package/dist/executionSweeper.d.ts +1 -0
  27. package/dist/executionSweeper.d.ts.map +1 -1
  28. package/dist/executionSweeper.js +43 -7
  29. package/dist/executionSweeper.js.map +1 -1
  30. package/dist/files.d.ts.map +1 -1
  31. package/dist/files.js +17 -3
  32. package/dist/files.js.map +1 -1
  33. package/dist/fingerprint.d.ts +30 -0
  34. package/dist/fingerprint.d.ts.map +1 -0
  35. package/dist/fingerprint.js +122 -0
  36. package/dist/fingerprint.js.map +1 -0
  37. package/dist/github-webhook-attribution.d.ts +38 -0
  38. package/dist/github-webhook-attribution.d.ts.map +1 -0
  39. package/dist/github-webhook-attribution.js +123 -0
  40. package/dist/github-webhook-attribution.js.map +1 -0
  41. package/dist/inbox.d.ts.map +1 -1
  42. package/dist/inbox.js +4 -0
  43. package/dist/inbox.js.map +1 -1
  44. package/dist/index.js +37 -1
  45. package/dist/index.js.map +1 -1
  46. package/dist/pulse.d.ts +7 -0
  47. package/dist/pulse.d.ts.map +1 -1
  48. package/dist/pulse.js +15 -0
  49. package/dist/pulse.js.map +1 -1
  50. package/dist/review-state.d.ts +9 -0
  51. package/dist/review-state.d.ts.map +1 -0
  52. package/dist/review-state.js +17 -0
  53. package/dist/review-state.js.map +1 -0
  54. package/dist/schedule.d.ts +60 -0
  55. package/dist/schedule.d.ts.map +1 -0
  56. package/dist/schedule.js +176 -0
  57. package/dist/schedule.js.map +1 -0
  58. package/dist/server.d.ts.map +1 -1
  59. package/dist/server.js +486 -14
  60. package/dist/server.js.map +1 -1
  61. package/dist/suppression-ledger.d.ts.map +1 -1
  62. package/dist/suppression-ledger.js +12 -3
  63. package/dist/suppression-ledger.js.map +1 -1
  64. package/dist/system-loop-state.d.ts +1 -1
  65. package/dist/system-loop-state.d.ts.map +1 -1
  66. package/dist/system-loop-state.js +1 -0
  67. package/dist/system-loop-state.js.map +1 -1
  68. package/dist/tasks.d.ts +9 -1
  69. package/dist/tasks.d.ts.map +1 -1
  70. package/dist/tasks.js +193 -41
  71. package/dist/tasks.js.map +1 -1
  72. package/dist/types.d.ts +1 -1
  73. package/dist/types.d.ts.map +1 -1
  74. package/dist/usage-tracking.d.ts +26 -0
  75. package/dist/usage-tracking.d.ts.map +1 -1
  76. package/dist/usage-tracking.js +91 -4
  77. package/dist/usage-tracking.js.map +1 -1
  78. package/package.json +1 -1
  79. package/public/dashboard.js +119 -37
  80. package/public/docs.md +18 -0
@@ -1 +1 @@
1
- {"version":3,"file":"pulse.d.ts","sourceRoot":"","sources":["../src/pulse.ts"],"names":[],"mappings":"AAqBA,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAA;IACnE,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAClG,cAAc,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,CAAA;IAClG,KAAK,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAA;IAC9D,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAA;IACzF,MAAM,EAAE,UAAU,EAAE,CAAA;IACpB,cAAc,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAC1E,cAAc,CAAC,EAAE;QAAE,gBAAgB,EAAE,MAAM,CAAC;QAAC,mBAAmB,EAAE,MAAM,CAAA;KAAE,CAAA;CAC3E;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,OAAO,EAAE,MAAM,EAAE,CAAA;CAClB;AAiCD,wBAAgB,aAAa,IAAI,aAAa,CA6D7C;AAED,wBAAgB,oBAAoB,IAAI,YAAY,CA6CnD"}
1
+ {"version":3,"file":"pulse.d.ts","sourceRoot":"","sources":["../src/pulse.ts"],"names":[],"mappings":"AAqBA,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAA;IACnE,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAClG,cAAc,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,CAAA;IAClG,KAAK,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAA;IAC9D,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAA;IACzF,MAAM,EAAE,UAAU,EAAE,CAAA;IACpB,cAAc,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAC1E,cAAc,CAAC,EAAE;QAAE,gBAAgB,EAAE,MAAM,CAAC;QAAC,mBAAmB,EAAE,MAAM,CAAA;KAAE,CAAA;IAC1E,eAAe,CAAC,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CACnG;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;CACtB;AAiCD,wBAAgB,aAAa,IAAI,aAAa,CA2E7C;AAED,wBAAgB,oBAAoB,IAAI,YAAY,CAkDnD"}
package/dist/pulse.js CHANGED
@@ -84,6 +84,18 @@ export function generatePulse() {
84
84
  todayStart.setHours(0, 0, 0, 0);
85
85
  const recentMessages = chatManager.getMessages({ since: oneHourAgo });
86
86
  const tasksCompletedToday = allTasks.filter(t => t.status === 'done' && (t.updatedAt || 0) >= todayStart.getTime()).length;
87
+ // High-bounce tasks: any non-done task with bounce_count >= 1
88
+ const highBounceTasks = allTasks
89
+ .filter(t => t.status !== 'done' && t.status !== 'cancelled')
90
+ .map(t => ({
91
+ taskId: t.id,
92
+ title: t.title,
93
+ bounceCount: typeof t.metadata?.bounce_count === 'number' ? t.metadata.bounce_count : 0,
94
+ assignee: t.assignee,
95
+ }))
96
+ .filter(t => t.bounceCount >= 1)
97
+ .sort((a, b) => b.bounceCount - a.bounceCount)
98
+ .slice(0, 10);
87
99
  return {
88
100
  ts: Date.now(),
89
101
  deploy: getDeployInfo(),
@@ -96,6 +108,7 @@ export function generatePulse() {
96
108
  messagesLastHour: recentMessages.length,
97
109
  tasksCompletedToday,
98
110
  },
111
+ highBounceTasks: highBounceTasks.length > 0 ? highBounceTasks : undefined,
99
112
  };
100
113
  }
101
114
  export function generateCompactPulse() {
@@ -126,6 +139,7 @@ export function generateCompactPulse() {
126
139
  return `${a.agent}:${a.status}${taskInfo}`;
127
140
  });
128
141
  const reviewStrs = pulse.pendingReviews.map(r => `${r.taskId.slice(-12)}→${r.reviewer}`);
142
+ const bounceWarnings = (pulse.highBounceTasks || []).map(t => `${t.taskId.slice(-12)}(bounces:${t.bounceCount})→${t.assignee || 'unassigned'}`);
129
143
  return {
130
144
  ts: pulse.ts,
131
145
  deploy: deployStr,
@@ -134,6 +148,7 @@ export function generateCompactPulse() {
134
148
  board: boardStr,
135
149
  agents: agentStrs,
136
150
  reviews: reviewStrs,
151
+ ...(bounceWarnings.length > 0 ? { highBounce: bounceWarnings } : {}),
137
152
  };
138
153
  }
139
154
  //# sourceMappingURL=pulse.js.map
package/dist/pulse.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"pulse.js","sourceRoot":"","sources":["../src/pulse.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pulse.js","sourceRoot":"","sources":["../src/pulse.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export declare function getReviewState(meta: Record<string, unknown>): string;
2
+ export declare function hasReviewerDecision(meta: Record<string, unknown>): boolean;
3
+ /**
4
+ * Canonical reviewer-SLA precedence rule:
5
+ * once a reviewer decision exists, reviewer-facing SLA paging stops.
6
+ * Tasks in needs_author are also waiting on the assignee/author, not the reviewer.
7
+ */
8
+ export declare function isWaitingOnAuthor(meta: Record<string, unknown>): boolean;
9
+ //# sourceMappingURL=review-state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-state.d.ts","sourceRoot":"","sources":["../src/review-state.ts"],"names":[],"mappings":"AAGA,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAEpE;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAE1E;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAExE"}
@@ -0,0 +1,17 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ // Copyright (c) Reflectt AI
3
+ export function getReviewState(meta) {
4
+ return typeof meta.review_state === 'string' ? meta.review_state : '';
5
+ }
6
+ export function hasReviewerDecision(meta) {
7
+ return meta.reviewer_decision != null;
8
+ }
9
+ /**
10
+ * Canonical reviewer-SLA precedence rule:
11
+ * once a reviewer decision exists, reviewer-facing SLA paging stops.
12
+ * Tasks in needs_author are also waiting on the assignee/author, not the reviewer.
13
+ */
14
+ export function isWaitingOnAuthor(meta) {
15
+ return getReviewState(meta) === 'needs_author' || hasReviewerDecision(meta);
16
+ }
17
+ //# sourceMappingURL=review-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-state.js","sourceRoot":"","sources":["../src/review-state.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,4BAA4B;AAE5B,MAAM,UAAU,cAAc,CAAC,IAA6B;IAC1D,OAAO,OAAO,IAAI,CAAC,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAA;AACvE,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,IAA6B;IAC/D,OAAO,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAA;AACvC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAA6B;IAC7D,OAAO,cAAc,CAAC,IAAI,CAAC,KAAK,cAAc,IAAI,mBAAmB,CAAC,IAAI,CAAC,CAAA;AAC7E,CAAC"}
@@ -0,0 +1,60 @@
1
+ export type ScheduleKind = 'deploy_window' | 'focus_block' | 'scheduled_task';
2
+ export interface ScheduleEntry {
3
+ id: string;
4
+ kind: ScheduleKind;
5
+ title: string;
6
+ /** Epoch ms — start of window */
7
+ start: number;
8
+ /** Epoch ms — end of window */
9
+ end: number;
10
+ /** Agent or team identifier that owns / created this entry */
11
+ owner: string;
12
+ /** Optional task ID for scheduled_task entries */
13
+ task_id: string | null;
14
+ /** deploy_window: 'open'|'closed'; focus_block: 'active'; scheduled_task: 'pending'|'done' */
15
+ status: string;
16
+ /** Free-form metadata (JSON string) */
17
+ meta: string | null;
18
+ created_at: number;
19
+ updated_at: number;
20
+ }
21
+ export interface CreateScheduleEntryInput {
22
+ kind: ScheduleKind;
23
+ title: string;
24
+ start: number;
25
+ end: number;
26
+ owner: string;
27
+ task_id?: string | null;
28
+ status?: string;
29
+ meta?: Record<string, unknown>;
30
+ }
31
+ export interface UpdateScheduleEntryInput {
32
+ title?: string;
33
+ start?: number;
34
+ end?: number;
35
+ status?: string;
36
+ meta?: Record<string, unknown>;
37
+ }
38
+ export interface ScheduleFeedOptions {
39
+ /** Only return entries starting/ending after this epoch ms (default: now) */
40
+ after?: number;
41
+ /** Only return entries starting before this epoch ms */
42
+ before?: number;
43
+ /** Filter by kind(s) */
44
+ kinds?: ScheduleKind[];
45
+ /** Filter by owner */
46
+ owner?: string;
47
+ /** Max entries to return (default: 50) */
48
+ limit?: number;
49
+ }
50
+ export declare function createScheduleEntry(input: CreateScheduleEntryInput): ScheduleEntry;
51
+ export declare function getScheduleEntry(id: string): ScheduleEntry | null;
52
+ export declare function updateScheduleEntry(id: string, input: UpdateScheduleEntryInput): ScheduleEntry | null;
53
+ export declare function deleteScheduleEntry(id: string): boolean;
54
+ /**
55
+ * Returns upcoming schedule entries in chronological order.
56
+ * Default: all entries ending after now, ordered by start asc.
57
+ */
58
+ export declare function getScheduleFeed(options?: ScheduleFeedOptions): ScheduleEntry[];
59
+ export declare function _resetScheduleStore(): void;
60
+ //# sourceMappingURL=schedule.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schedule.d.ts","sourceRoot":"","sources":["../src/schedule.ts"],"names":[],"mappings":"AA0BA,MAAM,MAAM,YAAY,GAAG,eAAe,GAAG,aAAa,GAAG,gBAAgB,CAAA;AAE7E,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,YAAY,CAAA;IAClB,KAAK,EAAE,MAAM,CAAA;IACb,iCAAiC;IACjC,KAAK,EAAE,MAAM,CAAA;IACb,+BAA+B;IAC/B,GAAG,EAAE,MAAM,CAAA;IACX,8DAA8D;IAC9D,KAAK,EAAE,MAAM,CAAA;IACb,kDAAkD;IAClD,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,8FAA8F;IAC9F,MAAM,EAAE,MAAM,CAAA;IACd,uCAAuC;IACvC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IACnB,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,YAAY,CAAA;IAClB,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAC/B;AAED,MAAM,WAAW,wBAAwB;IACvC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAC/B;AAED,MAAM,WAAW,mBAAmB;IAClC,6EAA6E;IAC7E,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,wDAAwD;IACxD,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,wBAAwB;IACxB,KAAK,CAAC,EAAE,YAAY,EAAE,CAAA;IACtB,sBAAsB;IACtB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,0CAA0C;IAC1C,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AA+CD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,wBAAwB,GAAG,aAAa,CAsClF;AAED,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAIjE;AAED,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,wBAAwB,GAAG,aAAa,GAAG,IAAI,CA0BrG;AAED,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAKvD;AAID;;;GAGG;AACH,wBAAgB,eAAe,CAAC,OAAO,GAAE,mBAAwB,GAAG,aAAa,EAAE,CAqClF;AAID,wBAAgB,mBAAmB,IAAI,IAAI,CAM1C"}
@@ -0,0 +1,176 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ // Copyright (c) Reflectt AI
3
+ /**
4
+ * Schedule — Shared time-awareness feed for the team
5
+ *
6
+ * Provides canonical records for team-wide scheduling primitives:
7
+ * - deploy_window: when deploys are safe/unsafe
8
+ * - focus_block: team-wide quiet periods (low interruptions)
9
+ * - scheduled_task: task work scheduled for a specific time window
10
+ *
11
+ * Intentionally NOT in scope (MVP):
12
+ * - No full calendar UI
13
+ * - No iCal/RRULE integration (use calendar.ts for per-agent recurring blocks)
14
+ * - No reminder/notification engine (use calendar-reminder-engine.ts)
15
+ * - No per-agent availability (use calendar.ts + getAvailability())
16
+ * - No recurring rules — one-off windows only in v1
17
+ *
18
+ * The /schedule/feed endpoint returns upcoming items chronologically so agents
19
+ * can read shared timing data instead of coordinating via chat.
20
+ */
21
+ import { getDb } from './db.js';
22
+ // ── Valid values ───────────────────────────────────────────────────────────
23
+ const VALID_KINDS = ['deploy_window', 'focus_block', 'scheduled_task'];
24
+ const DEFAULT_STATUS = {
25
+ deploy_window: 'open',
26
+ focus_block: 'active',
27
+ scheduled_task: 'pending',
28
+ };
29
+ // ── Database setup ─────────────────────────────────────────────────────────
30
+ let initialized = false;
31
+ function ensureTable() {
32
+ if (initialized)
33
+ return;
34
+ const db = getDb();
35
+ db.exec(`
36
+ CREATE TABLE IF NOT EXISTS schedule_entries (
37
+ id TEXT PRIMARY KEY,
38
+ kind TEXT NOT NULL CHECK(kind IN ('deploy_window', 'focus_block', 'scheduled_task')),
39
+ title TEXT NOT NULL,
40
+ start INTEGER NOT NULL,
41
+ end INTEGER NOT NULL,
42
+ owner TEXT NOT NULL,
43
+ task_id TEXT,
44
+ status TEXT NOT NULL DEFAULT 'open',
45
+ meta TEXT,
46
+ created_at INTEGER NOT NULL,
47
+ updated_at INTEGER NOT NULL
48
+ )
49
+ `);
50
+ db.exec(`CREATE INDEX IF NOT EXISTS idx_schedule_start ON schedule_entries(start)`);
51
+ db.exec(`CREATE INDEX IF NOT EXISTS idx_schedule_kind ON schedule_entries(kind)`);
52
+ db.exec(`CREATE INDEX IF NOT EXISTS idx_schedule_owner ON schedule_entries(owner)`);
53
+ initialized = true;
54
+ }
55
+ // ── CRUD ───────────────────────────────────────────────────────────────────
56
+ function generateId(kind) {
57
+ const prefix = kind === 'deploy_window' ? 'dw' : kind === 'focus_block' ? 'fb' : 'st';
58
+ return `${prefix}-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
59
+ }
60
+ export function createScheduleEntry(input) {
61
+ ensureTable();
62
+ const db = getDb();
63
+ const now = Date.now();
64
+ if (!VALID_KINDS.includes(input.kind)) {
65
+ throw new Error(`kind must be one of: ${VALID_KINDS.join(', ')}`);
66
+ }
67
+ if (!input.title?.trim())
68
+ throw new Error('title is required');
69
+ if (typeof input.start !== 'number' || isNaN(input.start))
70
+ throw new Error('start must be epoch ms');
71
+ if (typeof input.end !== 'number' || isNaN(input.end))
72
+ throw new Error('end must be epoch ms');
73
+ if (input.end <= input.start)
74
+ throw new Error('end must be after start');
75
+ if (!input.owner?.trim())
76
+ throw new Error('owner is required');
77
+ const entry = {
78
+ id: generateId(input.kind),
79
+ kind: input.kind,
80
+ title: input.title.trim(),
81
+ start: input.start,
82
+ end: input.end,
83
+ owner: input.owner.trim(),
84
+ task_id: input.task_id ?? null,
85
+ status: input.status ?? DEFAULT_STATUS[input.kind],
86
+ meta: input.meta ? JSON.stringify(input.meta) : null,
87
+ created_at: now,
88
+ updated_at: now,
89
+ };
90
+ db.prepare(`
91
+ INSERT INTO schedule_entries (id, kind, title, start, end, owner, task_id, status, meta, created_at, updated_at)
92
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
93
+ `).run(entry.id, entry.kind, entry.title, entry.start, entry.end, entry.owner, entry.task_id, entry.status, entry.meta, entry.created_at, entry.updated_at);
94
+ return entry;
95
+ }
96
+ export function getScheduleEntry(id) {
97
+ ensureTable();
98
+ const db = getDb();
99
+ return db.prepare('SELECT * FROM schedule_entries WHERE id = ?').get(id) ?? null;
100
+ }
101
+ export function updateScheduleEntry(id, input) {
102
+ ensureTable();
103
+ const db = getDb();
104
+ const existing = getScheduleEntry(id);
105
+ if (!existing)
106
+ return null;
107
+ const now = Date.now();
108
+ const updated = {
109
+ ...existing,
110
+ title: input.title?.trim() ?? existing.title,
111
+ start: input.start ?? existing.start,
112
+ end: input.end ?? existing.end,
113
+ status: input.status ?? existing.status,
114
+ meta: input.meta ? JSON.stringify(input.meta) : existing.meta,
115
+ updated_at: now,
116
+ };
117
+ if (updated.end <= updated.start)
118
+ throw new Error('end must be after start');
119
+ db.prepare(`
120
+ UPDATE schedule_entries
121
+ SET title = ?, start = ?, end = ?, status = ?, meta = ?, updated_at = ?
122
+ WHERE id = ?
123
+ `).run(updated.title, updated.start, updated.end, updated.status, updated.meta, now, id);
124
+ return updated;
125
+ }
126
+ export function deleteScheduleEntry(id) {
127
+ ensureTable();
128
+ const db = getDb();
129
+ const result = db.prepare('DELETE FROM schedule_entries WHERE id = ?').run(id);
130
+ return result.changes > 0;
131
+ }
132
+ // ── Feed query ─────────────────────────────────────────────────────────────
133
+ /**
134
+ * Returns upcoming schedule entries in chronological order.
135
+ * Default: all entries ending after now, ordered by start asc.
136
+ */
137
+ export function getScheduleFeed(options = {}) {
138
+ ensureTable();
139
+ const db = getDb();
140
+ const now = Date.now();
141
+ const after = options.after ?? now;
142
+ const before = options.before;
143
+ const limit = Math.min(options.limit ?? 50, 200);
144
+ const conditions = ['end > ?'];
145
+ const params = [after];
146
+ if (before !== undefined) {
147
+ conditions.push('start < ?');
148
+ params.push(before);
149
+ }
150
+ if (options.kinds?.length) {
151
+ conditions.push(`kind IN (${options.kinds.map(() => '?').join(', ')})`);
152
+ params.push(...options.kinds);
153
+ }
154
+ if (options.owner) {
155
+ conditions.push('owner = ?');
156
+ params.push(options.owner);
157
+ }
158
+ params.push(limit);
159
+ const rows = db.prepare(`
160
+ SELECT * FROM schedule_entries
161
+ WHERE ${conditions.join(' AND ')}
162
+ ORDER BY start ASC
163
+ LIMIT ?
164
+ `).all(...params);
165
+ return rows;
166
+ }
167
+ // ── Test reset ─────────────────────────────────────────────────────────────
168
+ export function _resetScheduleStore() {
169
+ initialized = false;
170
+ try {
171
+ const db = getDb();
172
+ db.exec('DELETE FROM schedule_entries');
173
+ }
174
+ catch { /* ok in tests */ }
175
+ }
176
+ //# sourceMappingURL=schedule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schedule.js","sourceRoot":"","sources":["../src/schedule.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,eAAe,EAAkB,MAAM,SAAS,CAAA;AAutD9D,wBAAsB,YAAY,IAAI,OAAO,CAAC,eAAe,CAAC,CAq7V7D"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,eAAe,EAAkB,MAAM,SAAS,CAAA;AAo3D9D,wBAAsB,YAAY,IAAI,OAAO,CAAC,eAAe,CAAC,CA8wW7D"}