agentic-qe 3.6.16 → 3.6.17

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 (68) hide show
  1. package/.claude/agents/v3/qe-queen-coordinator.md +9 -3
  2. package/.claude/skills/skills-manifest.json +1 -1
  3. package/package.json +1 -1
  4. package/v3/CHANGELOG.md +22 -0
  5. package/v3/assets/agents/v3/qe-queen-coordinator.md +9 -3
  6. package/v3/dist/cli/bundle.js +1584 -659
  7. package/v3/dist/cli/commands/sync.d.ts.map +1 -1
  8. package/v3/dist/cli/commands/sync.js +83 -1
  9. package/v3/dist/cli/commands/sync.js.map +1 -1
  10. package/v3/dist/mcp/bundle.js +307 -21
  11. package/v3/dist/mcp/handlers/agent-handlers.d.ts +3 -0
  12. package/v3/dist/mcp/handlers/agent-handlers.d.ts.map +1 -1
  13. package/v3/dist/mcp/handlers/agent-handlers.js +16 -9
  14. package/v3/dist/mcp/handlers/agent-handlers.js.map +1 -1
  15. package/v3/dist/mcp/handlers/core-handlers.d.ts +32 -0
  16. package/v3/dist/mcp/handlers/core-handlers.d.ts.map +1 -1
  17. package/v3/dist/mcp/handlers/core-handlers.js +45 -1
  18. package/v3/dist/mcp/handlers/core-handlers.js.map +1 -1
  19. package/v3/dist/mcp/handlers/handler-factory.d.ts +9 -1
  20. package/v3/dist/mcp/handlers/handler-factory.d.ts.map +1 -1
  21. package/v3/dist/mcp/handlers/handler-factory.js +94 -2
  22. package/v3/dist/mcp/handlers/handler-factory.js.map +1 -1
  23. package/v3/dist/mcp/handlers/memory-handlers.d.ts +2 -0
  24. package/v3/dist/mcp/handlers/memory-handlers.d.ts.map +1 -1
  25. package/v3/dist/mcp/handlers/memory-handlers.js +90 -1
  26. package/v3/dist/mcp/handlers/memory-handlers.js.map +1 -1
  27. package/v3/dist/mcp/protocol-server.d.ts +7 -0
  28. package/v3/dist/mcp/protocol-server.d.ts.map +1 -1
  29. package/v3/dist/mcp/protocol-server.js +56 -2
  30. package/v3/dist/mcp/protocol-server.js.map +1 -1
  31. package/v3/dist/mcp/transport/stdio.d.ts +18 -0
  32. package/v3/dist/mcp/transport/stdio.d.ts.map +1 -1
  33. package/v3/dist/mcp/transport/stdio.js +72 -5
  34. package/v3/dist/mcp/transport/stdio.js.map +1 -1
  35. package/v3/dist/mcp/types.d.ts +2 -0
  36. package/v3/dist/mcp/types.d.ts.map +1 -1
  37. package/v3/dist/sync/cloud/index.d.ts +1 -0
  38. package/v3/dist/sync/cloud/index.d.ts.map +1 -1
  39. package/v3/dist/sync/cloud/index.js +1 -0
  40. package/v3/dist/sync/cloud/index.js.map +1 -1
  41. package/v3/dist/sync/cloud/postgres-reader.d.ts +63 -0
  42. package/v3/dist/sync/cloud/postgres-reader.d.ts.map +1 -0
  43. package/v3/dist/sync/cloud/postgres-reader.js +225 -0
  44. package/v3/dist/sync/cloud/postgres-reader.js.map +1 -0
  45. package/v3/dist/sync/index.d.ts +5 -2
  46. package/v3/dist/sync/index.d.ts.map +1 -1
  47. package/v3/dist/sync/index.js +7 -2
  48. package/v3/dist/sync/index.js.map +1 -1
  49. package/v3/dist/sync/interfaces.d.ts +49 -0
  50. package/v3/dist/sync/interfaces.d.ts.map +1 -1
  51. package/v3/dist/sync/interfaces.js +160 -0
  52. package/v3/dist/sync/interfaces.js.map +1 -1
  53. package/v3/dist/sync/pull-agent.d.ts +102 -0
  54. package/v3/dist/sync/pull-agent.d.ts.map +1 -0
  55. package/v3/dist/sync/pull-agent.js +354 -0
  56. package/v3/dist/sync/pull-agent.js.map +1 -0
  57. package/v3/dist/sync/sync-agent.d.ts.map +1 -1
  58. package/v3/dist/sync/sync-agent.js +9 -0
  59. package/v3/dist/sync/sync-agent.js.map +1 -1
  60. package/v3/dist/sync/writers/index.d.ts +7 -0
  61. package/v3/dist/sync/writers/index.d.ts.map +1 -0
  62. package/v3/dist/sync/writers/index.js +7 -0
  63. package/v3/dist/sync/writers/index.js.map +1 -0
  64. package/v3/dist/sync/writers/sqlite-writer.d.ts +69 -0
  65. package/v3/dist/sync/writers/sqlite-writer.d.ts.map +1 -0
  66. package/v3/dist/sync/writers/sqlite-writer.js +249 -0
  67. package/v3/dist/sync/writers/sqlite-writer.js.map +1 -0
  68. package/v3/package.json +1 -1
