agentus 0.0.0-stage → 0.2.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 (59) hide show
  1. package/LICENSE +202 -0
  2. package/NOTICE +11 -0
  3. package/README.md +476 -2
  4. package/README.zh-CN.md +396 -0
  5. package/bin/agentus.mjs +147 -0
  6. package/docs/android-notify-contract.md +658 -0
  7. package/docs/dev/01-dev-loop.md +186 -0
  8. package/docs/dev/02-verify.md +237 -0
  9. package/docs/dev/03-release.md +218 -0
  10. package/docs/dev/04-recover.md +199 -0
  11. package/docs/dev/05-agent-driven.md +114 -0
  12. package/docs/dev/README.md +65 -0
  13. package/docs/installation.md +366 -0
  14. package/docs/installation.zh-CN.md +350 -0
  15. package/docs/refs/aionui-acp-rules.md +46 -0
  16. package/docs/refs/hermes-studio-ui-ideas.md +191 -0
  17. package/docs/transcript-folding.md +139 -0
  18. package/package.json +76 -5
  19. package/packages/server/mcp/plan-server.mjs +217 -0
  20. package/packages/server/mock/agent.mjs +693 -0
  21. package/packages/server/package.json +22 -0
  22. package/packages/server/src/acp/backends.ts +196 -0
  23. package/packages/server/src/acp/errors.ts +46 -0
  24. package/packages/server/src/acp/registry.ts +579 -0
  25. package/packages/server/src/acp/session-manager.ts +1868 -0
  26. package/packages/server/src/auth.ts +688 -0
  27. package/packages/server/src/dashscope.ts +235 -0
  28. package/packages/server/src/fs.ts +379 -0
  29. package/packages/server/src/hotwords.ts +132 -0
  30. package/packages/server/src/index.ts +1486 -0
  31. package/packages/server/src/notify/center.ts +994 -0
  32. package/packages/server/src/notify/types.ts +222 -0
  33. package/packages/server/src/plan/plan.ts +126 -0
  34. package/packages/server/src/pty-helper.py +135 -0
  35. package/packages/server/src/settings.ts +469 -0
  36. package/packages/server/src/store/export.ts +209 -0
  37. package/packages/server/src/store/store.ts +1238 -0
  38. package/packages/server/src/term.ts +201 -0
  39. package/packages/server/src/title.ts +109 -0
  40. package/packages/server/src/voice.ts +251 -0
  41. package/packages/shared/package.json +14 -0
  42. package/packages/shared/src/index.ts +271 -0
  43. package/packages/web/dist/assets/index-D667PX2c.css +32 -0
  44. package/packages/web/dist/assets/index-d9NzwPFu.js +283 -0
  45. package/packages/web/dist/coding-agents/hermes.png +0 -0
  46. package/packages/web/dist/coding-agents/qoder.svg +5 -0
  47. package/packages/web/dist/icons/agentus-icon-inverse.svg +301 -0
  48. package/packages/web/dist/icons/agentus-icon.svg +301 -0
  49. package/packages/web/dist/icons/agentus-mark-inverse.svg +301 -0
  50. package/packages/web/dist/icons/agentus-mark.svg +301 -0
  51. package/packages/web/dist/icons/apple-touch-icon-180.png +0 -0
  52. package/packages/web/dist/icons/favicon.ico +0 -0
  53. package/packages/web/dist/icons/icon-192.png +0 -0
  54. package/packages/web/dist/icons/icon-512.png +0 -0
  55. package/packages/web/dist/icons/icon-maskable-512.png +0 -0
  56. package/packages/web/dist/index.html +30 -0
  57. package/packages/web/dist/manifest.webmanifest +17 -0
  58. package/packages/web/dist/sw.js +61 -0
  59. package/scripts/make-cert.sh +101 -0
