@ours.network/fleet 0.10.3 → 0.11.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 (94) hide show
  1. package/README.md +66 -0
  2. package/dist/application/capabilities.d.ts +6 -0
  3. package/dist/application/capabilities.js +37 -0
  4. package/dist/application/errors.d.ts +31 -0
  5. package/dist/application/errors.js +51 -0
  6. package/dist/application/fleet-query-service.d.ts +42 -0
  7. package/dist/application/fleet-query-service.js +188 -0
  8. package/dist/application/log-service.d.ts +28 -0
  9. package/dist/application/log-service.js +146 -0
  10. package/dist/application/role-command-service.d.ts +37 -0
  11. package/dist/application/role-command-service.js +82 -0
  12. package/dist/application/role-creation-service.d.ts +142 -0
  13. package/dist/application/role-creation-service.js +374 -0
  14. package/dist/application/role-repository.d.ts +20 -0
  15. package/dist/application/role-repository.js +168 -0
  16. package/dist/application/session-control.d.ts +55 -0
  17. package/dist/application/session-control.js +115 -0
  18. package/dist/application/types.d.ts +156 -0
  19. package/dist/application/types.js +1 -0
  20. package/dist/cli.js +341 -3
  21. package/dist/config.d.ts +9 -2
  22. package/dist/config.js +21 -5
  23. package/dist/creation.d.ts +11 -0
  24. package/dist/creation.js +22 -5
  25. package/dist/docs.d.ts +1 -1
  26. package/dist/docs.js +56 -0
  27. package/dist/duration.d.ts +5 -0
  28. package/dist/duration.js +20 -0
  29. package/dist/index.d.ts +10 -1
  30. package/dist/index.js +9 -1
  31. package/dist/ops.d.ts +16 -0
  32. package/dist/ops.js +112 -3
  33. package/dist/paths.d.ts +1 -0
  34. package/dist/paths.js +1 -0
  35. package/dist/resolved-plan.js +7 -0
  36. package/dist/runner.js +10 -2
  37. package/dist/session/control.d.ts +4 -2
  38. package/dist/session/control.js +45 -13
  39. package/dist/spawn.d.ts +20 -2
  40. package/dist/spawn.js +94 -24
  41. package/dist/supervisor/launchd.js +17 -0
  42. package/dist/supervisor/none.js +17 -0
  43. package/dist/supervisor/systemd.js +4 -0
  44. package/dist/supervisor/types.d.ts +6 -0
  45. package/dist/tmux.d.ts +2 -0
  46. package/dist/tmux.js +8 -0
  47. package/dist/watchdog/alerts.d.ts +34 -0
  48. package/dist/watchdog/alerts.js +78 -0
  49. package/dist/watchdog/briefing.d.ts +65 -0
  50. package/dist/watchdog/briefing.js +181 -0
  51. package/dist/watchdog/config.d.ts +49 -0
  52. package/dist/watchdog/config.js +114 -0
  53. package/dist/watchdog/query.d.ts +78 -0
  54. package/dist/watchdog/query.js +124 -0
  55. package/dist/watchdog/report.d.ts +53 -0
  56. package/dist/watchdog/report.js +126 -0
  57. package/dist/watchdog/run.d.ts +61 -0
  58. package/dist/watchdog/run.js +318 -0
  59. package/dist/watchdog/scheduler.d.ts +105 -0
  60. package/dist/watchdog/scheduler.js +244 -0
  61. package/dist/watchdog/service.d.ts +46 -0
  62. package/dist/watchdog/service.js +179 -0
  63. package/dist/watchdog/store.d.ts +85 -0
  64. package/dist/watchdog/store.js +226 -0
  65. package/dist/web/audit.d.ts +22 -0
  66. package/dist/web/audit.js +54 -0
  67. package/dist/web/auth.d.ts +61 -0
  68. package/dist/web/auth.js +186 -0
  69. package/dist/web/control.d.ts +14 -0
  70. package/dist/web/control.js +110 -0
  71. package/dist/web/device-store.d.ts +27 -0
  72. package/dist/web/device-store.js +155 -0
  73. package/dist/web/events.d.ts +15 -0
  74. package/dist/web/events.js +34 -0
  75. package/dist/web/lock.d.ts +5 -0
  76. package/dist/web/lock.js +69 -0
  77. package/dist/web/runtime.d.ts +12 -0
  78. package/dist/web/runtime.js +214 -0
  79. package/dist/web/server.d.ts +37 -0
  80. package/dist/web/server.js +279 -0
  81. package/dist/web/service.d.ts +42 -0
  82. package/dist/web/service.js +180 -0
  83. package/dist/web/terminal/bridge.d.ts +27 -0
  84. package/dist/web/terminal/bridge.js +317 -0
  85. package/dist/web-app/assets/TerminalView-BvcIkuIF.js +9 -0
  86. package/dist/web-app/assets/index-B-jtLAkp.css +1 -0
  87. package/dist/web-app/assets/index-CUN7ksTw.js +9 -0
  88. package/dist/web-app/icons/ours-fleet-maskable.svg +4 -0
  89. package/dist/web-app/icons/ours-fleet.svg +4 -0
  90. package/dist/web-app/index.html +17 -0
  91. package/dist/web-app/manifest.webmanifest +15 -0
  92. package/dist/web-app/offline.html +18 -0
  93. package/dist/web-app/sw.js +51 -0
  94. package/package.json +26 -3