@@ -4,6 +4,166 @@
4
4
  * Defines the contracts for syncing local AQE learning data to cloud PostgreSQL.
5
5
  * Consolidates data from 6+ local sources into unified cloud storage.
6
6
  */
7
+ /**
8
+ * Default pull configuration
9
+ *
10
+ * Maps cloud PostgreSQL tables back to local SQLite tables.
11
+ * Reverses the push column mappings from DEFAULT_SYNC_CONFIG.
12
+ */
13
+ export const DEFAULT_PULL_CONFIG = {
14
+ cloud: {
15
+ project: process.env.GCP_PROJECT || '',
16
+ zone: process.env.GCP_ZONE || '',
17
+ instance: process.env.GCP_INSTANCE || '',
18
+ database: process.env.GCP_DATABASE || '',
19
+ user: process.env.GCP_USER || '',
20
+ tunnelPort: parseInt(process.env.GCP_TUNNEL_PORT || '15432', 10),
21
+ },
22
+ environment: process.env.AQE_ENV || 'all',
23
+ batchSize: 1000,
24
+ sources: [
25
+ // QE Patterns (cloud 0 records, but may grow)
26
+ {
27
+ name: 'qe-patterns',
28
+ cloudTable: 'aqe.qe_patterns',
29
+ localTable: 'qe_patterns',
30
+ enabled: true,
31
+ priority: 'high',
32
+ mode: 'incremental',
33
+ dropColumns: ['source_env', 'embedding', 'sync_version'],
34
+ transforms: { reusable: 'boolean-to-int' },
35
+ },
36
+ // SONA patterns (873 records)
37
+ {
38
+ name: 'sona-patterns',
39
+ cloudTable: 'aqe.sona_patterns',
40
+ localTable: 'sona_patterns',
41
+ enabled: true,
42
+ priority: 'high',
43
+ mode: 'incremental',
44
+ dropColumns: ['source_env', 'sync_version'],
45
+ transforms: {
46
+ is_active: 'boolean-to-int',
47
+ requires_fine_tuning: 'boolean-to-int',
48
+ },
49
+ },
50
+ // GOAP actions (2,335 records)
51
+ {
52
+ name: 'goap-actions',
53
+ cloudTable: 'aqe.goap_actions',
54
+ localTable: 'goap_actions',
55
+ enabled: true,
56
+ priority: 'high',
57
+ mode: 'incremental',
58
+ dropColumns: ['source_env', 'sync_version'],
59
+ columnMap: { duration_estimate: 'estimated_duration_ms' },
60
+ },
61
+ // GOAP plans (91 records)
62
+ {
63
+ name: 'goap-plans',
64
+ cloudTable: 'aqe.goap_plans',
65
+ localTable: 'goap_plans',
66
+ enabled: true,
67
+ priority: 'medium',
68
+ mode: 'incremental',
69
+ dropColumns: ['source_env', 'sync_version'],
70
+ columnMap: { estimated_duration: 'estimated_duration_ms' },
71
+ },
72
+ // Memory entries → kv_store (0 records in cloud currently)
73
+ {
74
+ name: 'memory-entries',
75
+ cloudTable: 'aqe.memory_entries',
76
+ localTable: 'kv_store',
77
+ enabled: true,
78
+ priority: 'high',
79
+ mode: 'incremental',
80
+ dropColumns: ['source_env', 'sync_version'],
81
+ columnMap: { partition: 'namespace' },
82
+ },
83
+ // Learning experiences → captured_experiences (7,702 records)
84
+ // Drop 'id' because cloud uses SERIAL auto-increment, local uses UUID
85
+ // Map 'created_at' → 'started_at' since push mapped started_at → created_at
86
+ {
87
+ name: 'learning-experiences',
88
+ cloudTable: 'aqe.learning_experiences',
89
+ localTable: 'captured_experiences',
90
+ enabled: true,
91
+ priority: 'high',
92
+ mode: 'append',
93
+ dropColumns: ['id', 'source_env', 'sync_version'],
94
+ columnMap: {
95
+ agent_id: 'agent',
96
+ task_id: 'task',
97
+ task_type: 'domain',
98
+ state: 'result_json',
99
+ action: 'steps_json',
100
+ reward: 'quality',
101
+ next_state: 'routing_json',
102
+ episode_id: 'tags',
103
+ created_at: 'started_at',
104
+ },
105
+ },
106
+ // Q-learning patterns → rl_q_values (3 records)
107
+ {
108
+ name: 'qlearning-patterns',
109
+ cloudTable: 'aqe.qlearning_patterns',
110
+ localTable: 'rl_q_values',
111
+ enabled: true,
112
+ priority: 'medium',
113
+ mode: 'incremental',
114
+ dropColumns: ['source_env', 'sync_version'],
115
+ columnMap: {
116
+ state: 'state_key',
117
+ action: 'action_key',
118
+ last_update: 'updated_at',
119
+ },
120
+ },
121
+ // Routing outcomes (186 records)
122
+ {
123
+ name: 'routing-outcomes',
124
+ cloudTable: 'aqe.routing_outcomes',
125
+ localTable: 'routing_outcomes',
126
+ enabled: true,
127
+ priority: 'medium',
128
+ mode: 'append',
129
+ dropColumns: ['source_env', 'sync_version'],
130
+ },
131
+ // QE trajectories (0 records in cloud currently)
132
+ {
133
+ name: 'qe-trajectories',
134
+ cloudTable: 'aqe.qe_trajectories',
135
+ localTable: 'qe_trajectories',
136
+ enabled: true,
137
+ priority: 'medium',
138
+ mode: 'append',
139
+ dropColumns: ['source_env', 'sync_version', 'embedding'],
140
+ },
141
+ // Dream insights (680 records)
142
+ {
143
+ name: 'dream-insights',
144
+ cloudTable: 'aqe.dream_insights',
145
+ localTable: 'dream_insights',
146
+ enabled: true,
147
+ priority: 'low',
148
+ mode: 'append',
149
+ dropColumns: ['source_env', 'sync_version'],
150
+ },
151
+ // Claude-Flow memory (2 records in cloud)
152
+ // Push syncs from JSON file; pull writes to kv_store since local has no dedicated table
153
+ {
154
+ name: 'claude-flow-memory',
155
+ cloudTable: 'aqe.claude_flow_memory',
156
+ localTable: 'kv_store',
157
+ enabled: true,
158
+ priority: 'low',
159
+ mode: 'incremental',
160
+ dropColumns: ['source_env', 'sync_version'],
161
+ columnMap: { partition: 'namespace' },
162
+ },
163
+ // NOTE: intelligence-qlearning (JSON push source) is NOT pulled back —
164
+ // the cloud qlearning_patterns table is already pulled via the qlearning-patterns source above.
165
+ ],
166
+ };
7
167
  /**
8
168
  * SQLite to PostgreSQL type mapping
9
169
  */
