n8nac 0.9.9-next.df19681 → 0.9.9-next.e754dc0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +12 -6
- package/dist/commands/list.d.ts.map +1 -1
- package/dist/commands/list.js +3 -9
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/sync.d.ts +1 -1
- package/dist/commands/sync.d.ts.map +1 -1
- package/dist/commands/sync.js +22 -11
- package/dist/commands/sync.js.map +1 -1
- package/dist/core/index.d.ts +1 -1
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +1 -1
- package/dist/core/index.js.map +1 -1
- package/dist/core/services/cli-api.d.ts +2 -1
- package/dist/core/services/cli-api.d.ts.map +1 -1
- package/dist/core/services/cli-api.js +2 -1
- package/dist/core/services/cli-api.js.map +1 -1
- package/dist/core/services/resolution-manager.d.ts +2 -2
- package/dist/core/services/resolution-manager.d.ts.map +1 -1
- package/dist/core/services/resolution-manager.js +16 -2
- package/dist/core/services/resolution-manager.js.map +1 -1
- package/dist/core/services/state-manager.d.ts +4 -3
- package/dist/core/services/state-manager.d.ts.map +1 -1
- package/dist/core/services/state-manager.js +2 -2
- package/dist/core/services/state-manager.js.map +1 -1
- package/dist/core/services/sync-engine.d.ts +2 -2
- package/dist/core/services/sync-engine.d.ts.map +1 -1
- package/dist/core/services/sync-engine.js +60 -116
- package/dist/core/services/sync-engine.js.map +1 -1
- package/dist/core/services/sync-manager.d.ts +0 -3
- package/dist/core/services/sync-manager.d.ts.map +1 -1
- package/dist/core/services/sync-manager.js +7 -19
- package/dist/core/services/sync-manager.js.map +1 -1
- package/dist/core/services/{watcher.d.ts → workflow-state-tracker.d.ts} +6 -47
- package/dist/core/services/workflow-state-tracker.d.ts.map +1 -0
- package/dist/core/services/{watcher.js → workflow-state-tracker.js} +90 -468
- package/dist/core/services/workflow-state-tracker.js.map +1 -0
- package/dist/core/types.d.ts +0 -1
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js +0 -1
- package/dist/core/types.js.map +1 -1
- package/dist/index.js +9 -4
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
- package/dist/core/services/watcher.d.ts.map +0 -1
- package/dist/core/services/watcher.js.map +0 -1
|
@@ -26,33 +26,23 @@ export class SyncEngine {
|
|
|
26
26
|
* Based on spec 5.2 PULL Strategy table
|
|
27
27
|
*/
|
|
28
28
|
async pull(workflowId, filename, status) {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
// No action per spec
|
|
47
|
-
break;
|
|
48
|
-
default:
|
|
49
|
-
console.warn(`[SyncEngine] Unhandled status ${status} for PULL operation`);
|
|
50
|
-
break;
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
finally {
|
|
54
|
-
this.watcher.markSyncComplete(workflowId);
|
|
55
|
-
this.watcher.resumeObservation(workflowId);
|
|
29
|
+
switch (status) {
|
|
30
|
+
case WorkflowSyncStatus.EXIST_ONLY_REMOTELY:
|
|
31
|
+
// Download Remote JSON -> Write to disk
|
|
32
|
+
const pullUpdatedAt1 = await this.executePull(workflowId, filename);
|
|
33
|
+
// Initialize lastSyncedHash via finalizeSync
|
|
34
|
+
await this.watcher.finalizeSync(workflowId, pullUpdatedAt1);
|
|
35
|
+
break;
|
|
36
|
+
case WorkflowSyncStatus.CONFLICT:
|
|
37
|
+
// Halt - trigger conflict resolution
|
|
38
|
+
throw new Error(`Conflict detected for workflow ${workflowId}. Use resolveConflict instead.`);
|
|
39
|
+
case WorkflowSyncStatus.EXIST_ONLY_LOCALLY:
|
|
40
|
+
case WorkflowSyncStatus.TRACKED:
|
|
41
|
+
// No action per spec
|
|
42
|
+
break;
|
|
43
|
+
default:
|
|
44
|
+
console.warn(`[SyncEngine] Unhandled status ${status} for PULL operation`);
|
|
45
|
+
break;
|
|
56
46
|
}
|
|
57
47
|
}
|
|
58
48
|
/**
|
|
@@ -60,122 +50,76 @@ export class SyncEngine {
|
|
|
60
50
|
* Based on spec 5.3 PUSH Strategy table
|
|
61
51
|
*/
|
|
62
52
|
async push(filename, workflowId, status) {
|
|
63
|
-
// If
|
|
53
|
+
// If we have an ID, we ALWAYS try to update first (robustness for git-like sync)
|
|
64
54
|
if (workflowId) {
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
// If we have an ID, we ALWAYS try to update first (robustness for git-like sync)
|
|
74
|
-
if (workflowId) {
|
|
75
|
-
try {
|
|
76
|
-
// PUT to API (Update)
|
|
77
|
-
// We bypass OCC check if the status is EXIST_ONLY_LOCALLY (meaning we think it's new but it might not be)
|
|
78
|
-
const skipOcc = status === WorkflowSyncStatus.EXIST_ONLY_LOCALLY;
|
|
79
|
-
const updateUpdatedAt = await this.executeUpdate(workflowId, filename, skipOcc);
|
|
80
|
-
// Update lastSyncedHash via finalizeSync
|
|
81
|
-
await this.watcher.finalizeSync(workflowId, updateUpdatedAt);
|
|
82
|
-
return workflowId;
|
|
83
|
-
}
|
|
84
|
-
catch (error) {
|
|
85
|
-
// If it's a 404 or we truly think it's local-only, fall through to create
|
|
86
|
-
const isNotFound = error.response?.status === 404 || error.message?.includes('404') || error.message?.includes('Not Found');
|
|
87
|
-
if (!isNotFound && status !== WorkflowSyncStatus.EXIST_ONLY_LOCALLY) {
|
|
88
|
-
throw error;
|
|
89
|
-
}
|
|
90
|
-
console.log(`[SyncEngine] Workflow ${workflowId} not found or treating as new, falling back to Create`);
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
// No ID or Update failed with 404 -> POST to API (Create)
|
|
94
|
-
const { id: newWorkflowId, updatedAt } = await this.executeCreate(filename);
|
|
95
|
-
// Initialize lastSyncedHash via finalizeSync
|
|
96
|
-
await this.watcher.finalizeSync(newWorkflowId, updatedAt);
|
|
97
|
-
return newWorkflowId;
|
|
98
|
-
}
|
|
99
|
-
finally {
|
|
100
|
-
if (workflowId) {
|
|
101
|
-
this.watcher.markSyncComplete(workflowId);
|
|
102
|
-
this.watcher.resumeObservation(workflowId);
|
|
55
|
+
try {
|
|
56
|
+
// PUT to API (Update)
|
|
57
|
+
// We bypass OCC check if the status is EXIST_ONLY_LOCALLY (meaning we think it's new but it might not be)
|
|
58
|
+
const skipOcc = status === WorkflowSyncStatus.EXIST_ONLY_LOCALLY;
|
|
59
|
+
const updateUpdatedAt = await this.executeUpdate(workflowId, filename, skipOcc);
|
|
60
|
+
// Update lastSyncedHash via finalizeSync
|
|
61
|
+
await this.watcher.finalizeSync(workflowId, updateUpdatedAt);
|
|
62
|
+
return workflowId;
|
|
103
63
|
}
|
|
104
|
-
|
|
105
|
-
//
|
|
106
|
-
|
|
64
|
+
catch (error) {
|
|
65
|
+
// If it's a 404 or we truly think it's local-only, fall through to create
|
|
66
|
+
const isNotFound = error.response?.status === 404 || error.message?.includes('404') || error.message?.includes('Not Found');
|
|
67
|
+
if (!isNotFound && status !== WorkflowSyncStatus.EXIST_ONLY_LOCALLY) {
|
|
68
|
+
throw error;
|
|
69
|
+
}
|
|
70
|
+
console.log(`[SyncEngine] Workflow ${workflowId} not found or treating as new, falling back to Create`);
|
|
107
71
|
}
|
|
108
72
|
}
|
|
73
|
+
// No ID or Update failed with 404 -> POST to API (Create)
|
|
74
|
+
const { id: newWorkflowId, updatedAt } = await this.executeCreate(filename);
|
|
75
|
+
// Initialize lastSyncedHash via finalizeSync
|
|
76
|
+
await this.watcher.finalizeSync(newWorkflowId, updatedAt);
|
|
77
|
+
return newWorkflowId;
|
|
109
78
|
}
|
|
110
79
|
/**
|
|
111
80
|
* Force PULL - overwrite local with remote (for conflict resolution)
|
|
112
81
|
*/
|
|
113
82
|
async forcePull(workflowId, filename) {
|
|
114
|
-
this.
|
|
115
|
-
this.watcher.
|
|
116
|
-
try {
|
|
117
|
-
const updatedAt = await this.executePull(workflowId, filename);
|
|
118
|
-
await this.watcher.finalizeSync(workflowId, updatedAt);
|
|
119
|
-
}
|
|
120
|
-
finally {
|
|
121
|
-
this.watcher.markSyncComplete(workflowId);
|
|
122
|
-
this.watcher.resumeObservation(workflowId);
|
|
123
|
-
}
|
|
83
|
+
const updatedAt = await this.executePull(workflowId, filename);
|
|
84
|
+
await this.watcher.finalizeSync(workflowId, updatedAt);
|
|
124
85
|
}
|
|
125
86
|
/**
|
|
126
87
|
* Force PUSH - overwrite remote with local (for conflict resolution and restoration)
|
|
127
88
|
* If workflow doesn't exist on remote, creates it
|
|
128
89
|
*/
|
|
129
90
|
async forcePush(workflowId, filename) {
|
|
130
|
-
this.watcher.markSyncInProgress(workflowId);
|
|
131
|
-
this.watcher.pauseObservation(workflowId);
|
|
132
91
|
let finalWorkflowId = workflowId;
|
|
133
92
|
let finalUpdatedAt;
|
|
93
|
+
// Try to update first, bypassing OCC (this is an explicit force operation)
|
|
134
94
|
try {
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
await this.watcher.updateWorkflowId(workflowId, newWorkflowId);
|
|
148
|
-
finalWorkflowId = newWorkflowId;
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
else {
|
|
152
|
-
throw error;
|
|
95
|
+
finalUpdatedAt = await this.executeUpdate(workflowId, filename, true);
|
|
96
|
+
}
|
|
97
|
+
catch (error) {
|
|
98
|
+
// If update fails with 404, create the workflow instead
|
|
99
|
+
if (error.response?.status === 404 || error.message?.includes('404') || error.message?.includes('Not Found')) {
|
|
100
|
+
console.log(`[SyncEngine] Workflow ${workflowId} not found, creating new workflow`);
|
|
101
|
+
const { id: newWorkflowId, updatedAt } = await this.executeCreate(filename);
|
|
102
|
+
finalUpdatedAt = updatedAt;
|
|
103
|
+
// Migrate state from old ID to new ID
|
|
104
|
+
if (newWorkflowId !== workflowId) {
|
|
105
|
+
await this.watcher.updateWorkflowId(workflowId, newWorkflowId);
|
|
106
|
+
finalWorkflowId = newWorkflowId;
|
|
153
107
|
}
|
|
154
108
|
}
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
finally {
|
|
159
|
-
this.watcher.markSyncComplete(finalWorkflowId);
|
|
160
|
-
this.watcher.resumeObservation(finalWorkflowId);
|
|
109
|
+
else {
|
|
110
|
+
throw error;
|
|
111
|
+
}
|
|
161
112
|
}
|
|
113
|
+
await this.watcher.finalizeSync(finalWorkflowId, finalUpdatedAt);
|
|
114
|
+
return finalWorkflowId;
|
|
162
115
|
}
|
|
163
116
|
/**
|
|
164
117
|
* Delete remote workflow (for deletion validation)
|
|
165
118
|
* Note: The Watcher already archived the remote content when it detected the local deletion
|
|
166
119
|
*/
|
|
167
120
|
async deleteRemote(workflowId, filename) {
|
|
168
|
-
|
|
169
|
-
this.
|
|
170
|
-
try {
|
|
171
|
-
// Delete from API
|
|
172
|
-
await this.client.deleteWorkflow(workflowId);
|
|
173
|
-
// Note: State removal will be handled by caller (ResolutionManager)
|
|
174
|
-
}
|
|
175
|
-
finally {
|
|
176
|
-
this.watcher.markSyncComplete(workflowId);
|
|
177
|
-
this.watcher.resumeObservation(workflowId);
|
|
178
|
-
}
|
|
121
|
+
// Delete from API — State removal is handled by caller (ResolutionManager)
|
|
122
|
+
await this.client.deleteWorkflow(workflowId);
|
|
179
123
|
}
|
|
180
124
|
async executePull(workflowId, filename) {
|
|
181
125
|
const fullWf = await this.client.getWorkflow(workflowId);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync-engine.js","sourceRoot":"","sources":["../../../src/core/services/sync-engine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,EAAE,0BAA0B,EAAE,MAAM,mCAAmC,CAAC;AAG/E,OAAO,EAAE,kBAAkB,EAAa,MAAM,aAAa,CAAC;AAE5D;;;;;;;;;GASG;AACH,MAAM,OAAO,UAAU;IACX,MAAM,CAAe;IACrB,OAAO,
|
|
1
|
+
{"version":3,"file":"sync-engine.js","sourceRoot":"","sources":["../../../src/core/services/sync-engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -33,7 +33,6 @@ export declare class SyncManager extends EventEmitter {
|
|
|
33
33
|
localHash?: string;
|
|
34
34
|
remoteHash?: string;
|
|
35
35
|
}>;
|
|
36
|
-
startWatch(): Promise<void>;
|
|
37
36
|
/**
|
|
38
37
|
* Refresh the remote state for all workflows from the API.
|
|
39
38
|
* This populates the internal cache so that `listWorkflows()` can return up-to-date status.
|
|
@@ -45,7 +44,6 @@ export declare class SyncManager extends EventEmitter {
|
|
|
45
44
|
* This stores the instance identifier for the workspace.
|
|
46
45
|
*/
|
|
47
46
|
private ensureInstanceConfigFile;
|
|
48
|
-
stop(): Promise<void>;
|
|
49
47
|
getInstanceDirectory(): string;
|
|
50
48
|
getFilenameForId(id: string): string | undefined;
|
|
51
49
|
/**
|
|
@@ -79,6 +77,5 @@ export declare class SyncManager extends EventEmitter {
|
|
|
79
77
|
push(workflowId?: string, filename?: string): Promise<void>;
|
|
80
78
|
resolveConflict(workflowId: string, filename: string, resolution: 'local' | 'remote'): Promise<void>;
|
|
81
79
|
deleteRemoteWorkflow(workflowId: string, filename: string): Promise<boolean>;
|
|
82
|
-
stopWatch(): void;
|
|
83
80
|
}
|
|
84
81
|
//# sourceMappingURL=sync-manager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync-manager.d.ts","sourceRoot":"","sources":["../../../src/core/services/sync-manager.ts"],"names":[],"mappings":"AAEA,OAAO,YAAY,MAAM,QAAQ,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAKnD,OAAO,EAAE,WAAW,EAAa,kBAAkB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAI1F,qBAAa,WAAY,SAAQ,YAAY;IACzC,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,YAAY,CAA6B;IACjD,OAAO,CAAC,OAAO,
|
|
1
|
+
{"version":3,"file":"sync-manager.d.ts","sourceRoot":"","sources":["../../../src/core/services/sync-manager.ts"],"names":[],"mappings":"AAEA,OAAO,YAAY,MAAM,QAAQ,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAKnD,OAAO,EAAE,WAAW,EAAa,kBAAkB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAI1F,qBAAa,WAAY,SAAQ,YAAY;IACzC,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,YAAY,CAA6B;IACjD,OAAO,CAAC,OAAO,CAAqC;IACpD,OAAO,CAAC,UAAU,CAA2B;IAC7C,OAAO,CAAC,iBAAiB,CAAkC;gBAE/C,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,WAAW;YAUvC,iBAAiB;IAgE/B;;;;;;;OAOG;IACG,aAAa,CAAC,OAAO,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAYpF;;;OAGG;IACG,+BAA+B,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;QACjF,MAAM,EAAE,kBAAkB,CAAC;QAC3B,WAAW,EAAE,OAAO,CAAC;QACrB,YAAY,EAAE,OAAO,CAAC;QACtB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,UAAU,CAAC,EAAE,MAAM,CAAC;KACvB,CAAC;IAQF;;;;OAIG;IACG,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC;IAKzC;;;OAGG;IACH,OAAO,CAAC,wBAAwB;IAmCzB,oBAAoB,IAAI,MAAM;IAO9B,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAKvD;;;;OAIG;IACU,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IAK/C;;;;OAIG;IACU,KAAK,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAqBxD;;;OAGG;IACU,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUpD;;;;;;;;;;OAUG;IACU,IAAI,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAoC3D,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IASpG,oBAAoB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAW5F"}
|
|
@@ -2,7 +2,7 @@ import fs from 'fs';
|
|
|
2
2
|
import path from 'path';
|
|
3
3
|
import EventEmitter from 'events';
|
|
4
4
|
import { StateManager } from './state-manager.js';
|
|
5
|
-
import {
|
|
5
|
+
import { WorkflowStateTracker } from './workflow-state-tracker.js';
|
|
6
6
|
import { SyncEngine } from './sync-engine.js';
|
|
7
7
|
import { ResolutionManager } from './resolution-manager.js';
|
|
8
8
|
import { WorkflowSyncStatus } from '../types.js';
|
|
@@ -41,7 +41,7 @@ export class SyncManager extends EventEmitter {
|
|
|
41
41
|
console.warn('[SyncManager] Could not write workspace TypeScript stubs:', err.message);
|
|
42
42
|
}
|
|
43
43
|
this.stateManager = new StateManager(instanceDir);
|
|
44
|
-
this.watcher = new
|
|
44
|
+
this.watcher = new WorkflowStateTracker(this.client, {
|
|
45
45
|
directory: instanceDir,
|
|
46
46
|
syncInactive: true,
|
|
47
47
|
ignoredTags: [],
|
|
@@ -84,6 +84,10 @@ export class SyncManager extends EventEmitter {
|
|
|
84
84
|
*/
|
|
85
85
|
async listWorkflows(options) {
|
|
86
86
|
await this.ensureInitialized();
|
|
87
|
+
// Always scan local files so that idToFileMap is rebuilt from the @workflow({ id })
|
|
88
|
+
// decorator in each file. This correctly handles renames (the new filename is found
|
|
89
|
+
// via its ID) without relying on a persisted filename in .n8n-state.json.
|
|
90
|
+
await this.watcher.refreshLocalState();
|
|
87
91
|
if (options?.fetchRemote) {
|
|
88
92
|
await this.watcher.refreshRemoteState();
|
|
89
93
|
}
|
|
@@ -100,13 +104,6 @@ export class SyncManager extends EventEmitter {
|
|
|
100
104
|
}
|
|
101
105
|
return await this.resolutionManager.getSingleWorkflowDetailedStatus(workflowId, filename);
|
|
102
106
|
}
|
|
103
|
-
async startWatch() {
|
|
104
|
-
await this.ensureInitialized();
|
|
105
|
-
await this.watcher.start();
|
|
106
|
-
// Create instance config file to mark workspace as initialized
|
|
107
|
-
this.ensureInstanceConfigFile();
|
|
108
|
-
this.emit('log', 'Watcher started.');
|
|
109
|
-
}
|
|
110
107
|
/**
|
|
111
108
|
* Refresh the remote state for all workflows from the API.
|
|
112
109
|
* This populates the internal cache so that `listWorkflows()` can return up-to-date status.
|
|
@@ -149,10 +146,6 @@ export class SyncManager extends EventEmitter {
|
|
|
149
146
|
console.warn(`[SyncManager] Failed to write instance config file: ${error}`);
|
|
150
147
|
}
|
|
151
148
|
}
|
|
152
|
-
async stop() {
|
|
153
|
-
await this.watcher?.stop();
|
|
154
|
-
this.emit('log', 'Watcher stopped.');
|
|
155
|
-
}
|
|
156
149
|
getInstanceDirectory() {
|
|
157
150
|
if (!this.watcher) {
|
|
158
151
|
throw new Error('SyncManager not initialized');
|
|
@@ -246,7 +239,7 @@ export class SyncManager extends EventEmitter {
|
|
|
246
239
|
}
|
|
247
240
|
else {
|
|
248
241
|
// Known on both sides → update (with OCC check)
|
|
249
|
-
await this.syncEngine.push(targetFilename, effectiveId, WorkflowSyncStatus.
|
|
242
|
+
await this.syncEngine.push(targetFilename, effectiveId, WorkflowSyncStatus.TRACKED);
|
|
250
243
|
}
|
|
251
244
|
}
|
|
252
245
|
}
|
|
@@ -271,10 +264,5 @@ export class SyncManager extends EventEmitter {
|
|
|
271
264
|
return false;
|
|
272
265
|
}
|
|
273
266
|
}
|
|
274
|
-
stopWatch() {
|
|
275
|
-
if (this.watcher) {
|
|
276
|
-
this.watcher.stop();
|
|
277
|
-
}
|
|
278
|
-
}
|
|
279
267
|
}
|
|
280
268
|
//# sourceMappingURL=sync-manager.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync-manager.js","sourceRoot":"","sources":["../../../src/core/services/sync-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,YAAY,MAAM,QAAQ,CAAC;AAElC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"sync-manager.js","sourceRoot":"","sources":["../../../src/core/services/sync-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,8 +13,7 @@ import { WorkflowSyncStatus, IWorkflowStatus, IWorkflow } from '../types.js';
|
|
|
13
13
|
*
|
|
14
14
|
* Never performs synchronization actions - only observes reality.
|
|
15
15
|
*/
|
|
16
|
-
export declare class
|
|
17
|
-
private watcherSubscription;
|
|
16
|
+
export declare class WorkflowStateTracker extends EventEmitter {
|
|
18
17
|
private client;
|
|
19
18
|
private directory;
|
|
20
19
|
private syncInactive;
|
|
@@ -22,7 +21,6 @@ export declare class Watcher extends EventEmitter {
|
|
|
22
21
|
private projectId;
|
|
23
22
|
private stateFilePath;
|
|
24
23
|
private isConnected;
|
|
25
|
-
private isInitializing;
|
|
26
24
|
/** True during the first refreshRemoteState() call — suppresses status broadcasts */
|
|
27
25
|
private isInitialRemoteLoad;
|
|
28
26
|
private localHashes;
|
|
@@ -31,10 +29,6 @@ export declare class Watcher extends EventEmitter {
|
|
|
31
29
|
private idToFileMap;
|
|
32
30
|
private lastKnownStatuses;
|
|
33
31
|
private remoteIds;
|
|
34
|
-
private isPaused;
|
|
35
|
-
private syncInProgress;
|
|
36
|
-
private pausedFilenames;
|
|
37
|
-
private potentialRenames;
|
|
38
32
|
private remoteTimestamps;
|
|
39
33
|
/** Canonical display name for each remote workflow (id is the unique key, NOT the name). */
|
|
40
34
|
private remoteNames;
|
|
@@ -44,44 +38,9 @@ export declare class Watcher extends EventEmitter {
|
|
|
44
38
|
ignoredTags: string[];
|
|
45
39
|
projectId: string;
|
|
46
40
|
});
|
|
47
|
-
start(): Promise<void>;
|
|
48
|
-
stop(): Promise<void>;
|
|
49
41
|
getDirectory(): string;
|
|
50
42
|
getFilenameForId(id: string): string | undefined;
|
|
51
|
-
/**
|
|
52
|
-
* Pause observation for a workflow during sync operations
|
|
53
|
-
*/
|
|
54
|
-
pauseObservation(workflowId: string): void;
|
|
55
|
-
/**
|
|
56
|
-
* Resume observation after sync operations
|
|
57
|
-
*/
|
|
58
|
-
resumeObservation(workflowId: string): void;
|
|
59
|
-
/**
|
|
60
|
-
* Pause observation for a filename (for workflows without ID yet)
|
|
61
|
-
*/
|
|
62
|
-
pauseObservationByFilename(filename: string): void;
|
|
63
|
-
/**
|
|
64
|
-
* Resume observation for a filename
|
|
65
|
-
*/
|
|
66
|
-
resumeObservationByFilename(filename: string): void;
|
|
67
|
-
/**
|
|
68
|
-
* Mark a workflow as being synced (prevents race conditions)
|
|
69
|
-
*/
|
|
70
|
-
markSyncInProgress(workflowId: string): void;
|
|
71
|
-
/**
|
|
72
|
-
* Mark a workflow as no longer being synced
|
|
73
|
-
*/
|
|
74
|
-
markSyncComplete(workflowId: string): void;
|
|
75
|
-
private onLocalChange;
|
|
76
|
-
private onLocalDelete;
|
|
77
|
-
private handleLocalDelete;
|
|
78
|
-
private handleRename;
|
|
79
43
|
refreshLocalState(): Promise<void>;
|
|
80
|
-
/**
|
|
81
|
-
* Resolve duplicate IDs in local files (following architectural plan)
|
|
82
|
-
* Principle: Keep ID only in the oldest file, remove from others
|
|
83
|
-
*/
|
|
84
|
-
private resolveDuplicateIds;
|
|
85
44
|
/**
|
|
86
45
|
* Lightweight fetch strategy:
|
|
87
46
|
* 1. Fetch only IDs and updatedAt timestamps
|
|
@@ -113,8 +72,9 @@ export declare class Watcher extends EventEmitter {
|
|
|
113
72
|
*/
|
|
114
73
|
private loadState;
|
|
115
74
|
/**
|
|
116
|
-
*
|
|
117
|
-
*
|
|
75
|
+
* No-op: file→ID mappings are now built exclusively by refreshLocalState()
|
|
76
|
+
* which scans the @workflow({ id: "..." }) decorator in each *.workflow.ts.
|
|
77
|
+
* This guarantees correct reconciliation after a local rename.
|
|
118
78
|
*/
|
|
119
79
|
private restoreMappingsFromState;
|
|
120
80
|
/**
|
|
@@ -136,7 +96,6 @@ export declare class Watcher extends EventEmitter {
|
|
|
136
96
|
private findFilenameByWorkflowId;
|
|
137
97
|
private readJsonFile;
|
|
138
98
|
private readWorkflowFile;
|
|
139
|
-
private writeWorkflowFile;
|
|
140
99
|
getFileToIdMap(): Map<string, string>;
|
|
141
100
|
/**
|
|
142
101
|
* Returns true if this workflow ID is known to exist on the remote instance
|
|
@@ -145,7 +104,7 @@ export declare class Watcher extends EventEmitter {
|
|
|
145
104
|
isRemoteKnown(workflowId: string): boolean;
|
|
146
105
|
/**
|
|
147
106
|
* Lightweight list of workflows with basic status (local only, remote only, both)
|
|
148
|
-
* Does NOT compute hashes, compile TypeScript, or determine detailed status (
|
|
107
|
+
* Does NOT compute hashes, compile TypeScript, or determine detailed status (CONFLICT)
|
|
149
108
|
*/
|
|
150
109
|
getLightweightList(): Promise<IWorkflowStatus[]>;
|
|
151
110
|
/**
|
|
@@ -186,4 +145,4 @@ export declare class Watcher extends EventEmitter {
|
|
|
186
145
|
*/
|
|
187
146
|
updateSingleRemoteState(remoteWf: IWorkflow): Promise<void>;
|
|
188
147
|
}
|
|
189
|
-
//# sourceMappingURL=
|
|
148
|
+
//# sourceMappingURL=workflow-state-tracker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-state-tracker.d.ts","sourceRoot":"","sources":["../../../src/core/services/workflow-state-tracker.ts"],"names":[],"mappings":"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"}
|