@telora/daemon 0.15.13 → 0.15.15

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 (81) hide show
  1. package/build-info.json +2 -2
  2. package/dist/config.d.ts.map +1 -1
  3. package/dist/config.js +0 -50
  4. package/dist/config.js.map +1 -1
  5. package/dist/directive-executor.d.ts +92 -0
  6. package/dist/directive-executor.d.ts.map +1 -1
  7. package/dist/directive-executor.js +172 -11
  8. package/dist/directive-executor.js.map +1 -1
  9. package/dist/focus-engine.d.ts.map +1 -1
  10. package/dist/focus-engine.js +0 -43
  11. package/dist/focus-engine.js.map +1 -1
  12. package/dist/focus-executor.d.ts.map +1 -1
  13. package/dist/focus-executor.js +8 -2
  14. package/dist/focus-executor.js.map +1 -1
  15. package/dist/focus-lifecycle.d.ts +3 -4
  16. package/dist/focus-lifecycle.d.ts.map +1 -1
  17. package/dist/focus-lifecycle.js +6 -79
  18. package/dist/focus-lifecycle.js.map +1 -1
  19. package/dist/focus-phase.d.ts +26 -0
  20. package/dist/focus-phase.d.ts.map +1 -1
  21. package/dist/focus-phase.js +43 -0
  22. package/dist/focus-phase.js.map +1 -1
  23. package/dist/focus-provisioning.d.ts.map +1 -1
  24. package/dist/focus-provisioning.js +1 -7
  25. package/dist/focus-provisioning.js.map +1 -1
  26. package/dist/focus-worktree-state.d.ts.map +1 -1
  27. package/dist/focus-worktree-state.js +0 -1
  28. package/dist/focus-worktree-state.js.map +1 -1
  29. package/dist/listener.d.ts.map +1 -1
  30. package/dist/listener.js +0 -6
  31. package/dist/listener.js.map +1 -1
  32. package/dist/queries/shared.d.ts.map +1 -1
  33. package/dist/queries/shared.js +0 -3
  34. package/dist/queries/shared.js.map +1 -1
  35. package/dist/supabase.d.ts +0 -4
  36. package/dist/supabase.d.ts.map +1 -1
  37. package/dist/supabase.js +0 -8
  38. package/dist/supabase.js.map +1 -1
  39. package/dist/team-spawner.d.ts.map +1 -1
  40. package/dist/team-spawner.js +8 -2
  41. package/dist/team-spawner.js.map +1 -1
  42. package/dist/types/config.d.ts +0 -10
  43. package/dist/types/config.d.ts.map +1 -1
  44. package/dist/types/focus.d.ts +11 -2
  45. package/dist/types/focus.d.ts.map +1 -1
  46. package/dist/unified-shell-config.d.ts.map +1 -1
  47. package/dist/unified-shell-config.js +0 -39
  48. package/dist/unified-shell-config.js.map +1 -1
  49. package/package.json +1 -1
  50. package/dist/qa-crash-recovery.d.ts +0 -77
  51. package/dist/qa-crash-recovery.d.ts.map +0 -1
  52. package/dist/qa-crash-recovery.js +0 -243
  53. package/dist/qa-crash-recovery.js.map +0 -1
  54. package/dist/qa-dev-server.d.ts +0 -73
  55. package/dist/qa-dev-server.d.ts.map +0 -1
  56. package/dist/qa-dev-server.js +0 -279
  57. package/dist/qa-dev-server.js.map +0 -1
  58. package/dist/qa-orchestrator.d.ts +0 -107
  59. package/dist/qa-orchestrator.d.ts.map +0 -1
  60. package/dist/qa-orchestrator.js +0 -518
  61. package/dist/qa-orchestrator.js.map +0 -1
  62. package/dist/qa-port-allocator.d.ts +0 -34
  63. package/dist/qa-port-allocator.d.ts.map +0 -1
  64. package/dist/qa-port-allocator.js +0 -75
  65. package/dist/qa-port-allocator.js.map +0 -1
  66. package/dist/qa-provisioner.d.ts +0 -33
  67. package/dist/qa-provisioner.d.ts.map +0 -1
  68. package/dist/qa-provisioner.js +0 -139
  69. package/dist/qa-provisioner.js.map +0 -1
  70. package/dist/qa-state.d.ts +0 -118
  71. package/dist/qa-state.d.ts.map +0 -1
  72. package/dist/qa-state.js +0 -88
  73. package/dist/qa-state.js.map +0 -1
  74. package/dist/queries/qa.d.ts +0 -120
  75. package/dist/queries/qa.d.ts.map +0 -1
  76. package/dist/queries/qa.js +0 -118
  77. package/dist/queries/qa.js.map +0 -1
  78. package/dist/save-point-restore.d.ts +0 -35
  79. package/dist/save-point-restore.d.ts.map +0 -1
  80. package/dist/save-point-restore.js +0 -146
  81. package/dist/save-point-restore.js.map +0 -1
