aios-management-web 0.1.0

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 (91) hide show
  1. package/.env.json +21 -0
  2. package/README.md +257 -0
  3. package/data/management-console.db +0 -0
  4. package/data/management-console.db-shm +0 -0
  5. package/data/management-console.db-wal +0 -0
  6. package/dist/assets/index-CV_wjCAG.js +464 -0
  7. package/dist/assets/index-DfMPB0eV.css +1 -0
  8. package/dist/index.html +13 -0
  9. package/docs/spec.md +199 -0
  10. package/index.html +12 -0
  11. package/package.json +37 -0
  12. package/scripts/reset-kernel.js +59 -0
  13. package/scripts/reset-password.js +22 -0
  14. package/server/fakes.js +57 -0
  15. package/server/index.js +21 -0
  16. package/server/src/api/middleware/auth.js +29 -0
  17. package/server/src/api/middleware/internal.js +44 -0
  18. package/server/src/api/routes/index.js +677 -0
  19. package/server/src/app.js +90 -0
  20. package/server/src/background/index.js +106 -0
  21. package/server/src/background/protocol.js +15 -0
  22. package/server/src/config/env.js +90 -0
  23. package/server/src/db/index.js +501 -0
  24. package/server/src/infra/mqtt/management-rpc-client.js +213 -0
  25. package/server/src/infra/providers/hzg-provider-client.js +39 -0
  26. package/server/src/infra/s3/object-storage.js +97 -0
  27. package/server/src/services/agent-quota.js +54 -0
  28. package/server/src/services/agent-service.js +696 -0
  29. package/server/src/services/agent-status-sync-service.js +132 -0
  30. package/server/src/services/audit-log-service.js +39 -0
  31. package/server/src/services/auth-service.js +153 -0
  32. package/server/src/services/catalog-sync-service.js +712 -0
  33. package/server/src/services/external-service.js +308 -0
  34. package/server/src/services/kernel-reset-service.js +86 -0
  35. package/server/src/services/portal-service.js +555 -0
  36. package/server/src/services/system-service.js +580 -0
  37. package/server/src/services/topic-ping-service.js +282 -0
  38. package/server/src/utils/errors.js +36 -0
  39. package/server/src/utils/security.js +22 -0
  40. package/server/test/agent-service-alignment.test.js +316 -0
  41. package/server/test/agent-service-create.test.js +662 -0
  42. package/server/test/agent-status-sync-service.test.js +167 -0
  43. package/server/test/agent-update-audit.test.js +63 -0
  44. package/server/test/auth-middleware.test.js +71 -0
  45. package/server/test/background-services.test.js +160 -0
  46. package/server/test/catalog-sync-service.test.js +920 -0
  47. package/server/test/db-reset-migration.test.js +123 -0
  48. package/server/test/env-config.test.js +68 -0
  49. package/server/test/external-service.test.js +380 -0
  50. package/server/test/hzg-provider-client.test.js +50 -0
  51. package/server/test/internal-auth-middleware.test.js +66 -0
  52. package/server/test/kernel-reset-service.test.js +112 -0
  53. package/server/test/management-rpc-client.test.js +105 -0
  54. package/server/test/portal-service-access-tokens.test.js +121 -0
  55. package/server/test/portal-service-alignment.test.js +318 -0
  56. package/server/test/portal-service-management-logs.test.js +114 -0
  57. package/server/test/reset-kernel-cli.test.js +23 -0
  58. package/server/test/service-api-auth-middleware.test.js +59 -0
  59. package/server/test/system-service-alignment.test.js +265 -0
  60. package/server/test/topic-ping-service.test.js +182 -0
  61. package/server/test/usage-refresh-audit-route.test.js +82 -0
  62. package/src/App.jsx +1 -0
  63. package/src/api.js +1 -0
  64. package/src/app/App.jsx +346 -0
  65. package/src/app/api-client.js +112 -0
  66. package/src/components/AppShell.jsx +117 -0
  67. package/src/components/CardTitleWithReload.jsx +20 -0
  68. package/src/components/DeleteActionButton.jsx +31 -0
  69. package/src/main.jsx +14 -0
  70. package/src/pages/AgentsPage.jsx +647 -0
  71. package/src/pages/AiosUsersPage.jsx +151 -0
  72. package/src/pages/DashboardPage.jsx +72 -0
  73. package/src/pages/LoginPage.jsx +41 -0
  74. package/src/pages/SettingsPage.jsx +431 -0
  75. package/src/pages/SkillsPage.jsx +175 -0
  76. package/src/pages/SystemLogsPage.jsx +349 -0
  77. package/src/pages/SystemsPage.jsx +498 -0
  78. package/src/pages/TemplatesPage.jsx +207 -0
  79. package/src/pages/UserManagementPage.jsx +25 -0
  80. package/src/pages/UsersPage.jsx +192 -0
  81. package/src/pages/system-logs/SystemLogsTabs.jsx +362 -0
  82. package/src/styles.css +222 -0
  83. package/src/utils/format.js +63 -0
  84. package/test/.reports/fast-2026-05-25T08-32-39-420Z.json +299 -0
  85. package/test/integration/common.js +208 -0
  86. package/test/integration/fast.js +135 -0
  87. package/test/integration/full.js +306 -0
  88. package/test/run-browser-e2e.js +212 -0
  89. package/test/run-jasmine.js +21 -0
  90. package/test/setup.js +1 -0
  91. package/vite.config.js +12 -0
