@agentlensai/server 0.8.0 → 0.10.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 (111) hide show
  1. package/dist/db/anonymous-id-manager.d.ts +44 -0
  2. package/dist/db/anonymous-id-manager.d.ts.map +1 -0
  3. package/dist/db/anonymous-id-manager.js +90 -0
  4. package/dist/db/anonymous-id-manager.js.map +1 -0
  5. package/dist/db/capability-store.d.ts +82 -0
  6. package/dist/db/capability-store.d.ts.map +1 -0
  7. package/dist/db/capability-store.js +221 -0
  8. package/dist/db/capability-store.js.map +1 -0
  9. package/dist/db/migrate.d.ts.map +1 -1
  10. package/dist/db/migrate.js +136 -0
  11. package/dist/db/migrate.js.map +1 -1
  12. package/dist/db/schema.sqlite.d.ts +1663 -2
  13. package/dist/db/schema.sqlite.d.ts.map +1 -1
  14. package/dist/db/schema.sqlite.js +135 -1
  15. package/dist/db/schema.sqlite.js.map +1 -1
  16. package/dist/index.d.ts +5 -0
  17. package/dist/index.d.ts.map +1 -1
  18. package/dist/index.js +48 -0
  19. package/dist/index.js.map +1 -1
  20. package/dist/lib/redaction/human-review-layer.d.ts +37 -0
  21. package/dist/lib/redaction/human-review-layer.d.ts.map +1 -0
  22. package/dist/lib/redaction/human-review-layer.js +62 -0
  23. package/dist/lib/redaction/human-review-layer.js.map +1 -0
  24. package/dist/lib/redaction/index.d.ts +12 -0
  25. package/dist/lib/redaction/index.d.ts.map +1 -0
  26. package/dist/lib/redaction/index.js +12 -0
  27. package/dist/lib/redaction/index.js.map +1 -0
  28. package/dist/lib/redaction/pii-detection-layer.d.ts +30 -0
  29. package/dist/lib/redaction/pii-detection-layer.d.ts.map +1 -0
  30. package/dist/lib/redaction/pii-detection-layer.js +183 -0
  31. package/dist/lib/redaction/pii-detection-layer.js.map +1 -0
  32. package/dist/lib/redaction/pipeline.d.ts +26 -0
  33. package/dist/lib/redaction/pipeline.d.ts.map +1 -0
  34. package/dist/lib/redaction/pipeline.js +91 -0
  35. package/dist/lib/redaction/pipeline.js.map +1 -0
  36. package/dist/lib/redaction/secret-detection-layer.d.ts +10 -0
  37. package/dist/lib/redaction/secret-detection-layer.d.ts.map +1 -0
  38. package/dist/lib/redaction/secret-detection-layer.js +79 -0
  39. package/dist/lib/redaction/secret-detection-layer.js.map +1 -0
  40. package/dist/lib/redaction/secret-patterns.d.ts +29 -0
  41. package/dist/lib/redaction/secret-patterns.d.ts.map +1 -0
  42. package/dist/lib/redaction/secret-patterns.js +133 -0
  43. package/dist/lib/redaction/secret-patterns.js.map +1 -0
  44. package/dist/lib/redaction/semantic-denylist-layer.d.ts +10 -0
  45. package/dist/lib/redaction/semantic-denylist-layer.d.ts.map +1 -0
  46. package/dist/lib/redaction/semantic-denylist-layer.js +64 -0
  47. package/dist/lib/redaction/semantic-denylist-layer.js.map +1 -0
  48. package/dist/lib/redaction/tenant-deidentification-layer.d.ts +10 -0
  49. package/dist/lib/redaction/tenant-deidentification-layer.d.ts.map +1 -0
  50. package/dist/lib/redaction/tenant-deidentification-layer.js +64 -0
  51. package/dist/lib/redaction/tenant-deidentification-layer.js.map +1 -0
  52. package/dist/lib/redaction/url-path-scrubbing-layer.d.ts +14 -0
  53. package/dist/lib/redaction/url-path-scrubbing-layer.d.ts.map +1 -0
  54. package/dist/lib/redaction/url-path-scrubbing-layer.js +156 -0
  55. package/dist/lib/redaction/url-path-scrubbing-layer.js.map +1 -0
  56. package/dist/routes/agents.d.ts.map +1 -1
  57. package/dist/routes/agents.js +3 -9
  58. package/dist/routes/agents.js.map +1 -1
  59. package/dist/routes/audit.d.ts +15 -0
  60. package/dist/routes/audit.d.ts.map +1 -0
  61. package/dist/routes/audit.js +177 -0
  62. package/dist/routes/audit.js.map +1 -0
  63. package/dist/routes/capabilities-top.d.ts +15 -0
  64. package/dist/routes/capabilities-top.d.ts.map +1 -0
  65. package/dist/routes/capabilities-top.js +77 -0
  66. package/dist/routes/capabilities-top.js.map +1 -0
  67. package/dist/routes/capabilities.d.ts +15 -0
  68. package/dist/routes/capabilities.d.ts.map +1 -0
  69. package/dist/routes/capabilities.js +86 -0
  70. package/dist/routes/capabilities.js.map +1 -0
  71. package/dist/routes/community.d.ts +24 -0
  72. package/dist/routes/community.d.ts.map +1 -0
  73. package/dist/routes/community.js +272 -0
  74. package/dist/routes/community.js.map +1 -0
  75. package/dist/routes/delegation.d.ts +20 -0
  76. package/dist/routes/delegation.d.ts.map +1 -0
  77. package/dist/routes/delegation.js +108 -0
  78. package/dist/routes/delegation.js.map +1 -0
  79. package/dist/routes/delegations-top.d.ts +12 -0
  80. package/dist/routes/delegations-top.d.ts.map +1 -0
  81. package/dist/routes/delegations-top.js +43 -0
  82. package/dist/routes/delegations-top.js.map +1 -0
  83. package/dist/routes/discovery.d.ts +19 -0
  84. package/dist/routes/discovery.d.ts.map +1 -0
  85. package/dist/routes/discovery.js +96 -0
  86. package/dist/routes/discovery.js.map +1 -0
  87. package/dist/routes/redaction-test.d.ts +14 -0
  88. package/dist/routes/redaction-test.d.ts.map +1 -0
  89. package/dist/routes/redaction-test.js +33 -0
  90. package/dist/routes/redaction-test.js.map +1 -0
  91. package/dist/routes/trust.d.ts +16 -0
  92. package/dist/routes/trust.d.ts.map +1 -0
  93. package/dist/routes/trust.js +23 -0
  94. package/dist/routes/trust.js.map +1 -0
  95. package/dist/services/community-service.d.ts +283 -0
  96. package/dist/services/community-service.d.ts.map +1 -0
  97. package/dist/services/community-service.js +816 -0
  98. package/dist/services/community-service.js.map +1 -0
  99. package/dist/services/delegation-service.d.ts +149 -0
  100. package/dist/services/delegation-service.d.ts.map +1 -0
  101. package/dist/services/delegation-service.js +605 -0
  102. package/dist/services/delegation-service.js.map +1 -0
  103. package/dist/services/discovery-service.d.ts +39 -0
  104. package/dist/services/discovery-service.d.ts.map +1 -0
  105. package/dist/services/discovery-service.js +186 -0
  106. package/dist/services/discovery-service.js.map +1 -0
  107. package/dist/services/trust-service.d.ts +59 -0
  108. package/dist/services/trust-service.d.ts.map +1 -0
  109. package/dist/services/trust-service.js +139 -0
  110. package/dist/services/trust-service.js.map +1 -0
  111. package/package.json +2 -2
