@agentxv2/gateway 0.1.1

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 (175) hide show
  1. package/.env.example +53 -0
  2. package/db/migrations/001_init.sql +117 -0
  3. package/db/migrations/002_agents.sql +20 -0
  4. package/db/migrations/003_a2a_results.sql +23 -0
  5. package/deploy/.env.deploy.example +23 -0
  6. package/deploy/add_swap_build.py +45 -0
  7. package/deploy/build_and_deploy.py +110 -0
  8. package/deploy/build_deploy_a2a.py +190 -0
  9. package/deploy/build_no_lint.py +52 -0
  10. package/deploy/build_on_fe.py +86 -0
  11. package/deploy/build_on_gw.py +98 -0
  12. package/deploy/build_prod.py +54 -0
  13. package/deploy/check_bal.py +31 -0
  14. package/deploy/check_code.py +47 -0
  15. package/deploy/check_deploy.sh +20 -0
  16. package/deploy/check_docs.py +16 -0
  17. package/deploy/check_frontend.py +42 -0
  18. package/deploy/check_frontend2.py +35 -0
  19. package/deploy/check_pks.py +34 -0
  20. package/deploy/check_status.py +32 -0
  21. package/deploy/check_v2.py +8 -0
  22. package/deploy/clean_install.py +28 -0
  23. package/deploy/deploy_a2a.py +58 -0
  24. package/deploy/deploy_a2a.sh +33 -0
  25. package/deploy/deploy_a2a_bg.sh +40 -0
  26. package/deploy/deploy_a2a_v2.py +151 -0
  27. package/deploy/deploy_a2a_v2.sh +36 -0
  28. package/deploy/deploy_bin.py +64 -0
  29. package/deploy/deploy_config.py +34 -0
  30. package/deploy/deploy_final.py +42 -0
  31. package/deploy/deploy_frontend.py +108 -0
  32. package/deploy/deploy_mcp.py +108 -0
  33. package/deploy/deploy_now.py +49 -0
  34. package/deploy/deploy_push_all.py +128 -0
  35. package/deploy/deploy_script.py +64 -0
  36. package/deploy/deploy_sep_a2a.sh +18 -0
  37. package/deploy/dev_mode.py +51 -0
  38. package/deploy/diag.py +12 -0
  39. package/deploy/diff_test.py +22 -0
  40. package/deploy/final_check.py +33 -0
  41. package/deploy/final_deploy.py +50 -0
  42. package/deploy/final_fix.py +54 -0
  43. package/deploy/final_push.py +114 -0
  44. package/deploy/find_frontend.py +38 -0
  45. package/deploy/fix_a2a.py +43 -0
  46. package/deploy/fix_and_build.py +77 -0
  47. package/deploy/fix_and_verify.py +56 -0
  48. package/deploy/fix_build.py +51 -0
  49. package/deploy/forge_deploy.py +67 -0
  50. package/deploy/full_push.py +101 -0
  51. package/deploy/full_push2.py +106 -0
  52. package/deploy/go_prod.py +59 -0
  53. package/deploy/gw_deploy.py +133 -0
  54. package/deploy/gw_final.py +206 -0
  55. package/deploy/gw_restart.py +28 -0
  56. package/deploy/gw_status.py +18 -0
  57. package/deploy/inline_build.py +99 -0
  58. package/deploy/one_shot.py +84 -0
  59. package/deploy/ox_deploy.py +32 -0
  60. package/deploy/pg_setup.py +36 -0
  61. package/deploy/prod_deploy.py +126 -0
  62. package/deploy/prod_final.py +140 -0
  63. package/deploy/prod_go.py +61 -0
  64. package/deploy/prod_one_shot.py +139 -0
  65. package/deploy/prod_setup.sh +62 -0
  66. package/deploy/prod_v2.py +91 -0
  67. package/deploy/prod_v3.py +103 -0
  68. package/deploy/push_docs.py +93 -0
  69. package/deploy/push_mcp.py +66 -0
  70. package/deploy/push_mcp_doc.py +28 -0
  71. package/deploy/push_v063.py +80 -0
  72. package/deploy/push_v2.py +71 -0
  73. package/deploy/qcheck.py +13 -0
  74. package/deploy/qcheck2.py +18 -0
  75. package/deploy/quick_check.py +8 -0
  76. package/deploy/rebuild.py +47 -0
  77. package/deploy/rebuild_frontend.py +44 -0
  78. package/deploy/restart.py +28 -0
  79. package/deploy/restore_frontend.py +42 -0
  80. package/deploy/restore_frontend2.py +41 -0
  81. package/deploy/restore_gateway.py +34 -0
  82. package/deploy/restore_quick.py +33 -0
  83. package/deploy/run_bash.py +19 -0
  84. package/deploy/run_sep.py +20 -0
  85. package/deploy/sdk_upgrade.py +50 -0
  86. package/deploy/server_prepare.py +41 -0
  87. package/deploy/server_setup.py +41 -0
  88. package/deploy/ssh_check.py +14 -0
  89. package/deploy/ssh_push.py +24 -0
  90. package/deploy/start_deploy.py +35 -0
  91. package/deploy/start_frontend.py +12 -0
  92. package/deploy/start_v2.py +29 -0
  93. package/deploy/stat.py +18 -0
  94. package/deploy/tail_log.py +11 -0
  95. package/deploy/update_env.py +32 -0
  96. package/deploy/upload_and_start.py +107 -0
  97. package/deploy/verify_a2a.py +13 -0
  98. package/deploy/verify_mcp.py +37 -0
  99. package/deploy/verify_sdk.py +21 -0
  100. package/dist/config.d.ts +26 -0
  101. package/dist/config.js +41 -0
  102. package/dist/config.js.map +1 -0
  103. package/dist/index.d.ts +1 -0
  104. package/dist/index.js +149 -0
  105. package/dist/index.js.map +1 -0
  106. package/dist/lib/crypto.d.ts +2 -0
  107. package/dist/lib/crypto.js +43 -0
  108. package/dist/lib/crypto.js.map +1 -0
  109. package/dist/lib/db.d.ts +3 -0
  110. package/dist/lib/db.js +26 -0
  111. package/dist/lib/db.js.map +1 -0
  112. package/dist/lib/ethers-utils.d.ts +60 -0
  113. package/dist/lib/ethers-utils.js +186 -0
  114. package/dist/lib/ethers-utils.js.map +1 -0
  115. package/dist/middleware/adminAuth.d.ts +2 -0
  116. package/dist/middleware/adminAuth.js +31 -0
  117. package/dist/middleware/adminAuth.js.map +1 -0
  118. package/dist/middleware/auth.d.ts +22 -0
  119. package/dist/middleware/auth.js +192 -0
  120. package/dist/middleware/auth.js.map +1 -0
  121. package/dist/middleware/error-handler.d.ts +36 -0
  122. package/dist/middleware/error-handler.js +100 -0
  123. package/dist/middleware/error-handler.js.map +1 -0
  124. package/dist/middleware/rate-limiter.d.ts +5 -0
  125. package/dist/middleware/rate-limiter.js +107 -0
  126. package/dist/middleware/rate-limiter.js.map +1 -0
  127. package/dist/routes/a2a.d.ts +2 -0
  128. package/dist/routes/a2a.js +84 -0
  129. package/dist/routes/a2a.js.map +1 -0
  130. package/dist/routes/admin.d.ts +2 -0
  131. package/dist/routes/admin.js +180 -0
  132. package/dist/routes/admin.js.map +1 -0
  133. package/dist/routes/agents.d.ts +2 -0
  134. package/dist/routes/agents.js +43 -0
  135. package/dist/routes/agents.js.map +1 -0
  136. package/dist/routes/chat.d.ts +2 -0
  137. package/dist/routes/chat.js +183 -0
  138. package/dist/routes/chat.js.map +1 -0
  139. package/dist/routes/history.d.ts +2 -0
  140. package/dist/routes/history.js +92 -0
  141. package/dist/routes/history.js.map +1 -0
  142. package/dist/routes/mcp.d.ts +13 -0
  143. package/dist/routes/mcp.js +513 -0
  144. package/dist/routes/mcp.js.map +1 -0
  145. package/dist/routes/tenant.d.ts +2 -0
  146. package/dist/routes/tenant.js +154 -0
  147. package/dist/routes/tenant.js.map +1 -0
  148. package/dist/services/a2a-worker.d.ts +7 -0
  149. package/dist/services/a2a-worker.js +406 -0
  150. package/dist/services/a2a-worker.js.map +1 -0
  151. package/dist/services/agent-indexer.d.ts +4 -0
  152. package/dist/services/agent-indexer.js +124 -0
  153. package/dist/services/agent-indexer.js.map +1 -0
  154. package/e2e_wallet.js +175 -0
  155. package/ecosystem.config.js +17 -0
  156. package/package.json +33 -0
  157. package/src/config.ts +47 -0
  158. package/src/index.ts +143 -0
  159. package/src/lib/crypto.ts +44 -0
  160. package/src/lib/db.ts +25 -0
  161. package/src/lib/ethers-utils.ts +229 -0
  162. package/src/middleware/adminAuth.ts +34 -0
  163. package/src/middleware/auth.ts +244 -0
  164. package/src/middleware/error-handler.ts +109 -0
  165. package/src/middleware/rate-limiter.ts +115 -0
  166. package/src/routes/a2a.ts +97 -0
  167. package/src/routes/admin.ts +219 -0
  168. package/src/routes/agents.ts +52 -0
  169. package/src/routes/chat.ts +219 -0
  170. package/src/routes/history.ts +114 -0
  171. package/src/routes/mcp.ts +567 -0
  172. package/src/routes/tenant.ts +196 -0
  173. package/src/services/a2a-worker.ts +486 -0
  174. package/src/services/agent-indexer.ts +127 -0
  175. package/tsconfig.json +18 -0