@@ -1,35 +0,0 @@
1
- /**
2
- * Save point restore orchestration.
3
- *
4
- * Polls for save points with restore_status = 'requested', then executes
5
- * the destructive git operations: reset main, force push, sync integration.
6
- *
7
- * Optionally creates an auto-save of current HEAD before restoring.
8
- */
9
- import type { DaemonConfig } from './types.js';
10
- interface RestoreRequest {
11
- savePointId: string;
12
- name: string;
13
- commitSha: string;
14
- productId: string;
15
- autoSaveBeforeRestore: boolean;
16
- organizationId: string;
17
- }
18
- /** Injectable deps for testing. */
19
- export interface SavePointRestoreDeps {
20
- getSavePointRestoreRequests: (productId: string) => Promise<RestoreRequest[]>;
21
- updateSavePointRestoreStatus: (id: string, fields: Record<string, unknown>) => Promise<void>;
22
- runGit: (args: string[], cwd: string) => {
23
- success: boolean;
24
- output: string;
25
- error?: string;
26
- };
27
- createAutoSave: (productId: string, commitSha: string, savePointId: string) => Promise<void>;
28
- }
29
- /**
30
- * Check for and process pending save point restore requests.
31
- * Called each poll cycle from listener.ts.
32
- */
33
- export declare function checkSavePointRestoreRequests(config: DaemonConfig, deps?: SavePointRestoreDeps): Promise<void>;
34
- export {};
35
- //# sourceMappingURL=save-point-restore.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"save-point-restore.d.ts","sourceRoot":"","sources":["../src/save-point-restore.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAI/C,UAAU,cAAc;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,qBAAqB,EAAE,OAAO,CAAC;IAC/B,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,mCAAmC;AACnC,MAAM,WAAW,oBAAoB;IACnC,2BAA2B,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;IAC9E,4BAA4B,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7F,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,KAAK;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9F,cAAc,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9F;AAwCD;;;GAGG;AACH,wBAAsB,6BAA6B,CACjD,MAAM,EAAE,YAAY,EACpB,IAAI,GAAE,oBAAkC,GACvC,OAAO,CAAC,IAAI,CAAC,CA4Bf"}
@@ -1,146 +0,0 @@
1
- /**
2
- * Save point restore orchestration.
3
- *
4
- * Polls for save points with restore_status = 'requested', then executes
5
- * the destructive git operations: reset main, force push, sync integration.
6
- *
7
- * Optionally creates an auto-save of current HEAD before restoring.
8
- */
9
- import { execFileSync } from 'node:child_process';
10
- import { getSavePointRestoreRequests, updateSavePointRestoreStatus } from './supabase.js';
11
- import { callApi } from './queries/shared.js';
12
- function runGitSync(args, cwd) {
13
- try {
14
- const output = execFileSync('git', args, {
15
- cwd,
16
- encoding: 'utf-8',
17
- stdio: ['pipe', 'pipe', 'pipe'],
18
- timeout: 60_000,
19
- });
20
- return { success: true, output: output.trim() };
21
- }
22
- catch (err) {
23
- const e = err;
24
- return { success: false, output: '', error: e.stderr || e.message || String(err) };
25
- }
26
- }
27
- async function createAutoSaveImpl(productId, commitSha, savePointId) {
28
- try {
29
- await callApi('save_point_create', {
30
- productId,
31
- fields: {
32
- name: `Auto-save before restore to ${savePointId.slice(0, 8)}`,
33
- commitSha,
34
- description: `Automatic save of main HEAD before restoring to save point ${savePointId}`,
35
- },
36
- });
37
- }
38
- catch {
39
- // Non-fatal: auto-save may fail if this SHA already has a save point
40
- console.warn(`[save-point-restore] Auto-save failed (non-fatal), continuing with restore`);
41
- }
42
- }
43
- const defaultDeps = {
44
- getSavePointRestoreRequests,
45
- updateSavePointRestoreStatus,
46
- runGit: runGitSync,
47
- createAutoSave: createAutoSaveImpl,
48
- };
49
- /**
50
- * Check for and process pending save point restore requests.
51
- * Called each poll cycle from listener.ts.
52
- */
53
- export async function checkSavePointRestoreRequests(config, deps = defaultDeps) {
54
- let requests;
55
- try {
56
- requests = await deps.getSavePointRestoreRequests(config.productId);
57
- }
58
- catch (err) {
59
- console.warn(`[save-point-restore] Failed to fetch restore requests: ${err.message}`);
60
- return;
61
- }
62
- if (requests.length === 0)
63
- return;
64
- // Only process the first request (restore is destructive, one at a time)
65
- const req = requests[0];
66
- try {
67
- await handleRestore(config, req, deps);
68
- }
69
- catch (err) {
70
- console.error(`[save-point-restore] Error restoring "${req.name}": ${err.message}`);
71
- try {
72
- await deps.updateSavePointRestoreStatus(req.savePointId, {
73
- restoreStatus: 'failed',
74
- restoreError: err.message,
75
- });
76
- }
77
- catch (updateErr) {
78
- console.warn(`[save-point-restore] Failed to update error state: ${updateErr.message}`);
79
- }
80
- }
81
- }
82
- async function handleRestore(config, req, deps) {
83
- const { savePointId, name, commitSha, productId, autoSaveBeforeRestore } = req;
84
- const repoPath = config.repoPath;
85
- console.log(`[save-point-restore] Starting restore to "${name}" (${commitSha.slice(0, 7)})`);
86
- // Mark as in progress
87
- await deps.updateSavePointRestoreStatus(savePointId, { restoreStatus: 'in_progress' });
88
- // Auto-save current HEAD if requested
89
- if (autoSaveBeforeRestore) {
90
- const headResult = deps.runGit(['rev-parse', 'HEAD'], repoPath);
91
- if (headResult.success && headResult.output !== commitSha) {
92
- await deps.createAutoSave(productId, headResult.output, savePointId);
93
- }
94
- }
95
- // Fetch to ensure we have the target commit
96
- const fetchResult = deps.runGit(['fetch', 'origin'], repoPath);
97
- if (!fetchResult.success) {
98
- throw new Error(`Failed to fetch from origin: ${fetchResult.error}`);
99
- }
100
- // Checkout main
101
- const checkoutResult = deps.runGit(['checkout', 'main'], repoPath);
102
- if (!checkoutResult.success) {
103
- throw new Error(`Failed to checkout main: ${checkoutResult.error}`);
104
- }
105
- // Reset main to target SHA
106
- const resetResult = deps.runGit(['reset', '--hard', commitSha], repoPath);
107
- if (!resetResult.success) {
108
- throw new Error(`Failed to reset main to ${commitSha}: ${resetResult.error}`);
109
- }
110
- // Force push main
111
- const pushResult = deps.runGit(['push', '--force-with-lease', 'origin', 'main'], repoPath);
112
- if (!pushResult.success) {
113
- throw new Error(`Failed to push main: ${pushResult.error}`);
114
- }
115
- // Sync integration branch
116
- const integrationBranch = config.integrationBranch || 'integration';
117
- const branchResult = deps.runGit(['branch', '-f', integrationBranch, commitSha], repoPath);
118
- if (!branchResult.success) {
119
- const msg = `Main restored to ${commitSha.slice(0, 7)} but integration branch sync failed: ${branchResult.error}`;
120
- console.error(`[save-point-restore] ${msg}`);
121
- await deps.updateSavePointRestoreStatus(savePointId, {
122
- restoreStatus: 'done',
123
- restoreCompletedAt: new Date().toISOString(),
124
- restoreError: msg,
125
- });
126
- return;
127
- }
128
- const intPushResult = deps.runGit(['push', '--force-with-lease', 'origin', integrationBranch], repoPath);
129
- if (!intPushResult.success) {
130
- const msg = `Main restored to ${commitSha.slice(0, 7)} but integration branch push failed: ${intPushResult.error}`;
131
- console.error(`[save-point-restore] ${msg}`);
132
- await deps.updateSavePointRestoreStatus(savePointId, {
133
- restoreStatus: 'done',
134
- restoreCompletedAt: new Date().toISOString(),
135
- restoreError: msg,
136
- });
137
- return;
138
- }
139
- // Mark as done
140
- await deps.updateSavePointRestoreStatus(savePointId, {
141
- restoreStatus: 'done',
142
- restoreCompletedAt: new Date().toISOString(),
143
- });
144
- console.log(`[save-point-restore] Restore complete: main reset to ${commitSha.slice(0, 7)}`);
145
- }
146
- //# sourceMappingURL=save-point-restore.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"save-point-restore.js","sourceRoot":"","sources":["../src/save-point-restore.ts"],"names":[],"mappings":"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"}