@@ -0,0 +1,77 @@
1
+ /**
2
+ * Top-level Capability Routes (dashboard-facing)
3
+ *
4
+ * GET /api/capabilities — list all capabilities (optionally filter by taskType/agentId)
5
+ * POST /api/capabilities — register a new capability (agentId in body)
6
+ * PUT /api/capabilities/:id — update a capability by ID
7
+ */
8
+ import { Hono } from 'hono';
9
+ import { CapabilityStore, ValidationError } from '../db/capability-store.js';
10
+ import { getTenantStore } from './tenant-helper.js';
11
+ export function capabilityTopRoutes(store, db) {
12
+ const app = new Hono();
13
+ const capStore = new CapabilityStore(db);
14
+ function getTenantId(c) {
15
+ return c.get('apiKey')?.tenantId ?? 'default';
16
+ }
17
+ // GET / — list all capabilities for tenant
18
+ app.get('/', async (c) => {
19
+ const tenantId = getTenantId(c);
20
+ const taskType = c.req.query('taskType') || undefined;
21
+ const agentId = c.req.query('agentId') || undefined;
22
+ const capabilities = capStore.listByTenant(tenantId, { taskType, agentId });
23
+ return c.json({ capabilities });
24
+ });
25
+ // POST / — register a new capability (agentId in body)
26
+ app.post('/', async (c) => {
27
+ const tenantId = getTenantId(c);
28
+ let body;
29
+ try {
30
+ body = await c.req.json();
31
+ }
32
+ catch {
33
+ return c.json({ error: 'Invalid JSON body', status: 400 }, 400);
34
+ }
35
+ const agentId = body.agentId;
36
+ if (!agentId) {
37
+ return c.json({ error: 'agentId is required', status: 400 }, 400);
38
+ }
39
+ try {
40
+ const capability = capStore.create(tenantId, agentId, body);
41
+ return c.json(capability, 201);
42
+ }
43
+ catch (err) {
44
+ if (err instanceof ValidationError) {
45
+ return c.json({ error: err.message, status: 400 }, 400);
46
+ }
47
+ throw err;
48
+ }
49
+ });
50
+ // PUT /:id — update a capability by ID
51
+ app.put('/:id', async (c) => {
52
+ const tenantId = getTenantId(c);
53
+ const capabilityId = c.req.param('id');
54
+ let body;
55
+ try {
56
+ body = await c.req.json();
57
+ }
58
+ catch {
59
+ return c.json({ error: 'Invalid JSON body', status: 400 }, 400);
60
+ }
61
+ try {
62
+ const capability = capStore.update(tenantId, capabilityId, body);
63
+ return c.json(capability);
64
+ }
65
+ catch (err) {
66
+ if (err instanceof ValidationError) {
67
+ return c.json({ error: err.message, status: 400 }, 400);
68
+ }
69
+ if (err?.name === 'NotFoundError') {
70
+ return c.json({ error: 'Capability not found', status: 404 }, 404);
71
+ }
72
+ throw err;
73
+ }
74
+ });
75
+ return app;
76
+ }
77
+ //# sourceMappingURL=capabilities-top.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capabilities-top.js","sourceRoot":"","sources":["../../src/routes/capabilities-top.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Capability Registration REST API (Story 5.2)
3
+ *
4
+ * PUT /api/agents/:id/capabilities — register a new capability
5
+ * GET /api/agents/:id/capabilities — list agent's capabilities
6
+ * DELETE /api/agents/:id/capabilities/:capabilityId — remove a capability
7
+ */
8
+ import { Hono } from 'hono';
9
+ import type { IEventStore } from '@agentlensai/core';
10
+ import type { AuthVariables } from '../middleware/auth.js';
11
+ import type { SqliteDb } from '../db/index.js';
12
+ export declare function capabilityRoutes(store: IEventStore, db: SqliteDb): Hono<{
13
+ Variables: AuthVariables;
14
+ }, import("hono/types").BlankSchema, "/">;
15
+ //# sourceMappingURL=capabilities.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../../src/routes/capabilities.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAK/C,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,WAAW,EAAE,EAAE,EAAE,QAAQ;eAC7B,aAAa;0CAmFhD"}
@@ -0,0 +1,86 @@
1
+ /**
2
+ * Capability Registration REST API (Story 5.2)
3
+ *
4
+ * PUT /api/agents/:id/capabilities — register a new capability
5
+ * GET /api/agents/:id/capabilities — list agent's capabilities
6
+ * DELETE /api/agents/:id/capabilities/:capabilityId — remove a capability
7
+ */
8
+ import { Hono } from 'hono';
9
+ import { CapabilityStore, ValidationError } from '../db/capability-store.js';
10
+ import { AnonymousIdManager } from '../db/anonymous-id-manager.js';
11
+ import { getTenantStore } from './tenant-helper.js';
12
+ export function capabilityRoutes(store, db) {
13
+ const app = new Hono();
14
+ const capStore = new CapabilityStore(db);
15
+ const anonIdManager = new AnonymousIdManager(db);
16
+ /**
17
+ * Helper to get tenant ID from auth context.
18
+ */
19
+ function getTenantId(c) {
20
+ return c.get('apiKey')?.tenantId ?? 'default';
21
+ }
22
+ // PUT /:id/capabilities — register or update a capability
23
+ app.put('/:id/capabilities', async (c) => {
24
+ const tenantId = getTenantId(c);
25
+ const agentId = c.req.param('id');
26
+ // Verify agent exists
27
+ const tenantStore = getTenantStore(store, c);
28
+ const agent = await tenantStore.getAgent(agentId);
29
+ if (!agent) {
30
+ return c.json({ error: 'Agent not found', status: 404 }, 404);
31
+ }
32
+ let body;
33
+ try {
34
+ body = await c.req.json();
35
+ }
36
+ catch {
37
+ return c.json({ error: 'Invalid JSON body', status: 400 }, 400);
38
+ }
39
+ try {
40
+ const capability = capStore.create(tenantId, agentId, body);
41
+ const anonymousAgentId = anonIdManager.getOrRotateAnonymousId(tenantId, agentId);
42
+ return c.json({ capability, anonymousAgentId }, 201);
43
+ }
44
+ catch (err) {
45
+ if (err instanceof ValidationError) {
46
+ return c.json({ error: err.message, status: 400 }, 400);
47
+ }
48
+ throw err;
49
+ }
50
+ });
51
+ // GET /:id/capabilities — list agent's capabilities
52
+ app.get('/:id/capabilities', async (c) => {
53
+ const tenantId = getTenantId(c);
54
+ const agentId = c.req.param('id');
55
+ // Verify agent exists
56
+ const tenantStore = getTenantStore(store, c);
57
+ const agent = await tenantStore.getAgent(agentId);
58
+ if (!agent) {
59
+ return c.json({ error: 'Agent not found', status: 404 }, 404);
60
+ }
61
+ const capabilities = capStore.listByAgent(tenantId, agentId);
62
+ const anonymousAgentId = anonIdManager.getOrRotateAnonymousId(tenantId, agentId);
63
+ return c.json({ capabilities, anonymousAgentId });
64
+ });
65
+ // DELETE /:id/capabilities/:capabilityId — remove a capability
66
+ app.delete('/:id/capabilities/:capabilityId', async (c) => {
67
+ const tenantId = getTenantId(c);
68
+ const agentId = c.req.param('id');
69
+ const capabilityId = c.req.param('capabilityId');
70
+ // Verify agent exists
71
+ const tenantStore = getTenantStore(store, c);
72
+ const agent = await tenantStore.getAgent(agentId);
73
+ if (!agent) {
74
+ return c.json({ error: 'Agent not found', status: 404 }, 404);
75
+ }
76
+ // Verify the capability belongs to this agent
77
+ const existing = capStore.getById(tenantId, capabilityId);
78
+ if (!existing || existing.agentId !== agentId) {
79
+ return c.json({ error: 'Capability not found', status: 404 }, 404);
80
+ }
81
+ capStore.delete(tenantId, capabilityId);
82
+ return c.json({ deleted: true });
83
+ });
84
+ return app;
85
+ }
86
+ //# sourceMappingURL=capabilities.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../../src/routes/capabilities.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Community Sharing REST API (Stories 4.1–4.3)
3
+ *
4
+ * POST /api/community/share — share a lesson
5
+ * GET /api/community/search — search shared lessons
6
+ * GET /api/community/config — get tenant sharing config
7
+ * PUT /api/community/config — update tenant sharing config
8
+ * GET /api/community/config/agents/:agentId — get agent sharing config
9
+ * PUT /api/community/config/agents/:agentId — update agent sharing config
10
+ * GET /api/community/deny-list — list deny-list rules
11
+ * POST /api/community/deny-list — add deny-list rule
12
+ * DELETE /api/community/deny-list/:id — delete deny-list rule
13
+ */
14
+ import { Hono } from 'hono';
15
+ import type { AuthVariables } from '../middleware/auth.js';
16
+ import type { SqliteDb } from '../db/index.js';
17
+ import { CommunityService, type PoolTransport } from '../services/community-service.js';
18
+ export declare function communityRoutes(db: SqliteDb, transport?: PoolTransport): {
19
+ app: Hono<{
20
+ Variables: AuthVariables;
21
+ }, import("hono/types").BlankSchema, "/">;
22
+ service: CommunityService;
23
+ };
24
+ //# sourceMappingURL=community.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"community.d.ts","sourceRoot":"","sources":["../../src/routes/community.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAA+B,KAAK,aAAa,EAAE,MAAM,kCAAkC,CAAC;AAKrH,wBAAgB,eAAe,CAAC,EAAE,EAAE,QAAQ,EAAE,SAAS,CAAC,EAAE,aAAa;;mBACnC,aAAa;;;EAqRhD"}
@@ -0,0 +1,272 @@
1
+ /**
2
+ * Community Sharing REST API (Stories 4.1–4.3)
3
+ *
4
+ * POST /api/community/share — share a lesson
5
+ * GET /api/community/search — search shared lessons
6
+ * GET /api/community/config — get tenant sharing config
7
+ * PUT /api/community/config — update tenant sharing config
8
+ * GET /api/community/config/agents/:agentId — get agent sharing config
9
+ * PUT /api/community/config/agents/:agentId — update agent sharing config
10
+ * GET /api/community/deny-list — list deny-list rules
11
+ * POST /api/community/deny-list — add deny-list rule
12
+ * DELETE /api/community/deny-list/:id — delete deny-list rule
13
+ */
14
+ import { Hono } from 'hono';
15
+ import { CommunityService, LocalCommunityPoolTransport } from '../services/community-service.js';
16
+ import { LESSON_SHARING_CATEGORIES } from '@agentlensai/core';
17
+ const VALID_CATEGORIES = new Set(LESSON_SHARING_CATEGORIES);
18
+ export function communityRoutes(db, transport) {
19
+ const app = new Hono();
20
+ const poolTransport = transport ?? new LocalCommunityPoolTransport();
21
+ const service = new CommunityService(db, { transport: poolTransport });
22
+ function getTenantId(c) {
23
+ return c.get('apiKey')?.tenantId ?? 'default';
24
+ }
25
+ // ─── Share ─────────────────────────────────────────
26
+ app.post('/share', async (c) => {
27
+ const tenantId = getTenantId(c);
28
+ let body;
29
+ try {
30
+ body = await c.req.json();
31
+ }
32
+ catch {
33
+ return c.json({ error: 'Invalid JSON body' }, 400);
34
+ }
35
+ const lessonId = body.lessonId;
36
+ if (!lessonId || typeof lessonId !== 'string') {
37
+ return c.json({ error: 'lessonId is required' }, 400);
38
+ }
39
+ const result = await service.share(tenantId, lessonId, 'api');
40
+ switch (result.status) {
41
+ case 'shared':
42
+ return c.json(result, 201);
43
+ case 'rate_limited':
44
+ return c.json({ error: 'Rate limit exceeded', status: 'rate_limited' }, 429);
45
+ case 'disabled':
46
+ return c.json({ error: result.reason, status: 'disabled' }, 403);
47
+ case 'blocked':
48
+ return c.json({ error: result.reason, status: 'blocked' }, 422);
49
+ case 'pending_review':
50
+ return c.json(result, 202);
51
+ case 'error':
52
+ return c.json({ error: result.error, status: 'error' }, 500);
53
+ }
54
+ });
55
+ // ─── Search ────────────────────────────────────────
56
+ app.get('/search', async (c) => {
57
+ const tenantId = getTenantId(c);
58
+ const query = c.req.query('q') || c.req.query('query');
59
+ if (!query) {
60
+ return c.json({ error: 'q (query) parameter is required' }, 400);
61
+ }
62
+ const category = c.req.query('category') || undefined;
63
+ if (category && !VALID_CATEGORIES.has(category)) {
64
+ return c.json({ error: `Invalid category. Must be one of: ${LESSON_SHARING_CATEGORIES.join(', ')}` }, 400);
65
+ }
66
+ const minReputation = c.req.query('minReputation') ? Number(c.req.query('minReputation')) : undefined;
67
+ const limit = c.req.query('limit') ? Math.min(Number(c.req.query('limit')), 50) : 50;
68
+ const result = await service.search(tenantId, query, { category, minReputation, limit }, 'api');
69
+ return c.json(result);
70
+ });
71
+ // ─── Tenant Config ────────────────────────────────
72
+ app.get('/config', async (c) => {
73
+ const tenantId = getTenantId(c);
74
+ const config = service.getSharingConfig(tenantId);
75
+ return c.json(config);
76
+ });
77
+ app.put('/config', async (c) => {
78
+ const tenantId = getTenantId(c);
79
+ let body;
80
+ try {
81
+ body = await c.req.json();
82
+ }
83
+ catch {
84
+ return c.json({ error: 'Invalid JSON body' }, 400);
85
+ }
86
+ const updates = {};
87
+ if (body.enabled !== undefined)
88
+ updates.enabled = Boolean(body.enabled);
89
+ if (body.humanReviewEnabled !== undefined)
90
+ updates.humanReviewEnabled = Boolean(body.humanReviewEnabled);
91
+ if (body.poolEndpoint !== undefined)
92
+ updates.poolEndpoint = body.poolEndpoint;
93
+ if (body.rateLimitPerHour !== undefined) {
94
+ const val = Number(body.rateLimitPerHour);
95
+ if (isNaN(val) || val < 1)
96
+ return c.json({ error: 'rateLimitPerHour must be >= 1' }, 400);
97
+ updates.rateLimitPerHour = val;
98
+ }
99
+ if (body.volumeAlertThreshold !== undefined) {
100
+ const val = Number(body.volumeAlertThreshold);
101
+ if (isNaN(val) || val < 1)
102
+ return c.json({ error: 'volumeAlertThreshold must be >= 1' }, 400);
103
+ updates.volumeAlertThreshold = val;
104
+ }
105
+ if (body.categories !== undefined) {
106
+ if (!Array.isArray(body.categories))
107
+ return c.json({ error: 'categories must be an array' }, 400);
108
+ for (const cat of body.categories) {
109
+ if (!VALID_CATEGORIES.has(cat)) {
110
+ return c.json({ error: `Invalid category: ${cat}` }, 400);
111
+ }
112
+ }
113
+ }
114
+ const config = service.updateSharingConfig(tenantId, updates);
115
+ return c.json(config);
116
+ });
117
+ // ─── Agent Config (list all) ────────────────────────
118
+ app.get('/agents', async (c) => {
119
+ const tenantId = getTenantId(c);
120
+ const configs = service.getAgentSharingConfigs(tenantId);
121
+ return c.json({ configs });
122
+ });
123
+ // ─── Agent Config ──────────────────────────────────
124
+ app.get('/config/agents/:agentId', async (c) => {
125
+ const tenantId = getTenantId(c);
126
+ const agentId = c.req.param('agentId');
127
+ const config = service.getAgentSharingConfig(tenantId, agentId);
128
+ return c.json({ config });
129
+ });
130
+ app.put('/config/agents/:agentId', async (c) => {
131
+ const tenantId = getTenantId(c);
132
+ const agentId = c.req.param('agentId');
133
+ let body;
134
+ try {
135
+ body = await c.req.json();
136
+ }
137
+ catch {
138
+ return c.json({ error: 'Invalid JSON body' }, 400);
139
+ }
140
+ const updates = {};
141
+ if (body.enabled !== undefined)
142
+ updates.enabled = Boolean(body.enabled);
143
+ if (body.categories !== undefined) {
144
+ if (!Array.isArray(body.categories))
145
+ return c.json({ error: 'categories must be an array' }, 400);
146
+ for (const cat of body.categories) {
147
+ if (!VALID_CATEGORIES.has(cat)) {
148
+ return c.json({ error: `Invalid category: ${cat}` }, 400);
149
+ }
150
+ }
151
+ updates.categories = body.categories;
152
+ }
153
+ const config = service.updateAgentSharingConfig(tenantId, agentId, updates);
154
+ return c.json({ config });
155
+ });
156
+ // ─── Agent Config (dashboard shorthand) ─────────────
157
+ app.get('/agents/:agentId', async (c) => {
158
+ const tenantId = getTenantId(c);
159
+ const agentId = c.req.param('agentId');
160
+ const config = service.getAgentSharingConfig(tenantId, agentId);
161
+ return c.json(config);
162
+ });
163
+ app.put('/agents/:agentId', async (c) => {
164
+ const tenantId = getTenantId(c);
165
+ const agentId = c.req.param('agentId');
166
+ let body;
167
+ try {
168
+ body = await c.req.json();
169
+ }
170
+ catch {
171
+ return c.json({ error: 'Invalid JSON body' }, 400);
172
+ }
173
+ const updates = {};
174
+ if (body.enabled !== undefined)
175
+ updates.enabled = Boolean(body.enabled);
176
+ if (body.categories !== undefined) {
177
+ if (!Array.isArray(body.categories))
178
+ return c.json({ error: 'categories must be an array' }, 400);
179
+ updates.categories = body.categories;
180
+ }
181
+ const config = service.updateAgentSharingConfig(tenantId, agentId, updates);
182
+ return c.json(config);
183
+ });
184
+ // ─── Rate ──────────────────────────────────────────
185
+ app.post('/rate', async (c) => {
186
+ const tenantId = getTenantId(c);
187
+ let body;
188
+ try {
189
+ body = await c.req.json();
190
+ }
191
+ catch {
192
+ return c.json({ error: 'Invalid JSON body' }, 400);
193
+ }
194
+ const lessonId = body.lessonId;
195
+ const delta = Number(body.delta);
196
+ if (!lessonId)
197
+ return c.json({ error: 'lessonId is required' }, 400);
198
+ if (isNaN(delta) || (delta !== 1 && delta !== -1))
199
+ return c.json({ error: 'delta must be 1 or -1' }, 400);
200
+ const result = await service.rate(tenantId, lessonId, delta, 'vote', 'api');
201
+ if (result.status === 'rated') {
202
+ return c.json({ status: 'rated', reputationScore: result.reputationScore });
203
+ }
204
+ return c.json({ error: result.error }, 500);
205
+ });
206
+ // ─── Stats ─────────────────────────────────────────
207
+ app.get('/stats', async (c) => {
208
+ const tenantId = getTenantId(c);
209
+ const stats = service.getStats(tenantId);
210
+ return c.json(stats);
211
+ });
212
+ // (Agent list endpoint already defined above as GET /agents)
213
+ // ─── Purge ─────────────────────────────────────────
214
+ app.post('/purge', async (c) => {
215
+ const tenantId = getTenantId(c);
216
+ let body;
217
+ try {
218
+ body = await c.req.json();
219
+ }
220
+ catch {
221
+ return c.json({ error: 'Invalid JSON body' }, 400);
222
+ }
223
+ const confirmation = body.confirmation;
224
+ if (!confirmation)
225
+ return c.json({ error: 'confirmation is required' }, 400);
226
+ const result = await service.purge(tenantId, confirmation, 'api');
227
+ if (result.status === 'purged') {
228
+ return c.json({ status: 'purged', deleted: result.deleted });
229
+ }
230
+ return c.json({ error: result.error }, 400);
231
+ });
232
+ // ─── Deny List ─────────────────────────────────────
233
+ app.get('/deny-list', async (c) => {
234
+ const tenantId = getTenantId(c);
235
+ const rules = service.getDenyList(tenantId);
236
+ return c.json({ rules });
237
+ });
238
+ app.post('/deny-list', async (c) => {
239
+ const tenantId = getTenantId(c);
240
+ let body;
241
+ try {
242
+ body = await c.req.json();
243
+ }
244
+ catch {
245
+ return c.json({ error: 'Invalid JSON body' }, 400);
246
+ }
247
+ const pattern = body.pattern;
248
+ if (!pattern || typeof pattern !== 'string') {
249
+ return c.json({ error: 'pattern is required' }, 400);
250
+ }
251
+ const reason = body.reason || 'No reason provided';
252
+ const isRegex = Boolean(body.isRegex);
253
+ try {
254
+ const rule = service.addDenyListRule(tenantId, pattern, isRegex, reason);
255
+ return c.json({ rule }, 201);
256
+ }
257
+ catch (err) {
258
+ return c.json({ error: err instanceof Error ? err.message : String(err) }, 400);
259
+ }
260
+ });
261
+ app.delete('/deny-list/:id', async (c) => {
262
+ const tenantId = getTenantId(c);
263
+ const ruleId = c.req.param('id');
264
+ const ok = service.deleteDenyListRule(tenantId, ruleId);
265
+ if (!ok) {
266
+ return c.json({ error: 'Rule not found' }, 404);
267
+ }
268
+ return c.json({ deleted: true });
269
+ });
270
+ return { app, service };
271
+ }
272
+ //# sourceMappingURL=community.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"community.js","sourceRoot":"","sources":["../../src/routes/community.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Delegation REST API (Stories 6.1 + 6.2)
3
+ *
4
+ * POST /api/agents/delegate — send a delegation request (outbound)
5
+ * GET /api/agents/:id/delegations/inbox — poll for pending requests (inbound)
6
+ * POST /api/agents/:id/delegations/:requestId/accept — accept a delegation
7
+ * POST /api/agents/:id/delegations/:requestId/reject — reject a delegation
8
+ * POST /api/agents/:id/delegations/:requestId/complete — complete with result
9
+ */
10
+ import { Hono } from 'hono';
11
+ import type { AuthVariables } from '../middleware/auth.js';
12
+ import type { SqliteDb } from '../db/index.js';
13
+ import { DelegationService, type PoolTransport } from '../services/delegation-service.js';
14
+ export declare function delegationRoutes(db: SqliteDb, transport: PoolTransport): {
15
+ app: Hono<{
16
+ Variables: AuthVariables;
17
+ }, import("hono/types").BlankSchema, "/">;
18
+ service: DelegationService;
19
+ };
20
+ //# sourceMappingURL=delegation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delegation.d.ts","sourceRoot":"","sources":["../../src/routes/delegation.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,KAAK,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAK1F,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,aAAa;;mBACnC,aAAa;;;EA4GhD"}