@@ -0,0 +1,140 @@
1
+ import paramiko
2
+ import tarfile, os
3
+
4
+ HOST = '43.156.225.164'
5
+ PWD = 'Asdf1234!'
6
+
7
+ # Upload fresh tar
8
+ local_dir = r'c:\Users\apply\Downloads\code\agentx\extracted\Agentx\frontend'
9
+ tar_path = r'c:\Users\apply\Downloads\code\agentx_fe_prod.tar.gz'
10
+
11
+ print("=== Creating tar ===")
12
+ with tarfile.open(tar_path, 'w:gz') as tar:
13
+ for root, dirs, files in os.walk(local_dir):
14
+ dirs[:] = [d for d in dirs if d not in ('node_modules', '.next', '.git', '__pycache__')]
15
+ for f in files:
16
+ if f.endswith('.tsbuildinfo') or f == 'pnpm-lock.yaml': continue
17
+ full = os.path.join(root, f)
18
+ arc = os.path.relpath(full, local_dir).replace('\\', '/')
19
+ tar.add(full, arcname=arc)
20
+
21
+ print("Uploading...")
22
+ t = paramiko.Transport((HOST, 22))
23
+ t.connect(username='ubuntu', password=PWD)
24
+ s = paramiko.SFTPClient.from_transport(t)
25
+ s.put(tar_path, '/tmp/agentx_fe.tar.gz')
26
+ s.close()
27
+ t.close()
28
+
29
+ print("Extracting + building...")
30
+ c = paramiko.SSHClient()
31
+ c.set_missing_host_key_policy(paramiko.AutoAddPolicy())
32
+ c.connect(HOST, username='ubuntu', password=PWD, timeout=30)
33
+
34
+ # Extract
35
+ stdin, stdout, stderr = c.exec_command(
36
+ "rm -rf /home/ubuntu/agentx-platform && mkdir -p /home/ubuntu/agentx-platform && "
37
+ "cd /home/ubuntu/agentx-platform && tar xzf /tmp/agentx_fe.tar.gz && "
38
+ "ls app/page.tsx && echo 'EXTRACT OK' || echo 'EXTRACT FAILED'",
39
+ timeout=30
40
+ )
41
+ print(stdout.read().decode().strip())
42
+
43
+ # Write .env
44
+ env = '''NEXT_PUBLIC_APP_NAME="AgentX"
45
+ NEXT_PUBLIC_APP_URL=http://43.156.225.164:3000
46
+ NEXT_PUBLIC_DEFAULT_CHAIN_ID=11155111
47
+ NEXT_PUBLIC_SEPOLIA_RPC_URL=https://sepolia.infura.io/v3/63ee183a3afa43208e99d6f3f1e7c5fb
48
+ NEXT_PUBLIC_SEPOLIA_IDENTITY_REGISTRY=0xe94ad380d3F8d08a7590eda0C84f354a93F96e5F
49
+ NEXT_PUBLIC_SEPOLIA_SUBSCRIPTION_MANAGER=0xC15fE80b9d800abb72121F353a6ae6d6E9077E63
50
+ NEXT_PUBLIC_SEPOLIA_REPUTATION_REGISTRY=0xeb6B410ea71b8d9dA0c96f6A91d35027CE143DC9
51
+ NEXT_PUBLIC_SEPOLIA_CONFIGURATION_REGISTRY=0x68DcE00e4C9077c94BC68016cD14B09557faEA6c
52
+ NEXT_PUBLIC_SEPOLIA_MULTI_ENDPOINT=0xEB5e866f186d4B73F97aa0d70B86f2C6e2e21Cb7
53
+ NEXT_PUBLIC_SEPOLIA_A2A_PROTOCOL=0x309C7447d89f3087A9924BB686d88df020F7e9cB
54
+ NEXT_PUBLIC_OXACHAIN_RPC_URL=http://43.156.99.215:18545
55
+ NEXT_PUBLIC_OXACHAIN_EXPLORER=http://43.156.99.215:18400
56
+ NEXT_PUBLIC_OXACHAIN_IDENTITY_REGISTRY=0xbf5F9db266c8c97E3334466C88597Eb758AfE212
57
+ NEXT_PUBLIC_OXACHAIN_SUBSCRIPTION_MANAGER=0x019AC9d945467478Dd371CDbD70cb2f325800E6B
58
+ NEXT_PUBLIC_OXACHAIN_REPUTATION_REGISTRY=0x6a18C2664E1b42063860d864b6448b824d7B843F
59
+ NEXT_PUBLIC_OXACHAIN_CONFIGURATION_REGISTRY=0x07280674ccc2898Fd038A9e3C22005CA83ffD2F8
60
+ NEXT_PUBLIC_OXACHAIN_MULTI_ENDPOINT=0xB361d04F49000013FC131D3C59C41c8486C64f8c
61
+ NEXT_PUBLIC_OXACHAIN_A2A_PROTOCOL=0xDF2939EFafEe6439eB2226DbEd07AD6F5Ae2112B
62
+ NEXT_PUBLIC_IDENTITY_REGISTRY_ADDRESS=0xe94ad380d3F8d08a7590eda0C84f354a93F96e5F
63
+ NEXT_PUBLIC_SUBSCRIPTION_MANAGER_ADDRESS=0xC15fE80b9d800abb72121F353a6ae6d6E9077E63
64
+ NEXT_PUBLIC_REPUTATION_REGISTRY_ADDRESS=0xeb6B410ea71b8d9dA0c96f6A91d35027CE143DC9
65
+ NEXT_PUBLIC_CONFIGURATION_REGISTRY_ADDRESS=0x68DcE00e4C9077c94BC68016cD14B09557faEA6c
66
+ NEXT_PUBLIC_MULTI_ENDPOINT_ADDRESS=0xEB5e866f186d4B73F97aa0d70B86f2C6e2e21Cb7
67
+ NEXT_PUBLIC_A2A_PROTOCOL_ADDRESS=0x309C7447d89f3087A9924BB686d88df020F7e9cB
68
+ NEXT_PUBLIC_AGENTX_GATEWAY_URL=http://101.33.109.117:3090
69
+ '''
70
+ import base64
71
+ b64 = base64.b64encode(env.encode()).decode()
72
+ c.exec_command(f"echo '{b64}' | base64 -d > /home/ubuntu/agentx-platform/.env.production", timeout=10)
73
+
74
+ # npm install in background
75
+ print("\n=== npm install (background) ===")
76
+ channel = c.get_transport().open_session()
77
+ channel.exec_command(
78
+ "cd /home/ubuntu/agentx-platform && "
79
+ "npm install > /tmp/npm-install.log 2>&1 && echo 'NPM_DONE' >> /tmp/agentx-deploy.log"
80
+ )
81
+
82
+ # Poll for npm install completion
83
+ import time
84
+ for i in range(30):
85
+ time.sleep(10)
86
+ stdin2, stdout2, stderr2 = c.exec_command("tail -1 /tmp/agentx-deploy.log 2>/dev/null")
87
+ tail = stdout2.read().decode().strip()
88
+ if 'NPM_DONE' in tail:
89
+ print("npm install done")
90
+ break
91
+ print(f" [{i+1}s] installing...")
92
+
93
+ # Build in background
94
+ print("\n=== next build (background, 2-4 min) ===")
95
+ channel2 = c.get_transport().open_session()
96
+ channel2.exec_command(
97
+ "cd /home/ubuntu/agentx-platform && "
98
+ "NODE_OPTIONS='--max-old-space-size=2560' npx next build >> /tmp/agentx-deploy.log 2>&1; "
99
+ "echo 'BUILD_EXIT='$? >> /tmp/agentx-deploy.log"
100
+ )
101
+
102
+ for i in range(40):
103
+ time.sleep(15)
104
+ stdin3, stdout3, stderr3 = c.exec_command("tail -3 /tmp/agentx-deploy.log 2>/dev/null")
105
+ tail = stdout3.read().decode()
106
+ if 'BUILD_EXIT' in tail:
107
+ print(f"\nBUILD RESULT: {tail.strip()}")
108
+ break
109
+ # Show progress
110
+ if i % 4 == 0:
111
+ lines = tail.strip().split('\n')
112
+ last = [l for l in lines if l.strip() and not l.startswith('===')]
113
+ if last:
114
+ print(f" [{i*15}s] {last[-1][:150]}")
115
+ else:
116
+ print("Build timeout. Checking...")
117
+
118
+ # Check result + start
119
+ stdin4, stdout4, stderr4 = c.exec_command(
120
+ "grep BUILD_EXIT /tmp/agentx-deploy.log; "
121
+ "ls /home/ubuntu/agentx-platform/.next/BUILD_ID 2>/dev/null && echo BUILD_ID_OK"
122
+ )
123
+ print(stdout4.read().decode())
124
+
125
+ # Start
126
+ print("\n=== Starting ===")
127
+ c.exec_command("fuser -k 3000/tcp 2>/dev/null; sleep 1", timeout=10)
128
+ channel3 = c.get_transport().open_session()
129
+ channel3.exec_command(
130
+ "cd /home/ubuntu/agentx-platform && "
131
+ "nohup npx next start -p 3000 > /tmp/agentx-run.log 2>&1 & disown; "
132
+ "sleep 5; ss -tlnp | grep 3000 >> /tmp/agentx-deploy.log"
133
+ )
134
+ time.sleep(8)
135
+
136
+ stdin5, stdout5, stderr5 = c.exec_command("ss -tlnp | grep 3000 && echo --- && curl -sI http://localhost:3000/ 2>&1 | head -3")
137
+ print(stdout5.read().decode())
138
+
139
+ c.close()
140
+ print("\n✅ Done")
@@ -0,0 +1,61 @@
1
+ import paramiko, time
2
+
3
+ HOST = '43.156.225.164'
4
+ PWD = 'Asdf1234!'
5
+
6
+ c = paramiko.SSHClient()
7
+ c.set_missing_host_key_policy(paramiko.AutoAddPolicy())
8
+ c.connect(HOST, username='ubuntu', password=PWD, timeout=30)
9
+
10
+ # Run npm install directly (sync)
11
+ print("=== npm install ===")
12
+ stdin, stdout, stderr = c.exec_command(
13
+ "cd /home/ubuntu/agentx-platform && npm install 2>&1 | tail -10",
14
+ timeout=600
15
+ )
16
+ out = stdout.read().decode()
17
+ err = stderr.read().decode()
18
+ print(out)
19
+ if err: print("ERR:", err[-300:])
20
+
21
+ # Verify
22
+ stdin, stdout, stderr = c.exec_command(
23
+ "ls /home/ubuntu/agentx-platform/node_modules/next/package.json 2>/dev/null && echo 'next installed' || echo 'MISSING'; "
24
+ "ls /home/ubuntu/agentx-platform/app/page.tsx && echo 'app exists'"
25
+ )
26
+ print(stdout.read().decode())
27
+
28
+ # Build directly with the installed next (not npx)
29
+ print("\n=== next build ===")
30
+ stdin, stdout, stderr = c.exec_command(
31
+ "cd /home/ubuntu/agentx-platform && "
32
+ "NODE_OPTIONS='--max-old-space-size=2560' ./node_modules/.bin/next build 2>&1 | tail -25",
33
+ timeout=600
34
+ )
35
+ out = stdout.read().decode()
36
+ err = stderr.read().decode()
37
+ print(out)
38
+ if err: print("ERR:", err[-300:])
39
+ ec = stdout.channel.recv_exit_status()
40
+ print(f"\nBuild exit: {ec}")
41
+
42
+ if ec != 0:
43
+ print("BUILD FAILED")
44
+ c.close()
45
+ exit(1)
46
+
47
+ # Kill old + start
48
+ print("\n=== Start ===")
49
+ stdin, stdout, stderr = c.exec_command(
50
+ "fuser -k 3000/tcp 2>/dev/null; sleep 2; "
51
+ "cd /home/ubuntu/agentx-platform && "
52
+ "nohup ./node_modules/.bin/next start -p 3000 > /tmp/agentx-run.log 2>&1 &",
53
+ timeout=10
54
+ )
55
+ time.sleep(6)
56
+
57
+ stdin, stdout, stderr = c.exec_command("ss -tlnp | grep 3000 && echo '---' && curl -sI http://localhost:3000/ 2>&1 | head -5")
58
+ print(stdout.read().decode())
59
+
60
+ c.close()
61
+ print("\n✅ PROD deployed: http://43.156.225.164:3000")
@@ -0,0 +1,139 @@
1
+ import paramiko, tarfile, os, base64, time
2
+
3
+ HOST = '43.156.225.164'
4
+ PWD = 'Asdf1234!'
5
+
6
+ # 1. Create fresh tar
7
+ local_dir = r'c:\Users\apply\Downloads\code\agentx\extracted\Agentx\frontend'
8
+ tar_path = r'c:\Users\apply\Downloads\code\agentx_fe_prod.tar.gz'
9
+
10
+ print("=== Creating tar ===")
11
+ with tarfile.open(tar_path, 'w:gz') as tar:
12
+ for root, dirs, files in os.walk(local_dir):
13
+ dirs[:] = [d for d in dirs if d not in ('node_modules', '.next', '.git', '__pycache__')]
14
+ for f in files:
15
+ if f.endswith('.tsbuildinfo') or f == 'pnpm-lock.yaml': continue
16
+ full = os.path.join(root, f)
17
+ arc = os.path.relpath(full, local_dir).replace('\\', '/')
18
+ tar.add(full, arcname=arc)
19
+ print(f"{os.path.getsize(tar_path)//1024} KB")
20
+
21
+ # 2. Upload
22
+ print("Uploading...")
23
+ t = paramiko.Transport((HOST, 22))
24
+ t.connect(username='ubuntu', password=PWD)
25
+ s = paramiko.SFTPClient.from_transport(t)
26
+ s.put(tar_path, '/tmp/agentx_fe.tar.gz')
27
+ s.close()
28
+ t.close()
29
+
30
+ # 3. Deploy script (all in one)
31
+ script = '''#!/bin/bash
32
+ set -e
33
+ export NODE_OPTIONS="--max-old-space-size=2560"
34
+ APP=/home/ubuntu/agentx-platform
35
+ LOG=/tmp/agentx-deploy.log
36
+ rm -rf $APP && mkdir -p $APP
37
+
38
+ echo "=== extract ===" >> $LOG
39
+ cd $APP && tar xzf /tmp/agentx_fe.tar.gz
40
+
41
+ cat > $APP/.env.production << 'EOF'
42
+ NEXT_PUBLIC_APP_NAME="AgentX"
43
+ NEXT_PUBLIC_APP_URL=http://43.156.225.164:3000
44
+ NEXT_PUBLIC_DEFAULT_CHAIN_ID=11155111
45
+ NEXT_PUBLIC_SEPOLIA_RPC_URL=https://sepolia.infura.io/v3/63ee183a3afa43208e99d6f3f1e7c5fb
46
+ NEXT_PUBLIC_SEPOLIA_IDENTITY_REGISTRY=0xe94ad380d3F8d08a7590eda0C84f354a93F96e5F
47
+ NEXT_PUBLIC_SEPOLIA_SUBSCRIPTION_MANAGER=0xC15fE80b9d800abb72121F353a6ae6d6E9077E63
48
+ NEXT_PUBLIC_SEPOLIA_REPUTATION_REGISTRY=0xeb6B410ea71b8d9dA0c96f6A91d35027CE143DC9
49
+ NEXT_PUBLIC_SEPOLIA_CONFIGURATION_REGISTRY=0x68DcE00e4C9077c94BC68016cD14B09557faEA6c
50
+ NEXT_PUBLIC_SEPOLIA_MULTI_ENDPOINT=0xEB5e866f186d4B73F97aa0d70B86f2C6e2e21Cb7
51
+ NEXT_PUBLIC_SEPOLIA_A2A_PROTOCOL=0x309C7447d89f3087A9924BB686d88df020F7e9cB
52
+ NEXT_PUBLIC_OXACHAIN_RPC_URL=http://43.156.99.215:18545
53
+ NEXT_PUBLIC_OXACHAIN_EXPLORER=http://43.156.99.215:18400
54
+ NEXT_PUBLIC_OXACHAIN_IDENTITY_REGISTRY=0xbf5F9db266c8c97E3334466C88597Eb758AfE212
55
+ NEXT_PUBLIC_OXACHAIN_SUBSCRIPTION_MANAGER=0x019AC9d945467478Dd371CDbD70cb2f325800E6B
56
+ NEXT_PUBLIC_OXACHAIN_REPUTATION_REGISTRY=0x6a18C2664E1b42063860d864b6448b824d7B843F
57
+ NEXT_PUBLIC_OXACHAIN_CONFIGURATION_REGISTRY=0x07280674ccc2898Fd038A9e3C22005CA83ffD2F8
58
+ NEXT_PUBLIC_OXACHAIN_MULTI_ENDPOINT=0xB361d04F49000013FC131D3C59C41c8486C64f8c
59
+ NEXT_PUBLIC_OXACHAIN_A2A_PROTOCOL=0xDF2939EFafEe6439eB2226DbEd07AD6F5Ae2112B
60
+ NEXT_PUBLIC_IDENTITY_REGISTRY_ADDRESS=0xe94ad380d3F8d08a7590eda0C84f354a93F96e5F
61
+ NEXT_PUBLIC_SUBSCRIPTION_MANAGER_ADDRESS=0xC15fE80b9d800abb72121F353a6ae6d6E9077E63
62
+ NEXT_PUBLIC_REPUTATION_REGISTRY_ADDRESS=0xeb6B410ea71b8d9dA0c96f6A91d35027CE143DC9
63
+ NEXT_PUBLIC_CONFIGURATION_REGISTRY_ADDRESS=0x68DcE00e4C9077c94BC68016cD14B09557faEA6c
64
+ NEXT_PUBLIC_MULTI_ENDPOINT_ADDRESS=0xEB5e866f186d4B73F97aa0d70B86f2C6e2e21Cb7
65
+ NEXT_PUBLIC_A2A_PROTOCOL_ADDRESS=0x309C7447d89f3087A9924BB686d88df020F7e9cB
66
+ NEXT_PUBLIC_AGENTX_GATEWAY_URL=http://101.33.109.117:3090
67
+ EOF
68
+
69
+ cat > $APP/.env.local << 'EOF'
70
+ NEXT_PUBLIC_AGENTX_GATEWAY_URL=http://101.33.109.117:3090
71
+ EOF
72
+
73
+ echo "=== npm install ===" >> $LOG
74
+ cd $APP && npm install --legacy-peer-deps 2>&1 | tail -5 >> $LOG
75
+
76
+ echo "=== build ===" >> $LOG
77
+ cd $APP && ./node_modules/.bin/next build 2>&1 | tail -25 >> $LOG
78
+ BUILD_EXIT=${PIPESTATUS[0]}
79
+
80
+ echo "BUILD_EXIT=$BUILD_EXIT" >> $LOG
81
+
82
+ echo "=== start ===" >> $LOG
83
+ fuser -k 3000/tcp 2>/dev/null || true
84
+ sleep 2
85
+ cd $APP && nohup ./node_modules/.bin/next start -p 3000 > /tmp/agentx-run.log 2>&1 &
86
+ sleep 6
87
+ ss -tlnp | grep 3000 >> $LOG
88
+ echo "DONE $(date)" >> $LOG
89
+ '''
90
+
91
+ b64 = base64.b64encode(script.encode()).decode()
92
+ c = paramiko.SSHClient()
93
+ c.set_missing_host_key_policy(paramiko.AutoAddPolicy())
94
+ c.connect(HOST, username='ubuntu', password=PWD, timeout=15)
95
+
96
+ stdin, stdout, stderr = c.exec_command(f"echo '{b64}' | base64 -d > /tmp/go.sh && chmod +x /tmp/go.sh && echo OK")
97
+ print(stdout.read().decode().strip())
98
+
99
+ # Start in background
100
+ channel = c.get_transport().open_session()
101
+ channel.exec_command("nohup bash /tmp/go.sh &>/dev/null & disown")
102
+ time.sleep(2)
103
+ c.close()
104
+
105
+ print("=== Build started. Polling log... ===")
106
+
107
+ # Poll
108
+ for i in range(50):
109
+ time.sleep(15)
110
+ try:
111
+ c2 = paramiko.SSHClient()
112
+ c2.set_missing_host_key_policy(paramiko.AutoAddPolicy())
113
+ c2.connect(HOST, username='ubuntu', password=PWD, timeout=10)
114
+ stdin2, stdout2, stderr2 = c2.exec_command("tail -5 /tmp/agentx-deploy.log 2>/dev/null")
115
+ tail = stdout2.read().decode()
116
+ lines = [l for l in tail.split('\n') if l.strip()]
117
+
118
+ for line in lines:
119
+ if 'DONE' in line:
120
+ print(f"\n✅ {line}")
121
+ c2.close()
122
+ # Verify
123
+ stdin3, stdout3, stderr3 = c2.exec_command("ss -tlnp | grep 3000 && curl -sI http://localhost:3000/ 2>&1 | head -3")
124
+ print(stdout3.read().decode())
125
+ exit(0)
126
+ if 'FAIL' in line or 'Error' in line:
127
+ print(f" ⚠️ {line[:200]}")
128
+
129
+ # Status line
130
+ if lines and '===' in lines[-1]:
131
+ print(f" [{i*15}s] {lines[-1][:100]}")
132
+ elif lines and ('Compiling' in tail or 'Route' in tail or 'Static' in tail or 'BUILD' in tail):
133
+ print(f" [{i*15}s] {lines[-1][:150]}")
134
+
135
+ c2.close()
136
+ except:
137
+ continue
138
+
139
+ print("\nCheck: http://43.156.225.164:3000")
@@ -0,0 +1,62 @@
1
+ #!/bin/bash
2
+ set -e
3
+ APP_DIR=/home/ubuntu/agentx-platform
4
+ LOG=/tmp/agentx-deploy.log
5
+ PORT=3000
6
+
7
+ exec > >(tee -a $LOG) 2>&1
8
+ echo "===== AgentX Deploy $(date) ====="
9
+
10
+ # Extract
11
+ cd /tmp
12
+ tar xzf /tmp/agentx_fe.tar.gz -C $APP_DIR/
13
+ echo "extracted"
14
+
15
+ # Write env files
16
+ cat > $APP_DIR/.env.production << 'ENVEOF'
17
+ NEXT_PUBLIC_APP_NAME="AgentX"
18
+ NEXT_PUBLIC_APP_URL=http://43.156.225.164:3000
19
+ NEXT_PUBLIC_DEFAULT_CHAIN_ID=11155111
20
+ NEXT_PUBLIC_SEPOLIA_RPC_URL=https://sepolia.infura.io/v3/63ee183a3afa43208e99d6f3f1e7c5fb
21
+ NEXT_PUBLIC_SEPOLIA_IDENTITY_REGISTRY=0xe94ad380d3F8d08a7590eda0C84f354a93F96e5F
22
+ NEXT_PUBLIC_SEPOLIA_SUBSCRIPTION_MANAGER=0xC15fE80b9d800abb72121F353a6ae6d6E9077E63
23
+ NEXT_PUBLIC_SEPOLIA_REPUTATION_REGISTRY=0xeb6B410ea71b8d9dA0c96f6A91d35027CE143DC9
24
+ NEXT_PUBLIC_SEPOLIA_CONFIGURATION_REGISTRY=0x68DcE00e4C9077c94BC68016cD14B09557faEA6c
25
+ NEXT_PUBLIC_SEPOLIA_MULTI_ENDPOINT=0xEB5e866f186d4B73F97aa0d70B86f2C6e2e21Cb7
26
+ NEXT_PUBLIC_SEPOLIA_A2A_PROTOCOL=0x309C7447d89f3087A9924BB686d88df020F7e9cB
27
+ NEXT_PUBLIC_OXACHAIN_RPC_URL=http://43.156.99.215:18545
28
+ NEXT_PUBLIC_OXACHAIN_EXPLORER=http://43.156.99.215:18400
29
+ NEXT_PUBLIC_OXACHAIN_IDENTITY_REGISTRY=0xbf5F9db266c8c97E3334466C88597Eb758AfE212
30
+ NEXT_PUBLIC_OXACHAIN_SUBSCRIPTION_MANAGER=0x019AC9d945467478Dd371CDbD70cb2f325800E6B
31
+ NEXT_PUBLIC_OXACHAIN_REPUTATION_REGISTRY=0x6a18C2664E1b42063860d864b6448b824d7B843F
32
+ NEXT_PUBLIC_OXACHAIN_CONFIGURATION_REGISTRY=0x07280674ccc2898Fd038A9e3C22005CA83ffD2F8
33
+ NEXT_PUBLIC_OXACHAIN_MULTI_ENDPOINT=0xB361d04F49000013FC131D3C59C41c8486C64f8c
34
+ NEXT_PUBLIC_OXACHAIN_A2A_PROTOCOL=0xDF2939EFafEe6439eB2226DbEd07AD6F5Ae2112B
35
+ NEXT_PUBLIC_IDENTITY_REGISTRY_ADDRESS=0xe94ad380d3F8d08a7590eda0C84f354a93F96e5F
36
+ NEXT_PUBLIC_SUBSCRIPTION_MANAGER_ADDRESS=0xC15fE80b9d800abb72121F353a6ae6d6E9077E63
37
+ NEXT_PUBLIC_REPUTATION_REGISTRY_ADDRESS=0xeb6B410ea71b8d9dA0c96f6A91d35027CE143DC9
38
+ NEXT_PUBLIC_CONFIGURATION_REGISTRY_ADDRESS=0x68DcE00e4C9077c94BC68016cD14B09557faEA6c
39
+ NEXT_PUBLIC_MULTI_ENDPOINT_ADDRESS=0xEB5e866f186d4B73F97aa0d70B86f2C6e2e21Cb7
40
+ NEXT_PUBLIC_A2A_PROTOCOL_ADDRESS=0x309C7447d89f3087A9924BB686d88df020F7e9cB
41
+ NEXT_PUBLIC_AGENTX_GATEWAY_URL=http://101.33.109.117:3090
42
+ ENVEOF
43
+
44
+ cat > $APP_DIR/.env.local << 'EOF'
45
+ NEXT_PUBLIC_AGENTX_GATEWAY_URL=http://101.33.109.117:3090
46
+ EOF
47
+
48
+ echo "=== npm install ==="
49
+ cd $APP_DIR
50
+ npm install 2>&1 | tail -5
51
+
52
+ echo "=== next build ==="
53
+ NODE_OPTIONS="--max-old-space-size=2560" npx next build 2>&1 | tail -25
54
+
55
+ echo "=== starting port $PORT ==="
56
+ fuser -k $PORT/tcp 2>/dev/null || true
57
+ nohup npx next start -p $PORT > /tmp/agentx-run.log 2>&1 &
58
+ sleep 6
59
+ ss -tlnp | grep $PORT
60
+ curl -sI http://localhost:$PORT/ 2>&1 | head -3
61
+
62
+ echo "===== DONE $(date) ====="
@@ -0,0 +1,91 @@
1
+ import paramiko
2
+ import tarfile
3
+ import os
4
+ import time
5
+
6
+ HOST = '43.156.225.164'
7
+ PWD = 'Asdf1234!'
8
+
9
+ # 1. Create tar
10
+ local_dir = r'c:\Users\apply\Downloads\code\agentx\extracted\Agentx\frontend'
11
+ tar_path = r'c:\Users\apply\Downloads\code\agentx_fe_prod.tar.gz'
12
+ sh_path = r'c:\Users\apply\Downloads\code\agentx\extracted\Agentx\gateway\deploy\prod_setup.sh'
13
+
14
+ print("=== Creating tar ===")
15
+ count = 0
16
+ with tarfile.open(tar_path, 'w:gz') as tar:
17
+ for root, dirs, files in os.walk(local_dir):
18
+ dirs[:] = [d for d in dirs if d not in ('node_modules', '.next', '.git', '__pycache__')]
19
+ for f in files:
20
+ if f.endswith('.tsbuildinfo') or f == 'pnpm-lock.yaml': continue
21
+ full = os.path.join(root, f)
22
+ arc = os.path.relpath(full, local_dir).replace('\\', '/')
23
+ tar.add(full, arcname=arc)
24
+ count += 1
25
+ print(f"{count} files, {os.path.getsize(tar_path)//1024} KB")
26
+
27
+ # 2. Upload both files via SFTP
28
+ print("\n=== Uploading ===")
29
+ t = paramiko.Transport((HOST, 22))
30
+ t.connect(username='ubuntu', password=PWD)
31
+ sftp = paramiko.SFTPClient.from_transport(t)
32
+ sftp.put(tar_path, '/tmp/agentx_fe.tar.gz')
33
+ sftp.put(sh_path, '/tmp/agentx_setup.sh')
34
+ sftp.close()
35
+ t.close()
36
+
37
+ # 3. Start background deploy
38
+ print("\n=== Starting deploy script ===")
39
+ c = paramiko.SSHClient()
40
+ c.set_missing_host_key_policy(paramiko.AutoAddPolicy())
41
+ c.connect(HOST, username='ubuntu', password=PWD, timeout=15)
42
+ stdin, stdout, stderr = c.exec_command(
43
+ "rm -rf /home/ubuntu/agentx-platform && mkdir -p /home/ubuntu/agentx-platform && "
44
+ "chmod +x /tmp/agentx_setup.sh && "
45
+ "nohup bash /tmp/agentx_setup.sh > /tmp/agentx-deploy.log 2>&1 & "
46
+ "echo 'PID='$!",
47
+ timeout=10
48
+ )
49
+ print(stdout.read().decode().strip())
50
+ c.close()
51
+
52
+ print("\nDeploy running in background. Checking progress...")
53
+
54
+ # 4. Poll log every 30s
55
+ for attempt in range(20):
56
+ time.sleep(30)
57
+ try:
58
+ c = paramiko.SSHClient()
59
+ c.set_missing_host_key_policy(paramiko.AutoAddPolicy())
60
+ c.connect(HOST, username='ubuntu', password=PWD, timeout=10)
61
+ stdin, stdout, stderr = c.exec_command(
62
+ "tail -8 /tmp/agentx-deploy.log 2>/dev/null; "
63
+ "echo '---CHECK---'; "
64
+ "ps aux | grep -E 'next (build|start)' | grep -v grep | head -2"
65
+ )
66
+ out = stdout.read().decode()
67
+ print(f"\n[{attempt+1}] {out.strip()[:400]}")
68
+
69
+ if 'DONE' in out:
70
+ print("\n✅ Deploy completed!")
71
+ c.close()
72
+ break
73
+ if 'FAILED' in out or 'error' in out.lower():
74
+ print("\n⚠️ Check log for errors")
75
+ c.close()
76
+ break
77
+
78
+ c.close()
79
+ except Exception as e:
80
+ print(f" Poll error: {e}")
81
+ continue
82
+
83
+ print("\n=== Verifying ===")
84
+ c = paramiko.SSHClient()
85
+ c.set_missing_host_key_policy(paramiko.AutoAddPolicy())
86
+ c.connect(HOST, username='ubuntu', password=PWD, timeout=10)
87
+ stdin, stdout, stderr = c.exec_command(
88
+ "ss -tlnp | grep 3000; echo ---; curl -sI http://localhost:3000/ 2>&1 | head -3"
89
+ )
90
+ print(stdout.read().decode())
91
+ c.close()
@@ -0,0 +1,103 @@
1
+ import paramiko
2
+ import tarfile
3
+ import os
4
+ import time
5
+
6
+ HOST = '43.156.225.164'
7
+ PWD = 'Asdf1234!'
8
+
9
+ # 1. Create tar
10
+ local_dir = r'c:\Users\apply\Downloads\code\agentx\extracted\Agentx\frontend'
11
+ tar_path = r'c:\Users\apply\Downloads\code\agentx_fe_prod.tar.gz'
12
+ sh_path = r'c:\Users\apply\Downloads\code\agentx\extracted\Agentx\gateway\deploy\prod_setup.sh'
13
+
14
+ print("=== Creating tar ===")
15
+ count = 0
16
+ with tarfile.open(tar_path, 'w:gz') as tar:
17
+ for root, dirs, files in os.walk(local_dir):
18
+ dirs[:] = [d for d in dirs if d not in ('node_modules', '.next', '.git', '__pycache__')]
19
+ for f in files:
20
+ if f.endswith('.tsbuildinfo') or f == 'pnpm-lock.yaml': continue
21
+ full = os.path.join(root, f)
22
+ arc = os.path.relpath(full, local_dir).replace('\\', '/')
23
+ tar.add(full, arcname=arc)
24
+ count += 1
25
+ print(f"{count} files, {os.path.getsize(tar_path)//1024} KB")
26
+
27
+ # 2. Upload both files via SFTP
28
+ print("\n=== Uploading ===")
29
+ t = paramiko.Transport((HOST, 22))
30
+ t.connect(username='ubuntu', password=PWD)
31
+ sftp = paramiko.SFTPClient.from_transport(t)
32
+ sftp.put(tar_path, '/tmp/agentx_fe.tar.gz')
33
+ sftp.put(sh_path, '/tmp/agentx_setup.sh')
34
+ sftp.close()
35
+ t.close()
36
+
37
+ # 3. Start deploy via exec_command (don't read stdout for nohup)
38
+ print("\n=== Triggering deploy ===")
39
+ c = paramiko.SSHClient()
40
+ c.set_missing_host_key_policy(paramiko.AutoAddPolicy())
41
+ c.connect(HOST, username='ubuntu', password=PWD, timeout=10)
42
+
43
+ # Use channel directly to avoid read timeout on nohup
44
+ channel = c.get_transport().open_session()
45
+ channel.exec_command(
46
+ "rm -rf /home/ubuntu/agentx-platform && mkdir -p /home/ubuntu/agentx-platform && "
47
+ "chmod +x /tmp/agentx_setup.sh && "
48
+ "nohup bash /tmp/agentx_setup.sh > /tmp/agentx-deploy.log 2>&1 & disown; echo 'OK'"
49
+ )
50
+ time.sleep(2)
51
+ # Read what we can
52
+ try:
53
+ out = channel.recv(1024).decode()
54
+ print(f"Trigger: {out.strip()}")
55
+ except:
56
+ print("Trigger: launched (no output)")
57
+ channel.close()
58
+ c.close()
59
+
60
+ print("\n=== Deploy running. Polling... ===")
61
+
62
+ # 4. Poll log every 30s
63
+ for attempt in range(25):
64
+ time.sleep(30)
65
+ try:
66
+ c2 = paramiko.SSHClient()
67
+ c2.set_missing_host_key_policy(paramiko.AutoAddPolicy())
68
+ c2.connect(HOST, username='ubuntu', password=PWD, timeout=10)
69
+ stdin, stdout, stderr = c2.exec_command(
70
+ "tail -10 /tmp/agentx-deploy.log 2>/dev/null"
71
+ )
72
+ out = stdout.read().decode().strip()
73
+ # Show last meaningful line
74
+ lines = [l for l in out.split('\n') if l.strip()]
75
+ if lines:
76
+ print(f"[{attempt+1}] {lines[-1][:200]}")
77
+
78
+ if 'DONE' in out:
79
+ print("\n✅ DEPLOY COMPLETE!")
80
+ c2.close()
81
+ break
82
+ if '=== next build ===' in out and attempt > 0:
83
+ # Build just started
84
+ if 'Compiled' in out or 'Static' in out:
85
+ print(f" Build output seen...")
86
+
87
+ c2.close()
88
+ except Exception as e:
89
+ print(f"[{attempt+1}] Poll error: {e}")
90
+ continue
91
+ else:
92
+ print("\nTimeout waiting for deploy. Check log manually.")
93
+
94
+ # 5. Verify
95
+ print("\n=== Verification ===")
96
+ c3 = paramiko.SSHClient()
97
+ c3.set_missing_host_key_policy(paramiko.AutoAddPolicy())
98
+ c3.connect(HOST, username='ubuntu', password=PWD, timeout=10)
99
+ stdin, stdout, stderr = c3.exec_command(
100
+ "echo 'Port:'; ss -tlnp | grep 3000; echo 'HTTP:'; curl -sI http://localhost:3000/ 2>&1 | head -3"
101
+ )
102
+ print(stdout.read().decode())
103
+ c3.close()