@@ -1 +1 @@
1
- {"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../../src/sync/interfaces.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAgUH;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAA2B;IAClD,MAAM,EAAE,MAAM;IACd,SAAS,EAAE,SAAS;IACpB,MAAM,EAAE,MAAM;IACd,MAAM,EAAE,OAAO;IACf,MAAM,EAAE,MAAM;CACf,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAe;IAC7C,KAAK,EAAE;QACL,oDAAoD;QACpD,4DAA4D;QAC5D,UAAU,EAAE,yBAAyB;QACrC,YAAY,EAAE,yBAAyB;QACvC,gBAAgB,EAAE,kCAAkC;QACpD,gBAAgB,EAAE,kCAAkC;QACpD,iBAAiB,EAAE,yBAAyB;QAC5C,gBAAgB,EAAE,kCAAkC;QACpD,aAAa,EAAE,oBAAoB;QACnC,YAAY,EAAE,gCAAgC;KAC/C;IACD,KAAK,EAAE;QACL,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE;QACtC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE;QAChC,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,EAAE;QACxC,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,EAAE;QACxC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE;QAChC,UAAU,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,OAAO,EAAE,EAAE,CAAC;KACjE;IACD,IAAI,EAAE;QACJ,IAAI,EAAE,aAAa;QACnB,QAAQ,EAAE,IAAI;QACd,SAAS,EAAE,IAAI;QACf,kBAAkB,EAAE,YAAY;QAChC,cAAc,EAAE;YACd,UAAU,EAAE,CAAC,EAAS,0CAA0C;YAChE,YAAY,EAAE,CAAC,EAAO,2BAA2B;YACjD,WAAW,EAAE,CAAC,EAAQ,sBAAsB;YAC5C,OAAO,EAAE,CAAC,EAAY,2BAA2B;YACjD,WAAW,EAAE,CAAC,EAAQ,0BAA0B;YAChD,gBAAgB,EAAE,CAAC;YACnB,gBAAgB,EAAE,CAAC;SACpB;QACD,OAAO,EAAE;YACP,+DAA+D;YAC/D,gDAAgD;YAChD,uDAAuD;YACvD,EAAE;YACF,uDAAuD;YACvD,uDAAuD;YACvD,yCAAyC;YACzC,qDAAqD;YACrD,uDAAuD;YACvD,6EAA6E;YAC7E,+DAA+D;YAE/D,wDAAwD;YACxD,iDAAiD;YACjD;gBACE,IAAI,EAAE,kBAAkB;gBACxB,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,yBAAyB;gBAC/B,WAAW,EAAE,iBAAiB;gBAC9B,QAAQ,EAAE,MAAM;gBAChB,IAAI,EAAE,aAAa;gBACnB,KAAK,EAAE,wVAAwV;gBAC/V,OAAO,EAAE,IAAI;aACd;YACD,sCAAsC;YACtC;gBACE,IAAI,EAAE,oBAAoB;gBAC1B,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,yBAAyB;gBAC/B,WAAW,EAAE,mBAAmB;gBAChC,QAAQ,EAAE,MAAM;gBAChB,IAAI,EAAE,aAAa;gBACnB,KAAK,EAAE,6BAA6B;gBACpC,OAAO,EAAE,IAAI;aACd;YACD,gCAAgC;YAChC;gBACE,IAAI,EAAE,mBAAmB;gBACzB,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,yBAAyB;gBAC/B,WAAW,EAAE,kBAAkB;gBAC/B,QAAQ,EAAE,MAAM;gBAChB,IAAI,EAAE,aAAa;gBACnB,KAAK,EAAE,4BAA4B;gBACnC,OAAO,EAAE,IAAI;aACd;YACD,mDAAmD;YACnD,6EAA6E;YAC7E;gBACE,IAAI,EAAE,eAAe;gBACrB,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,yBAAyB;gBAC/B,WAAW,EAAE,oBAAoB;gBACjC,QAAQ,EAAE,MAAM;gBAChB,IAAI,EAAE,aAAa;gBACnB,KAAK,EAAE,+MAA+M;gBACtN,OAAO,EAAE,IAAI;aACd;YACD,mEAAmE;YACnE,2DAA2D;YAC3D;gBACE,IAAI,EAAE,2BAA2B;gBACjC,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,yBAAyB;gBAC/B,WAAW,EAAE,0BAA0B;gBACvC,QAAQ,EAAE,MAAM;gBAChB,IAAI,EAAE,QAAQ;gBACd,KAAK,EAAE,mRAAmR;gBAC1R,OAAO,EAAE,IAAI;aACd;YACD,2BAA2B;YAC3B;gBACE,IAAI,EAAE,iBAAiB;gBACvB,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,yBAAyB;gBAC/B,WAAW,EAAE,gBAAgB;gBAC7B,QAAQ,EAAE,QAAQ;gBAClB,IAAI,EAAE,aAAa;gBACnB,KAAK,EAAE,wMAAwM;gBAC/M,OAAO,EAAE,IAAI;aACd;YACD,sCAAsC;YACtC,sEAAsE;YACtE;gBACE,IAAI,EAAE,kBAAkB;gBACxB,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,yBAAyB;gBAC/B,WAAW,EAAE,wBAAwB;gBACrC,QAAQ,EAAE,QAAQ;gBAClB,IAAI,EAAE,aAAa;gBACnB,KAAK,EAAE,kKAAkK;gBACzK,OAAO,EAAE,IAAI;aACd;YACD,4DAA4D;YAC5D;gBACE,IAAI,EAAE,uBAAuB;gBAC7B,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,yBAAyB;gBAC/B,WAAW,EAAE,sBAAsB;gBACnC,QAAQ,EAAE,QAAQ;gBAClB,IAAI,EAAE,QAAQ;gBACd,KAAK,EAAE,gCAAgC;gBACvC,OAAO,EAAE,IAAI;aACd;YACD,oDAAoD;YACpD;gBACE,IAAI,EAAE,sBAAsB;gBAC5B,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,yBAAyB;gBAC/B,WAAW,EAAE,qBAAqB;gBAClC,QAAQ,EAAE,QAAQ;gBAClB,IAAI,EAAE,QAAQ;gBACd,KAAK,EAAE,+BAA+B;gBACtC,OAAO,EAAE,IAAI;aACd;YACD,wDAAwD;YACxD;gBACE,IAAI,EAAE,qBAAqB;gBAC3B,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,yBAAyB;gBAC/B,WAAW,EAAE,oBAAoB;gBACjC,QAAQ,EAAE,KAAK;gBACf,IAAI,EAAE,QAAQ;gBACd,KAAK,EAAE,8BAA8B;gBACrC,OAAO,EAAE,IAAI;aACd;YACD,4BAA4B;YAC5B;gBACE,IAAI,EAAE,oBAAoB;gBAC1B,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,kCAAkC;gBACxC,WAAW,EAAE,wBAAwB;gBACrC,QAAQ,EAAE,QAAQ;gBAClB,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE,IAAI;aACd;YACD,iCAAiC;YACjC;gBACE,IAAI,EAAE,wBAAwB;gBAC9B,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,kCAAkC;gBACxC,WAAW,EAAE,wBAAwB;gBACrC,QAAQ,EAAE,KAAK;gBACf,IAAI,EAAE,MAAM;gBACZ,QAAQ,EAAE,WAAW;gBACrB,OAAO,EAAE,IAAI;aACd;SACF;KACF;IACD,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,QAAQ;CAC7C,CAAC"}
1
+ {"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../../src/sync/interfaces.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,102 @@
1
+ /**
2
+ * Pull Sync Agent
3
+ *
4
+ * Orchestrates pulling data from cloud PostgreSQL into local SQLite.
5
+ * Mirrors CloudSyncAgent but in the reverse direction (cloud → local).
6
+ *
7
+ * Features:
8
+ * - Full and incremental pull modes
9
+ * - Column remapping (cloud schema → local schema)
10
+ * - Type transforms (PostgreSQL types → SQLite types)
11
+ * - Automatic backup before writes
12
+ * - Dry-run preview mode
13
+ * - Per-table and per-environment filtering
14
+ */
15
+ import type { PullConfig, PullSource, SyncReport, SyncResult } from './interfaces.js';
16
+ /**
17
+ * Pull sync agent configuration
18
+ */
19
+ export interface PullAgentConfig extends PullConfig {
20
+ /** Callback for progress updates */
21
+ onProgress?: (message: string, progress: number) => void;
22
+ /** Callback for errors */
23
+ onError?: (error: Error, source: string) => void;
24
+ /** Enable verbose logging */
25
+ verbose?: boolean;
26
+ }
27
+ /**
28
+ * Verification result
29
+ */
30
+ export interface PullVerifyResult {
31
+ verified: boolean;
32
+ results: PullVerifyTableResult[];
33
+ }
34
+ export interface PullVerifyTableResult {
35
+ source: string;
36
+ cloudTable: string;
37
+ localTable: string;
38
+ cloudCount: number;
39
+ localCount: number;
40
+ match: boolean;
41
+ diff: number;
42
+ }
43
+ /**
44
+ * Pull Sync Agent
45
+ */
46
+ export declare class PullSyncAgent {
47
+ private readonly config;
48
+ private reader;
49
+ private writer;
50
+ private cloudWriter;
51
+ private report;
52
+ constructor(config?: Partial<PullAgentConfig>);
53
+ /**
54
+ * Initialize connections to both cloud and local databases
55
+ */
56
+ initialize(): Promise<void>;
57
+ /**
58
+ * Full pull: download all cloud data into local DB
59
+ */
60
+ pullAll(): Promise<SyncReport>;
61
+ /**
62
+ * Incremental pull: only records changed since a timestamp
63
+ */
64
+ pullIncremental(since?: Date): Promise<SyncReport>;
65
+ /**
66
+ * Pull a single table from cloud to local
67
+ */
68
+ pullTable(source: PullSource): Promise<SyncResult>;
69
+ /**
70
+ * Pull incremental changes for a single table
71
+ */
72
+ private pullTableIncremental;
73
+ /**
74
+ * Verify pull by comparing cloud and local counts
75
+ */
76
+ verify(): Promise<PullVerifyResult>;
77
+ /**
78
+ * Close all connections
79
+ */
80
+ close(): Promise<void>;
81
+ private ensureInitialized;
82
+ private getEnabledSources;
83
+ private resolveTargetDb;
84
+ private backupLocalDb;
85
+ private createReport;
86
+ private finalizeReport;
87
+ private log;
88
+ private progress;
89
+ }
90
+ /**
91
+ * Create a pull sync agent
92
+ */
93
+ export declare function createPullSyncAgent(config?: Partial<PullAgentConfig>): PullSyncAgent;
94
+ /**
95
+ * Quick pull utility — full pull from cloud
96
+ */
97
+ export declare function pullFromCloud(config?: Partial<PullAgentConfig>): Promise<SyncReport>;
98
+ /**
99
+ * Quick incremental pull utility
100
+ */
101
+ export declare function pullIncrementalFromCloud(since?: Date, config?: Partial<PullAgentConfig>): Promise<SyncReport>;
102
+ //# sourceMappingURL=pull-agent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pull-agent.d.ts","sourceRoot":"","sources":["../../src/sync/pull-agent.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAKH,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAWtF;;GAEG;AACH,MAAM,WAAW,eAAgB,SAAQ,UAAU;IACjD,oCAAoC;IACpC,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAEzD,0BAA0B;IAC1B,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAEjD,6BAA6B;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,qBAAqB,EAAE,CAAC;CAClC;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,OAAO,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;IACzC,OAAO,CAAC,MAAM,CAA+B;IAC7C,OAAO,CAAC,MAAM,CAA6B;IAC3C,OAAO,CAAC,WAAW,CAAsD;IACzE,OAAO,CAAC,MAAM,CAA2B;gBAE7B,MAAM,GAAE,OAAO,CAAC,eAAe,CAAM;IASjD;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAyBjC;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC;IA4BpC;;OAEG;IACG,eAAe,CAAC,KAAK,CAAC,EAAE,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC;IA2BxD;;OAEG;IACG,SAAS,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IA8CxD;;OAEG;YACW,oBAAoB;IAwClC;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,gBAAgB,CAAC;IA0BzC;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAe5B,OAAO,CAAC,iBAAiB;IAMzB,OAAO,CAAC,iBAAiB;IAczB,OAAO,CAAC,eAAe;IAOvB,OAAO,CAAC,aAAa;IAiBrB,OAAO,CAAC,YAAY;IAepB,OAAO,CAAC,cAAc;IAQtB,OAAO,CAAC,GAAG;IAgBX,OAAO,CAAC,QAAQ;CAIjB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,aAAa,CAEpF;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,CAQ1F;AAED;;GAEG;AACH,wBAAsB,wBAAwB,CAC5C,KAAK,CAAC,EAAE,IAAI,EACZ,MAAM,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,GAChC,OAAO,CAAC,UAAU,CAAC,CAQrB"}
@@ -0,0 +1,354 @@
1
+ /**
2
+ * Pull Sync Agent
3
+ *
4
+ * Orchestrates pulling data from cloud PostgreSQL into local SQLite.
5
+ * Mirrors CloudSyncAgent but in the reverse direction (cloud → local).
6
+ *
7
+ * Features:
8
+ * - Full and incremental pull modes
9
+ * - Column remapping (cloud schema → local schema)
10
+ * - Type transforms (PostgreSQL types → SQLite types)
11
+ * - Automatic backup before writes
12
+ * - Dry-run preview mode
13
+ * - Per-table and per-environment filtering
14
+ */
15
+ import { v4 as uuidv4 } from 'uuid';
16
+ import * as fs from 'fs';
17
+ import * as path from 'path';
18
+ import { DEFAULT_PULL_CONFIG } from './interfaces.js';
19
+ import { createConnectionManager } from './cloud/tunnel-manager.js';
20
+ import { createPostgresWriter } from './cloud/postgres-writer.js';
21
+ import { createPostgresReader } from './cloud/postgres-reader.js';
22
+ import { createSQLiteWriter } from './writers/sqlite-writer.js';
23
+ import { toErrorMessage, toError } from '../shared/error-utils.js';
24
+ import { LoggerFactory } from '../logging/index.js';
25
+ const logger = LoggerFactory.create('pull-agent');
26
+ /**
27
+ * Pull Sync Agent
28
+ */
29
+ export class PullSyncAgent {
30
+ config;
31
+ reader = null;
32
+ writer = null;
33
+ cloudWriter = null;
34
+ report = null;
35
+ constructor(config = {}) {
36
+ this.config = {
37
+ ...DEFAULT_PULL_CONFIG,
38
+ ...config,
39
+ cloud: { ...DEFAULT_PULL_CONFIG.cloud, ...config.cloud },
40
+ sources: config.sources || DEFAULT_PULL_CONFIG.sources,
41
+ };
42
+ }
43
+ /**
44
+ * Initialize connections to both cloud and local databases
45
+ */
46
+ async initialize() {
47
+ this.log('Initializing pull sync agent...');
48
+ // Connect to cloud
49
+ const tunnelManager = createConnectionManager(this.config.cloud);
50
+ this.cloudWriter = createPostgresWriter({
51
+ cloud: this.config.cloud,
52
+ tunnelManager,
53
+ });
54
+ await this.cloudWriter.connect();
55
+ this.log('Connected to cloud database');
56
+ // Create cloud reader (uses cloudWriter for queries)
57
+ this.reader = createPostgresReader({
58
+ writer: this.cloudWriter,
59
+ environment: this.config.environment,
60
+ });
61
+ // Connect to local SQLite
62
+ const dbPath = this.resolveTargetDb();
63
+ this.writer = createSQLiteWriter({ dbPath });
64
+ await this.writer.connect();
65
+ this.log(`Connected to local database: ${dbPath}`);
66
+ }
67
+ /**
68
+ * Full pull: download all cloud data into local DB
69
+ */
70
+ async pullAll() {
71
+ this.report = this.createReport('full');
72
+ try {
73
+ this.ensureInitialized();
74
+ this.backupLocalDb();
75
+ const sources = this.getEnabledSources();
76
+ let completed = 0;
77
+ for (const source of sources) {
78
+ this.progress(`Pulling ${source.name}...`, completed / sources.length);
79
+ const result = await this.pullTable(source);
80
+ this.report.results.push(result);
81
+ completed++;
82
+ }
83
+ this.report.status = this.report.results.every(r => r.success) ? 'completed' : 'partial';
84
+ }
85
+ catch (error) {
86
+ this.report.status = 'failed';
87
+ this.report.errors.push(toErrorMessage(error));
88
+ }
89
+ finally {
90
+ this.finalizeReport();
91
+ }
92
+ return this.report;
93
+ }
94
+ /**
95
+ * Incremental pull: only records changed since a timestamp
96
+ */
97
+ async pullIncremental(since) {
98
+ this.report = this.createReport('incremental');
99
+ const sinceDate = since || new Date(Date.now() - 24 * 60 * 60 * 1000);
100
+ try {
101
+ this.ensureInitialized();
102
+ this.backupLocalDb();
103
+ const sources = this.getEnabledSources().filter(s => s.mode !== 'full');
104
+ for (const source of sources) {
105
+ this.progress(`Incremental pull ${source.name}...`, 0);
106
+ const result = await this.pullTableIncremental(source, sinceDate);
107
+ this.report.results.push(result);
108
+ }
109
+ this.report.status = this.report.results.every(r => r.success) ? 'completed' : 'partial';
110
+ }
111
+ catch (error) {
112
+ this.report.status = 'failed';
113
+ this.report.errors.push(toErrorMessage(error));
114
+ }
115
+ finally {
116
+ this.finalizeReport();
117
+ }
118
+ return this.report;
119
+ }
120
+ /**
121
+ * Pull a single table from cloud to local
122
+ */
123
+ async pullTable(source) {
124
+ const startTime = Date.now();
125
+ const result = {
126
+ success: false,
127
+ table: source.localTable,
128
+ source: source.name,
129
+ recordsSynced: 0,
130
+ conflictsResolved: 0,
131
+ recordsSkipped: 0,
132
+ durationMs: 0,
133
+ warnings: [],
134
+ };
135
+ try {
136
+ this.ensureInitialized();
137
+ // Read from cloud
138
+ const records = await this.reader.readAll(source);
139
+ this.log(`Read ${records.length} records from cloud ${source.cloudTable}`);
140
+ if (records.length === 0) {
141
+ result.success = true;
142
+ result.durationMs = Date.now() - startTime;
143
+ return result;
144
+ }
145
+ // Write to local
146
+ if (!this.config.dryRun) {
147
+ const written = await this.writer.upsert(source.localTable, records);
148
+ result.recordsSynced = written;
149
+ result.recordsSkipped = records.length - written;
150
+ }
151
+ else {
152
+ result.recordsSynced = records.length;
153
+ this.log(`[DRY RUN] Would write ${records.length} records to local ${source.localTable}`);
154
+ }
155
+ result.success = true;
156
+ }
157
+ catch (error) {
158
+ result.error = toErrorMessage(error);
159
+ this.config.onError?.(toError(error), source.name);
160
+ }
161
+ result.durationMs = Date.now() - startTime;
162
+ return result;
163
+ }
164
+ /**
165
+ * Pull incremental changes for a single table
166
+ */
167
+ async pullTableIncremental(source, since) {
168
+ const startTime = Date.now();
169
+ const result = {
170
+ success: false,
171
+ table: source.localTable,
172
+ source: source.name,
173
+ recordsSynced: 0,
174
+ conflictsResolved: 0,
175
+ recordsSkipped: 0,
176
+ durationMs: 0,
177
+ };
178
+ try {
179
+ this.ensureInitialized();
180
+ const records = await this.reader.readChanged(source, since);
181
+ this.log(`Read ${records.length} changed records from cloud ${source.cloudTable} (since ${since.toISOString()})`);
182
+ if (records.length === 0) {
183
+ result.success = true;
184
+ result.durationMs = Date.now() - startTime;
185
+ return result;
186
+ }
187
+ if (!this.config.dryRun) {
188
+ const written = await this.writer.upsert(source.localTable, records);
189
+ result.recordsSynced = written;
190
+ }
191
+ else {
192
+ result.recordsSynced = records.length;
193
+ }
194
+ result.success = true;
195
+ }
196
+ catch (error) {
197
+ result.error = toErrorMessage(error);
198
+ }
199
+ result.durationMs = Date.now() - startTime;
200
+ return result;
201
+ }
202
+ /**
203
+ * Verify pull by comparing cloud and local counts
204
+ */
205
+ async verify() {
206
+ this.ensureInitialized();
207
+ const results = [];
208
+ for (const source of this.getEnabledSources()) {
209
+ const cloudCount = await this.reader.count(source);
210
+ const localCount = await this.writer.count(source.localTable);
211
+ results.push({
212
+ source: source.name,
213
+ cloudTable: source.cloudTable,
214
+ localTable: source.localTable,
215
+ cloudCount,
216
+ localCount,
217
+ match: cloudCount === localCount || cloudCount === -1,
218
+ diff: localCount - cloudCount,
219
+ });
220
+ }
221
+ return {
222
+ verified: results.every(r => r.match),
223
+ results,
224
+ };
225
+ }
226
+ /**
227
+ * Close all connections
228
+ */
229
+ async close() {
230
+ if (this.writer) {
231
+ await this.writer.close();
232
+ this.writer = null;
233
+ }
234
+ if (this.cloudWriter) {
235
+ await this.cloudWriter.close();
236
+ this.cloudWriter = null;
237
+ }
238
+ this.reader = null;
239
+ this.log('Pull sync agent closed');
240
+ }
241
+ // Private helpers
242
+ ensureInitialized() {
243
+ if (!this.reader || !this.writer) {
244
+ throw new Error('PullSyncAgent not initialized. Call initialize() first.');
245
+ }
246
+ }
247
+ getEnabledSources() {
248
+ let sources = this.config.sources.filter(s => s.enabled);
249
+ // Filter by specific tables if requested
250
+ if (this.config.tables && this.config.tables.length > 0) {
251
+ const tableSet = new Set(this.config.tables);
252
+ sources = sources.filter(s => tableSet.has(s.localTable) || tableSet.has(s.name));
253
+ }
254
+ // Sort by priority
255
+ const priorityOrder = { high: 0, medium: 1, low: 2 };
256
+ return sources.sort((a, b) => priorityOrder[a.priority] - priorityOrder[b.priority]);
257
+ }
258
+ resolveTargetDb() {
259
+ if (this.config.targetDb) {
260
+ return path.resolve(this.config.targetDb);
261
+ }
262
+ return path.resolve(process.cwd(), '.agentic-qe/memory.db');
263
+ }
264
+ backupLocalDb() {
265
+ if (this.config.dryRun)
266
+ return;
267
+ const dbPath = this.resolveTargetDb();
268
+ if (!fs.existsSync(dbPath))
269
+ return;
270
+ const timestamp = Math.floor(Date.now() / 1000);
271
+ const backupPath = `${dbPath}.bak-${timestamp}`;
272
+ try {
273
+ fs.copyFileSync(dbPath, backupPath);
274
+ this.log(`Backed up local DB to ${backupPath}`);
275
+ }
276
+ catch (error) {
277
+ this.log(`Warning: Failed to backup local DB: ${toErrorMessage(error)}`, 'warn');
278
+ }
279
+ }
280
+ createReport(mode) {
281
+ return {
282
+ syncId: uuidv4(),
283
+ startedAt: new Date(),
284
+ status: 'running',
285
+ environment: this.config.environment,
286
+ mode,
287
+ results: [],
288
+ totalRecordsSynced: 0,
289
+ totalConflictsResolved: 0,
290
+ totalDurationMs: 0,
291
+ errors: [],
292
+ };
293
+ }
294
+ finalizeReport() {
295
+ if (!this.report)
296
+ return;
297
+ this.report.completedAt = new Date();
298
+ this.report.totalDurationMs = this.report.completedAt.getTime() - this.report.startedAt.getTime();
299
+ this.report.totalRecordsSynced = this.report.results.reduce((sum, r) => sum + r.recordsSynced, 0);
300
+ this.report.totalConflictsResolved = this.report.results.reduce((sum, r) => sum + r.conflictsResolved, 0);
301
+ }
302
+ log(message, level = 'info') {
303
+ if (!this.config.verbose && level === 'info')
304
+ return;
305
+ const prefix = `[PullSync:${this.config.environment}]`;
306
+ switch (level) {
307
+ case 'warn':
308
+ console.warn(`${prefix} ${message}`);
309
+ break;
310
+ case 'error':
311
+ console.error(`${prefix} ${message}`);
312
+ break;
313
+ default:
314
+ console.log(`${prefix} ${message}`);
315
+ }
316
+ }
317
+ progress(message, progress) {
318
+ this.config.onProgress?.(message, progress);
319
+ this.log(message);
320
+ }
321
+ }
322
+ /**
323
+ * Create a pull sync agent
324
+ */
325
+ export function createPullSyncAgent(config) {
326
+ return new PullSyncAgent(config);
327
+ }
328
+ /**
329
+ * Quick pull utility — full pull from cloud
330
+ */
331
+ export async function pullFromCloud(config) {
332
+ const agent = createPullSyncAgent({ ...config, verbose: true });
333
+ await agent.initialize();
334
+ try {
335
+ return await agent.pullAll();
336
+ }
337
+ finally {
338
+ await agent.close();
339
+ }
340
+ }
341
+ /**
342
+ * Quick incremental pull utility
343
+ */
344
+ export async function pullIncrementalFromCloud(since, config) {
345
+ const agent = createPullSyncAgent({ ...config, verbose: true });
346
+ await agent.initialize();
347
+ try {
348
+ return await agent.pullIncremental(since);
349
+ }
350
+ finally {
351
+ await agent.close();
352
+ }
353
+ }
354
+ //# sourceMappingURL=pull-agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pull-agent.js","sourceRoot":"","sources":["../../src/sync/pull-agent.ts"],"names":[],"mappings":"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"}