@powerhousedao/network-admin 0.0.38 → 0.0.39

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 (61) hide show
  1. package/dist/document-models/network-profile/gen/reducer.d.ts +1 -1
  2. package/dist/document-models/network-profile/gen/reducer.d.ts.map +1 -1
  3. package/dist/document-models/request-for-proposals/gen/ph-factories.js +1 -1
  4. package/dist/document-models/request-for-proposals/gen/utils.js +1 -1
  5. package/dist/document-models/workstream/hooks.d.ts +1 -1
  6. package/dist/document-models/workstream/hooks.d.ts.map +1 -1
  7. package/dist/document-models/workstream/module.d.ts +1 -1
  8. package/dist/document-models/workstream/module.d.ts.map +1 -1
  9. package/dist/powerhouse.manifest.json +9 -1
  10. package/dist/subgraphs/index.d.ts +0 -5
  11. package/dist/subgraphs/index.d.ts.map +1 -1
  12. package/dist/subgraphs/index.js +0 -5
  13. package/package.json +15 -15
  14. package/dist/scripts/sow-mirror/mirror_sow_state.d.ts +0 -3
  15. package/dist/scripts/sow-mirror/mirror_sow_state.d.ts.map +0 -1
  16. package/dist/scripts/sow-mirror/mirror_sow_state.js +0 -441
  17. package/dist/subgraphs/networks/index.d.ts +0 -11
  18. package/dist/subgraphs/networks/index.d.ts.map +0 -1
  19. package/dist/subgraphs/networks/index.js +0 -11
  20. package/dist/subgraphs/networks/resolvers.d.ts +0 -3
  21. package/dist/subgraphs/networks/resolvers.d.ts.map +0 -1
  22. package/dist/subgraphs/networks/resolvers.js +0 -42
  23. package/dist/subgraphs/networks/schema.d.ts +0 -3
  24. package/dist/subgraphs/networks/schema.d.ts.map +0 -1
  25. package/dist/subgraphs/networks/schema.js +0 -39
  26. package/dist/subgraphs/payment-terms/index.d.ts +0 -11
  27. package/dist/subgraphs/payment-terms/index.d.ts.map +0 -1
  28. package/dist/subgraphs/payment-terms/index.js +0 -11
  29. package/dist/subgraphs/payment-terms/resolvers.d.ts +0 -3
  30. package/dist/subgraphs/payment-terms/resolvers.d.ts.map +0 -1
  31. package/dist/subgraphs/payment-terms/resolvers.js +0 -264
  32. package/dist/subgraphs/payment-terms/schema.d.ts +0 -3
  33. package/dist/subgraphs/payment-terms/schema.d.ts.map +0 -1
  34. package/dist/subgraphs/payment-terms/schema.js +0 -199
  35. package/dist/subgraphs/request-for-proposals/index.d.ts +0 -11
  36. package/dist/subgraphs/request-for-proposals/index.d.ts.map +0 -1
  37. package/dist/subgraphs/request-for-proposals/index.js +0 -11
  38. package/dist/subgraphs/request-for-proposals/resolvers.d.ts +0 -3
  39. package/dist/subgraphs/request-for-proposals/resolvers.d.ts.map +0 -1
  40. package/dist/subgraphs/request-for-proposals/resolvers.js +0 -144
  41. package/dist/subgraphs/request-for-proposals/schema.d.ts +0 -3
  42. package/dist/subgraphs/request-for-proposals/schema.d.ts.map +0 -1
  43. package/dist/subgraphs/request-for-proposals/schema.js +0 -141
  44. package/dist/subgraphs/workstream/index.d.ts +0 -11
  45. package/dist/subgraphs/workstream/index.d.ts.map +0 -1
  46. package/dist/subgraphs/workstream/index.js +0 -11
  47. package/dist/subgraphs/workstream/resolvers.d.ts +0 -3
  48. package/dist/subgraphs/workstream/resolvers.d.ts.map +0 -1
  49. package/dist/subgraphs/workstream/resolvers.js +0 -180
  50. package/dist/subgraphs/workstream/schema.d.ts +0 -3
  51. package/dist/subgraphs/workstream/schema.d.ts.map +0 -1
  52. package/dist/subgraphs/workstream/schema.js +0 -146
  53. package/dist/subgraphs/workstreams/index.d.ts +0 -11
  54. package/dist/subgraphs/workstreams/index.d.ts.map +0 -1
  55. package/dist/subgraphs/workstreams/index.js +0 -11
  56. package/dist/subgraphs/workstreams/resolvers.d.ts +0 -3
  57. package/dist/subgraphs/workstreams/resolvers.d.ts.map +0 -1
  58. package/dist/subgraphs/workstreams/resolvers.js +0 -380
  59. package/dist/subgraphs/workstreams/schema.d.ts +0 -3
  60. package/dist/subgraphs/workstreams/schema.d.ts.map +0 -1
  61. package/dist/subgraphs/workstreams/schema.js +0 -326
