@synoikia/core 0.6.0 → 0.8.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 (103) hide show
  1. package/dist/app.d.ts +8 -0
  2. package/dist/app.js +16 -4
  3. package/dist/app.js.map +1 -1
  4. package/dist/approvals/grants.d.ts +34 -0
  5. package/dist/approvals/grants.js +79 -0
  6. package/dist/approvals/grants.js.map +1 -0
  7. package/dist/approvals/service.d.ts +24 -1
  8. package/dist/approvals/service.js +24 -2
  9. package/dist/approvals/service.js.map +1 -1
  10. package/dist/auth/mcp-auth.d.ts +8 -0
  11. package/dist/auth/mcp-auth.js +82 -33
  12. package/dist/auth/mcp-auth.js.map +1 -1
  13. package/dist/auth/mcp-tokens.d.ts +9 -3
  14. package/dist/auth/mcp-tokens.js +24 -4
  15. package/dist/auth/mcp-tokens.js.map +1 -1
  16. package/dist/auth/oauth.d.ts +5 -1
  17. package/dist/auth/oauth.js +15 -1
  18. package/dist/auth/oauth.js.map +1 -1
  19. package/dist/auth/oidc.js +3 -2
  20. package/dist/auth/oidc.js.map +1 -1
  21. package/dist/auth/roles.d.ts +43 -0
  22. package/dist/auth/roles.js +164 -0
  23. package/dist/auth/roles.js.map +1 -0
  24. package/dist/auth/sessions.d.ts +7 -0
  25. package/dist/auth/sessions.js +18 -2
  26. package/dist/auth/sessions.js.map +1 -1
  27. package/dist/auth/users.d.ts +26 -1
  28. package/dist/auth/users.js +109 -12
  29. package/dist/auth/users.js.map +1 -1
  30. package/dist/catalog/groups.js +2 -1
  31. package/dist/catalog/groups.js.map +1 -1
  32. package/dist/catalog/role-levels.d.ts +67 -0
  33. package/dist/catalog/role-levels.js +297 -0
  34. package/dist/catalog/role-levels.js.map +1 -0
  35. package/dist/catalog/rules.d.ts +33 -9
  36. package/dist/catalog/rules.js +51 -25
  37. package/dist/catalog/rules.js.map +1 -1
  38. package/dist/db/schema.d.ts +566 -0
  39. package/dist/db/schema.js +64 -0
  40. package/dist/db/schema.js.map +1 -1
  41. package/dist/errors.d.ts +5 -2
  42. package/dist/errors.js +5 -0
  43. package/dist/errors.js.map +1 -1
  44. package/dist/gate/access.d.ts +23 -2
  45. package/dist/gate/access.js +31 -3
  46. package/dist/gate/access.js.map +1 -1
  47. package/dist/gate/pipeline.d.ts +25 -5
  48. package/dist/gate/pipeline.js +67 -6
  49. package/dist/gate/pipeline.js.map +1 -1
  50. package/dist/gate/preapproval.d.ts +2 -0
  51. package/dist/gate/preapproval.js +16 -3
  52. package/dist/gate/preapproval.js.map +1 -1
  53. package/dist/http/admin/auth.d.ts +4 -0
  54. package/dist/http/admin/auth.js +53 -4
  55. package/dist/http/admin/auth.js.map +1 -1
  56. package/dist/http/admin/instances.js +19 -1
  57. package/dist/http/admin/instances.js.map +1 -1
  58. package/dist/http/admin/me.d.ts +6 -0
  59. package/dist/http/admin/me.js +189 -0
  60. package/dist/http/admin/me.js.map +1 -0
  61. package/dist/http/admin/roles.d.ts +5 -0
  62. package/dist/http/admin/roles.js +45 -0
  63. package/dist/http/admin/roles.js.map +1 -0
  64. package/dist/http/admin/system.js +11 -6
  65. package/dist/http/admin/system.js.map +1 -1
  66. package/dist/http/admin-app.js +13 -2
  67. package/dist/http/admin-app.js.map +1 -1
  68. package/dist/http/common.d.ts +1 -1
  69. package/dist/http/mcp/approval-card.d.ts +6 -0
  70. package/dist/http/mcp/approval-card.js +160 -0
  71. package/dist/http/mcp/approval-card.js.map +1 -0
  72. package/dist/http/mcp/approval-routes.d.ts +2 -2
  73. package/dist/http/mcp/approval-routes.js +40 -4
  74. package/dist/http/mcp/approval-routes.js.map +1 -1
  75. package/dist/http/mcp/endpoint.js +104 -10
  76. package/dist/http/mcp/endpoint.js.map +1 -1
  77. package/dist/http/mcp/oauth-routes.js +22 -8
  78. package/dist/http/mcp/oauth-routes.js.map +1 -1
  79. package/dist/http/mcp/pages.d.ts +8 -1
  80. package/dist/http/mcp/pages.js +21 -2
  81. package/dist/http/mcp/pages.js.map +1 -1
  82. package/dist/instances/manager.d.ts +4 -0
  83. package/dist/instances/settings.d.ts +2 -0
  84. package/dist/instances/settings.js +2 -0
  85. package/dist/instances/settings.js.map +1 -1
  86. package/dist/runtime/executions.d.ts +68 -0
  87. package/dist/runtime/executions.js +158 -0
  88. package/dist/runtime/executions.js.map +1 -0
  89. package/dist/runtime/index.d.ts +4 -1
  90. package/dist/runtime/index.js +131 -25
  91. package/dist/runtime/index.js.map +1 -1
  92. package/dist/settings.d.ts +4 -0
  93. package/dist/settings.js +12 -0
  94. package/dist/settings.js.map +1 -1
  95. package/dist/testing/index.d.ts +11 -1
  96. package/dist/testing/index.js +23 -7
  97. package/dist/testing/index.js.map +1 -1
  98. package/drizzle/0013_user_roles.sql +63 -0
  99. package/drizzle/0014_user_registration_source.sql +1 -0
  100. package/drizzle/meta/0013_snapshot.json +2833 -0
  101. package/drizzle/meta/0014_snapshot.json +2840 -0
  102. package/drizzle/meta/_journal.json +14 -0
  103. package/package.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"file":"settings.js","sourceRoot":"","sources":["../../src/instances/settings.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"settings.js","sourceRoot":"","sources":["../../src/instances/settings.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,68 @@
1
+ import type { ParkedApproval } from '../approvals/service.js';
2
+ import type { SandboxResult } from '../sandbox/index.js';
3
+ /** Parked executions (design §5.6): an `execute` whose approval waits on a human outlives its tool call.
4
+ * Only its owner (credential and endpoint) can follow it with `resume`; it keeps running at the decision. */
5
+ export declare const PARKED_LIMIT: {
6
+ perPrincipalInstance: number;
7
+ perInstance: number;
8
+ total: number;
9
+ };
10
+ /** Approvals one parked execution can ask for; it also stops asking after one is not given. */
11
+ export declare const MAX_PARKED_APPROVALS = 10;
12
+ /** How long `resume` waits for a change before it answers "still waiting". */
13
+ export declare const RESUME_WAIT_MS = 45000;
14
+ /** How long a finished result waits for `resume` to collect it. */
15
+ export declare const RESULT_TTL_MS: number;
16
+ /** `execute` and `resume` answer this while a parked execution has no result yet. */
17
+ export interface PendingResult {
18
+ ok: false;
19
+ status: 'awaiting_approval' | 'running';
20
+ executionId: string;
21
+ approval?: ParkedApproval;
22
+ error: {
23
+ code: 'AWAITING_APPROVAL' | 'STILL_RUNNING';
24
+ message: string;
25
+ };
26
+ logs: string[];
27
+ }
28
+ export type ExecuteResult = SandboxResult | PendingResult;
29
+ export interface ExecutionStatus {
30
+ state: 'pending' | 'approved' | 'denied' | 'timed_out' | 'cancelled' | 'running' | 'done';
31
+ expiresAt?: string;
32
+ /** The last decision on this run's approvals. */
33
+ decision?: string;
34
+ }
35
+ export declare class ExecutionRegistry {
36
+ private readonly now;
37
+ private readonly entries;
38
+ constructor(now?: () => number);
39
+ /** Unfinished parked runs (shutdown waits for them like for any running script). */
40
+ get running(): number;
41
+ hasRoom(owner: string, instanceId: string): boolean;
42
+ adopt(input: {
43
+ id: string;
44
+ owner: string;
45
+ instanceId: string;
46
+ approval: ParkedApproval;
47
+ abort: () => void;
48
+ }): void;
49
+ /** Whether an adopted run may park again: a loop of denied or timed-out approvals ends here. */
50
+ mayParkAgain(id: string): boolean;
51
+ /** The parked run reached another approval. */
52
+ awaiting(id: string, approval: ParkedApproval): void;
53
+ settled(id: string, approvalId: string, decision: {
54
+ outcome: string;
55
+ decidedBy?: string;
56
+ }): void;
57
+ finish(id: string, result: SandboxResult): void;
58
+ /** The owner's entry, or undefined (unknown, expired, or someone else's: all look the same). */
59
+ private find;
60
+ status(id: string, owner: string, instanceId: string): ExecutionStatus | undefined;
61
+ /** Waits for the result or a new approval, up to `waitMs`. A collected result removes the entry. */
62
+ wait(id: string, owner: string, instanceId: string, waitMs: number, signal?: AbortSignal): Promise<ExecuteResult | 'not_found' | 'busy'>;
63
+ /** Ends the parked runs of one endpoint, or all of them. Their approvals are cancelled by the gate. */
64
+ abort(instanceId?: string): void;
65
+ private changed;
66
+ private sweep;
67
+ }
68
+ export declare function pendingResult(executionId: string, approval?: ParkedApproval): PendingResult;
@@ -0,0 +1,158 @@
1
+ /** Parked executions (design §5.6): an `execute` whose approval waits on a human outlives its tool call.
2
+ * Only its owner (credential and endpoint) can follow it with `resume`; it keeps running at the decision. */
3
+ export const PARKED_LIMIT = { perPrincipalInstance: 2, perInstance: 8, total: 32 };
4
+ /** Approvals one parked execution can ask for; it also stops asking after one is not given. */
5
+ export const MAX_PARKED_APPROVALS = 10;
6
+ /** How long `resume` waits for a change before it answers "still waiting". */
7
+ export const RESUME_WAIT_MS = 45_000;
8
+ /** How long a finished result waits for `resume` to collect it. */
9
+ export const RESULT_TTL_MS = 10 * 60_000;
10
+ export class ExecutionRegistry {
11
+ now;
12
+ entries = new Map();
13
+ constructor(now = () => Date.now()) {
14
+ this.now = now;
15
+ }
16
+ /** Unfinished parked runs (shutdown waits for them like for any running script). */
17
+ get running() {
18
+ return [...this.entries.values()].filter((e) => !e.result).length;
19
+ }
20
+ hasRoom(owner, instanceId) {
21
+ this.sweep();
22
+ const live = [...this.entries.values()].filter((e) => !e.result);
23
+ const here = live.filter((e) => e.instanceId === instanceId);
24
+ return (live.length < PARKED_LIMIT.total &&
25
+ here.length < PARKED_LIMIT.perInstance &&
26
+ here.filter((e) => e.owner === owner).length < PARKED_LIMIT.perPrincipalInstance);
27
+ }
28
+ adopt(input) {
29
+ this.entries.set(input.id, { ...input, approvals: 1, attached: false, waiters: new Set() });
30
+ }
31
+ /** Whether an adopted run may park again: a loop of denied or timed-out approvals ends here. */
32
+ mayParkAgain(id) {
33
+ const e = this.entries.get(id);
34
+ return !!e && e.approvals < MAX_PARKED_APPROVALS && (!e.lastDecision || e.lastDecision.outcome === 'approved');
35
+ }
36
+ /** The parked run reached another approval. */
37
+ awaiting(id, approval) {
38
+ const e = this.entries.get(id);
39
+ if (!e)
40
+ return;
41
+ e.approval = approval;
42
+ e.approvals++;
43
+ this.changed(e);
44
+ }
45
+ settled(id, approvalId, decision) {
46
+ const e = this.entries.get(id);
47
+ if (!e || e.approval?.approvalId !== approvalId)
48
+ return;
49
+ e.approval = undefined;
50
+ e.lastDecision = decision;
51
+ this.changed(e);
52
+ }
53
+ finish(id, result) {
54
+ const e = this.entries.get(id);
55
+ if (!e)
56
+ return;
57
+ e.result = result;
58
+ e.approval = undefined;
59
+ e.finishedAt = this.now();
60
+ this.changed(e);
61
+ }
62
+ /** The owner's entry, or undefined (unknown, expired, or someone else's: all look the same). */
63
+ find(id, owner, instanceId) {
64
+ this.sweep();
65
+ const e = this.entries.get(id);
66
+ return e && e.owner === owner && e.instanceId === instanceId ? e : undefined;
67
+ }
68
+ status(id, owner, instanceId) {
69
+ const e = this.find(id, owner, instanceId);
70
+ if (!e)
71
+ return undefined;
72
+ // No approver name: it is a sign-in name on the internet-facing MCP port.
73
+ if (e.result)
74
+ return { state: 'done', decision: e.lastDecision?.outcome };
75
+ if (e.approval)
76
+ return { state: 'pending', expiresAt: e.approval.expiresAt.toISOString() };
77
+ if (e.lastDecision && e.lastDecision.outcome !== 'approved')
78
+ return { state: e.lastDecision.outcome };
79
+ return { state: e.lastDecision ? 'approved' : 'running' };
80
+ }
81
+ /** Waits for the result or a new approval, up to `waitMs`. A collected result removes the entry. */
82
+ async wait(id, owner, instanceId, waitMs, signal) {
83
+ const e = this.find(id, owner, instanceId);
84
+ if (!e)
85
+ return 'not_found';
86
+ if (e.attached)
87
+ return 'busy';
88
+ e.attached = true;
89
+ try {
90
+ const startedOn = e.approval?.approvalId;
91
+ const settledNow = () => !!e.result || (!!e.approval && e.approval.approvalId !== startedOn);
92
+ if (!settledNow()) {
93
+ await new Promise((resolve) => {
94
+ const done = () => {
95
+ clearTimeout(timer);
96
+ e.waiters.delete(wake);
97
+ signal?.removeEventListener('abort', done);
98
+ resolve();
99
+ };
100
+ const wake = () => {
101
+ if (settledNow())
102
+ done();
103
+ };
104
+ const timer = setTimeout(done, waitMs);
105
+ e.waiters.add(wake);
106
+ signal?.addEventListener('abort', done);
107
+ });
108
+ }
109
+ if (e.result) {
110
+ this.entries.delete(id);
111
+ return e.result;
112
+ }
113
+ return pending(e);
114
+ }
115
+ finally {
116
+ e.attached = false;
117
+ }
118
+ }
119
+ /** Ends the parked runs of one endpoint, or all of them. Their approvals are cancelled by the gate. */
120
+ abort(instanceId) {
121
+ for (const e of this.entries.values())
122
+ if (!e.result && (!instanceId || e.instanceId === instanceId))
123
+ e.abort();
124
+ }
125
+ changed(e) {
126
+ for (const w of [...e.waiters])
127
+ w();
128
+ }
129
+ sweep() {
130
+ const cutoff = this.now() - RESULT_TTL_MS;
131
+ for (const [id, e] of this.entries)
132
+ if (e.finishedAt !== undefined && e.finishedAt < cutoff)
133
+ this.entries.delete(id);
134
+ }
135
+ }
136
+ export function pendingResult(executionId, approval) {
137
+ return approval
138
+ ? {
139
+ ok: false,
140
+ status: 'awaiting_approval',
141
+ executionId,
142
+ approval,
143
+ error: {
144
+ code: 'AWAITING_APPROVAL',
145
+ message: `${approval.operationKey} waits for a human to approve it on the approval page. Show the link to the user; after they decide, call resume with this executionId.`,
146
+ },
147
+ logs: [],
148
+ }
149
+ : {
150
+ ok: false,
151
+ status: 'running',
152
+ executionId,
153
+ error: { code: 'STILL_RUNNING', message: 'The execution is still running; call resume again.' },
154
+ logs: [],
155
+ };
156
+ }
157
+ const pending = (e) => pendingResult(e.id, e.approval);
158
+ //# sourceMappingURL=executions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executions.js","sourceRoot":"","sources":["../../src/runtime/executions.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import type { CallerContext, GateDeps, InstanceRuntime } from '../gate/pipeline.js';
2
+ import type { ExecuteResult } from './executions.js';
2
3
  import type { SandboxResult } from '../sandbox/index.js';
3
4
  /** The engines behind the `search` and `execute` tools (design §5.1–§5.2). */
4
5
  /** Sandbox caps (design §5.2): runs per minute per principal and instance, and concurrent isolates per
@@ -9,7 +10,9 @@ export declare const SANDBOX_CONCURRENCY: {
9
10
  };
10
11
  /** Scripts running now, across all instances (shutdown waits for cancelled ones to return). */
11
12
  export declare const sandboxesRunning: () => number;
12
- export declare function executeCode(deps: GateDeps, rt: InstanceRuntime, caller: CallerContext, code: string, signal?: AbortSignal): Promise<SandboxResult>;
13
+ export declare function executeCode(deps: GateDeps, rt: InstanceRuntime, caller: CallerContext, code: string, signal?: AbortSignal): Promise<ExecuteResult>;
14
+ /** `resume(executionId)` (design §5.6): the parked run's result, or that it still waits. */
15
+ export declare function resumeExecution(deps: GateDeps, rt: InstanceRuntime, caller: CallerContext, executionId: string, signal?: AbortSignal): Promise<ExecuteResult>;
13
16
  export interface CatalogFindQuery {
14
17
  text?: string;
15
18
  group?: string;
@@ -2,11 +2,13 @@ import { randomUUID } from 'node:crypto';
2
2
  import { and, asc, eq } from 'drizzle-orm';
3
3
  import { writeAudit } from '../audit.js';
4
4
  import { accessInput, listGroups } from '../catalog/groups.js';
5
+ import { loadCaps } from '../catalog/role-levels.js';
5
6
  import { findRegistryEntries } from '../catalog/registry.js';
6
7
  import { guides, operationGroups, operations } from '../db/schema.js';
7
8
  import { effectiveAccess } from '../gate/access.js';
8
9
  import { currentGuide, issueAttestationKey } from '../gate/attestation.js';
9
10
  import { createGateBindings, principalKey } from '../gate/pipeline.js';
11
+ import { pendingResult, RESUME_WAIT_MS } from './executions.js';
10
12
  import { BindingError, runInSandbox } from '../sandbox/index.js';
11
13
  /** The engines behind the `search` and `execute` tools (design §5.1–§5.2). */
12
14
  /** Sandbox caps (design §5.2): runs per minute per principal and instance, and concurrent isolates per
@@ -14,8 +16,10 @@ import { BindingError, runInSandbox } from '../sandbox/index.js';
14
16
  export const SANDBOX_CONCURRENCY = { perInstance: 4, total: 16 };
15
17
  const running = new Map();
16
18
  let runningTotal = 0;
19
+ /** Parked scripts still running, across all registries (they gave back their concurrency slot). */
20
+ let parkedRunning = 0;
17
21
  /** Scripts running now, across all instances (shutdown waits for cancelled ones to return). */
18
- export const sandboxesRunning = () => runningTotal;
22
+ export const sandboxesRunning = () => runningTotal + parkedRunning;
19
23
  function admit(deps, rt, caller) {
20
24
  const who = principalKey(caller);
21
25
  if (!deps.limiter.take(`run:${rt.instanceId}:${who}`, rt.settings.executePerMinute, 60_000)) {
@@ -40,36 +44,123 @@ export async function executeCode(deps, rt, caller, code, signal) {
40
44
  const release = admit(deps, rt, caller);
41
45
  if (typeof release !== 'function')
42
46
  return release;
43
- // Ends with the sandbox (return, error or timeout) or earlier, when the request or session goes away.
47
+ // Ends with the sandbox (return, error or timeout) or earlier, when the request or session goes away;
48
+ // once parked, only the registry ends it (design §5.6).
44
49
  const run = new AbortController();
45
50
  const stop = () => run.abort();
46
51
  signal?.addEventListener('abort', stop);
47
52
  if (signal?.aborted)
48
53
  stop();
54
+ const executionId = randomUUID();
55
+ const registry = caller.parkable ? deps.executions : undefined;
56
+ const owner = principalKey(caller);
57
+ let adopted = false;
58
+ let firstPark;
59
+ const parkedFirst = new Promise((resolve) => (firstPark = resolve));
60
+ const park = registry && {
61
+ reserve: () => adopted
62
+ ? registry.mayParkAgain(executionId)
63
+ ? null
64
+ : 'park_refused'
65
+ : registry.hasRoom(owner, rt.instanceId)
66
+ ? null
67
+ : 'too_many_parked',
68
+ offer: (a) => (adopted ? registry.awaiting(executionId, a) : firstPark(a)),
69
+ settled: (approvalId, decision) => registry.settled(executionId, approvalId, decision),
70
+ };
71
+ const sandbox = runInSandbox({
72
+ code,
73
+ bindings: createGateBindings(deps, rt, caller, run.signal, { executionId, park }),
74
+ limits: rt.settings.sandbox,
75
+ // Each gated call's result was already redacted; this covers anything the script derived or logged.
76
+ redact: rt.redact,
77
+ });
78
+ let first;
49
79
  try {
50
- return await runInSandbox({
51
- code,
52
- bindings: createGateBindings(deps, rt, caller, run.signal),
53
- limits: rt.settings.sandbox,
54
- // Each gated call's result was already redacted; this covers anything the script derived or logged.
55
- redact: rt.redact,
56
- });
80
+ first = await Promise.race([
81
+ sandbox.then((result) => ({ result })),
82
+ parkedFirst.then((approval) => ({ approval })),
83
+ ]);
57
84
  }
58
- finally {
85
+ catch (err) {
59
86
  stop();
87
+ throw err;
88
+ }
89
+ finally {
60
90
  signal?.removeEventListener('abort', stop);
61
91
  release();
62
92
  }
93
+ if ('result' in first) {
94
+ stop();
95
+ return first.result;
96
+ }
97
+ // Parked: the run outlives this tool call, under the registry's caps instead of a concurrency slot.
98
+ registry.adopt({ id: executionId, owner, instanceId: rt.instanceId, approval: first.approval, abort: stop });
99
+ adopted = true;
100
+ parkedRunning++;
101
+ void sandbox.then((result) => {
102
+ parkedRunning--;
103
+ stop();
104
+ registry.finish(executionId, result);
105
+ }, () => {
106
+ parkedRunning--;
107
+ stop();
108
+ registry.finish(executionId, { ok: false, error: { code: 'INTERNAL', message: 'Internal error' }, logs: [] });
109
+ });
110
+ return pendingResult(executionId, first.approval);
111
+ }
112
+ /** `resume(executionId)` (design §5.6): the parked run's result, or that it still waits. */
113
+ export async function resumeExecution(deps, rt, caller, executionId, signal) {
114
+ const outcome = deps.executions
115
+ ? await deps.executions.wait(executionId, principalKey(caller), rt.instanceId, RESUME_WAIT_MS, signal)
116
+ : 'not_found';
117
+ const result = outcome === 'not_found'
118
+ ? {
119
+ ok: false,
120
+ error: {
121
+ code: 'EXECUTION_NOT_FOUND',
122
+ message: 'No parked execution with this id: it finished and was collected, expired, or the server restarted',
123
+ },
124
+ logs: [],
125
+ }
126
+ : outcome === 'busy'
127
+ ? {
128
+ ok: false,
129
+ error: { code: 'BUSY', message: 'Another resume is already waiting on this execution' },
130
+ logs: [],
131
+ }
132
+ : outcome;
133
+ writeAudit(deps.db, {
134
+ kind: 'call',
135
+ instanceId: rt.instanceId,
136
+ decision: 'resumed',
137
+ actorKind: 'mcp_client',
138
+ actorId: caller.client.id,
139
+ resultStatus: result.ok ? 'ok' : 'status' in result ? 'pending' : 'error',
140
+ detail: { executionId, ...(result.ok ? {} : { error: result.error.code }) },
141
+ }, deps.now?.() ?? new Date());
142
+ return result;
63
143
  }
64
- function describeOp(op, groupKey, access) {
144
+ function describeOp(op, groupKey, access, granted = false) {
145
+ // A session grant (design §5.8) turns Ask into auto-approval, except for locked and typed-confirmation ops.
146
+ const mode = access.reachable &&
147
+ access.mode === 'approve' &&
148
+ granted &&
149
+ !op.locked &&
150
+ !op.typedConfirmation &&
151
+ access.level === 'ask'
152
+ ? 'auto'
153
+ : access.reachable
154
+ ? access.mode
155
+ : undefined;
65
156
  return {
66
157
  key: op.key,
67
158
  displayName: op.displayName ?? undefined,
68
159
  group: groupKey,
69
160
  classification: op.locked ? 'locked' : op.classification,
70
161
  // Whether a call runs straight away, waits for a human, or is auto-approved at level `write`.
71
- approval: access.reachable
72
- ? { run: 'none', approve: 'required', auto: 'auto' }[access.mode]
162
+ approval: mode
163
+ ? { run: 'none', approve: 'required', auto: 'auto' }[mode]
73
164
  : op.locked || op.classification === 'write'
74
165
  ? 'required'
75
166
  : 'none',
@@ -79,7 +170,7 @@ function describeOp(op, groupKey, access) {
79
170
  ...(access.reachable ? {} : { disabled: true, reason: access.reason }),
80
171
  };
81
172
  }
82
- function catalogBindings(db, instanceId, principal) {
173
+ function catalogBindings(db, instanceId, principal, granted) {
83
174
  const load = () => {
84
175
  const groups = new Map(db
85
176
  .select()
@@ -93,20 +184,21 @@ function catalogBindings(db, instanceId, principal) {
93
184
  .where(and(eq(operations.instanceId, instanceId), eq(operations.stale, false)))
94
185
  .orderBy(asc(operations.key))
95
186
  .all();
96
- return { groups, ops };
187
+ return { groups, ops, caps: loadCaps(db, instanceId, principal) };
97
188
  };
98
- const accessOf = (op, groups) => effectiveAccess(accessInput(op), groups.get(op.groupId), principal);
189
+ const accessOf = (op, groups, caps) => effectiveAccess(accessInput(op), groups.get(op.groupId), principal, caps?.(op));
99
190
  return {
100
191
  find: async ([rawQuery]) => {
101
192
  const q = (rawQuery ?? {});
102
193
  const text = q.text?.toLowerCase();
103
194
  const limit = Math.min(Math.max(1, Number(q.limit) || 50), 200);
104
- const { groups, ops } = load();
195
+ const { groups, ops, caps } = load();
105
196
  const out = [];
106
197
  for (const op of ops) {
107
198
  const group = groups.get(op.groupId);
108
- const access = accessOf(op, groups);
109
- if (!access.reachable && !q.includeDisabled)
199
+ const access = accessOf(op, groups, caps);
200
+ // A non-admin never sees what their role keeps from them, not even as disabled (design §6.4).
201
+ if (!access.reachable && (!q.includeDisabled || caps))
110
202
  continue;
111
203
  if (q.group && group?.key !== q.group)
112
204
  continue;
@@ -124,21 +216,35 @@ function catalogBindings(db, instanceId, principal) {
124
216
  if (!hay.includes(text))
125
217
  continue;
126
218
  }
127
- out.push(describeOp(op, group?.key, access));
219
+ out.push(describeOp(op, group?.key, access, granted()));
128
220
  if (out.length >= limit)
129
221
  break;
130
222
  }
131
223
  return out;
132
224
  },
133
225
  get: async ([key]) => {
134
- const { groups, ops } = load();
226
+ const { groups, ops, caps } = load();
135
227
  const op = ops.find((o) => o.key === key);
136
228
  if (!op)
137
229
  return null;
138
- const access = accessOf(op, groups);
139
- return { ...describeOp(op, groups.get(op.groupId)?.key, access), paramsSchema: op.paramsSchema, docs: op.docs };
230
+ const access = accessOf(op, groups, caps);
231
+ if (!access.reachable && caps)
232
+ return null;
233
+ return {
234
+ ...describeOp(op, groups.get(op.groupId)?.key, access, granted()),
235
+ paramsSchema: op.paramsSchema,
236
+ docs: op.docs,
237
+ };
238
+ },
239
+ groups: async () => {
240
+ // A non-admin sees only the groups that hold something they can call.
241
+ const { groups, ops, caps } = load();
242
+ if (!caps)
243
+ return listGroups(db, instanceId).filter((g) => !g.stale);
244
+ const open = new Set(ops.filter((op) => accessOf(op, groups, caps).reachable).map((op) => op.groupId));
245
+ const keys = new Set([...open].map((id) => groups.get(id)?.key));
246
+ return listGroups(db, instanceId).filter((g) => !g.stale && keys.has(g.key));
140
247
  },
141
- groups: async () => listGroups(db, instanceId).filter((g) => !g.stale),
142
248
  };
143
249
  }
144
250
  /** `guides.get(key)`: returns the current guide and the session-bound attestation key `execute` must
@@ -197,7 +303,7 @@ function guideBindings(deps, rt, caller) {
197
303
  }
198
304
  function searchBindings(deps, rt, caller) {
199
305
  const bindings = {
200
- catalog: catalogBindings(deps.db, rt.instanceId, caller.principal),
306
+ catalog: catalogBindings(deps.db, rt.instanceId, caller.principal, () => !!deps.grants?.active(rt.instanceId, principalKey(caller))),
201
307
  };
202
308
  if (rt.manifest.capabilities.registry) {
203
309
  bindings.registry = {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,10 @@ declare const SETTINGS_SCHEMAS: {
7
7
  disableLocalLogin: z.ZodDefault<z.ZodBoolean>;
8
8
  sessionIdleMinutes: z.ZodDefault<z.ZodNumber>;
9
9
  sessionAbsoluteHours: z.ZodDefault<z.ZodNumber>;
10
+ approvalSessionIdleHours: z.ZodDefault<z.ZodNumber>;
11
+ approvalSessionAbsoluteDays: z.ZodDefault<z.ZodNumber>;
12
+ defaultRoleId: z.ZodDefault<z.ZodNullable<z.ZodString>>;
13
+ localSignup: z.ZodDefault<z.ZodBoolean>;
10
14
  }, z.core.$strip>>;
11
15
  readonly mcp: z.ZodPrefault<z.ZodObject<{
12
16
  defaultAuthMode: z.ZodDefault<z.ZodEnum<{
package/dist/settings.js CHANGED
@@ -24,6 +24,18 @@ const SETTINGS_SCHEMAS = {
24
24
  .min(1)
25
25
  .max(24 * 30)
26
26
  .default(12),
27
+ /** Approval-page sign-in on the MCP port (design §5.3): TOTP once per browser for this long. */
28
+ approvalSessionIdleHours: z
29
+ .number()
30
+ .int()
31
+ .min(1)
32
+ .max(24 * 7)
33
+ .default(12),
34
+ approvalSessionAbsoluteDays: z.number().int().min(1).max(30).default(7),
35
+ /** Role of self-registered users (design §6.5); null turns self-registration off. */
36
+ defaultRoleId: z.string().min(1).max(64).nullable().default(null),
37
+ /** The "Create account" form on the sign-in page; needs a default role. */
38
+ localSignup: z.boolean().default(false),
27
39
  })
28
40
  .prefault({}),
29
41
  mcp: z
@@ -1 +1 @@
1
- {"version":3,"file":"settings.js","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"settings.js","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":"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"}