package/src/styles.css ADDED
@@ -0,0 +1,222 @@
1
+ html,
2
+ body,
3
+ #root {
4
+ margin: 0;
5
+ min-height: 100%;
6
+ background: #f3f7f5;
7
+ }
8
+
9
+ body {
10
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial,
11
+ "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol",
12
+ "Noto Color Emoji";
13
+ color: #172b1d;
14
+ }
15
+
16
+ .app-shell {
17
+ min-height: 100vh;
18
+ }
19
+
20
+ .portal-sider .ant-layout-sider-children {
21
+ display: flex;
22
+ flex-direction: column;
23
+ }
24
+
25
+ .brand-block {
26
+ padding: 20px 18px 12px;
27
+ color: #fff;
28
+ font-weight: 700;
29
+ line-height: 1.5;
30
+ min-width: 0;
31
+ }
32
+
33
+ .brand-title,
34
+ .brand-subtitle {
35
+ display: block;
36
+ overflow: hidden;
37
+ text-overflow: ellipsis;
38
+ white-space: nowrap;
39
+ }
40
+
41
+ .brand-subtitle {
42
+ color: rgba(255,255,255,0.7) !important;
43
+ }
44
+
45
+ .portal-sider-menu {
46
+ flex: 0 0 auto;
47
+ }
48
+
49
+ .portal-header {
50
+ background: #fff;
51
+ padding: 0 20px;
52
+ border-bottom: 1px solid #e2ede5;
53
+ display: flex;
54
+ justify-content: flex-end;
55
+ align-items: center;
56
+ gap: 16px;
57
+ }
58
+
59
+ .portal-header-actions {
60
+ flex: 0 0 auto;
61
+ }
62
+
63
+ .portal-content {
64
+ padding: 20px;
65
+ min-width: 0;
66
+ }
67
+
68
+ .page-card {
69
+ box-shadow: 0 10px 30px rgba(22, 74, 44, 0.08);
70
+ }
71
+
72
+ .page-card .ant-card-head {
73
+ min-height: 64px;
74
+ }
75
+
76
+ .page-card .ant-card-head-wrapper {
77
+ gap: 16px;
78
+ align-items: center;
79
+ }
80
+
81
+ .page-card .ant-card-head-title {
82
+ min-width: 0;
83
+ overflow: hidden;
84
+ text-overflow: ellipsis;
85
+ white-space: nowrap;
86
+ }
87
+
88
+ .page-card .ant-card-extra {
89
+ flex: 0 0 auto;
90
+ margin-inline-start: 12px;
91
+ }
92
+
93
+ .sync-status-descriptions .ant-descriptions-view table {
94
+ table-layout: fixed;
95
+ }
96
+
97
+ .sync-status-descriptions .ant-descriptions-item-label {
98
+ width: 140px;
99
+ }
100
+
101
+ .metric-grid {
102
+ display: grid;
103
+ grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
104
+ gap: 16px;
105
+ margin-bottom: 20px;
106
+ }
107
+
108
+ .metric-card {
109
+ padding: 18px;
110
+ border-radius: 6px;
111
+ border: 1px solid #d9eadf;
112
+ background: linear-gradient(135deg, #ffffff, #eef9f1);
113
+ }
114
+
115
+ .metric-label {
116
+ font-size: 13px;
117
+ color: #5a6f5f;
118
+ }
119
+
120
+ .metric-value {
121
+ margin-top: 10px;
122
+ font-size: 28px;
123
+ font-weight: 700;
124
+ }
125
+
126
+ .table-toolbar {
127
+ display: flex;
128
+ gap: 12px;
129
+ justify-content: space-between;
130
+ flex-wrap: wrap;
131
+ margin-bottom: 16px;
132
+ }
133
+
134
+ .login-shell {
135
+ min-height: 100vh;
136
+ display: grid;
137
+ place-items: center;
138
+ background:
139
+ radial-gradient(circle at top right, rgba(7, 193, 96, 0.18), transparent 28%),
140
+ radial-gradient(circle at bottom left, rgba(14, 174, 87, 0.12), transparent 24%),
141
+ linear-gradient(180deg, #f8fffa, #edf7f0);
142
+ }
143
+
144
+ .login-card {
145
+ width: min(460px, calc(100vw - 32px));
146
+ box-shadow: 0 20px 60px rgba(20, 83, 45, 0.12);
147
+ }
148
+
149
+ .thread-list {
150
+ display: grid;
151
+ gap: 10px;
152
+ }
153
+
154
+ .thread-item {
155
+ padding: 12px;
156
+ border: 1px solid #d9eadf;
157
+ border-radius: 6px;
158
+ background: #fff;
159
+ cursor: pointer;
160
+ }
161
+
162
+ .thread-item:hover {
163
+ border-color: #07c160;
164
+ }
165
+
166
+ .message-stack {
167
+ display: grid;
168
+ gap: 10px;
169
+ }
170
+
171
+ .message-card {
172
+ padding: 12px 14px;
173
+ border-radius: 6px;
174
+ background: #f8fffa;
175
+ border: 1px solid #d9eadf;
176
+ }
177
+
178
+ .message-card.outbound {
179
+ background: #f0fff6;
180
+ border-color: #b9ebc9;
181
+ }
182
+
183
+ .server-command-output {
184
+ margin-top: 16px;
185
+ }
186
+
187
+ .server-command-output .ant-input {
188
+ font-family: "Courier New", Courier, monospace;
189
+ min-height: 300px !important;
190
+ }
191
+
192
+ .server-command-output-textarea.ant-input {
193
+ background: #111;
194
+ color: #fff;
195
+ }
196
+
197
+ .server-command-output-textarea.ant-input::placeholder {
198
+ color: rgba(255, 255, 255, 0.55);
199
+ }
200
+
201
+ .server-command-loading {
202
+ min-height: 160px;
203
+ display: grid;
204
+ place-items: center;
205
+ gap: 16px;
206
+ }
207
+
208
+ @media (max-width: 960px) {
209
+ .portal-header {
210
+ padding: 12px;
211
+ height: auto;
212
+ align-items: flex-start;
213
+ }
214
+
215
+ .portal-header-actions {
216
+ align-self: stretch;
217
+ }
218
+
219
+ .portal-content {
220
+ padding: 12px;
221
+ }
222
+ }
@@ -0,0 +1,63 @@
1
+ const chinaDateTimeFormatter = new Intl.DateTimeFormat("zh-CN", {
2
+ timeZone: "Asia/Shanghai",
3
+ year: "numeric",
4
+ month: "2-digit",
5
+ day: "2-digit",
6
+ hour: "2-digit",
7
+ minute: "2-digit",
8
+ second: "2-digit",
9
+ hour12: false
10
+ });
11
+
12
+ export function formatDateTime(value) {
13
+ if (!value) {
14
+ return "-";
15
+ }
16
+
17
+ const date = value instanceof Date ? value : new Date(value);
18
+ if (Number.isNaN(date.getTime())) {
19
+ return "-";
20
+ }
21
+
22
+ const parts = Object.fromEntries(
23
+ chinaDateTimeFormatter
24
+ .formatToParts(date)
25
+ .filter((part) => part.type !== "literal")
26
+ .map((part) => [part.type, part.value])
27
+ );
28
+
29
+ return `${parts.year}-${parts.month}-${parts.day} ${parts.hour}:${parts.minute}:${parts.second}`;
30
+ }
31
+
32
+ export function formatTokenCount(value) {
33
+ const amount = Number(value ?? 0);
34
+ if (!Number.isFinite(amount)) {
35
+ return "0";
36
+ }
37
+
38
+ const absAmount = Math.abs(amount);
39
+ const units = [
40
+ { threshold: 1000000000, suffix: "B" },
41
+ { threshold: 1000000, suffix: "M" },
42
+ { threshold: 1000, suffix: "K" }
43
+ ];
44
+
45
+ for (const unit of units) {
46
+ if (absAmount < unit.threshold) {
47
+ continue;
48
+ }
49
+
50
+ const scaled = amount / unit.threshold;
51
+ const digits = Math.abs(scaled) >= 10 ? 0 : 1;
52
+ return `${scaled.toFixed(digits).replace(/\.0$/, "")}${unit.suffix}`;
53
+ }
54
+
55
+ return String(amount);
56
+ }
57
+
58
+ export function parseCsv(value) {
59
+ return String(value || "")
60
+ .split(",")
61
+ .map((item) => item.trim())
62
+ .filter(Boolean);
63
+ }
@@ -0,0 +1,299 @@
1
+ {
2
+ "name": "fast",
3
+ "startedAt": "2026-05-25T08:31:57.048Z",
4
+ "actions": [
5
+ {
6
+ "action": "auth.login",
7
+ "ok": true,
8
+ "status": 200,
9
+ "body": {
10
+ "token": "51ffe246b9eca7cf3eda37bfd83947bd7c5a55b5d18e2c9d6659e52404e3ef53",
11
+ "user": {
12
+ "id": 1,
13
+ "role": "admin",
14
+ "username": "aios",
15
+ "display_name": "AIOS 管理员",
16
+ "status": "active",
17
+ "is_builtin": true,
18
+ "must_change_password": true,
19
+ "tags": [
20
+ "builtin",
21
+ "ops"
22
+ ]
23
+ }
24
+ }
25
+ },
26
+ {
27
+ "action": "templates.create",
28
+ "ok": true,
29
+ "status": 201,
30
+ "body": {
31
+ "id": 4,
32
+ "template_name": "tmpl1779697917049",
33
+ "description": "fast integration template",
34
+ "artifact_id": 9,
35
+ "remote_status": "ready",
36
+ "remote_result_json": "{\"templateName\":\"tmpl1779697917049\",\"path\":\"/var/aios/workspace-templates/tmpl1779697917049\",\"updatedAt\":\"2026-05-25T08:31:57.252Z\",\"isDefault\":false,\"agentIds\":[]}",
37
+ "created_at": "2026-05-25T08:31:57.263Z",
38
+ "updated_at": "2026-05-25T08:31:57.263Z",
39
+ "artifact_name": "finance.zip",
40
+ "agent_slugs": [],
41
+ "remote_result": {
42
+ "templateName": "tmpl1779697917049",
43
+ "path": "/var/aios/workspace-templates/tmpl1779697917049",
44
+ "updatedAt": "2026-05-25T08:31:57.252Z",
45
+ "isDefault": false,
46
+ "agentIds": []
47
+ }
48
+ }
49
+ },
50
+ {
51
+ "action": "agents.create",
52
+ "ok": true,
53
+ "status": 201,
54
+ "body": {
55
+ "id": 4,
56
+ "slug": "agent1779697917049",
57
+ "description": "fast integration agent",
58
+ "docs_content": "# Agent\n\nFast integration test.\n",
59
+ "template_name": "tmpl1779697917049",
60
+ "status": "active",
61
+ "tags_json": "[\"fast\"]",
62
+ "model_json": "{\"primary\":\"gpt-4.1-mini\",\"fallbacks\":[]}",
63
+ "daily_warn": 4000,
64
+ "daily_limit": 5000,
65
+ "weekly_warn": 20000,
66
+ "weekly_limit": 25000,
67
+ "monthly_warn": 80000,
68
+ "monthly_limit": 100000,
69
+ "lifetime_warn": 400000,
70
+ "lifetime_limit": 500000,
71
+ "usage_snapshot_json": "{}",
72
+ "remote_state_json": "{}",
73
+ "created_at": "2026-05-25T08:32:05.239Z",
74
+ "updated_at": "2026-05-25T08:32:05.239Z",
75
+ "tags": [
76
+ "fast"
77
+ ],
78
+ "model": {
79
+ "primary": "gpt-4.1-mini",
80
+ "fallbacks": []
81
+ },
82
+ "usage": {
83
+ "daily": 0,
84
+ "weekly": 0,
85
+ "monthly": 0,
86
+ "total": 0
87
+ },
88
+ "permissions": [
89
+ {
90
+ "id": 2,
91
+ "username": "zhangsan",
92
+ "display_name": "张三"
93
+ }
94
+ ],
95
+ "skills": [],
96
+ "remote_state": {
97
+ "agentId": "agent1779697917049",
98
+ "name": "agent1779697917049",
99
+ "workspace": "/var/aios/.openclaw/workspaces/agent1779697917049",
100
+ "workspaces": "/var/aios/.openclaw/workspaces/agent1779697917049",
101
+ "templateName": "tmpl1779697917049",
102
+ "status": "active",
103
+ "health": "normal",
104
+ "usage": {
105
+ "daily": 0,
106
+ "weekly": 0,
107
+ "monthly": 0,
108
+ "total": 0
109
+ },
110
+ "lastInteractionAt": null,
111
+ "lastInteractionUser": null,
112
+ "inboundTopic": "aios-dev1/agent/agent1779697917049/inbound",
113
+ "inbound-topic": "aios-dev1/agent/agent1779697917049/inbound",
114
+ "outboundTopic": "aios-dev1/agent/agent1779697917049/outbound",
115
+ "outbound-topic": "aios-dev1/agent/agent1779697917049/outbound"
116
+ },
117
+ "health": "normal"
118
+ }
119
+ },
120
+ {
121
+ "action": "systems.create",
122
+ "ok": true,
123
+ "status": 201,
124
+ "body": {
125
+ "id": 5,
126
+ "system_id": "sys1779697917049",
127
+ "provider": "hzg",
128
+ "name": "sys1779697917049",
129
+ "application_name": "demo-app",
130
+ "description": "fast integration system",
131
+ "ontology_name": "sys1779697917049",
132
+ "ontology_artifact_id": 10,
133
+ "service_endpoint": "https://example.com/service",
134
+ "session_endpoint": "https://example.com/session",
135
+ "status": "active",
136
+ "connectivity_status": "unknown",
137
+ "last_test_result_json": "{}",
138
+ "created_at": "2026-05-25T08:32:17.138Z",
139
+ "updated_at": "2026-05-25T08:32:17.138Z",
140
+ "ontology_file_name": "hzg-ontology-demo-wms.zip",
141
+ "last_test_result": {}
142
+ }
143
+ },
144
+ {
145
+ "action": "templates.list",
146
+ "ok": true,
147
+ "status": 200,
148
+ "body": [
149
+ {
150
+ "id": 4,
151
+ "template_name": "tmpl1779697917049",
152
+ "description": "fast integration template",
153
+ "artifact_id": 9,
154
+ "remote_status": "ready",
155
+ "remote_result_json": "{\"templateName\":\"tmpl1779697917049\",\"path\":\"/var/aios/workspace-templates/tmpl1779697917049\",\"updatedAt\":\"2026-05-25T08:31:57.252Z\",\"isDefault\":false,\"agentIds\":[]}",
156
+ "created_at": "2026-05-25T08:31:57.263Z",
157
+ "updated_at": "2026-05-25T08:31:57.263Z",
158
+ "artifact_name": "finance.zip",
159
+ "agent_slugs": [
160
+ "agent1779697917049"
161
+ ],
162
+ "remote_result": {
163
+ "templateName": "tmpl1779697917049",
164
+ "path": "/var/aios/workspace-templates/tmpl1779697917049",
165
+ "updatedAt": "2026-05-25T08:31:57.252Z",
166
+ "isDefault": false,
167
+ "agentIds": []
168
+ }
169
+ }
170
+ ]
171
+ },
172
+ {
173
+ "action": "agents.list",
174
+ "ok": true,
175
+ "status": 200,
176
+ "body": [
177
+ {
178
+ "id": 4,
179
+ "slug": "agent1779697917049",
180
+ "description": "fast integration agent",
181
+ "docs_content": "# Agent\n\nFast integration test.\n",
182
+ "template_name": "tmpl1779697917049",
183
+ "status": "active",
184
+ "tags_json": "[\"fast\"]",
185
+ "model_json": "{\"primary\":\"gpt-4.1-mini\",\"fallbacks\":[]}",
186
+ "daily_warn": 4000,
187
+ "daily_limit": 5000,
188
+ "weekly_warn": 20000,
189
+ "weekly_limit": 25000,
190
+ "monthly_warn": 80000,
191
+ "monthly_limit": 100000,
192
+ "lifetime_warn": 400000,
193
+ "lifetime_limit": 500000,
194
+ "usage_snapshot_json": "{\"raw\":{\"configPath\":\"/var/aios/.openclaw/openclaw.json\",\"agentId\":\"agent1779697917049\",\"agentDir\":\"/var/aios/.openclaw/agents/agent1779697917049/agent\",\"defaultModel\":\"gpt-4.1-mini\",\"resolvedDefault\":\"openai/gpt-4.1-mini\",\"fallbacks\":[],\"imageModel\":null,\"imageFallbacks\":[],\"modelConfig\":{\"defaultSource\":\"agent\",\"fallbacksSource\":\"agent\"},\"aliases\":{\"gpt-5.4\":\"corp-openai/gpt-5.4\"},\"allowed\":[\"corp-openai/gpt-5.4\"],\"auth\":{\"storePath\":\"/var/aios/.openclaw/agents/agent1779697917049/agent/auth-profiles.json\",\"shellEnvFallback\":{\"enabled\":false,\"appliedKeys\":[]},\"providersWithOAuth\":[],\"missingProvidersInUse\":[\"openai\"],\"runtimeAuthRoutes\":[{\"provider\":\"openai\",\"runtime\":\"codex\",\"authProvider\":\"openai-codex\",\"status\":\"missing\",\"effective\":{\"kind\":\"missing\",\"detail\":\"missing\"}}],\"providers\":[{\"provider\":\"corp-openai\",\"effective\":{\"kind\":\"models.json\",\"detail\":\"sk-zC3XM...Mr7LUHd0\"},\"profiles\":{\"count\":0,\"oauth\":0,\"token\":0,\"apiKey\":0,\"labels\":[]},\"modelsJson\":{\"value\":\"sk-zC3XM...Mr7LUHd0\",\"source\":\"models.json: $OPENCLAW_HOME/.openclaw/agents/agent1779697917049/agent/models.json\"}}],\"unusableProfiles\":[],\"oauth\":{\"warnAfterMs\":86400000,\"profiles\":[],\"providers\":[]}}},\"usage\":{\"daily\":0,\"weekly\":0,\"monthly\":0,\"total\":0},\"captured_at\":\"2026-05-25T08:32:15.557Z\"}",
195
+ "remote_state_json": "{}",
196
+ "created_at": "2026-05-25T08:32:05.239Z",
197
+ "updated_at": "2026-05-25T08:32:05.239Z",
198
+ "tags": [
199
+ "fast"
200
+ ],
201
+ "model": {
202
+ "primary": "gpt-4.1-mini",
203
+ "fallbacks": []
204
+ },
205
+ "usage": {
206
+ "daily": 0,
207
+ "weekly": 0,
208
+ "monthly": 0,
209
+ "total": 0
210
+ },
211
+ "permissions": [
212
+ {
213
+ "id": 2,
214
+ "username": "zhangsan",
215
+ "display_name": "张三"
216
+ }
217
+ ],
218
+ "skills": [],
219
+ "remote_state": {
220
+ "agentId": "agent1779697917049",
221
+ "name": "agent1779697917049",
222
+ "workspace": "/var/aios/.openclaw/workspaces/agent1779697917049",
223
+ "workspaces": "/var/aios/.openclaw/workspaces/agent1779697917049",
224
+ "templateName": "tmpl1779697917049",
225
+ "status": "active",
226
+ "health": "normal",
227
+ "usage": {
228
+ "daily": 0,
229
+ "weekly": 0,
230
+ "monthly": 0,
231
+ "total": 0
232
+ },
233
+ "lastInteractionAt": null,
234
+ "lastInteractionUser": null,
235
+ "inboundTopic": "aios-dev1/agent/agent1779697917049/inbound",
236
+ "inbound-topic": "aios-dev1/agent/agent1779697917049/inbound",
237
+ "outboundTopic": "aios-dev1/agent/agent1779697917049/outbound",
238
+ "outbound-topic": "aios-dev1/agent/agent1779697917049/outbound"
239
+ },
240
+ "health": "normal"
241
+ }
242
+ ]
243
+ },
244
+ {
245
+ "action": "systems.list",
246
+ "ok": true,
247
+ "status": 200,
248
+ "body": [
249
+ {
250
+ "id": 5,
251
+ "system_id": "sys1779697917049",
252
+ "provider": "hzg",
253
+ "name": "sys1779697917049",
254
+ "application_name": "demo-app",
255
+ "description": "fast integration system",
256
+ "ontology_name": "sys1779697917049",
257
+ "ontology_artifact_id": 10,
258
+ "service_endpoint": "https://example.com/service",
259
+ "session_endpoint": "https://example.com/session",
260
+ "status": "active",
261
+ "connectivity_status": "unknown",
262
+ "last_test_result_json": "{}",
263
+ "created_at": "2026-05-25T08:32:17.138Z",
264
+ "updated_at": "2026-05-25T08:32:17.138Z",
265
+ "ontology_file_name": "hzg-ontology-demo-wms.zip",
266
+ "last_test_result": {}
267
+ }
268
+ ]
269
+ }
270
+ ],
271
+ "cleanup": [
272
+ {
273
+ "action": "systems.delete",
274
+ "ok": true,
275
+ "result": {
276
+ "ok": true
277
+ }
278
+ },
279
+ {
280
+ "action": "agents.delete",
281
+ "ok": true,
282
+ "result": {
283
+ "ok": true
284
+ }
285
+ },
286
+ {
287
+ "action": "templates.delete",
288
+ "ok": true,
289
+ "result": {
290
+ "ok": true
291
+ }
292
+ }
293
+ ],
294
+ "error": null,
295
+ "baseUrl": "http://127.0.0.1:3030",
296
+ "ontologyZip": "E:\\tmp\\aios4\\.ontology-demo\\hzg-ontology-demo-wms.zip",
297
+ "templateZip": "E:\\tmp\\aios4\\.workspace-demo\\finance.zip",
298
+ "finishedAt": "2026-05-25T08:32:39.419Z"
299
+ }