@@ -1,3 +1,3 @@
1
- import type { NetworkProfilePHState } from "../gen/types.js";
1
+ import type { NetworkProfilePHState } from "./types.js";
2
2
  export declare const reducer: import("document-model").Reducer<NetworkProfilePHState>;
3
3
  //# sourceMappingURL=reducer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"reducer.d.ts","sourceRoot":"","sources":["../../../../document-models/network-profile/gen/reducer.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAoI7D,eAAO,MAAM,OAAO,yDAAqD,CAAC"}
1
+ {"version":3,"file":"reducer.d.ts","sourceRoot":"","sources":["../../../../document-models/network-profile/gen/reducer.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAoIxD,eAAO,MAAM,OAAO,yDAAqD,CAAC"}
@@ -5,8 +5,8 @@ export function defaultGlobalState() {
5
5
  issuer: "placeholder-id",
6
6
  title: "",
7
7
  code: "",
8
- briefing: "",
9
8
  summary: "",
9
+ briefing: "",
10
10
  rfpCommenter: [],
11
11
  eligibilityCriteria: "",
12
12
  evaluationCriteria: "",
@@ -6,8 +6,8 @@ export const initialGlobalState = {
6
6
  issuer: "placeholder-id",
7
7
  title: "",
8
8
  code: "",
9
- briefing: "",
10
9
  summary: "",
10
+ briefing: "",
11
11
  rfpCommenter: [],
12
12
  eligibilityCriteria: "",
13
13
  evaluationCriteria: "",
@@ -1,5 +1,5 @@
1
1
  import type { DocumentDispatch } from "@powerhousedao/reactor-browser";
2
- import type { WorkstreamDocument, WorkstreamAction } from "./index.js";
2
+ import type { WorkstreamDocument, WorkstreamAction } from "./gen/types.js";
3
3
  /** Hook to get a Workstream document by its id */
4
4
  export declare function useWorkstreamDocumentById(documentId: string | null | undefined): [WorkstreamDocument, DocumentDispatch<WorkstreamAction>] | [undefined, undefined];
5
5
  /** Hook to get the selected Workstream document */
@@ -1 +1 @@
1
- {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../../document-models/workstream/hooks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAOvE,OAAO,KAAK,EACV,kBAAkB,EAClB,gBAAgB,EACjB,MAAM,YAAY,CAAC;AAGpB,kDAAkD;AAClD,wBAAgB,yBAAyB,CACvC,UAAU,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAEnC,CAAC,kBAAkB,EAAE,gBAAgB,CAAC,gBAAgB,CAAC,CAAC,GACxD,CAAC,SAAS,EAAE,SAAS,CAAC,CAIzB;AAED,mDAAmD;AACnD,wBAAgB,6BAA6B,IACzC,CAAC,kBAAkB,EAAE,gBAAgB,CAAC,gBAAgB,CAAC,CAAC,GACxD,CAAC,SAAS,EAAE,SAAS,CAAC,CAIzB;AAED,iEAAiE;AACjE,wBAAgB,qCAAqC,qCAGpD;AAED,kEAAkE;AAClE,wBAAgB,sCAAsC,qCAGrD"}
1
+ {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../../document-models/workstream/hooks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAOvE,OAAO,KAAK,EACV,kBAAkB,EAClB,gBAAgB,EACjB,MAAM,gBAAgB,CAAC;AAGxB,kDAAkD;AAClD,wBAAgB,yBAAyB,CACvC,UAAU,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAEnC,CAAC,kBAAkB,EAAE,gBAAgB,CAAC,gBAAgB,CAAC,CAAC,GACxD,CAAC,SAAS,EAAE,SAAS,CAAC,CAIzB;AAED,mDAAmD;AACnD,wBAAgB,6BAA6B,IACzC,CAAC,kBAAkB,EAAE,gBAAgB,CAAC,gBAAgB,CAAC,CAAC,GACxD,CAAC,SAAS,EAAE,SAAS,CAAC,CAIzB;AAED,iEAAiE;AACjE,wBAAgB,qCAAqC,qCAGpD;AAED,kEAAkE;AAClE,wBAAgB,sCAAsC,qCAGrD"}
@@ -1,5 +1,5 @@
1
1
  import type { DocumentModelModule } from "document-model";
2
- import type { WorkstreamPHState } from "./index.js";
2
+ import type { WorkstreamPHState } from "./gen/types.js";
3
3
  /** Document model module for the Todo List document type */
4
4
  export declare const Workstream: DocumentModelModule<WorkstreamPHState>;
5
5
  //# sourceMappingURL=module.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../document-models/workstream/module.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAG1D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAQpD,4DAA4D;AAC5D,eAAO,MAAM,UAAU,EAAE,mBAAmB,CAAC,iBAAiB,CAK7D,CAAC"}
1
+ {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../document-models/workstream/module.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAG1D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAQxD,4DAA4D;AAC5D,eAAO,MAAM,UAAU,EAAE,mBAAmB,CAAC,iBAAiB,CAK7D,CAAC"}
@@ -9,6 +9,14 @@
9
9
  "documentModels": [],
10
10
  "editors": [],
11
11
  "apps": [],
12
- "subgraphs": [],
12
+ "subgraphs": [
13
+ {
14
+ "id": "powerhouse/network-profile-subgraph",
15
+ "name": "Network Profile Subgraph",
16
+ "documentTypes": [
17
+ "powerhouse/network-profile"
18
+ ]
19
+ }
20
+ ],
13
21
  "importScripts": []
14
22
  }
@@ -1,8 +1,3 @@
1
1
  export {};
2
2
  export * as NetworkProfileSubgraph from "./network-profile/index.js";
3
- export * as PaymentTermsSubgraph from "./payment-terms/index.js";
4
- export * as RequestForProposalsSubgraph from "./request-for-proposals/index.js";
5
- export * as WorkstreamSubgraph from "./workstream/index.js";
6
- export * as WorkstreamsSubgraph from "./workstreams/index.js";
7
- export * as NetworksSubgraph from "./networks/index.js";
8
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../subgraphs/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC;AACV,OAAO,KAAK,sBAAsB,MAAM,4BAA4B,CAAC;AACrE,OAAO,KAAK,oBAAoB,MAAM,0BAA0B,CAAC;AACjE,OAAO,KAAK,2BAA2B,MAAM,kCAAkC,CAAC;AAChF,OAAO,KAAK,kBAAkB,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,mBAAmB,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,gBAAgB,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../subgraphs/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAG,CAAC;AACX,OAAO,KAAK,sBAAsB,MAAM,4BAA4B,CAAC"}
@@ -1,7 +1,2 @@
1
1
  export {};
2
2
  export * as NetworkProfileSubgraph from "./network-profile/index.js";
3
- export * as PaymentTermsSubgraph from "./payment-terms/index.js";
4
- export * as RequestForProposalsSubgraph from "./request-for-proposals/index.js";
5
- export * as WorkstreamSubgraph from "./workstream/index.js";
6
- export * as WorkstreamsSubgraph from "./workstreams/index.js";
7
- export * as NetworksSubgraph from "./networks/index.js";
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@powerhousedao/network-admin",
3
3
  "description": "Network Admin package for Powerhouse",
4
- "version": "0.0.38",
4
+ "version": "0.0.39",
5
5
  "license": "AGPL-3.0-only",
6
6
  "type": "module",
7
7
  "files": [
@@ -59,13 +59,13 @@
59
59
  "service-unstartup": "bash ./node_modules/@powerhousedao/ph-cli/dist/scripts/service-unstartup.sh"
60
60
  },
61
61
  "dependencies": {
62
- "@powerhousedao/builder-tools": "^5.0.1-staging.11",
63
- "@powerhousedao/common": "^5.0.1-staging.11",
64
- "@powerhousedao/design-system": "^5.0.1-staging.11",
62
+ "@powerhousedao/builder-tools": "5.0.1-staging.13",
63
+ "@powerhousedao/common": "5.0.1-staging.13",
64
+ "@powerhousedao/design-system": "5.0.1-staging.13",
65
65
  "@powerhousedao/document-engineering": "^1.39.0",
66
- "@powerhousedao/project-management": "0.0.55",
66
+ "@powerhousedao/project-management": "0.0.58",
67
67
  "@uiw/react-md-editor": "^4.0.8",
68
- "document-model": "^5.0.1-staging.11",
68
+ "document-model": "5.0.1-staging.13",
69
69
  "error": "^10.4.0",
70
70
  "graphql": "^16.10.0",
71
71
  "graphql-tag": "^2.12.6",
@@ -81,21 +81,21 @@
81
81
  "@electric-sql/pglite": "^0.2.17",
82
82
  "@eslint/js": "^9.37.0",
83
83
  "@powerhousedao/analytics-engine-core": "^0.5.0",
84
- "@powerhousedao/codegen": "^5.0.1-staging.11",
85
- "@powerhousedao/config": "^5.0.1-staging.11",
86
- "@powerhousedao/connect": "^5.0.1-staging.11",
87
- "@powerhousedao/ph-cli": "^5.0.1-staging.11",
88
- "@powerhousedao/reactor-api": "^5.0.1-staging.11",
89
- "@powerhousedao/reactor-browser": "^5.0.1-staging.11",
90
- "@powerhousedao/reactor-local": "^5.0.1-staging.11",
84
+ "@powerhousedao/codegen": "5.0.1-staging.13",
85
+ "@powerhousedao/config": "5.0.1-staging.13",
86
+ "@powerhousedao/connect": "5.0.1-staging.13",
87
+ "@powerhousedao/ph-cli": "5.0.1-staging.13",
88
+ "@powerhousedao/reactor-api": "5.0.1-staging.13",
89
+ "@powerhousedao/reactor-browser": "5.0.1-staging.13",
90
+ "@powerhousedao/reactor-local": "5.0.1-staging.13",
91
91
  "@powerhousedao/scalars": "2.0.1",
92
- "@powerhousedao/switchboard": "^5.0.1-staging.11",
92
+ "@powerhousedao/switchboard": "5.0.1-staging.13",
93
93
  "@tailwindcss/cli": "^4.1.14",
94
94
  "@types/node": "^22.13.11",
95
95
  "@types/react": "^19.2.2",
96
96
  "@types/react-dom": "^19.2.2",
97
97
  "@vitejs/plugin-react": "^5.0.4",
98
- "document-drive": "^5.0.1-staging.11",
98
+ "document-drive": "5.0.1-staging.13",
99
99
  "eslint": "^9.37.0",
100
100
  "eslint-plugin-react": "^7.37.5",
101
101
  "eslint-plugin-react-hooks": "^5.2.0",
@@ -1,3 +0,0 @@
1
- #!/usr/bin/env bun
2
- export {};
3
- //# sourceMappingURL=mirror_sow_state.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mirror_sow_state.d.ts","sourceRoot":"","sources":["../../../scripts/sow-mirror/mirror_sow_state.ts"],"names":[],"mappings":""}
@@ -1,441 +0,0 @@
1
- #!/usr/bin/env bun
2
- // Parse command line arguments
3
- const args = process.argv.slice(2);
4
- if (args.length !== 6) {
5
- console.error('Usage: bun mirror_sow_state.ts <remote-mcp-url> <remote-sow-id> <remote-drive-id> <local-mcp-url> <local-sow-id> <local-drive-id>');
6
- console.error('');
7
- console.error('Example:');
8
- console.error(' bun mirror_sow_state.ts \\');
9
- console.error(' https://switchboard-dev.powerhouse.xyz/mcp \\');
10
- console.error(' 65f3e7e8-500d-4c42-9e73-8cd5d7966cd8 \\');
11
- console.error(' powerhouse-network-admin \\');
12
- console.error(' http://localhost:4001/mcp \\');
13
- console.error(' 3471233d-c481-4214-afe3-c196b5a7778f \\');
14
- console.error(' bai-network-admin');
15
- process.exit(1);
16
- }
17
- const [REMOTE_MCP_URL, REMOTE_DOC_ID, REMOTE_DRIVE_ID, LOCAL_MCP_URL, LOCAL_DOC_ID, LOCAL_DRIVE_ID] = args;
18
- // Helper function to make MCP requests
19
- async function mcpRequest(url, payload) {
20
- const response = await fetch(url, {
21
- method: 'POST',
22
- headers: {
23
- 'Content-Type': 'application/json',
24
- 'Accept': 'application/json, text/event-stream'
25
- },
26
- body: JSON.stringify(payload)
27
- });
28
- const text = await response.text();
29
- // Handle SSE format (event: message\ndata: {...})
30
- if (text.includes('event: message')) {
31
- const lines = text.split('\n');
32
- const dataLine = lines.find(line => line.startsWith('data: '));
33
- if (dataLine) {
34
- const jsonData = dataLine.substring(6);
35
- return JSON.parse(jsonData);
36
- }
37
- throw new Error('No data line found in SSE response');
38
- }
39
- return JSON.parse(text);
40
- }
41
- // Fetch remote document
42
- async function getRemoteDocument() {
43
- console.log(`Fetching remote document (${REMOTE_DOC_ID}) from drive "${REMOTE_DRIVE_ID}"...`);
44
- const payload = {
45
- jsonrpc: '2.0',
46
- method: 'tools/call',
47
- params: {
48
- name: 'getDocument',
49
- arguments: { id: REMOTE_DOC_ID }
50
- },
51
- id: 1
52
- };
53
- const response = await mcpRequest(REMOTE_MCP_URL, payload);
54
- if (response.error) {
55
- throw new Error(`Remote fetch error: ${JSON.stringify(response.error)}`);
56
- }
57
- return response.result.structuredContent.document;
58
- }
59
- // Get current local document state
60
- async function getLocalDocument() {
61
- console.log(`Fetching local document (${LOCAL_DOC_ID}) from drive "${LOCAL_DRIVE_ID}"...`);
62
- const payload = {
63
- jsonrpc: '2.0',
64
- method: 'tools/call',
65
- params: {
66
- name: 'getDocument',
67
- arguments: { id: LOCAL_DOC_ID }
68
- },
69
- id: 2
70
- };
71
- const response = await mcpRequest(LOCAL_MCP_URL, payload);
72
- if (response.error) {
73
- throw new Error(`Local fetch error: ${JSON.stringify(response.error)}`);
74
- }
75
- return response.result.structuredContent.document;
76
- }
77
- // Generate actions to mirror remote state
78
- function generateActions(remoteState, localState) {
79
- const actions = [];
80
- // 1. Update basic scope of work details
81
- if (remoteState.title !== localState.title ||
82
- remoteState.description !== localState.description ||
83
- remoteState.status !== localState.status) {
84
- actions.push({
85
- type: 'EDIT_SCOPE_OF_WORK',
86
- scope: 'global',
87
- input: {
88
- title: remoteState.title,
89
- description: remoteState.description,
90
- status: remoteState.status
91
- }
92
- });
93
- }
94
- // 2. Add missing contributors
95
- const localContributorIds = new Set(localState.contributors.map((c) => c.id));
96
- remoteState.contributors.forEach((contributor) => {
97
- if (!localContributorIds.has(contributor.id)) {
98
- const input = {
99
- id: contributor.id,
100
- name: contributor.name
101
- };
102
- if (contributor.icon)
103
- input.icon = contributor.icon;
104
- if (contributor.description)
105
- input.description = contributor.description;
106
- actions.push({
107
- type: 'ADD_AGENT',
108
- scope: 'global',
109
- input
110
- });
111
- }
112
- });
113
- // 3. Add missing deliverables with all their data
114
- const localDeliverableIds = new Set(localState.deliverables.map((d) => d.id));
115
- remoteState.deliverables.forEach((deliverable) => {
116
- if (!localDeliverableIds.has(deliverable.id)) {
117
- // Add deliverable
118
- actions.push({
119
- type: 'ADD_DELIVERABLE',
120
- scope: 'global',
121
- input: {
122
- id: deliverable.id,
123
- owner: deliverable.owner || undefined,
124
- title: deliverable.title,
125
- code: deliverable.code,
126
- description: deliverable.description,
127
- status: deliverable.status
128
- }
129
- });
130
- // Set work progress
131
- if (deliverable.workProgress) {
132
- const progressInput = {};
133
- if (deliverable.workProgress.value !== undefined) {
134
- progressInput.percentage = deliverable.workProgress.value;
135
- }
136
- else if (deliverable.workProgress.total !== undefined) {
137
- progressInput.storyPoints = {
138
- total: deliverable.workProgress.total,
139
- completed: deliverable.workProgress.completed
140
- };
141
- }
142
- else if (deliverable.workProgress.done !== undefined) {
143
- progressInput.done = deliverable.workProgress.done;
144
- }
145
- if (Object.keys(progressInput).length > 0) {
146
- actions.push({
147
- type: 'SET_DELIVERABLE_PROGRESS',
148
- scope: 'global',
149
- input: {
150
- id: deliverable.id,
151
- workProgress: progressInput
152
- }
153
- });
154
- }
155
- }
156
- // Add key results
157
- if (deliverable.keyResults && deliverable.keyResults.length > 0) {
158
- deliverable.keyResults.forEach((kr) => {
159
- actions.push({
160
- type: 'ADD_KEY_RESULT',
161
- scope: 'global',
162
- input: {
163
- id: kr.id,
164
- deliverableId: deliverable.id,
165
- title: kr.title,
166
- link: kr.link
167
- }
168
- });
169
- });
170
- }
171
- // Set budget anchor if exists
172
- if (deliverable.budgetAnchor && deliverable.budgetAnchor.project) {
173
- actions.push({
174
- type: 'SET_DELIVERABLE_BUDGET_ANCHOR_PROJECT',
175
- scope: 'global',
176
- input: {
177
- deliverableId: deliverable.id,
178
- project: deliverable.budgetAnchor.project,
179
- unit: deliverable.budgetAnchor.unit,
180
- unitCost: deliverable.budgetAnchor.unitCost,
181
- quantity: deliverable.budgetAnchor.quantity,
182
- margin: deliverable.budgetAnchor.margin
183
- }
184
- });
185
- }
186
- }
187
- });
188
- // 4. Add projects if any
189
- if (remoteState.projects && remoteState.projects.length > 0) {
190
- const localProjectsMap = new Map(localState.projects.map((p) => [p.id, p]));
191
- remoteState.projects.forEach((project) => {
192
- const localProject = localProjectsMap.get(project.id);
193
- if (!localProject) {
194
- // Project doesn't exist, add it
195
- actions.push({
196
- type: 'ADD_PROJECT',
197
- scope: 'global',
198
- input: {
199
- id: project.id,
200
- code: project.code,
201
- title: project.title,
202
- projectOwner: project.projectOwner || undefined,
203
- abstract: project.abstract || undefined,
204
- imageUrl: project.imageUrl || undefined,
205
- budgetType: project.budgetType || undefined,
206
- currency: project.currency || undefined,
207
- budget: project.budget || 0
208
- }
209
- });
210
- }
211
- // Add missing deliverables to project scope
212
- if (project.scope && project.scope.deliverables && project.scope.deliverables.length > 0) {
213
- const localDeliverables = new Set(((localProject)?.scope?.deliverables) || []);
214
- project.scope.deliverables.forEach((deliverableId) => {
215
- if (!localDeliverables.has(deliverableId)) {
216
- const deliverable = remoteState.deliverables.find((d) => d.id === deliverableId);
217
- if (deliverable) {
218
- actions.push({
219
- type: 'ADD_DELIVERABLE_IN_SET',
220
- scope: 'global',
221
- input: {
222
- projectId: project.id,
223
- deliverableId: deliverableId
224
- }
225
- });
226
- }
227
- }
228
- });
229
- // Set project scope metadata (status and deliverablesCompleted)
230
- if (project.scope.status || project.scope.deliverablesCompleted) {
231
- actions.push({
232
- type: 'EDIT_DELIVERABLES_SET',
233
- scope: 'global',
234
- input: {
235
- projectId: project.id,
236
- status: project.scope.status || undefined,
237
- deliverablesCompleted: project.scope.deliverablesCompleted || undefined
238
- }
239
- });
240
- }
241
- }
242
- });
243
- }
244
- // 5. Add roadmaps if any
245
- if (remoteState.roadmaps && remoteState.roadmaps.length > 0) {
246
- const localRoadmapIds = new Set(localState.roadmaps.map((r) => r.id));
247
- const localRoadmapsMap = new Map(localState.roadmaps.map((r) => [r.id, r]));
248
- remoteState.roadmaps.forEach((roadmap) => {
249
- const localRoadmap = localRoadmapsMap.get(roadmap.id);
250
- if (!localRoadmap) {
251
- actions.push({
252
- type: 'ADD_ROADMAP',
253
- scope: 'global',
254
- input: {
255
- id: roadmap.id,
256
- title: roadmap.title,
257
- slug: roadmap.slug || undefined,
258
- description: roadmap.description || undefined
259
- }
260
- });
261
- }
262
- // Add milestones for this roadmap
263
- if (roadmap.milestones && roadmap.milestones.length > 0) {
264
- const localMilestonesMap = new Map(((localRoadmap)?.milestones || []).map((m) => [m.id, m]));
265
- roadmap.milestones.forEach((milestone) => {
266
- const localMilestone = localMilestonesMap.get(milestone.id);
267
- if (!localMilestone) {
268
- actions.push({
269
- type: 'ADD_MILESTONE',
270
- scope: 'global',
271
- input: {
272
- id: milestone.id,
273
- roadmapId: roadmap.id,
274
- sequenceCode: milestone.sequenceCode || undefined,
275
- title: milestone.title,
276
- description: milestone.description || undefined,
277
- deliveryTarget: milestone.deliveryTarget || undefined
278
- }
279
- });
280
- }
281
- // Add coordinators for milestone
282
- if (milestone.coordinators && milestone.coordinators.length > 0) {
283
- const localCoordinators = new Set((localMilestone)?.coordinators || []);
284
- milestone.coordinators.forEach((coordinatorId) => {
285
- if (!localCoordinators.has(coordinatorId)) {
286
- actions.push({
287
- type: 'ADD_COORDINATOR',
288
- scope: 'global',
289
- input: {
290
- id: coordinatorId,
291
- milestoneId: milestone.id
292
- }
293
- });
294
- }
295
- });
296
- }
297
- // Add deliverables to milestone
298
- if (milestone.scope && milestone.scope.deliverables && milestone.scope.deliverables.length > 0) {
299
- const localMilestoneDeliverables = new Set(((localMilestone)?.scope?.deliverables) || []);
300
- milestone.scope.deliverables.forEach((deliverableId) => {
301
- if (!localMilestoneDeliverables.has(deliverableId)) {
302
- actions.push({
303
- type: 'ADD_DELIVERABLE_IN_SET',
304
- scope: 'global',
305
- input: {
306
- milestoneId: milestone.id,
307
- deliverableId: deliverableId
308
- }
309
- });
310
- }
311
- });
312
- // Set milestone scope metadata
313
- if (milestone.scope.status || milestone.scope.deliverablesCompleted) {
314
- actions.push({
315
- type: 'EDIT_DELIVERABLES_SET',
316
- scope: 'global',
317
- input: {
318
- milestoneId: milestone.id,
319
- status: milestone.scope.status || undefined,
320
- deliverablesCompleted: milestone.scope.deliverablesCompleted || undefined
321
- }
322
- });
323
- }
324
- }
325
- });
326
- }
327
- });
328
- }
329
- return actions;
330
- }
331
- // Send actions in batches
332
- async function sendActions(actions) {
333
- const BATCH_SIZE = 50;
334
- const batches = [];
335
- for (let i = 0; i < actions.length; i += BATCH_SIZE) {
336
- batches.push(actions.slice(i, i + BATCH_SIZE));
337
- }
338
- console.log(`\nSending ${actions.length} actions in ${batches.length} batches...`);
339
- for (let i = 0; i < batches.length; i++) {
340
- const batch = batches[i];
341
- console.log(`\nBatch ${i + 1}/${batches.length} (${batch.length} actions)...`);
342
- const payload = {
343
- jsonrpc: '2.0',
344
- method: 'tools/call',
345
- params: {
346
- name: 'addActions',
347
- arguments: {
348
- documentId: LOCAL_DOC_ID,
349
- actions: batch
350
- }
351
- },
352
- id: 1000 + i
353
- };
354
- try {
355
- const response = await mcpRequest(LOCAL_MCP_URL, payload);
356
- if (response.error) {
357
- console.error(`Error in batch ${i + 1}:`, JSON.stringify(response.error, null, 2));
358
- throw new Error(`Batch ${i + 1} failed`);
359
- }
360
- console.log(`✓ Batch ${i + 1} completed successfully`);
361
- }
362
- catch (error) {
363
- console.error(`Failed to send batch ${i + 1}:`, error);
364
- throw error;
365
- }
366
- }
367
- }
368
- // Main function
369
- async function main() {
370
- try {
371
- console.log('='.repeat(70));
372
- console.log('Scope of Work State-Based Mirror Script');
373
- console.log('='.repeat(70));
374
- console.log('\nConfiguration:');
375
- console.log(` Remote MCP: ${REMOTE_MCP_URL}`);
376
- console.log(` Remote Drive: ${REMOTE_DRIVE_ID}`);
377
- console.log(` Remote SoW ID: ${REMOTE_DOC_ID}`);
378
- console.log(` Local MCP: ${LOCAL_MCP_URL}`);
379
- console.log(` Local Drive: ${LOCAL_DRIVE_ID}`);
380
- console.log(` Local SoW ID: ${LOCAL_DOC_ID}`);
381
- console.log('');
382
- // Fetch remote document
383
- const remoteDoc = await getRemoteDocument();
384
- const remoteState = remoteDoc.state.global;
385
- console.log(`✓ Remote document fetched: "${remoteState.title}"`);
386
- console.log(` - Status: ${remoteState.status}`);
387
- console.log(` - Contributors: ${remoteState.contributors.length}`);
388
- console.log(` - Deliverables: ${remoteState.deliverables.length}`);
389
- console.log(` - Projects: ${remoteState.projects.length}`);
390
- console.log(` - Roadmaps: ${remoteState.roadmaps.length}`);
391
- // Fetch local document
392
- const localDoc = await getLocalDocument();
393
- const localState = localDoc.state.global;
394
- console.log(`\n✓ Local document fetched: "${localState.title}"`);
395
- console.log(` - Status: ${localState.status}`);
396
- console.log(` - Contributors: ${localState.contributors.length}`);
397
- console.log(` - Deliverables: ${localState.deliverables.length}`);
398
- console.log(` - Projects: ${localState.projects.length}`);
399
- console.log(` - Roadmaps: ${localState.roadmaps.length}`);
400
- // Generate actions
401
- console.log('\nGenerating actions to mirror remote state...');
402
- const actions = generateActions(remoteState, localState);
403
- console.log(`✓ Generated ${actions.length} actions`);
404
- if (actions.length === 0) {
405
- console.log('\n✓ Documents are already in sync!');
406
- return;
407
- }
408
- // Show action summary
409
- const actionTypes = {};
410
- actions.forEach(action => {
411
- actionTypes[action.type] = (actionTypes[action.type] || 0) + 1;
412
- });
413
- console.log('\nAction summary:');
414
- Object.entries(actionTypes).forEach(([type, count]) => {
415
- console.log(` - ${type}: ${count}`);
416
- });
417
- // Send actions
418
- await sendActions(actions);
419
- // Verify final state
420
- console.log('\nVerifying final state...');
421
- const finalLocalDoc = await getLocalDocument();
422
- const finalLocalState = finalLocalDoc.state.global;
423
- console.log(`✓ Final local document state:`);
424
- console.log(` - Title: "${finalLocalState.title}"`);
425
- console.log(` - Status: ${finalLocalState.status}`);
426
- console.log(` - Contributors: ${finalLocalState.contributors.length}`);
427
- console.log(` - Deliverables: ${finalLocalState.deliverables.length}`);
428
- console.log(` - Projects: ${finalLocalState.projects.length}`);
429
- console.log(` - Roadmaps: ${finalLocalState.roadmaps.length}`);
430
- console.log('\n' + '='.repeat(70));
431
- console.log('✓ Mirror complete!');
432
- console.log('='.repeat(70));
433
- }
434
- catch (error) {
435
- console.error('\n✗ Error:', error);
436
- process.exit(1);
437
- }
438
- }
439
- // Run the script
440
- main();
441
- export {};
@@ -1,11 +0,0 @@
1
- import { BaseSubgraph } from "@powerhousedao/reactor-api";
2
- import type { DocumentNode } from "graphql";
3
- export declare class NetworksSubgraph extends BaseSubgraph {
4
- name: string;
5
- typeDefs: DocumentNode;
6
- resolvers: Record<string, unknown>;
7
- additionalContextFields: {};
8
- onSetup(): Promise<void>;
9
- onDisconnect(): Promise<void>;
10
- }
11
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../subgraphs/networks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAI5C,qBAAa,gBAAiB,SAAQ,YAAY;IAChD,IAAI,SAAc;IAClB,QAAQ,EAAE,YAAY,CAAU;IAChC,SAAS,0BAAsB;IAC/B,uBAAuB,KAAM;IACvB,OAAO;IACP,YAAY;CACnB"}
@@ -1,11 +0,0 @@
1
- import { BaseSubgraph } from "@powerhousedao/reactor-api";
2
- import { schema } from "./schema.js";
3
- import { getResolvers } from "./resolvers.js";
4
- export class NetworksSubgraph extends BaseSubgraph {
5
- name = "networks";
6
- typeDefs = schema;
7
- resolvers = getResolvers(this);
8
- additionalContextFields = {};
9
- async onSetup() { }
10
- async onDisconnect() { }
11
- }
@@ -1,3 +0,0 @@
1
- import { type ISubgraph } from "@powerhousedao/reactor-api";
2
- export declare const getResolvers: (subgraph: ISubgraph) => Record<string, unknown>;
3
- //# sourceMappingURL=resolvers.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"resolvers.d.ts","sourceRoot":"","sources":["../../../subgraphs/networks/resolvers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAG5D,eAAO,MAAM,YAAY,GAAI,UAAU,SAAS,KAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAoDxE,CAAC"}