@@ -0,0 +1,4 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512">
2
+ <rect width="512" height="512" fill="#111318"/>
3
+ <text x="256" y="289" text-anchor="middle" fill="#8cf0c5" font-family="system-ui, sans-serif" font-size="138" font-weight="800" letter-spacing="-5">Ours</text>
4
+ </svg>
@@ -0,0 +1,4 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="192" height="192" viewBox="0 0 192 192">
2
+ <rect width="192" height="192" rx="42" fill="#111318"/>
3
+ <text x="96" y="108" text-anchor="middle" fill="#8cf0c5" font-family="system-ui, sans-serif" font-size="53" font-weight="800" letter-spacing="-2">Ours</text>
4
+ </svg>
@@ -0,0 +1,17 @@
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" />
6
+ <meta name="color-scheme" content="dark" />
7
+ <meta name="theme-color" content="#111318" />
8
+ <link rel="manifest" href="/manifest.webmanifest" />
9
+ <link rel="icon" href="/icons/ours-fleet.svg" type="image/svg+xml" />
10
+ <title>ours fleet console</title>
11
+ <script type="module" crossorigin src="/assets/index-CUN7ksTw.js"></script>
12
+ <link rel="stylesheet" crossorigin href="/assets/index-B-jtLAkp.css">
13
+ </head>
14
+ <body>
15
+ <div id="root"></div>
16
+ </body>
17
+ </html>
@@ -0,0 +1,15 @@
1
+ {
2
+ "id": "/",
3
+ "name": "ours fleet console",
4
+ "short_name": "ours fleet",
5
+ "description": "Secure localhost console for the ours agent fleet",
6
+ "start_url": "/",
7
+ "scope": "/",
8
+ "display": "standalone",
9
+ "background_color": "#111318",
10
+ "theme_color": "#111318",
11
+ "icons": [
12
+ { "src": "/icons/ours-fleet.svg", "sizes": "192x192", "type": "image/svg+xml", "purpose": "any" },
13
+ { "src": "/icons/ours-fleet-maskable.svg", "sizes": "512x512", "type": "image/svg+xml", "purpose": "maskable" }
14
+ ]
15
+ }
@@ -0,0 +1,18 @@
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" />
6
+ <meta name="theme-color" content="#111318" />
7
+ <title>ours fleet unavailable</title>
8
+ <style>
9
+ :root { color-scheme: dark; font-family: system-ui, sans-serif; background: #111318; color: #edf5f1; }
10
+ body { min-height: 100vh; margin: 0; display: grid; place-items: center; }
11
+ main { max-width: 32rem; padding: 2rem; text-align: center; }
12
+ b { display: inline-grid; place-items: center; width: 3rem; height: 3rem; border: 5px solid #8cf0c5; border-radius: 50%; color: #8cf0c5; }
13
+ p { color: #aab8b2; line-height: 1.5; }
14
+ </style>
15
+ </head>
16
+ <body><main><b>O</b><h1>Local daemon unavailable</h1>
17
+ <p>No fleet data is available offline. Start the service on this computer, then reconnect.</p></main></body>
18
+ </html>
@@ -0,0 +1,51 @@
1
+ const CACHE = 'ours-fleet-shell-v1';
2
+ const OFFLINE = '/offline.html';
3
+
4
+ export function isForbiddenCacheUrl(input) {
5
+ const localOrigin = globalThis.location?.origin ?? 'http://127.0.0.1';
6
+ const url = new URL(input, localOrigin);
7
+ return url.origin !== localOrigin
8
+ || url.pathname.startsWith('/api/')
9
+ || url.search.length > 0
10
+ || url.hash.length > 0;
11
+ }
12
+
13
+ export function isCacheableAsset(input) {
14
+ if (isForbiddenCacheUrl(input)) return false;
15
+ const url = new URL(input, globalThis.location?.origin ?? 'http://127.0.0.1');
16
+ return /^\/assets\/[A-Za-z0-9_-]+\.(?:js|css)$/.test(url.pathname);
17
+ }
18
+
19
+ if (typeof globalThis.addEventListener === 'function'
20
+ && 'skipWaiting' in globalThis && 'clients' in globalThis) {
21
+ self.addEventListener('install', event => {
22
+ event.waitUntil(caches.open(CACHE).then(cache => cache.add(OFFLINE)).then(() => self.skipWaiting()));
23
+ });
24
+
25
+ self.addEventListener('activate', event => {
26
+ event.waitUntil(caches.keys().then(keys => Promise.all(
27
+ keys.filter(key => key.startsWith('ours-fleet-shell-') && key !== CACHE)
28
+ .map(key => caches.delete(key)),
29
+ )).then(() => self.clients.claim()));
30
+ });
31
+
32
+ self.addEventListener('fetch', event => {
33
+ const request = event.request;
34
+ if (request.method !== 'GET' || isForbiddenCacheUrl(request.url)) return;
35
+ if (request.mode === 'navigate') {
36
+ const offline = async () => (await caches.match(OFFLINE)) ?? Response.error();
37
+ event.respondWith(self.navigator.onLine === false
38
+ ? offline()
39
+ : fetch(request, { cache: 'no-store' }).catch(offline));
40
+ return;
41
+ }
42
+ if (!isCacheableAsset(request.url)) return;
43
+ event.respondWith(caches.match(request).then(async cached => {
44
+ if (cached) return cached;
45
+ const response = await fetch(request);
46
+ if (response.ok && response.type === 'basic')
47
+ await (await caches.open(CACHE)).put(request, response.clone());
48
+ return response;
49
+ }));
50
+ });
51
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ours.network/fleet",
3
- "version": "0.10.3",
3
+ "version": "0.11.0",
4
4
  "description": "Harness-agnostic fleet of persistent, identity-bound AI agents. Declarative fleet.yaml, tmux or ACP sessions, supervision, and ours.network messaging.",
5
5
  "type": "module",
6
6
  "license": "FSL-1.1-Apache-2.0",
@@ -22,22 +22,45 @@
22
22
  "node": ">=20"
23
23
  },
24
24
  "scripts": {
25
- "build": "tsc -p tsconfig.json",
25
+ "clean": "node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\"",
26
+ "build": "npm run clean && tsc -p tsconfig.json && vite build",
27
+ "typecheck": "tsc -p tsconfig.json --noEmit && tsc -p web/tsconfig.json --noEmit",
28
+ "lint": "npm run typecheck",
26
29
  "test": "vitest run",
30
+ "test:web": "vitest run test/web",
31
+ "test:e2e": "npm run build && playwright test",
32
+ "dev:web": "vite",
27
33
  "prepublishOnly": "npm run build && npm test"
28
34
  },
29
35
  "dependencies": {
30
36
  "@agentclientprotocol/sdk": "^1.3.0",
37
+ "@fastify/static": "^10.1.2",
38
+ "@fastify/websocket": "^11.2.0",
39
+ "@xterm/addon-fit": "0.10.0",
40
+ "@xterm/addon-serialize": "0.13.0",
41
+ "@xterm/headless": "5.5.0",
42
+ "@xterm/xterm": "5.5.0",
31
43
  "commander": "^12.1.0",
44
+ "fastify": "^5.4.0",
45
+ "react": "^19.1.1",
46
+ "react-dom": "^19.1.1",
47
+ "secure-json-parse": "^4.1.0",
48
+ "ws": "^8.18.3",
32
49
  "yaml": "^2.5.0"
33
50
  },
34
51
  "optionalDependencies": {
35
52
  "@agentclientprotocol/claude-agent-acp": "^0.63.0",
36
- "@agentclientprotocol/codex-acp": "^1.1.7"
53
+ "@agentclientprotocol/codex-acp": "^1.1.7",
54
+ "node-pty": "^1.1.0"
37
55
  },
38
56
  "devDependencies": {
57
+ "@playwright/test": "^1.54.1",
39
58
  "@types/node": "^20.14.0",
59
+ "@types/react": "^19.1.9",
60
+ "@types/react-dom": "^19.1.7",
61
+ "@types/ws": "^8.18.1",
40
62
  "typescript": "^5.5.0",
63
+ "vite": "^7.0.6",
41
64
  "vitest": "^2.0.0"
42
65
  }
43
66
  }