4runr-os 2.10.82 → 2.10.84

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.
@@ -1,66 +1,66 @@
1
- {
2
- "name": "@4runr/gateway",
3
- "version": "1.0.0",
4
- "type": "module",
5
- "description": "4Runr Gateway API with Sentinel AI Agent Safety System",
6
- "main": "dist/index.js",
7
- "scripts": {
8
- "build": "tsc",
9
- "dev": "tsx watch src/index.ts",
10
- "start": "node dist/index.js",
11
- "clean": "rimraf dist",
12
- "lint": "eslint src --ext .ts",
13
- "test": "jest",
14
- "test:watch": "jest --watch",
15
- "test:integration": "jest --testPathPattern=integration",
16
- "test:unit": "jest --testPathPattern='__tests__' --testPathIgnorePatterns=integration",
17
- "test:all-phases": "bash test-all-phases.sh",
18
- "test:full-ops": "bash test-full-operations.sh",
19
- "load-test": "k6 run load-tests/k6-basic.js",
20
- "load-test:rate-limit": "k6 run load-tests/k6-rate-limit.js",
21
- "db:migrate": "prisma migrate deploy --schema=../../prisma/schema.prisma",
22
- "db:generate": "prisma generate --schema=../../prisma/schema.prisma",
23
- "db:studio": "prisma studio --schema=../../prisma/schema.prisma",
24
- "seed:api-key": "tsx scripts/seed-api-key.ts"
25
- },
26
- "dependencies": {
27
- "@4runr/sentinel": "file:../../packages/sentinel",
28
- "@4runr/shared": "file:../../packages/shared",
29
- "@4runr/shield": "file:../../packages/shield",
30
- "@anthropic-ai/sdk": "^0.30.0",
31
- "@aws-sdk/client-kms": "^3.654.0",
32
- "@aws-sdk/client-secrets-manager": "^3.654.0",
33
- "@aws-sdk/client-ssm": "^3.654.0",
34
- "@fastify/cors": "^11.2.0",
35
- "bullmq": "^4.0.0",
36
- "dotenv": "^16.6.1",
37
- "fastify": "^5.8.4",
38
- "fastify-metrics": "^8.0.0",
39
- "ioredis": "^5.3.0",
40
- "openai": "^4.77.0",
41
- "opossum": "^6.2.0",
42
- "otplib": "^12.0.1",
43
- "prom-client": "^14.2.0",
44
- "qrcode": "^1.5.3",
45
- "zod": "^3.22.0",
46
- "@prisma/client": "^5.5.0"
47
- },
48
- "devDependencies": {
49
- "@types/fastify-cors": "^0.1.0",
50
- "@types/jsonwebtoken": "^9.0.5",
51
- "@types/node": "^20.8.0",
52
- "@typescript-eslint/eslint-plugin": "^6.9.1",
53
- "@typescript-eslint/parser": "^6.9.1",
54
- "eslint": "^8.53.0",
55
- "jest": "^29.7.0",
56
- "jsonwebtoken": "^9.0.2",
57
- "prisma": "^5.5.0",
58
- "rimraf": "^5.0.5",
59
- "ts-jest": "^29.1.1",
60
- "tsx": "^4.6.0",
61
- "typescript": "^5.2.2"
62
- },
63
- "engines": {
64
- "node": ">=18.0.0"
65
- }
66
- }
1
+ {
2
+ "name": "@4runr/gateway",
3
+ "version": "1.0.0",
4
+ "type": "module",
5
+ "description": "4Runr Gateway API with Sentinel AI Agent Safety System",
6
+ "main": "dist/index.js",
7
+ "scripts": {
8
+ "build": "tsc",
9
+ "dev": "tsx watch src/index.ts",
10
+ "start": "node dist/index.js",
11
+ "clean": "rimraf dist",
12
+ "lint": "eslint src --ext .ts",
13
+ "test": "jest",
14
+ "test:watch": "jest --watch",
15
+ "test:integration": "jest --testPathPattern=integration",
16
+ "test:unit": "jest --testPathPattern='__tests__' --testPathIgnorePatterns=integration",
17
+ "test:all-phases": "bash test-all-phases.sh",
18
+ "test:full-ops": "bash test-full-operations.sh",
19
+ "load-test": "k6 run load-tests/k6-basic.js",
20
+ "load-test:rate-limit": "k6 run load-tests/k6-rate-limit.js",
21
+ "db:migrate": "prisma migrate deploy --schema=../../prisma/schema.prisma",
22
+ "db:generate": "prisma generate --schema=../../prisma/schema.prisma",
23
+ "db:studio": "prisma studio --schema=../../prisma/schema.prisma",
24
+ "seed:api-key": "tsx scripts/seed-api-key.ts"
25
+ },
26
+ "dependencies": {
27
+ "@4runr/sentinel": "file:../../packages/sentinel",
28
+ "@4runr/shared": "file:../../packages/shared",
29
+ "@4runr/shield": "file:../../packages/shield",
30
+ "@anthropic-ai/sdk": "^0.30.0",
31
+ "@aws-sdk/client-kms": "^3.654.0",
32
+ "@aws-sdk/client-secrets-manager": "^3.654.0",
33
+ "@aws-sdk/client-ssm": "^3.654.0",
34
+ "@fastify/cors": "^11.2.0",
35
+ "bullmq": "^4.0.0",
36
+ "dotenv": "^16.6.1",
37
+ "fastify": "^5.8.4",
38
+ "fastify-metrics": "^8.0.0",
39
+ "ioredis": "^5.3.0",
40
+ "openai": "^4.77.0",
41
+ "opossum": "^6.2.0",
42
+ "otplib": "^12.0.1",
43
+ "prom-client": "^14.2.0",
44
+ "qrcode": "^1.5.3",
45
+ "zod": "^3.22.0",
46
+ "@prisma/client": "^5.5.0"
47
+ },
48
+ "devDependencies": {
49
+ "@types/fastify-cors": "^0.1.0",
50
+ "@types/jsonwebtoken": "^9.0.5",
51
+ "@types/node": "^20.8.0",
52
+ "@typescript-eslint/eslint-plugin": "^6.9.1",
53
+ "@typescript-eslint/parser": "^6.9.1",
54
+ "eslint": "^8.53.0",
55
+ "jest": "^29.7.0",
56
+ "jsonwebtoken": "^9.0.2",
57
+ "prisma": "^5.5.0",
58
+ "rimraf": "^5.0.5",
59
+ "ts-jest": "^29.1.1",
60
+ "tsx": "^4.6.0",
61
+ "typescript": "^5.2.2"
62
+ },
63
+ "engines": {
64
+ "node": ">=18.0.0"
65
+ }
66
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"gateway-api-key-bootstrap.d.ts","sourceRoot":"","sources":["../src/gateway-api-key-bootstrap.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAsKH;;;;GAIG;AAEH,wBAAsB,8BAA8B,CAElD,UAAU,EAAE,MAAM,EAElB,iBAAiB,CAAC,EAAE,MAAM,GAEzB,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAwF1D;AAID,2EAA2E;AAE3E,wBAAgB,sBAAsB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAQ/D"}
1
+ {"version":3,"file":"gateway-api-key-bootstrap.d.ts","sourceRoot":"","sources":["../src/gateway-api-key-bootstrap.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAsKH;;;;GAIG;AAEH,wBAAsB,8BAA8B,CAElD,UAAU,EAAE,MAAM,EAElB,iBAAiB,CAAC,EAAE,MAAM,GAEzB,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAwF1D;AAOD,2EAA2E;AAC3E,wBAAgB,sBAAsB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAK/D"}
@@ -115,10 +115,13 @@ export async function ensureLocalGatewayApiKeySeeded(gatewayUrl, gatewayBundlePa
115
115
  : 'Gateway rejected the dev API key. Disconnect and reconnect to restart the local Gateway with API_KEY set.',
116
116
  };
117
117
  }
118
+ /** Placeholder so Shield health is operational in local dev (rewrite calls won't succeed against OpenAI). */
119
+ const DEFAULT_LOCAL_DEV_OPENAI_API_KEY = 'sk-4runr-local-dev-placeholder';
118
120
  /** Env vars every OS-spawned local Gateway should inherit for dev auth. */
119
121
  export function localGatewayDevAuthEnv() {
120
122
  return {
121
123
  API_KEY: process.env.API_KEY || process.env.GATEWAY_API_KEY || DEFAULT_LOCAL_DEV_API_KEY,
124
+ OPENAI_API_KEY: process.env.OPENAI_API_KEY || DEFAULT_LOCAL_DEV_OPENAI_API_KEY,
122
125
  };
123
126
  }
124
127
  //# sourceMappingURL=gateway-api-key-bootstrap.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"gateway-api-key-bootstrap.js","sourceRoot":"","sources":["../src/gateway-api-key-bootstrap.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"gateway-api-key-bootstrap.js","sourceRoot":"","sources":["../src/gateway-api-key-bootstrap.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AAEzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,OAAO,EAEL,yBAAyB,EAEzB,aAAa,EAEb,4BAA4B,GAE7B,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAIxD,MAAM,0BAA0B,GAE9B,8DAA8D,CAAC;AAIjE,SAAS,oBAAoB,CAAC,GAAW;IAEvC,IAAI,CAAC;QAEH,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;QAE9C,OAAO,CAAC,KAAK,WAAW,IAAI,CAAC,KAAK,WAAW,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,SAAS,CAAC;IAElF,CAAC;IAAC,MAAM,CAAC;QAEP,OAAO,KAAK,CAAC;IAEf,CAAC;AAEH,CAAC;AAID,SAAS,eAAe,CAAC,GAAW;IAElC,OAAO,CAEL,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC;QAEnB,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC;QAEnB,GAAG,CAAC,QAAQ,CAAC,uBAAuB,CAAC;QAErC,GAAG,CAAC,QAAQ,CAAC,cAAc,CAAC;QAE5B,GAAG,CAAC,QAAQ,CAAC,iBAAiB,CAAC;QAE/B,GAAG,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAElC,CAAC;AAEJ,CAAC;AAID,SAAS,cAAc;IAErB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAE1D,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,0BAA0B,CAAC,CAAC;AAEtE,CAAC;AAID,SAAS,eAAe,CAAC,iBAAyB;IAEhD,MAAM,MAAM,GAAG,cAAc,EAAE,CAAC;IAEhC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QAE3B,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,wBAAwB,MAAM,EAAE,EAAE,CAAC;IAEjE,CAAC;IAID,MAAM,EAAE,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;IAE1F,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,0BAA0B,CAAC;IAI3E,IAAI,CAAC;QAEH,MAAM,GAAG,GAAG,QAAQ,CAElB,IAAI,OAAO,CAAC,QAAQ,MAAM,MAAM,MAAM,iBAAiB,MAAM,yBAAyB,kBAAkB,EAExG;YAEE,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;YAEzB,KAAK,EAAE,MAAM;YAEb,OAAO,EAAE,KAAK;YAEd,WAAW,EAAE,IAAI;YAEjB,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,YAAY,EAAE,WAAW,EAAE;YAElD,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAE7B,CAEF,CAAC;QAEF,MAAM,MAAM,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,IAAI,QAAQ,CAAC;QAEjD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAE9B,CAAC;IAAC,OAAO,CAAU,EAAE,CAAC;QAEpB,MAAM,GAAG,GAAG,CAA2D,CAAC;QAExE,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;QAEnD,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;QAEnD,MAAM,MAAM,GAAG,MAAM,IAAI,MAAM,IAAI,GAAG,CAAC,OAAO,IAAI,oBAAoB,CAAC;QAEvE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAE/B,CAAC;AAEH,CAAC;AAID,KAAK,UAAU,SAAS,CAAC,UAAkB;IAEzC,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;IAEjD,IAAI,CAAC;QAEH,MAAM,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;QAE1C,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;IAEtB,CAAC;IAAC,OAAO,CAAU,EAAE,CAAC;QAEpB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;IAE/C,CAAC;AAEH,CAAC;AAID;;;;GAIG;AAEH,MAAM,CAAC,KAAK,UAAU,8BAA8B,CAElD,UAAkB,EAElB,iBAA0B;IAI1B,IAAI,CAAC,oBAAoB,CAAC,UAAU,CAAC,EAAE,CAAC;QAEtC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IAErC,CAAC;IAID,MAAM,GAAG,GAAG,4BAA4B,CAAC,UAAU,CAAC,CAAC;IAErD,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,GAAG,CAAC,CAAC;IAEnC,IAAI,KAAK,CAAC,EAAE,EAAE,CAAC;QAEb,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IAErC,CAAC;IAID,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC;IAEnC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE,CAAC;QAE/B,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IAEtD,CAAC;IAID,MAAM,UAAU,GAAG,iBAAiB,EAAE,IAAI,EAAE,CAAC;IAE7C,MAAM,WAAW,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAE5E,IAAI,CAAC,UAAU,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAE/C,OAAO;YAEL,EAAE,EAAE,KAAK;YAET,MAAM,EAAE,KAAK;YAEb,IAAI,EAEF,8GAA8G;SAEjH,CAAC;IAEJ,CAAC;IAID,MAAM,IAAI,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;IAEzC,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;QAEZ,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,GAAG,CAAC,CAAC;QAEnC,IAAI,KAAK,CAAC,EAAE,EAAE,CAAC;YAEb,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;QAEpC,CAAC;IAEH,CAAC;IAID,oFAAoF;IAEpF,OAAO;QAEL,EAAE,EAAE,KAAK;QAET,MAAM,EAAE,KAAK;QAEb,IAAI,EAEF,IAAI,CAAC,EAAE,KAAK,KAAK;YAEf,CAAC,CAAC,wBAAwB,IAAI,CAAC,MAAM,0FAA0F;YAE/H,CAAC,CAAC,2GAA2G;KAElH,CAAC;AAEJ,CAAC;AAID,6GAA6G;AAC7G,MAAM,gCAAgC,GAAG,gCAAgC,CAAC;AAE1E,2EAA2E;AAC3E,MAAM,UAAU,sBAAsB;IACpC,OAAO;QACL,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,yBAAyB;QACxF,cAAc,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,gCAAgC;KAC/E,CAAC;AACJ,CAAC"}
@@ -2544,12 +2544,29 @@ impl App {
2544
2544
  // Close detail view or Run Manager
2545
2545
  KeyCode::Esc => {
2546
2546
  if self.state.run_manager.is_detail_view() {
2547
- // Close detail view
2548
- self.state.run_manager.close_detail_view();
2549
- self.add_log("[RUN] Closed detail view".to_string());
2550
- self.request_render("run_manager_close_detail");
2547
+ // If we have other overlays beneath RunManager (e.g. Shield),
2548
+ // close RunManager entirely instead of just closing detail view
2549
+ if self.state.navigation.has_overlay() {
2550
+ let current_count = self.state.navigation.overlay_stack.len();
2551
+ if current_count > 1 {
2552
+ // Multiple overlays - pop RunManager entirely
2553
+ self.pop_overlay();
2554
+ self.add_log("[RUN] Returned to previous screen".to_string());
2555
+ self.request_render("run_manager_close");
2556
+ } else {
2557
+ // Just RunManager open - close detail view first
2558
+ self.state.run_manager.close_detail_view();
2559
+ self.add_log("[RUN] Closed detail view".to_string());
2560
+ self.request_render("run_manager_close_detail");
2561
+ }
2562
+ } else {
2563
+ // No other overlays - close detail view first
2564
+ self.state.run_manager.close_detail_view();
2565
+ self.add_log("[RUN] Closed detail view".to_string());
2566
+ self.request_render("run_manager_close_detail");
2567
+ }
2551
2568
  } else {
2552
- // Close Run Manager
2569
+ // Close Run Manager (list view)
2553
2570
  self.pop_overlay();
2554
2571
  }
2555
2572
  }
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "4runr-os",
3
- "version": "2.10.82",
3
+ "version": "2.10.84",
4
4
  "type": "module",
5
- "description": "4Runr AI Agent OS - Secure terminal interface for AI agents. v2.10.82: Shield no longer requires auth uses public /health + /metrics only.",
5
+ "description": "4Runr AI Agent OS - Secure terminal interface for AI agents. v2.10.84: Local Gateway gets placeholder OPENAI_API_KEY so Shield shows operational in dev.",
6
6
  "main": "dist/index.js",
7
7
  "bin": {
8
8
  "4runr": "dist/index.js",