@@ -0,0 +1,301 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="150 265 1484 880">
2
+ <g transform="translate(133,247) scale(0.3333333333333333)"><g fill="#424D54" transform="translate(0.000000,2748.000000) scale(0.100000,-0.100000)">
3
+ <path d="M22305 26695 c-27 -8 -73 -14 -100 -15 -28 0 -77 -7 -108 -15 -32 -8
4
+ -72 -15 -90 -15 -88 0 -543 -133 -667 -195 -36 -18 -83 -38 -105 -45 -52 -17
5
+ -209 -95 -260 -130 -22 -15 -69 -42 -105 -60 -67 -34 -157 -93 -270 -180 -36
6
+ -27 -85 -64 -110 -81 -67 -47 -286 -266 -330 -329 -20 -30 -48 -64 -60 -75
7
+ -22 -19 -206 -293 -299 -446 -25 -40 -55 -100 -67 -135 -13 -35 -43 -103 -67
8
+ -151 -24 -48 -50 -106 -57 -128 -7 -22 -27 -69 -45 -105 -18 -36 -38 -83 -45
9
+ -105 -7 -22 -34 -83 -60 -135 -26 -52 -53 -113 -60 -135 -7 -22 -73 -161 -147
10
+ -308 -74 -148 -145 -298 -159 -333 -13 -35 -35 -93 -49 -129 -13 -35 -44 -104
11
+ -68 -152 -24 -48 -50 -106 -57 -128 -7 -22 -41 -96 -75 -165 -34 -69 -68 -143
12
+ -75 -165 -7 -22 -34 -83 -60 -135 -26 -52 -53 -113 -60 -135 -7 -22 -34 -83
13
+ -60 -135 -26 -52 -53 -113 -60 -135 -7 -22 -54 -123 -105 -225 -51 -102 -98
14
+ -203 -105 -225 -7 -22 -41 -96 -75 -165 -34 -69 -68 -143 -75 -165 -7 -22 -27
15
+ -69 -45 -105 -18 -36 -38 -83 -45 -105 -7 -22 -41 -96 -75 -165 -34 -69 -68
16
+ -143 -75 -165 -7 -22 -48 -110 -90 -195 -42 -85 -83 -173 -90 -195 -7 -22 -41
17
+ -96 -75 -165 -34 -69 -68 -143 -75 -165 -7 -22 -34 -83 -60 -135 -26 -52 -53
18
+ -113 -60 -135 -7 -22 -34 -83 -60 -135 -26 -52 -53 -113 -60 -135 -7 -22 -41
19
+ -96 -75 -165 -34 -69 -68 -143 -75 -165 -7 -22 -41 -96 -75 -165 -34 -69 -68
20
+ -143 -75 -165 -7 -22 -34 -83 -60 -135 -26 -52 -53 -113 -60 -135 -7 -22 -41
21
+ -96 -75 -165 -34 -69 -68 -143 -75 -165 -7 -22 -48 -110 -90 -195 -42 -85 -83
22
+ -173 -90 -195 -7 -22 -34 -83 -60 -135 -26 -52 -53 -113 -60 -135 -7 -22 -41
23
+ -96 -75 -165 -34 -69 -68 -143 -75 -165 -7 -22 -34 -83 -60 -135 -26 -52 -53
24
+ -113 -60 -135 -7 -22 -41 -96 -75 -165 -34 -69 -68 -143 -75 -165 -7 -22 -34
25
+ -83 -60 -135 -26 -52 -53 -113 -60 -135 -7 -22 -41 -96 -75 -165 -34 -69 -68
26
+ -143 -75 -165 -7 -22 -41 -96 -75 -165 -34 -69 -68 -143 -75 -165 -7 -22 -27
27
+ -69 -45 -105 -18 -36 -38 -83 -45 -105 -7 -22 -48 -110 -90 -195 -42 -85 -83
28
+ -173 -90 -195 -7 -22 -41 -96 -75 -165 -34 -69 -68 -143 -75 -165 -7 -22 -41
29
+ -96 -75 -165 -34 -69 -68 -143 -75 -165 -7 -22 -34 -83 -60 -135 -26 -52 -53
30
+ -113 -60 -135 -7 -22 -41 -96 -75 -165 -34 -69 -68 -143 -75 -165 -7 -22 -34
31
+ -83 -60 -135 -26 -52 -53 -113 -60 -135 -7 -22 -34 -83 -60 -135 -26 -52 -53
32
+ -113 -60 -135 -7 -22 -41 -96 -75 -165 -34 -69 -68 -143 -75 -165 -7 -22 -34
33
+ -83 -60 -135 -26 -52 -53 -113 -60 -135 -7 -22 -34 -83 -60 -135 -26 -52 -53
34
+ -113 -60 -135 -7 -22 -33 -80 -57 -128 -24 -48 -55 -117 -68 -152 -14 -36 -36
35
+ -94 -50 -130 -13 -36 -38 -91 -53 -122 -16 -32 -35 -76 -42 -98 -7 -22 -34
36
+ -83 -60 -135 -26 -52 -53 -113 -60 -135 -7 -22 -60 -134 -118 -250 -105 -210
37
+ -165 -364 -177 -453 -4 -26 -11 -62 -17 -81 -6 -19 -14 -70 -18 -115 -5 -45
38
+ -14 -111 -21 -148 -11 -56 -11 -80 0 -135 7 -38 16 -105 21 -149 15 -161 168
39
+ -547 261 -660 33 -40 71 -91 136 -182 46 -65 110 -128 173 -172 30 -21 64 -48
40
+ 75 -60 99 -111 511 -293 695 -307 41 -3 100 -12 130 -19 71 -18 191 -18 263 1
41
+ 32 8 72 15 90 15 44 0 328 73 407 105 134 54 169 73 340 186 228 152 431 352
42
+ 554 548 16 25 44 69 62 97 42 67 118 218 134 269 7 22 34 83 60 135 26 52 60
43
+ 133 75 180 15 47 42 114 60 150 18 36 38 83 45 105 7 22 48 110 90 195 42 85
44
+ 83 173 90 195 17 52 75 169 110 220 15 22 40 65 55 95 75 151 434 690 519 780
45
+ 18 19 47 55 64 80 36 53 553 570 571 570 6 0 48 35 94 78 45 43 98 89 117 102
46
+ 19 13 51 38 70 56 72 68 518 372 621 424 35 18 82 45 104 60 46 31 467 244
47
+ 505 254 14 4 63 25 110 46 304 139 883 320 1260 394 291 58 343 66 465 76 55
48
+ 4 113 13 128 19 16 6 95 11 186 11 107 0 175 5 214 15 46 12 126 15 377 15
49
+ 251 0 331 -3 377 -15 38 -10 105 -15 199 -15 83 0 155 -5 171 -11 15 -7 87
50
+ -15 158 -19 157 -9 192 -15 640 -105 269 -53 670 -173 798 -237 31 -15 86 -40
51
+ 122 -53 36 -14 94 -36 130 -50 35 -13 104 -44 152 -68 48 -24 111 -52 139 -61
52
+ 29 -9 80 -35 115 -57 35 -21 107 -61 161 -89 53 -27 123 -66 157 -87 33 -21
53
+ 94 -58 136 -83 103 -61 236 -149 315 -210 63 -48 121 -91 227 -169 29 -21 82
54
+ -66 118 -100 36 -33 71 -61 77 -61 17 0 535 -518 570 -570 17 -25 46 -61 64
55
+ -80 18 -19 51 -60 73 -90 73 -100 121 -164 171 -230 96 -125 287 -424 346
56
+ -543 26 -51 59 -110 74 -132 35 -51 183 -347 200 -400 7 -22 26 -67 42 -99 17
57
+ -32 47 -107 68 -165 59 -164 87 -236 118 -298 16 -32 35 -76 42 -98 41 -129
58
+ 272 -530 340 -590 12 -11 36 -40 53 -65 43 -65 85 -107 147 -150 30 -21 64
59
+ -48 75 -60 137 -154 645 -383 890 -400 66 -5 141 -13 167 -19 33 -7 63 -7 95
60
+ 0 27 6 93 14 148 19 151 12 377 77 498 143 207 112 315 190 444 319 118 119
61
+ 146 152 251 303 114 162 242 504 242 643 0 17 7 57 15 89 8 31 15 91 15 133 0
62
+ 42 -7 102 -15 133 -8 32 -15 72 -15 90 0 72 -60 273 -119 397 -33 69 -63 136
63
+ -67 150 -3 14 -41 95 -84 180 -42 85 -83 173 -90 195 -7 22 -26 66 -42 98 -15
64
+ 31 -40 86 -53 122 -14 36 -36 94 -50 130 -13 35 -44 104 -68 152 -24 48 -50
65
+ 106 -57 128 -7 22 -34 83 -60 135 -26 52 -53 113 -60 135 -7 22 -48 110 -90
66
+ 195 -42 85 -83 173 -90 195 -7 22 -27 69 -45 105 -18 36 -38 83 -45 105 -7 22
67
+ -34 83 -60 135 -26 52 -53 113 -60 135 -7 22 -54 123 -105 225 -51 102 -98
68
+ 203 -105 225 -7 22 -27 69 -45 105 -18 36 -38 83 -45 105 -7 22 -39 93 -72
69
+ 158 -32 65 -70 148 -84 185 -14 37 -37 95 -50 129 -13 35 -37 89 -52 120 -16
70
+ 32 -35 76 -42 98 -7 22 -48 110 -90 195 -42 85 -83 173 -90 195 -7 22 -41 96
71
+ -75 165 -34 69 -68 143 -75 165 -7 22 -41 96 -75 165 -34 69 -68 143 -75 165
72
+ -7 22 -41 96 -75 165 -34 69 -68 143 -75 165 -7 22 -41 96 -75 165 -34 69 -68
73
+ 143 -75 165 -7 22 -26 66 -42 98 -15 31 -40 86 -53 122 -14 36 -36 94 -50 129
74
+ -13 36 -57 131 -98 213 -41 81 -80 166 -87 188 -7 22 -34 83 -60 135 -26 52
75
+ -53 113 -60 135 -7 22 -34 83 -60 135 -26 52 -53 113 -60 135 -7 22 -48 110
76
+ -90 195 -42 85 -83 173 -90 195 -7 22 -41 96 -75 165 -34 69 -68 143 -75 165
77
+ -7 22 -34 83 -60 135 -26 52 -53 113 -60 135 -7 22 -34 83 -60 135 -26 52 -53
78
+ 113 -60 135 -7 22 -41 96 -75 165 -34 69 -68 143 -75 165 -7 22 -48 110 -90
79
+ 195 -42 85 -83 173 -90 195 -7 22 -27 69 -45 105 -18 36 -38 83 -45 105 -7 22
80
+ -41 96 -75 165 -34 69 -68 143 -75 165 -7 22 -39 93 -72 158 -32 65 -70 148
81
+ -84 185 -14 37 -36 95 -49 129 -13 34 -57 128 -98 210 -41 81 -80 166 -87 188
82
+ -7 22 -54 123 -105 225 -51 102 -98 203 -105 225 -7 22 -27 69 -45 105 -18 36
83
+ -38 83 -45 105 -7 22 -27 69 -45 105 -18 36 -38 83 -45 105 -7 22 -48 110 -90
84
+ 195 -42 85 -83 173 -90 195 -7 22 -68 150 -135 285 -67 135 -128 263 -135 285
85
+ -7 22 -27 69 -45 105 -18 36 -38 83 -45 105 -7 22 -27 69 -45 105 -18 36 -38
86
+ 83 -45 105 -7 22 -34 83 -60 135 -26 52 -53 113 -60 135 -7 22 -61 137 -120
87
+ 255 -59 118 -113 233 -120 255 -7 22 -26 66 -42 98 -15 31 -40 88 -54 125 -14
88
+ 37 -36 95 -49 129 -29 75 -191 396 -241 478 -118 191 -266 400 -333 470 -27
89
+ 28 -62 70 -79 95 -35 53 -108 124 -172 169 -25 17 -74 54 -110 81 -403 308
90
+ -790 492 -1265 604 -246 57 -291 66 -338 66 -26 0 -72 7 -104 15 -81 21 -912
91
+ 21 -988 0z m593 -2849 c211 -72 266 -134 454 -511 80 -160 151 -308 158 -330
92
+ 7 -22 27 -69 45 -105 18 -36 38 -83 45 -105 7 -22 27 -69 45 -105 18 -36 38
93
+ -83 45 -105 7 -22 27 -69 45 -105 18 -36 38 -83 45 -105 7 -22 27 -69 45 -105
94
+ 18 -36 38 -83 45 -105 7 -22 41 -96 75 -165 34 -69 68 -143 75 -165 7 -22 34
95
+ -83 60 -135 26 -52 53 -113 60 -135 7 -22 41 -96 75 -165 34 -69 68 -143 75
96
+ -165 7 -22 41 -96 75 -165 34 -69 68 -143 75 -165 7 -22 27 -69 45 -105 18
97
+ -36 38 -83 45 -105 7 -22 27 -69 45 -105 18 -36 38 -83 45 -105 7 -22 27 -69
98
+ 45 -105 18 -36 38 -83 45 -105 7 -22 27 -69 45 -105 18 -36 38 -83 45 -105 7
99
+ -22 41 -96 75 -165 34 -69 68 -143 75 -165 7 -22 41 -96 75 -165 34 -69 68
100
+ -143 75 -165 7 -22 48 -110 90 -195 42 -85 83 -173 90 -195 7 -22 26 -66 42
101
+ -98 15 -31 40 -88 54 -125 14 -37 36 -95 49 -129 13 -34 57 -128 98 -210 41
102
+ -81 80 -166 87 -188 7 -22 34 -83 60 -135 26 -52 53 -113 60 -135 7 -22 27
103
+ -69 45 -105 18 -36 38 -83 45 -105 7 -22 27 -69 45 -105 18 -36 38 -83 45
104
+ -105 7 -22 48 -110 90 -195 42 -85 83 -173 90 -195 7 -22 34 -83 60 -135 26
105
+ -52 53 -113 60 -135 7 -22 27 -69 45 -105 18 -36 38 -83 45 -105 7 -22 34 -83
106
+ 60 -135 26 -52 53 -113 60 -135 7 -22 41 -96 75 -165 34 -69 68 -143 75 -165
107
+ 7 -22 26 -67 43 -100 130 -261 26 -394 -196 -250 -38 24 -92 52 -120 61 -29 9
108
+ -105 43 -170 76 -65 32 -146 69 -180 82 -34 13 -98 39 -142 56 -101 42 -545
109
+ 190 -690 231 -60 17 -153 44 -205 59 -52 15 -135 37 -185 48 -95 22 -312 70
110
+ -431 96 -40 9 -86 16 -102 16 -17 0 -57 7 -89 15 -31 8 -85 15 -120 15 -34 0
111
+ -88 7 -120 15 -31 8 -92 15 -135 15 -42 0 -103 7 -135 15 -39 10 -106 15 -210
112
+ 15 -103 0 -171 5 -210 15 -46 12 -130 15 -418 15 -288 0 -372 -3 -418 -15 -36
113
+ -9 -104 -15 -180 -15 -77 0 -144 -6 -180 -15 -32 -8 -86 -15 -120 -15 -35 0
114
+ -89 -7 -120 -15 -32 -8 -78 -15 -104 -15 -25 0 -75 -6 -112 -14 -79 -17 -183
115
+ -35 -266 -45 -71 -9 -95 -14 -375 -81 -246 -59 -372 -97 -840 -251 -370 -123
116
+ -381 -127 -560 -210 -69 -33 -130 -59 -135 -59 -6 0 -81 -34 -167 -76 -177
117
+ -86 -201 -89 -257 -33 -56 56 -52 83 48 332 74 185 94 236 117 294 13 34 50
118
+ 115 82 180 33 65 65 136 72 158 7 22 34 83 60 135 26 52 53 113 60 135 7 22
119
+ 27 69 45 105 18 36 38 83 45 105 7 22 27 69 45 105 18 36 38 83 45 105 7 22
120
+ 27 69 45 105 18 36 38 83 45 105 7 22 34 83 60 135 26 52 53 113 60 135 7 22
121
+ 41 96 75 165 34 69 68 143 75 165 7 22 41 96 75 165 34 69 68 143 75 165 7 22
122
+ 27 69 45 105 18 36 38 83 45 105 7 22 27 69 45 105 18 36 38 83 45 105 7 22
123
+ 34 83 60 135 26 52 53 113 60 135 7 22 48 110 90 195 42 85 83 173 90 195 7
124
+ 22 41 96 75 165 34 69 68 143 75 165 7 22 27 69 45 105 18 36 38 83 45 105 7
125
+ 22 34 83 60 135 26 52 53 113 60 135 7 22 34 83 60 135 26 52 53 113 60 135 7
126
+ 22 41 96 75 165 34 69 68 143 75 165 7 22 34 83 60 135 26 52 53 113 60 135 7
127
+ 22 54 123 105 225 51 102 98 203 105 225 7 22 34 83 60 135 26 52 53 113 60
128
+ 135 7 22 27 69 45 105 18 36 38 83 45 105 7 22 34 83 60 135 26 52 53 113 60
129
+ 135 7 22 41 96 75 165 34 69 68 143 75 165 7 22 48 110 90 195 42 85 83 173
130
+ 90 195 141 440 477 723 748 631z"/>
131
+ <path d="M22534 12585 c-247 -63 -421 -212 -554 -475 -92 -182 -90 -146 -90
132
+ -1214 0 -1082 10 -977 -106 -1085 -51 -48 -76 -64 -122 -76 -311 -84 -568
133
+ -173 -718 -248 -49 -24 -112 -52 -141 -61 -28 -10 -79 -35 -113 -57 -34 -22
134
+ -116 -67 -182 -100 -114 -57 -365 -220 -508 -329 -36 -27 -90 -67 -120 -89
135
+ -30 -21 -71 -56 -90 -76 -19 -20 -60 -54 -90 -75 -64 -45 -194 -176 -238 -240
136
+ -17 -25 -60 -74 -97 -110 -37 -36 -80 -85 -97 -110 -17 -25 -46 -61 -64 -80
137
+ -124 -131 -381 -533 -517 -808 -143 -291 -141 -285 -263 -649 -106 -312 -130
138
+ -355 -227 -402 -84 -41 -8221 -26 -8279 14 -55 39 -101 117 -134 225 -127 417
139
+ -149 474 -332 843 -151 306 -302 557 -389 648 -19 20 -48 56 -66 81 -18 25
140
+ -48 67 -67 94 -19 27 -67 83 -106 124 -39 41 -85 95 -102 120 -37 55 -141 156
141
+ -202 198 -25 17 -67 54 -95 82 -27 28 -70 66 -95 82 -25 17 -61 46 -80 64
142
+ -168 159 -814 550 -1015 614 -22 7 -69 27 -105 45 -36 18 -168 66 -295 108
143
+ -218 71 -305 95 -490 132 -44 9 -110 22 -146 30 -37 8 -81 15 -97 15 -17 0
144
+ -57 7 -89 15 -31 8 -92 15 -135 15 -42 0 -103 7 -135 15 -44 12 -120 15 -328
145
+ 15 -208 0 -284 -3 -328 -15 -32 -8 -93 -15 -135 -15 -43 0 -104 -7 -135 -15
146
+ -32 -8 -72 -15 -89 -15 -16 0 -60 -7 -97 -15 -36 -8 -102 -21 -146 -30 -321
147
+ -64 -716 -176 -845 -240 -36 -18 -83 -38 -105 -45 -49 -16 -389 -184 -430
148
+ -213 -16 -12 -68 -42 -115 -67 -147 -80 -298 -177 -420 -270 -36 -27 -90 -67
149
+ -120 -89 -30 -21 -77 -62 -105 -91 -27 -29 -75 -69 -105 -90 -59 -40 -260
150
+ -241 -260 -260 0 -6 -41 -53 -90 -104 -110 -113 -118 -124 -369 -498 -198
151
+ -293 -328 -524 -395 -701 -13 -34 -39 -98 -56 -142 -101 -247 -240 -713 -240
152
+ -800 0 -16 -6 -59 -14 -95 -8 -36 -22 -97 -30 -136 -11 -48 -16 -122 -16 -222
153
+ 0 -102 -5 -170 -15 -209 -20 -77 -20 -309 0 -386 10 -38 15 -106 15 -195 0
154
+ -90 5 -158 15 -195 8 -32 15 -72 15 -89 0 -154 185 -771 320 -1068 21 -47 42
155
+ -96 46 -110 10 -37 170 -355 218 -433 85 -141 274 -423 296 -442 12 -11 36
156
+ -40 53 -65 17 -25 72 -89 124 -142 51 -53 93 -102 93 -108 0 -18 258 -277 310
157
+ -312 25 -17 68 -52 95 -79 28 -26 75 -66 105 -88 94 -69 163 -120 230 -171
158
+ 227 -173 674 -419 930 -510 58 -21 139 -51 180 -68 41 -16 98 -39 125 -50 50
159
+ -20 440 -117 590 -147 44 -9 110 -22 146 -30 37 -8 87 -15 112 -15 26 0 72 -7
160
+ 104 -15 84 -22 872 -22 956 0 32 8 92 15 134 15 41 0 105 7 142 15 36 8 102
161
+ 21 146 30 359 72 678 172 905 285 85 42 173 83 195 90 53 17 198 90 274 137
162
+ 33 21 94 58 136 83 130 76 249 156 270 180 11 12 45 39 75 60 30 21 64 48 75
163
+ 60 11 12 45 39 75 60 30 21 71 55 90 75 19 20 60 54 90 75 60 41 320 301 320
164
+ 319 0 7 41 54 91 106 50 52 122 138 160 192 174 250 290 425 319 484 18 35 45
165
+ 82 60 104 35 51 113 208 130 260 7 22 27 69 45 105 28 57 139 386 220 652 30
166
+ 100 85 172 158 207 84 41 8221 26 8279 -14 55 -39 101 -117 134 -225 74 -246
167
+ 178 -539 222 -626 16 -32 35 -77 42 -99 17 -52 111 -242 164 -328 118 -196
168
+ 393 -597 450 -657 18 -19 47 -55 64 -80 39 -57 353 -368 412 -408 25 -16 61
169
+ -47 80 -67 19 -20 55 -51 80 -67 25 -17 61 -46 80 -64 49 -46 117 -95 322
170
+ -231 269 -180 410 -260 513 -293 22 -7 93 -39 158 -72 198 -99 452 -189 693
171
+ -246 262 -63 308 -72 357 -72 26 0 72 -7 104 -15 31 -8 85 -15 120 -15 34 0
172
+ 88 -7 120 -15 84 -22 842 -22 926 0 32 8 85 15 119 15 33 0 90 6 127 14 36 8
173
+ 98 20 136 26 147 24 183 32 275 60 52 15 145 42 205 59 61 18 124 37 140 43
174
+ 55 19 259 96 327 122 85 32 387 184 466 233 34 21 95 58 137 83 106 63 150 92
175
+ 225 150 36 27 90 67 120 89 30 21 64 49 75 61 11 12 45 39 75 60 61 42 560
176
+ 540 560 558 0 7 34 48 76 92 42 43 93 103 115 132 92 126 260 380 289 439 18
177
+ 35 45 82 60 104 35 51 173 327 190 380 7 22 27 69 45 105 18 36 56 139 84 230
178
+ 141 447 129 415 177 469 24 27 64 59 87 70 68 33 8156 33 8224 0 102 -49 147
179
+ -131 207 -381 25 -100 56 -193 119 -360 33 -85 236 -491 291 -581 65 -109 271
180
+ -416 326 -487 27 -36 67 -90 89 -120 21 -30 49 -64 61 -75 12 -11 40 -45 60
181
+ -75 46 -65 296 -314 360 -358 25 -16 61 -47 80 -67 19 -20 55 -51 80 -67 25
182
+ -17 61 -46 80 -64 81 -76 413 -298 590 -394 47 -25 99 -55 115 -67 41 -28 201
183
+ -107 250 -123 22 -7 67 -26 100 -43 32 -16 127 -53 210 -82 82 -29 164 -57
184
+ 180 -63 102 -37 305 -90 490 -127 44 -9 110 -22 146 -30 37 -8 94 -15 127 -15
185
+ 34 0 87 -7 119 -15 84 -22 932 -22 1016 0 32 8 79 15 105 15 26 0 74 7 105 15
186
+ 32 8 72 15 90 15 93 0 632 156 909 263 81 32 580 282 663 333 168 103 398 264
187
+ 455 318 19 18 55 47 80 64 25 17 74 60 110 97 36 37 90 84 120 105 58 40 260
188
+ 241 260 259 0 6 34 47 76 91 92 96 109 119 323 437 239 354 429 731 544 1078
189
+ 84 254 207 743 207 823 0 17 7 57 15 89 9 34 15 101 15 165 0 63 6 131 15 165
190
+ 11 42 15 113 15 268 0 155 -4 226 -15 268 -8 32 -15 100 -15 150 0 51 -7 119
191
+ -15 150 -8 32 -15 72 -15 89 0 154 -185 771 -320 1068 -21 47 -42 96 -46 110
192
+ -10 37 -118 249 -161 318 -21 34 -58 95 -83 137 -61 103 -149 236 -210 315
193
+ -27 36 -67 90 -89 120 -21 30 -49 64 -61 75 -12 11 -36 40 -52 65 -40 59 -440
194
+ 463 -498 502 -25 17 -61 46 -80 64 -178 168 -900 608 -1105 674 -22 7 -67 26
195
+ -100 43 -33 16 -103 45 -155 63 -52 18 -122 44 -155 57 -33 14 -163 50 -290
196
+ 80 -322 78 -367 87 -418 87 -26 0 -72 7 -104 15 -31 8 -92 15 -135 15 -42 0
197
+ -103 7 -135 15 -83 22 -693 22 -776 0 -32 -8 -85 -15 -119 -15 -33 0 -92 -7
198
+ -132 -16 -39 -8 -100 -22 -136 -30 -36 -8 -78 -14 -95 -14 -91 0 -632 -157
199
+ -907 -263 -86 -34 -388 -185 -466 -234 -34 -21 -95 -58 -137 -83 -42 -25 -96
200
+ -58 -120 -75 -183 -125 -253 -175 -270 -195 -11 -12 -45 -39 -75 -60 -30 -21
201
+ -64 -48 -75 -60 -11 -12 -45 -39 -75 -60 -59 -41 -440 -420 -440 -438 0 -6
202
+ -28 -41 -61 -77 -86 -91 -329 -441 -475 -682 -53 -86 -177 -335 -194 -388 -7
203
+ -22 -27 -69 -45 -105 -28 -57 -175 -491 -205 -607 -13 -52 -86 -134 -143 -162
204
+ -68 -33 -8186 -33 -8254 0 -78 38 -94 69 -197 374 -52 154 -105 307 -118 340
205
+ -31 80 -298 615 -344 690 -105 169 -264 398 -318 455 -18 19 -47 55 -64 80
206
+ -40 58 -503 518 -562 558 -25 16 -54 40 -65 52 -11 12 -45 40 -75 61 -30 22
207
+ -84 62 -120 89 -209 160 -690 427 -948 527 -164 63 -444 155 -559 183 -183 45
208
+ -262 90 -302 173 -21 43 -21 51 -21 1028 0 846 -2 993 -15 1044 -20 80 -113
209
+ 269 -158 322 -19 24 -45 58 -56 77 -116 187 -582 309 -887 231z m-16809 -4625
210
+ c15 -6 61 -15 103 -20 186 -24 305 -56 588 -158 176 -64 315 -145 534 -312 36
211
+ -27 90 -67 120 -89 69 -49 356 -337 409 -411 167 -228 281 -425 348 -598 104
212
+ -270 173 -502 173 -581 0 -26 7 -73 15 -104 11 -44 15 -119 15 -317 0 -198 -4
213
+ -273 -15 -317 -8 -31 -15 -78 -15 -103 0 -128 -131 -541 -242 -764 -76 -152
214
+ -271 -459 -318 -501 -12 -11 -36 -40 -53 -65 -40 -60 -191 -214 -247 -252 -25
215
+ -17 -67 -52 -95 -79 -82 -79 -430 -321 -546 -379 -132 -67 -469 -167 -714
216
+ -211 -45 -8 -194 -14 -410 -17 -358 -3 -332 -5 -565 45 -351 76 -724 252
217
+ -1070 504 -217 157 -573 565 -726 829 -17 30 -47 81 -67 114 -79 128 -237 667
218
+ -237 806 0 42 -7 102 -15 133 -18 69 -20 273 -4 314 7 15 15 87 19 158 15 253
219
+ 98 590 195 785 18 36 38 83 45 105 19 61 157 280 260 415 27 36 67 90 89 120
220
+ 49 68 320 336 381 378 25 16 54 40 65 52 71 80 479 307 655 365 47 15 101 36
221
+ 121 46 51 26 314 89 373 90 28 0 71 6 96 13 56 17 694 21 735 6z m17460 -9
222
+ c399 -73 507 -107 775 -241 178 -89 252 -135 390 -240 36 -27 90 -67 120 -89
223
+ 69 -49 356 -337 409 -411 268 -368 416 -682 504 -1075 48 -210 47 -200 47
224
+ -527 0 -249 -3 -329 -15 -375 -8 -31 -15 -78 -15 -104 0 -52 -22 -143 -80
225
+ -332 -75 -241 -116 -350 -162 -421 -17 -28 -53 -91 -80 -140 -26 -49 -57 -99
226
+ -69 -112 -12 -12 -35 -42 -53 -67 -17 -24 -47 -66 -66 -93 -49 -69 -414 -438
227
+ -480 -485 -30 -22 -84 -62 -120 -89 -169 -129 -301 -206 -458 -267 -171 -66
228
+ -384 -135 -457 -149 -44 -8 -114 -23 -155 -32 -98 -21 -753 -24 -865 -3 -423
229
+ 78 -788 242 -1185 532 -74 53 -422 400 -471 469 -22 30 -62 84 -89 120 -129
230
+ 169 -231 347 -295 516 -14 35 -36 92 -49 127 -22 58 -74 261 -111 437 -20 95
231
+ -17 740 4 855 23 128 83 369 107 433 13 34 35 91 49 126 75 198 290 550 419
232
+ 686 18 19 47 55 64 80 37 55 131 146 192 188 25 16 61 47 80 67 19 20 60 55
233
+ 90 76 30 22 84 62 120 89 310 237 687 397 1036 441 39 5 82 13 95 18 36 15
234
+ 687 8 774 -8z m17460 0 c297 -54 507 -122 747 -242 120 -60 198 -110 328 -209
235
+ 36 -27 90 -67 120 -89 30 -21 71 -56 90 -76 19 -20 55 -51 80 -67 62 -42 126
236
+ -104 162 -158 17 -25 46 -61 64 -80 83 -88 261 -353 334 -499 62 -126 84 -178
237
+ 150 -362 51 -142 110 -394 110 -469 0 -25 7 -72 15 -103 11 -42 15 -112 15
238
+ -257 0 -145 -4 -215 -15 -257 -8 -31 -15 -78 -15 -103 0 -95 -115 -494 -190
239
+ -660 -22 -47 -50 -112 -63 -146 -33 -85 -169 -303 -277 -444 -27 -36 -64 -85
240
+ -81 -110 -45 -64 -254 -275 -319 -321 -30 -22 -84 -62 -120 -89 -192 -147
241
+ -353 -245 -483 -294 -34 -13 -98 -38 -142 -56 -124 -50 -291 -102 -485 -150
242
+ -140 -34 -718 -42 -885 -11 -291 53 -589 148 -806 257 -133 66 -393 246 -484
243
+ 333 -27 27 -70 62 -95 79 -55 37 -176 161 -218 222 -17 25 -54 68 -82 95 -51
244
+ 49 -162 204 -225 315 -18 30 -46 78 -64 106 -95 151 -206 519 -282 939 -18 97
245
+ -24 478 -8 530 6 22 15 76 19 120 34 351 342 1073 530 1240 12 11 36 40 52 65
246
+ 40 59 281 303 338 342 25 17 61 46 80 64 36 34 92 76 215 163 171 119 542 276
247
+ 770 325 44 10 109 24 145 32 36 8 88 14 115 15 28 0 70 6 95 14 61 17 664 15
248
+ 765 -4z"/>
249
+ </g></g>
250
+ <g transform="translate(133,247) scale(0.3333333333333333)"><g fill="#76BBDF" transform="translate(0.000000,2748.000000) scale(0.100000,-0.100000)">
251
+ <path d="M5175 7975 c-27 -8 -79 -14 -114 -15 -35 0 -95 -7 -135 -16 -225 -49
252
+ -418 -99 -471 -121 -33 -13 -82 -32 -110 -42 -153 -55 -529 -273 -590 -341
253
+ -11 -12 -40 -36 -65 -52 -61 -42 -342 -320 -391 -388 -22 -30 -62 -84 -89
254
+ -120 -27 -36 -72 -97 -100 -137 -69 -100 -262 -492 -284 -578 -10 -38 -29
255
+ -104 -42 -145 -13 -41 -26 -95 -30 -120 -4 -25 -13 -70 -20 -100 -8 -30 -14
256
+ -82 -14 -117 0 -34 -7 -88 -15 -120 -11 -43 -15 -115 -15 -283 0 -168 4 -240
257
+ 15 -283 8 -32 15 -72 15 -89 0 -263 357 -1028 580 -1243 28 -27 66 -70 82 -95
258
+ 43 -63 86 -107 138 -142 25 -17 74 -59 110 -94 177 -172 539 -391 800 -484 58
259
+ -20 119 -42 135 -48 17 -6 75 -25 130 -41 97 -29 133 -37 280 -61 39 -6 100
260
+ -18 136 -26 93 -20 375 -19 452 1 32 8 79 15 105 15 26 0 74 7 105 15 32 8 72
261
+ 15 90 15 250 1 902 313 1157 554 19 18 55 47 80 64 57 38 247 232 288 292 16
262
+ 25 40 54 52 65 79 70 335 508 406 693 66 171 144 455 144 520 0 17 7 57 15 89
263
+ 22 85 22 655 -1 757 -49 222 -89 384 -100 408 -8 15 -25 55 -38 90 -13 35 -36
264
+ 93 -50 130 -47 124 -111 240 -260 473 -78 122 -389 451 -496 525 -30 21 -64
265
+ 48 -75 60 -38 43 -252 179 -394 250 -171 85 -251 117 -416 166 -142 42 -277
266
+ 74 -312 74 -18 0 -58 7 -90 15 -31 8 -79 15 -105 15 -26 0 -73 7 -105 15 -74
267
+ 19 -317 19 -388 0z"/>
268
+ <path d="M22635 7975 c-27 -8 -92 -14 -144 -15 -91 0 -118 -4 -344 -56 -306
269
+ -70 -604 -211 -857 -404 -36 -27 -90 -67 -120 -89 -30 -21 -64 -49 -75 -61
270
+ -11 -12 -40 -36 -65 -53 -62 -41 -223 -200 -271 -267 -22 -30 -62 -84 -89
271
+ -120 -143 -187 -285 -427 -346 -588 -64 -165 -103 -284 -123 -377 -12 -55 -28
272
+ -130 -36 -166 -8 -37 -15 -108 -15 -157 0 -50 -7 -117 -15 -149 -9 -35 -15
273
+ -103 -15 -178 0 -75 6 -143 15 -178 8 -32 15 -93 15 -135 0 -162 126 -577 244
274
+ -809 68 -132 130 -231 216 -343 27 -36 67 -90 89 -120 22 -30 137 -152 258
275
+ -271 224 -220 239 -232 498 -393 304 -187 791 -356 1032 -356 51 0 118 -7 150
276
+ -15 75 -20 251 -20 326 0 32 8 85 15 119 15 134 0 456 86 760 204 148 56 291
277
+ 142 518 307 354 257 817 883 920 1240 11 41 34 119 50 174 16 55 36 132 44
278
+ 170 8 39 22 102 30 141 9 40 16 106 16 147 0 42 7 102 15 134 8 31 15 98 15
279
+ 148 0 50 -7 117 -15 148 -8 32 -15 93 -15 135 0 43 -6 102 -14 132 -7 30 -16
280
+ 75 -20 100 -7 46 -35 145 -86 300 -78 239 -159 399 -351 695 -84 128 -403 462
281
+ -529 554 -359 262 -626 390 -985 475 -265 62 -291 66 -398 66 -62 0 -130 6
282
+ -164 15 -70 18 -171 18 -238 0z"/>
283
+ <path d="M40205 7978 c-22 -5 -114 -13 -205 -17 -91 -5 -178 -13 -193 -20 -16
284
+ -6 -44 -11 -64 -11 -56 0 -321 -60 -453 -102 -116 -38 -428 -192 -525 -259
285
+ -123 -87 -179 -129 -215 -163 -19 -18 -55 -47 -80 -64 -58 -39 -327 -311 -379
286
+ -382 -163 -224 -332 -519 -392 -685 -10 -27 -29 -77 -43 -110 -22 -52 -68
287
+ -234 -120 -471 -22 -99 -23 -575 -1 -673 8 -36 22 -102 30 -146 64 -317 118
288
+ -479 237 -719 86 -172 221 -389 268 -431 12 -11 36 -40 52 -65 42 -61 290
289
+ -313 358 -361 30 -22 84 -62 120 -89 174 -133 385 -260 519 -313 152 -59 381
290
+ -136 428 -143 26 -3 100 -19 163 -35 65 -16 142 -29 177 -29 34 0 88 -7 120
291
+ -15 78 -21 338 -21 416 0 32 8 79 15 105 15 26 0 126 20 222 44 168 43 248 69
292
+ 410 134 41 17 110 43 152 60 42 16 109 49 148 73 152 93 336 217 355 239 11
293
+ 12 45 40 75 60 66 46 285 266 328 330 16 25 40 54 52 65 171 152 550 1009 550
294
+ 1243 0 17 7 57 15 89 11 44 15 118 15 313 0 195 -4 269 -15 313 -8 32 -15 73
295
+ -15 90 0 123 -143 563 -255 788 -58 115 -255 419 -295 454 -12 11 -39 45 -60
296
+ 75 -45 65 -176 194 -240 237 -25 17 -54 41 -65 53 -11 12 -45 40 -75 61 -30
297
+ 22 -84 62 -120 89 -149 114 -359 235 -485 281 -27 10 -77 29 -110 42 -53 22
298
+ -246 72 -471 121 -40 9 -115 16 -167 16 -53 0 -106 4 -119 9 -40 15 -112 19
299
+ -153 9z"/>
300
+ </g></g>
301
+ </svg>
@@ -0,0 +1,30 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover" />
6
+ <meta name="theme-color" content="#0c1116" />
7
+ <meta name="mobile-web-app-capable" content="yes" />
8
+ <meta name="apple-mobile-web-app-capable" content="yes" />
9
+ <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
10
+ <link rel="manifest" href="/manifest.webmanifest" />
11
+ <!-- The mark: SVG first (crisp at every size), .ico for old browsers, PNG for iOS. -->
12
+ <link rel="icon" type="image/svg+xml" href="/icons/agentus-icon.svg" />
13
+ <link rel="icon" type="image/png" sizes="192x192" href="/icons/icon-192.png" />
14
+ <link rel="icon" href="/icons/favicon.ico" sizes="any" />
15
+ <link rel="apple-touch-icon" href="/icons/apple-touch-icon-180.png" />
16
+ <title>Agentus</title>
17
+ <script type="module" crossorigin src="/assets/index-d9NzwPFu.js"></script>
18
+ <link rel="stylesheet" crossorigin href="/assets/index-D667PX2c.css">
19
+ </head>
20
+ <body>
21
+ <div id="root"></div>
22
+ <script>
23
+ if ("serviceWorker" in navigator) {
24
+ window.addEventListener("load", () => {
25
+ navigator.serviceWorker.register("/sw.js").catch(() => {});
26
+ });
27
+ }
28
+ </script>
29
+ </body>
30
+ </html>
@@ -0,0 +1,17 @@
1
+ {
2
+ "name": "Agentus",
3
+ "short_name": "Agentus",
4
+ "description": "Multi-session web cockpit for ACP coding agents. Keep your agents on the track.",
5
+ "start_url": "/",
6
+ "scope": "/",
7
+ "display": "standalone",
8
+ "orientation": "any",
9
+ "background_color": "#0c1116",
10
+ "theme_color": "#0c1116",
11
+ "icons": [
12
+ { "src": "/icons/agentus-icon.svg", "sizes": "any", "type": "image/svg+xml", "purpose": "any" },
13
+ { "src": "/icons/icon-192.png", "sizes": "192x192", "type": "image/png", "purpose": "any" },
14
+ { "src": "/icons/icon-512.png", "sizes": "512x512", "type": "image/png", "purpose": "any" },
15
+ { "src": "/icons/icon-maskable-512.png", "sizes": "512x512", "type": "image/png", "purpose": "maskable" }
16
+ ]
17
+ }
@@ -0,0 +1,61 @@
1
+ // Agentus service worker — app-shell strategy, staleness-safe.
2
+ // Rules:
3
+ // - HTML/navigation: NETWORK FIRST (avoid stale bundles), offline => cached shell.
4
+ // - hashed assets (/assets/): CACHE FIRST (immutable by content hash).
5
+ // - other static (icons/manifest): cache-first with network fill.
6
+ // - /api /ws /healthz: NEVER touch (live agent state must always be live).
7
+ const SHELL = "agentus-shell-v2";
8
+
9
+ self.addEventListener("install", (e) => {
10
+ e.waitUntil(
11
+ caches
12
+ .open(SHELL)
13
+ .then((c) => c.addAll(["/index.html", "/manifest.webmanifest", "/icons/icon-192.png", "/icons/icon-512.png"]))
14
+ .then(() => self.skipWaiting()),
15
+ );
16
+ });
17
+
18
+ self.addEventListener("activate", (e) => {
19
+ e.waitUntil(
20
+ caches
21
+ .keys()
22
+ .then((keys) => Promise.all(keys.filter((k) => k !== SHELL).map((k) => caches.delete(k))))
23
+ .then(() => self.clients.claim()),
24
+ );
25
+ });
26
+
27
+ self.addEventListener("fetch", (e) => {
28
+ const url = new URL(e.request.url);
29
+ if (e.request.method !== "GET") return;
30
+ if (url.pathname.startsWith("/api") || url.pathname === "/ws" || url.pathname === "/healthz") return;
31
+
32
+ const nav = e.request.mode === "navigate" || url.pathname === "/" || url.pathname.endsWith(".html");
33
+ if (nav) {
34
+ // network first, fall back to cached shell
35
+ e.respondWith(
36
+ fetch(e.request)
37
+ .then((res) => {
38
+ const copy = res.clone();
39
+ caches.open(SHELL).then((c) => c.put("/index.html", copy)).catch(() => {});
40
+ return res;
41
+ })
42
+ .catch(() => caches.match("/index.html")),
43
+ );
44
+ return;
45
+ }
46
+
47
+ // assets: cache first (content-hashed), then network-fill
48
+ e.respondWith(
49
+ caches.match(e.request).then(
50
+ (hit) =>
51
+ hit ||
52
+ fetch(e.request)
53
+ .then((res) => {
54
+ const copy = res.clone();
55
+ caches.open(SHELL).then((c) => c.put(e.request, copy)).catch(() => {});
56
+ return res;
57
+ })
58
+ .catch(() => hit),
59
+ ),
60
+ );
61
+ });
@@ -0,0 +1,101 @@
1
+ #!/usr/bin/env bash
2
+ # Issue the certificate Agentus's TLS listener uses — the public hop of a plain TCP tunnel.
3
+ #
4
+ # Structure: a self-signed ROOT (10 years) + a short-lived LEAF signed by it.
5
+ # ca.pem → what a phone/laptop installs ONCE (public; served at /cert.crt)
6
+ # cert.pem/key.pem → what the listener presents; rotate these freely, devices are untouched.
7
+ #
8
+ # Why the split: Apple caps *TLS server certificate* validity (398 days since iOS 15), and one
9
+ # 10-year self-signed cert is exactly the shape a device refuses AFTER the user has been through
10
+ # the whole install dance. A root CA is not a server cert (no cap); the leaf stays under the cap,
11
+ # so yanking it yearly never touches a device.
12
+ #
13
+ # The CN/SAN is the DDNS NAME that is actually typed. A dynamic public IP must NOT be baked in
14
+ # (it changes, and a mismatch is one more warning). localhost/127.0.0.1 ride along so a local
15
+ # curl does not also complain about the name.
16
+ #
17
+ # scripts/make-cert.sh [name] # default: i207f47592.wicp.vip
18
+ # scripts/make-cert.sh --leaf-only # rotate the leaf; the root and installed devices stay
19
+ set -euo pipefail
20
+
21
+ ROOT_DIR="$(cd "$(dirname "$0")/.." && pwd)"
22
+ # Where the TLS material goes — it MUST be the directory the server reads it from, or the
23
+ # listener silently stays off with a cert sitting next to it. Mirrors the resolution in
24
+ # packages/server/src/index.ts (that file is the source of truth; keep the two in step):
25
+ # 1. $AGENTUS_DATA 2. ~/.agentus (installed default, once it holds anything)
26
+ # 3. <repo>/packages/server/.data (a checkout that predates the install layout)
27
+ REPO_DATA="$ROOT_DIR/packages/server/.data"
28
+ DEFAULT_DATA="$HOME/.agentus"
29
+ if [ -n "${AGENTUS_DATA:-}" ]; then
30
+ DATA_DIR="$AGENTUS_DATA"
31
+ elif [ -d "$DEFAULT_DATA" ] && [ -n "$(ls -A "$DEFAULT_DATA" 2>/dev/null)" ]; then
32
+ DATA_DIR="$DEFAULT_DATA"
33
+ elif [ -d "$REPO_DATA" ] && [ -n "$(ls -A "$REPO_DATA" 2>/dev/null)" ]; then
34
+ DATA_DIR="$REPO_DATA"
35
+ else
36
+ DATA_DIR="$DEFAULT_DATA"
37
+ fi
38
+ if [ ! -d "$DATA_DIR" ]; then
39
+ mkdir -p "$DATA_DIR"
40
+ chmod 700 "$DATA_DIR" # it holds credentials and this key; the server creates it 0700 too
41
+ fi
42
+ OUT="${AGENTUS_TLS_DIR:-$DATA_DIR/tls}"
43
+ LEAF_ONLY=0
44
+ if [ "${1:-}" = "--leaf-only" ]; then LEAF_ONLY=1; shift; fi
45
+ NAME="${1:-${AGENTUS_TLS_NAME:-i207f47592.wicp.vip}}"
46
+ LEAF_DAYS="${AGENTUS_TLS_DAYS:-390}" # < 398 = Apple's cap for server certificates
47
+ ROOT_DAYS="${AGENTUS_TLS_ROOT_DAYS:-3650}"
48
+ mkdir -p "$OUT"
49
+
50
+ if [ "$LEAF_ONLY" = "0" ] || [ ! -f "$OUT/ca.pem" ] || [ ! -f "$OUT/ca.key" ]; then
51
+ cat > "$OUT/ca.cnf" <<EOF
52
+ [req]
53
+ distinguished_name = dn
54
+ x509_extensions = v3
55
+ prompt = no
56
+
57
+ [dn]
58
+ CN = Agentus self-signed root ($NAME)
59
+
60
+ [v3]
61
+ basicConstraints = critical,CA:TRUE,pathlen:0
62
+ keyUsage = critical,keyCertSign,cRLSign
63
+ subjectKeyIdentifier = hash
64
+ EOF
65
+ openssl req -x509 -newkey rsa:2048 -nodes -days "$ROOT_DAYS" \
66
+ -keyout "$OUT/ca.key" -out "$OUT/ca.pem" -config "$OUT/ca.cnf" 2>/dev/null
67
+ rm -f "$OUT/ca.srl"
68
+ echo "root CA -> $OUT/ca.pem (install THIS on devices; it is served at /cert.crt)"
69
+ fi
70
+
71
+ cat > "$OUT/leaf.cnf" <<EOF
72
+ [req]
73
+ distinguished_name = dn
74
+ prompt = no
75
+
76
+ [dn]
77
+ CN = $NAME
78
+
79
+ [v3]
80
+ subjectAltName = DNS:$NAME, DNS:localhost, IP:127.0.0.1
81
+ basicConstraints = critical,CA:FALSE
82
+ keyUsage = critical,digitalSignature,keyEncipherment
83
+ extendedKeyUsage = serverAuth
84
+ EOF
85
+
86
+ openssl req -newkey rsa:2048 -nodes -keyout "$OUT/key.pem" -out "$OUT/leaf.csr" -config "$OUT/leaf.cnf" 2>/dev/null
87
+ openssl x509 -req -in "$OUT/leaf.csr" -CA "$OUT/ca.pem" -CAkey "$OUT/ca.key" -CAcreateserial \
88
+ -days "$LEAF_DAYS" -out "$OUT/cert.pem" -extfile "$OUT/leaf.cnf" -extensions v3 2>/dev/null
89
+ rm -f "$OUT/leaf.csr"
90
+
91
+ chmod 600 "$OUT/key.pem" "$OUT/ca.key"
92
+ chmod 644 "$OUT/cert.pem" "$OUT/ca.pem" "$OUT/ca.cnf" "$OUT/leaf.cnf"
93
+
94
+ echo "leaf -> $OUT/cert.pem (what the listener serves; rotates without touching devices)"
95
+ openssl x509 -in "$OUT/cert.pem" -noout -subject -issuer -dates
96
+ # LibreSSL has no `x509 -ext`; read the SAN out of -text instead.
97
+ openssl x509 -in "$OUT/cert.pem" -noout -text | grep -A1 "Subject Alternative Name" || true
98
+ openssl x509 -in "$OUT/ca.pem" -noout -subject -dates
99
+ echo
100
+ echo "restart the server (or let tsx watch reload); devices install the root once from"
101
+ echo " https://$NAME:<tls-port>/cert.crt"