switchroom 0.19.33 → 0.19.35
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.
- package/dist/agent-scheduler/index.js +1 -0
- package/dist/auth-broker/index.js +11088 -10989
- package/dist/cli/notion-write-pretool.mjs +1 -0
- package/dist/cli/switchroom.js +10947 -10361
- package/dist/host-control/main.js +9512 -9410
- package/dist/vault/approvals/kernel-server.js +454 -423
- package/dist/vault/broker/server.js +1658 -1636
- package/package.json +1 -1
- package/telegram-plugin/dist/gateway/gateway.js +172 -27
- package/telegram-plugin/gateway/gateway.ts +5 -2
- package/telegram-plugin/gateway/model-command.ts +245 -23
- package/telegram-plugin/tests/model-command.test.ts +415 -4
- package/vendor/hindsight-memory/scripts/subagent_retain.py +103 -7
- package/vendor/hindsight-memory/scripts/tests/test_subagent_retain_learnings.py +377 -0
|
@@ -4012,6 +4012,410 @@ var init_zod = __esm(() => {
|
|
|
4012
4012
|
init_external();
|
|
4013
4013
|
});
|
|
4014
4014
|
|
|
4015
|
+
// src/vault/broker/peercred-ffi.ts
|
|
4016
|
+
function getPeerCred(fd) {
|
|
4017
|
+
if (process.platform !== "linux")
|
|
4018
|
+
return null;
|
|
4019
|
+
try {
|
|
4020
|
+
const ffi = __require("bun:ffi");
|
|
4021
|
+
const { dlopen, FFIType, ptr } = ffi;
|
|
4022
|
+
const SOL_SOCKET = 1;
|
|
4023
|
+
const SO_PEERCRED = 17;
|
|
4024
|
+
const UCRED_SIZE = 12;
|
|
4025
|
+
const cache = getPeerCred;
|
|
4026
|
+
const lib = cache._lib ?? (() => {
|
|
4027
|
+
const candidates = ["libc.so.6", "libc.so"];
|
|
4028
|
+
const symbolSpec = {
|
|
4029
|
+
getsockopt: {
|
|
4030
|
+
args: [FFIType.i32, FFIType.i32, FFIType.i32, FFIType.ptr, FFIType.ptr],
|
|
4031
|
+
returns: FFIType.i32
|
|
4032
|
+
}
|
|
4033
|
+
};
|
|
4034
|
+
const errors2 = [];
|
|
4035
|
+
for (const name of candidates) {
|
|
4036
|
+
try {
|
|
4037
|
+
const opened = dlopen(name, symbolSpec);
|
|
4038
|
+
cache._lib = opened;
|
|
4039
|
+
return opened;
|
|
4040
|
+
} catch (e) {
|
|
4041
|
+
errors2.push(`${name}: ${e instanceof Error ? e.message : String(e)}`);
|
|
4042
|
+
}
|
|
4043
|
+
}
|
|
4044
|
+
process.stderr.write(`[vault-broker] peercred-ffi: dlopen failed for all libc candidates ` + `(${errors2.join("; ")}); falling back to ss-parsing.
|
|
4045
|
+
`);
|
|
4046
|
+
throw new Error("no libc candidate could be opened");
|
|
4047
|
+
})();
|
|
4048
|
+
const credBuf = new ArrayBuffer(UCRED_SIZE);
|
|
4049
|
+
const lenBuf = new Uint32Array(1);
|
|
4050
|
+
lenBuf[0] = UCRED_SIZE;
|
|
4051
|
+
const rc = lib.symbols.getsockopt(fd, SOL_SOCKET, SO_PEERCRED, ptr(credBuf), ptr(lenBuf.buffer));
|
|
4052
|
+
if (rc !== 0)
|
|
4053
|
+
return null;
|
|
4054
|
+
if (lenBuf[0] !== UCRED_SIZE)
|
|
4055
|
+
return null;
|
|
4056
|
+
const view = new DataView(credBuf);
|
|
4057
|
+
return {
|
|
4058
|
+
pid: view.getInt32(0, true),
|
|
4059
|
+
uid: view.getInt32(4, true),
|
|
4060
|
+
gid: view.getInt32(8, true)
|
|
4061
|
+
};
|
|
4062
|
+
} catch {
|
|
4063
|
+
return null;
|
|
4064
|
+
}
|
|
4065
|
+
}
|
|
4066
|
+
// src/vault/broker/peercred.ts
|
|
4067
|
+
function isReservedAgentName(name) {
|
|
4068
|
+
return RESERVED_AGENT_NAMES.has(name);
|
|
4069
|
+
}
|
|
4070
|
+
var RESERVED_AGENT_NAMES;
|
|
4071
|
+
var init_peercred = __esm(() => {
|
|
4072
|
+
RESERVED_AGENT_NAMES = new Set(["operator", "hostd"]);
|
|
4073
|
+
});
|
|
4074
|
+
|
|
4075
|
+
// src/vault/broker/protocol.ts
|
|
4076
|
+
function decodeRequest(line) {
|
|
4077
|
+
if (Buffer.byteLength(line, "utf8") > MAX_FRAME_BYTES) {
|
|
4078
|
+
throw new RangeError(`Request frame too large (${Buffer.byteLength(line, "utf8")} bytes; max ${MAX_FRAME_BYTES})`);
|
|
4079
|
+
}
|
|
4080
|
+
const obj = JSON.parse(line);
|
|
4081
|
+
return RequestSchema.parse(obj);
|
|
4082
|
+
}
|
|
4083
|
+
function encodeResponse(resp) {
|
|
4084
|
+
const json = JSON.stringify(resp);
|
|
4085
|
+
if (Buffer.byteLength(json, "utf8") > MAX_FRAME_BYTES) {
|
|
4086
|
+
throw new Error(`Response frame too large (${Buffer.byteLength(json, "utf8")} bytes; max ${MAX_FRAME_BYTES})`);
|
|
4087
|
+
}
|
|
4088
|
+
return json + `
|
|
4089
|
+
`;
|
|
4090
|
+
}
|
|
4091
|
+
function errorResponse(code, msg) {
|
|
4092
|
+
return { ok: false, code, msg };
|
|
4093
|
+
}
|
|
4094
|
+
var MAX_FRAME_BYTES, AgentNameSchema, GetRequestSchema, PutRequestSchema, ListRequestSchema, MintGrantRequestSchema, ListGrantsRequestSchema, RevokeGrantRequestSchema, StatusRequestSchema, LockRequestSchema, PreflightAccessRequestSchema, OkPreflightAccessResponseSchema, ApprovalRequestRequestSchema, ApprovalLookupRequestSchema, ApprovalLookupByRequestRequestSchema, ApprovalConsumeRequestSchema, ApprovalRevokeRequestSchema, ApprovalListRequestSchema, ApprovalDecisionModeSchema, ApprovalRecordRequestSchema, ApprovalConsumeRecordRequestSchema, RequestSchema, VaultEntrySchema, ErrorCode, OkEntryResponseSchema, OkKeysResponseSchema, BrokerStatus, OkStatusResponseSchema, OkLockResponseSchema, OkPutResponseSchema, OkMintGrantResponseSchema, GrantMetaSchema, OkListGrantsResponseSchema, OkRevokeGrantResponseSchema, OkApprovalRequestResponseSchema, ApprovalDecisionMetaSchema, OkApprovalLookupResponseSchema, OkApprovalConsumeResponseSchema, OkApprovalRevokeResponseSchema, OkApprovalListResponseSchema, OkApprovalRecordResponseSchema, OkApprovalConsumeRecordResponseSchema, ErrorResponseSchema, ResponseSchema;
|
|
4095
|
+
var init_protocol = __esm(() => {
|
|
4096
|
+
init_zod();
|
|
4097
|
+
init_peercred();
|
|
4098
|
+
MAX_FRAME_BYTES = 64 * 1024;
|
|
4099
|
+
AgentNameSchema = exports_external.string().min(1).max(64, "agent name max 64 chars").regex(/^[a-zA-Z0-9][a-zA-Z0-9_-]*$/, "agent name must be kebab-case ASCII (alnum + _- only, first char alnum)").refine((s) => !isReservedAgentName(s), {
|
|
4100
|
+
message: "agent name is reserved"
|
|
4101
|
+
});
|
|
4102
|
+
GetRequestSchema = exports_external.object({
|
|
4103
|
+
v: exports_external.literal(1),
|
|
4104
|
+
op: exports_external.literal("get"),
|
|
4105
|
+
key: exports_external.string().min(1),
|
|
4106
|
+
filename: exports_external.string().optional(),
|
|
4107
|
+
token: exports_external.string().optional()
|
|
4108
|
+
});
|
|
4109
|
+
PutRequestSchema = exports_external.object({
|
|
4110
|
+
v: exports_external.literal(1),
|
|
4111
|
+
op: exports_external.literal("put"),
|
|
4112
|
+
key: exports_external.string().min(1),
|
|
4113
|
+
entry: exports_external.union([
|
|
4114
|
+
exports_external.object({ kind: exports_external.literal("string"), value: exports_external.string() }),
|
|
4115
|
+
exports_external.object({ kind: exports_external.literal("binary"), value: exports_external.string() })
|
|
4116
|
+
]),
|
|
4117
|
+
token: exports_external.string().optional(),
|
|
4118
|
+
passphrase: exports_external.string().optional(),
|
|
4119
|
+
attest_via_posture: exports_external.boolean().optional()
|
|
4120
|
+
});
|
|
4121
|
+
ListRequestSchema = exports_external.object({
|
|
4122
|
+
v: exports_external.literal(1),
|
|
4123
|
+
op: exports_external.literal("list"),
|
|
4124
|
+
token: exports_external.string().optional()
|
|
4125
|
+
});
|
|
4126
|
+
MintGrantRequestSchema = exports_external.object({
|
|
4127
|
+
v: exports_external.literal(1),
|
|
4128
|
+
op: exports_external.literal("mint_grant"),
|
|
4129
|
+
agent: AgentNameSchema,
|
|
4130
|
+
keys: exports_external.array(exports_external.string().min(1)),
|
|
4131
|
+
ttl_seconds: exports_external.number().int().positive().nullable(),
|
|
4132
|
+
description: exports_external.string().optional(),
|
|
4133
|
+
write_keys: exports_external.array(exports_external.string().min(1)).optional(),
|
|
4134
|
+
passphrase: exports_external.string().optional(),
|
|
4135
|
+
attest_via_posture: exports_external.boolean().optional(),
|
|
4136
|
+
decision_id: exports_external.string().optional()
|
|
4137
|
+
});
|
|
4138
|
+
ListGrantsRequestSchema = exports_external.object({
|
|
4139
|
+
v: exports_external.literal(1),
|
|
4140
|
+
op: exports_external.literal("list_grants"),
|
|
4141
|
+
agent: AgentNameSchema.optional(),
|
|
4142
|
+
passphrase: exports_external.string().optional(),
|
|
4143
|
+
attest_via_posture: exports_external.boolean().optional()
|
|
4144
|
+
});
|
|
4145
|
+
RevokeGrantRequestSchema = exports_external.object({
|
|
4146
|
+
v: exports_external.literal(1),
|
|
4147
|
+
op: exports_external.literal("revoke_grant"),
|
|
4148
|
+
id: exports_external.string().min(1)
|
|
4149
|
+
});
|
|
4150
|
+
StatusRequestSchema = exports_external.object({
|
|
4151
|
+
v: exports_external.literal(1),
|
|
4152
|
+
op: exports_external.literal("status")
|
|
4153
|
+
});
|
|
4154
|
+
LockRequestSchema = exports_external.object({
|
|
4155
|
+
v: exports_external.literal(1),
|
|
4156
|
+
op: exports_external.literal("lock")
|
|
4157
|
+
});
|
|
4158
|
+
PreflightAccessRequestSchema = exports_external.object({
|
|
4159
|
+
v: exports_external.literal(1),
|
|
4160
|
+
op: exports_external.literal("preflight_access"),
|
|
4161
|
+
agent: AgentNameSchema,
|
|
4162
|
+
keys: exports_external.array(exports_external.string().min(1)).min(1).max(128)
|
|
4163
|
+
});
|
|
4164
|
+
OkPreflightAccessResponseSchema = exports_external.object({
|
|
4165
|
+
ok: exports_external.literal(true),
|
|
4166
|
+
op: exports_external.literal("preflight_access"),
|
|
4167
|
+
results: exports_external.array(exports_external.object({
|
|
4168
|
+
key: exports_external.string(),
|
|
4169
|
+
exists: exports_external.boolean(),
|
|
4170
|
+
acl_ok: exports_external.boolean(),
|
|
4171
|
+
acl_reason: exports_external.string().optional(),
|
|
4172
|
+
scope_ok: exports_external.boolean(),
|
|
4173
|
+
scope_reason: exports_external.string().optional()
|
|
4174
|
+
}))
|
|
4175
|
+
});
|
|
4176
|
+
ApprovalRequestRequestSchema = exports_external.object({
|
|
4177
|
+
v: exports_external.literal(1),
|
|
4178
|
+
op: exports_external.literal("approval_request"),
|
|
4179
|
+
agent_unit: exports_external.string().min(1),
|
|
4180
|
+
scope: exports_external.string().min(1),
|
|
4181
|
+
action: exports_external.string().min(1),
|
|
4182
|
+
approver_set: exports_external.array(exports_external.string()),
|
|
4183
|
+
why: exports_external.string().optional(),
|
|
4184
|
+
ttl_ms: exports_external.number().int().positive().optional()
|
|
4185
|
+
});
|
|
4186
|
+
ApprovalLookupRequestSchema = exports_external.object({
|
|
4187
|
+
v: exports_external.literal(1),
|
|
4188
|
+
op: exports_external.literal("approval_lookup"),
|
|
4189
|
+
agent_unit: exports_external.string().min(1),
|
|
4190
|
+
scope: exports_external.string().min(1),
|
|
4191
|
+
action: exports_external.string().min(1),
|
|
4192
|
+
current_approver_set: exports_external.array(exports_external.string())
|
|
4193
|
+
});
|
|
4194
|
+
ApprovalLookupByRequestRequestSchema = exports_external.object({
|
|
4195
|
+
v: exports_external.literal(1),
|
|
4196
|
+
op: exports_external.literal("approval_lookup_by_request"),
|
|
4197
|
+
agent_unit: exports_external.string().min(1),
|
|
4198
|
+
request_id: exports_external.string().regex(/^[0-9a-f]{32}$/),
|
|
4199
|
+
current_approver_set: exports_external.array(exports_external.string())
|
|
4200
|
+
});
|
|
4201
|
+
ApprovalConsumeRequestSchema = exports_external.object({
|
|
4202
|
+
v: exports_external.literal(1),
|
|
4203
|
+
op: exports_external.literal("approval_consume"),
|
|
4204
|
+
request_id: exports_external.string().regex(/^[0-9a-f]{32}$/)
|
|
4205
|
+
});
|
|
4206
|
+
ApprovalRevokeRequestSchema = exports_external.object({
|
|
4207
|
+
v: exports_external.literal(1),
|
|
4208
|
+
op: exports_external.literal("approval_revoke"),
|
|
4209
|
+
decision_id: exports_external.string().min(1),
|
|
4210
|
+
actor: exports_external.string().min(1),
|
|
4211
|
+
reason: exports_external.string().optional()
|
|
4212
|
+
});
|
|
4213
|
+
ApprovalListRequestSchema = exports_external.object({
|
|
4214
|
+
v: exports_external.literal(1),
|
|
4215
|
+
op: exports_external.literal("approval_list"),
|
|
4216
|
+
agent_unit: exports_external.string().optional()
|
|
4217
|
+
});
|
|
4218
|
+
ApprovalDecisionModeSchema = exports_external.enum([
|
|
4219
|
+
"allow_once",
|
|
4220
|
+
"allow_always",
|
|
4221
|
+
"allow_ttl",
|
|
4222
|
+
"deny",
|
|
4223
|
+
"deny_perm"
|
|
4224
|
+
]);
|
|
4225
|
+
ApprovalRecordRequestSchema = exports_external.object({
|
|
4226
|
+
v: exports_external.literal(1),
|
|
4227
|
+
op: exports_external.literal("approval_record"),
|
|
4228
|
+
request_id: exports_external.string().regex(/^[0-9a-f]{32}$/),
|
|
4229
|
+
decision: ApprovalDecisionModeSchema,
|
|
4230
|
+
approver_set: exports_external.array(exports_external.string()),
|
|
4231
|
+
granted_by_user_id: exports_external.number().int(),
|
|
4232
|
+
ttl_ms: exports_external.number().int().positive().nullable().optional()
|
|
4233
|
+
});
|
|
4234
|
+
ApprovalConsumeRecordRequestSchema = exports_external.object({
|
|
4235
|
+
v: exports_external.literal(1),
|
|
4236
|
+
op: exports_external.literal("approval_consume_record"),
|
|
4237
|
+
request_id: exports_external.string().regex(/^[0-9a-f]{32}$/),
|
|
4238
|
+
decision: ApprovalDecisionModeSchema,
|
|
4239
|
+
approver_set: exports_external.array(exports_external.string()),
|
|
4240
|
+
granted_by_user_id: exports_external.number().int(),
|
|
4241
|
+
ttl_ms: exports_external.number().int().positive().nullable().optional()
|
|
4242
|
+
});
|
|
4243
|
+
RequestSchema = exports_external.discriminatedUnion("op", [
|
|
4244
|
+
GetRequestSchema,
|
|
4245
|
+
PutRequestSchema,
|
|
4246
|
+
ListRequestSchema,
|
|
4247
|
+
StatusRequestSchema,
|
|
4248
|
+
LockRequestSchema,
|
|
4249
|
+
PreflightAccessRequestSchema,
|
|
4250
|
+
MintGrantRequestSchema,
|
|
4251
|
+
ListGrantsRequestSchema,
|
|
4252
|
+
RevokeGrantRequestSchema,
|
|
4253
|
+
ApprovalRequestRequestSchema,
|
|
4254
|
+
ApprovalLookupRequestSchema,
|
|
4255
|
+
ApprovalLookupByRequestRequestSchema,
|
|
4256
|
+
ApprovalConsumeRequestSchema,
|
|
4257
|
+
ApprovalRevokeRequestSchema,
|
|
4258
|
+
ApprovalListRequestSchema,
|
|
4259
|
+
ApprovalRecordRequestSchema,
|
|
4260
|
+
ApprovalConsumeRecordRequestSchema
|
|
4261
|
+
]);
|
|
4262
|
+
VaultEntrySchema = exports_external.union([
|
|
4263
|
+
exports_external.object({ kind: exports_external.literal("string"), value: exports_external.string() }),
|
|
4264
|
+
exports_external.object({ kind: exports_external.literal("binary"), value: exports_external.string() }),
|
|
4265
|
+
exports_external.object({
|
|
4266
|
+
kind: exports_external.literal("files"),
|
|
4267
|
+
files: exports_external.record(exports_external.string(), exports_external.object({
|
|
4268
|
+
encoding: exports_external.enum(["utf8", "base64"]),
|
|
4269
|
+
value: exports_external.string()
|
|
4270
|
+
}))
|
|
4271
|
+
})
|
|
4272
|
+
]);
|
|
4273
|
+
ErrorCode = exports_external.enum([
|
|
4274
|
+
"LOCKED",
|
|
4275
|
+
"DENIED",
|
|
4276
|
+
"UNKNOWN_KEY",
|
|
4277
|
+
"BAD_REQUEST",
|
|
4278
|
+
"INTERNAL",
|
|
4279
|
+
"AUDIT_UNAVAILABLE"
|
|
4280
|
+
]);
|
|
4281
|
+
OkEntryResponseSchema = exports_external.object({
|
|
4282
|
+
ok: exports_external.literal(true),
|
|
4283
|
+
entry: VaultEntrySchema
|
|
4284
|
+
});
|
|
4285
|
+
OkKeysResponseSchema = exports_external.object({
|
|
4286
|
+
ok: exports_external.literal(true),
|
|
4287
|
+
keys: exports_external.array(exports_external.string())
|
|
4288
|
+
});
|
|
4289
|
+
BrokerStatus = exports_external.object({
|
|
4290
|
+
unlocked: exports_external.boolean(),
|
|
4291
|
+
keyCount: exports_external.number().int().nonnegative(),
|
|
4292
|
+
uptimeSec: exports_external.number().nonnegative()
|
|
4293
|
+
});
|
|
4294
|
+
OkStatusResponseSchema = exports_external.object({
|
|
4295
|
+
ok: exports_external.literal(true),
|
|
4296
|
+
status: BrokerStatus
|
|
4297
|
+
});
|
|
4298
|
+
OkLockResponseSchema = exports_external.object({
|
|
4299
|
+
ok: exports_external.literal(true),
|
|
4300
|
+
locked: exports_external.literal(true)
|
|
4301
|
+
});
|
|
4302
|
+
OkPutResponseSchema = exports_external.object({
|
|
4303
|
+
ok: exports_external.literal(true),
|
|
4304
|
+
put: exports_external.literal(true),
|
|
4305
|
+
key: exports_external.string()
|
|
4306
|
+
});
|
|
4307
|
+
OkMintGrantResponseSchema = exports_external.object({
|
|
4308
|
+
ok: exports_external.literal(true),
|
|
4309
|
+
token: exports_external.string(),
|
|
4310
|
+
id: exports_external.string(),
|
|
4311
|
+
expires_at: exports_external.number().nullable()
|
|
4312
|
+
});
|
|
4313
|
+
GrantMetaSchema = exports_external.object({
|
|
4314
|
+
id: exports_external.string(),
|
|
4315
|
+
agent_slug: exports_external.string(),
|
|
4316
|
+
key_allow: exports_external.array(exports_external.string()),
|
|
4317
|
+
write_allow: exports_external.array(exports_external.string()).default([]),
|
|
4318
|
+
expires_at: exports_external.number().nullable(),
|
|
4319
|
+
created_at: exports_external.number(),
|
|
4320
|
+
description: exports_external.string().nullable()
|
|
4321
|
+
});
|
|
4322
|
+
OkListGrantsResponseSchema = exports_external.object({
|
|
4323
|
+
ok: exports_external.literal(true),
|
|
4324
|
+
grants: exports_external.array(GrantMetaSchema)
|
|
4325
|
+
});
|
|
4326
|
+
OkRevokeGrantResponseSchema = exports_external.object({
|
|
4327
|
+
ok: exports_external.literal(true),
|
|
4328
|
+
revoked: exports_external.boolean()
|
|
4329
|
+
});
|
|
4330
|
+
OkApprovalRequestResponseSchema = exports_external.discriminatedUnion("state", [
|
|
4331
|
+
exports_external.object({
|
|
4332
|
+
ok: exports_external.literal(true),
|
|
4333
|
+
kind: exports_external.literal("approval_request"),
|
|
4334
|
+
state: exports_external.literal("pending"),
|
|
4335
|
+
request_id: exports_external.string(),
|
|
4336
|
+
expires_at: exports_external.number()
|
|
4337
|
+
}),
|
|
4338
|
+
exports_external.object({
|
|
4339
|
+
ok: exports_external.literal(true),
|
|
4340
|
+
kind: exports_external.literal("approval_request"),
|
|
4341
|
+
state: exports_external.literal("rate_limited"),
|
|
4342
|
+
retry_after_ms: exports_external.number()
|
|
4343
|
+
})
|
|
4344
|
+
]);
|
|
4345
|
+
ApprovalDecisionMetaSchema = exports_external.object({
|
|
4346
|
+
id: exports_external.string(),
|
|
4347
|
+
agent_unit: exports_external.string(),
|
|
4348
|
+
scope: exports_external.string(),
|
|
4349
|
+
action: exports_external.string(),
|
|
4350
|
+
decision: ApprovalDecisionModeSchema,
|
|
4351
|
+
granted_at: exports_external.number(),
|
|
4352
|
+
granted_by_user_id: exports_external.number(),
|
|
4353
|
+
ttl_expires_at: exports_external.number().nullable(),
|
|
4354
|
+
last_used_at: exports_external.number().nullable(),
|
|
4355
|
+
revoked_at: exports_external.number().nullable(),
|
|
4356
|
+
revoke_reason: exports_external.string().nullable(),
|
|
4357
|
+
origin: exports_external.enum(["agent", "operator"]).optional()
|
|
4358
|
+
});
|
|
4359
|
+
OkApprovalLookupResponseSchema = exports_external.object({
|
|
4360
|
+
ok: exports_external.literal(true),
|
|
4361
|
+
state: exports_external.enum(["granted", "denied", "pending", "expired", "drift_revoked", "no_decision"]),
|
|
4362
|
+
decision: ApprovalDecisionMetaSchema.nullable().optional()
|
|
4363
|
+
});
|
|
4364
|
+
OkApprovalConsumeResponseSchema = exports_external.object({
|
|
4365
|
+
ok: exports_external.literal(true),
|
|
4366
|
+
consumed: exports_external.boolean(),
|
|
4367
|
+
agent_unit: exports_external.string().optional(),
|
|
4368
|
+
scope: exports_external.string().optional(),
|
|
4369
|
+
action: exports_external.string().optional(),
|
|
4370
|
+
why: exports_external.string().nullable().optional()
|
|
4371
|
+
});
|
|
4372
|
+
OkApprovalRevokeResponseSchema = exports_external.object({
|
|
4373
|
+
ok: exports_external.literal(true),
|
|
4374
|
+
revoked: exports_external.boolean()
|
|
4375
|
+
});
|
|
4376
|
+
OkApprovalListResponseSchema = exports_external.object({
|
|
4377
|
+
ok: exports_external.literal(true),
|
|
4378
|
+
decisions: exports_external.array(ApprovalDecisionMetaSchema)
|
|
4379
|
+
});
|
|
4380
|
+
OkApprovalRecordResponseSchema = exports_external.object({
|
|
4381
|
+
ok: exports_external.literal(true),
|
|
4382
|
+
decision_id: exports_external.string()
|
|
4383
|
+
});
|
|
4384
|
+
OkApprovalConsumeRecordResponseSchema = exports_external.object({
|
|
4385
|
+
ok: exports_external.literal(true),
|
|
4386
|
+
consumed: exports_external.boolean(),
|
|
4387
|
+
decision_id: exports_external.string().optional(),
|
|
4388
|
+
agent_unit: exports_external.string().optional(),
|
|
4389
|
+
scope: exports_external.string().optional(),
|
|
4390
|
+
action: exports_external.string().optional(),
|
|
4391
|
+
why: exports_external.string().nullable().optional()
|
|
4392
|
+
});
|
|
4393
|
+
ErrorResponseSchema = exports_external.object({
|
|
4394
|
+
ok: exports_external.literal(false),
|
|
4395
|
+
code: ErrorCode,
|
|
4396
|
+
msg: exports_external.string()
|
|
4397
|
+
});
|
|
4398
|
+
ResponseSchema = exports_external.union([
|
|
4399
|
+
OkEntryResponseSchema,
|
|
4400
|
+
OkKeysResponseSchema,
|
|
4401
|
+
OkStatusResponseSchema,
|
|
4402
|
+
OkLockResponseSchema,
|
|
4403
|
+
OkPreflightAccessResponseSchema,
|
|
4404
|
+
OkPutResponseSchema,
|
|
4405
|
+
OkMintGrantResponseSchema,
|
|
4406
|
+
OkListGrantsResponseSchema,
|
|
4407
|
+
OkRevokeGrantResponseSchema,
|
|
4408
|
+
OkApprovalRequestResponseSchema,
|
|
4409
|
+
OkApprovalLookupResponseSchema,
|
|
4410
|
+
OkApprovalConsumeResponseSchema,
|
|
4411
|
+
OkApprovalRevokeResponseSchema,
|
|
4412
|
+
OkApprovalListResponseSchema,
|
|
4413
|
+
OkApprovalRecordResponseSchema,
|
|
4414
|
+
OkApprovalConsumeRecordResponseSchema,
|
|
4415
|
+
ErrorResponseSchema
|
|
4416
|
+
]);
|
|
4417
|
+
});
|
|
4418
|
+
|
|
4015
4419
|
// src/memory/observation-scopes.ts
|
|
4016
4420
|
var OBSERVATION_SCOPES;
|
|
4017
4421
|
var init_observation_scopes = __esm(() => {
|
|
@@ -4432,6 +4836,7 @@ var init_schema = __esm(() => {
|
|
|
4432
4836
|
}).describe("Per-operation LLM override. Every field optional; an unset field (or " + "an omitted op block) inherits the global `hindsight.llm.*`, which is " + "already the engine's fallback — switchroom emits only the vars set.");
|
|
4433
4837
|
HindsightConfigSchema = exports_external.object({
|
|
4434
4838
|
gpu: exports_external.boolean().optional().describe("Force GPU passthrough for the hindsight container on (`true`) or off " + "(`false`), overriding host autodetection in BOTH directions. Absent " + "(the default) → autodetect from the persisted host-capabilities " + "verdict (`~/.switchroom/host-capabilities.json`), which enables " + "`--gpus all` only when that file proves BOTH a GPU and the nvidia " + "container toolkit. Set `true` when that verdict is wrong or unreadable " + "and you know the host has a working toolkit — switchroom cannot verify " + "it for you, and `docker run --gpus all` hard-fails container create on " + "a host without one. Set `false` to pin the container to CPU on a GPU " + "host. This is also the declarative opt-out for the recreate-time GPU " + "drop guard (`switchroom memory setup --recreate` refuses to silently " + "turn a GPU container into a CPU one). `--gpu`/`--no-gpu` on `memory " + "setup` override this for a single run."),
|
|
4839
|
+
cp_access_key: exports_external.string().min(1).optional().describe("Access key for the hindsight control-plane DASHBOARD (upstream " + "`HINDSIGHT_CP_ACCESS_KEY`, port 9999). Literal or — strongly preferred " + "— a `vault:` reference such as `vault:hindsight_cp_access_key`, read " + "through the broker at container-launch time. This is the ONLY thing " + "that arms the dashboard's login: upstream's middleware short-circuits " + "to `next()` when the var is unset, so an unset key means the dashboard " + "has no authentication at all, not weak authentication. Because of that, " + "leaving it unset is FAIL-CLOSED: switchroom pins " + "`HINDSIGHT_CP_HOSTNAME=127.0.0.1` so the loginless dashboard is " + "reachable only from the host, and warns. Set this to serve the " + "dashboard on the LAN/tailnet."),
|
|
4435
4840
|
llm: exports_external.object({
|
|
4436
4841
|
provider: exports_external.string().min(1).optional().describe("Hindsight LLM provider (upstream `HINDSIGHT_API_LLM_PROVIDER`). " + "Defaults to `claude-code` (subscription-honest, broker-fed OAuth). " + "Any litellm-routable provider the upstream image supports is valid. " + "Serves as the GLOBAL default for every op absent a per-op override."),
|
|
4437
4842
|
model: exports_external.string().min(1).optional().describe("Hindsight LLM model (upstream `HINDSIGHT_API_LLM_MODEL`). Defaults " + "to HINDSIGHT_DEFAULT_MODEL. Any model your LiteLLM proxy can route " + "is valid, e.g. `openrouter/z-ai/glm-5.2` when routing through the " + "fleet proxy. With provider=claude-code this value is ALSO exported " + "as `ANTHROPIC_MODEL` to the claude subprocess. Serves as the GLOBAL " + "default for every op absent a per-op override."),
|
|
@@ -18310,412 +18715,49 @@ var require_lib = __commonJS((exports, module) => {
|
|
|
18310
18715
|
}
|
|
18311
18716
|
});
|
|
18312
18717
|
|
|
18718
|
+
// src/vault/flock.ts
|
|
18719
|
+
var init_flock = () => {};
|
|
18720
|
+
|
|
18721
|
+
// src/vault/vault.ts
|
|
18722
|
+
var KNOWN_VAULT_ARTIFACT_NAMES, SCRYPT_MAXMEM;
|
|
18723
|
+
var init_vault = __esm(() => {
|
|
18724
|
+
init_flock();
|
|
18725
|
+
KNOWN_VAULT_ARTIFACT_NAMES = new Set([
|
|
18726
|
+
"vault.enc",
|
|
18727
|
+
"vault.enc.bak",
|
|
18728
|
+
"vault.enc.tmp",
|
|
18729
|
+
"vault.enc.lock",
|
|
18730
|
+
".vault.enc.symlink-tmp"
|
|
18731
|
+
]);
|
|
18732
|
+
SCRYPT_MAXMEM = 128 * 1024 * 1024;
|
|
18733
|
+
});
|
|
18734
|
+
// src/vault/broker/client.ts
|
|
18735
|
+
import { homedir as homedir3 } from "node:os";
|
|
18736
|
+
import { join as join3 } from "node:path";
|
|
18737
|
+
var LEGACY_SOCKET_PATH, OPERATOR_SOCKET_PATH;
|
|
18738
|
+
var init_client = __esm(() => {
|
|
18739
|
+
init_protocol();
|
|
18740
|
+
init_peercred();
|
|
18741
|
+
LEGACY_SOCKET_PATH = join3(homedir3(), ".switchroom", "vault-broker.sock");
|
|
18742
|
+
OPERATOR_SOCKET_PATH = join3(homedir3(), ".switchroom", "broker-operator", "sock");
|
|
18743
|
+
});
|
|
18744
|
+
|
|
18745
|
+
// src/vault/resolver.ts
|
|
18746
|
+
var materializedDirs;
|
|
18747
|
+
var init_resolver = __esm(() => {
|
|
18748
|
+
init_vault();
|
|
18749
|
+
init_loader();
|
|
18750
|
+
init_client();
|
|
18751
|
+
materializedDirs = new Set;
|
|
18752
|
+
});
|
|
18753
|
+
|
|
18313
18754
|
// src/vault/approvals/kernel-server.ts
|
|
18755
|
+
init_protocol();
|
|
18314
18756
|
import * as net from "node:net";
|
|
18315
18757
|
import { mkdirSync as mkdirSync2, chmodSync, chownSync, existsSync as existsSync5, unlinkSync, readdirSync as readdirSync3, statSync as statSync3 } from "node:fs";
|
|
18316
18758
|
import { dirname as dirname2, resolve as resolve6, basename as basename2 } from "node:path";
|
|
18317
18759
|
import { Database } from "bun:sqlite";
|
|
18318
18760
|
|
|
18319
|
-
// src/vault/broker/protocol.ts
|
|
18320
|
-
init_zod();
|
|
18321
|
-
|
|
18322
|
-
// src/vault/broker/peercred-ffi.ts
|
|
18323
|
-
function getPeerCred(fd) {
|
|
18324
|
-
if (process.platform !== "linux")
|
|
18325
|
-
return null;
|
|
18326
|
-
try {
|
|
18327
|
-
const ffi = __require("bun:ffi");
|
|
18328
|
-
const { dlopen, FFIType, ptr } = ffi;
|
|
18329
|
-
const SOL_SOCKET = 1;
|
|
18330
|
-
const SO_PEERCRED = 17;
|
|
18331
|
-
const UCRED_SIZE = 12;
|
|
18332
|
-
const cache = getPeerCred;
|
|
18333
|
-
const lib = cache._lib ?? (() => {
|
|
18334
|
-
const candidates = ["libc.so.6", "libc.so"];
|
|
18335
|
-
const symbolSpec = {
|
|
18336
|
-
getsockopt: {
|
|
18337
|
-
args: [FFIType.i32, FFIType.i32, FFIType.i32, FFIType.ptr, FFIType.ptr],
|
|
18338
|
-
returns: FFIType.i32
|
|
18339
|
-
}
|
|
18340
|
-
};
|
|
18341
|
-
const errors2 = [];
|
|
18342
|
-
for (const name of candidates) {
|
|
18343
|
-
try {
|
|
18344
|
-
const opened = dlopen(name, symbolSpec);
|
|
18345
|
-
cache._lib = opened;
|
|
18346
|
-
return opened;
|
|
18347
|
-
} catch (e) {
|
|
18348
|
-
errors2.push(`${name}: ${e instanceof Error ? e.message : String(e)}`);
|
|
18349
|
-
}
|
|
18350
|
-
}
|
|
18351
|
-
process.stderr.write(`[vault-broker] peercred-ffi: dlopen failed for all libc candidates ` + `(${errors2.join("; ")}); falling back to ss-parsing.
|
|
18352
|
-
`);
|
|
18353
|
-
throw new Error("no libc candidate could be opened");
|
|
18354
|
-
})();
|
|
18355
|
-
const credBuf = new ArrayBuffer(UCRED_SIZE);
|
|
18356
|
-
const lenBuf = new Uint32Array(1);
|
|
18357
|
-
lenBuf[0] = UCRED_SIZE;
|
|
18358
|
-
const rc = lib.symbols.getsockopt(fd, SOL_SOCKET, SO_PEERCRED, ptr(credBuf), ptr(lenBuf.buffer));
|
|
18359
|
-
if (rc !== 0)
|
|
18360
|
-
return null;
|
|
18361
|
-
if (lenBuf[0] !== UCRED_SIZE)
|
|
18362
|
-
return null;
|
|
18363
|
-
const view = new DataView(credBuf);
|
|
18364
|
-
return {
|
|
18365
|
-
pid: view.getInt32(0, true),
|
|
18366
|
-
uid: view.getInt32(4, true),
|
|
18367
|
-
gid: view.getInt32(8, true)
|
|
18368
|
-
};
|
|
18369
|
-
} catch {
|
|
18370
|
-
return null;
|
|
18371
|
-
}
|
|
18372
|
-
}
|
|
18373
|
-
|
|
18374
|
-
// src/vault/broker/peercred.ts
|
|
18375
|
-
var RESERVED_AGENT_NAMES = new Set(["operator", "hostd"]);
|
|
18376
|
-
function isReservedAgentName(name) {
|
|
18377
|
-
return RESERVED_AGENT_NAMES.has(name);
|
|
18378
|
-
}
|
|
18379
|
-
|
|
18380
|
-
// src/vault/broker/protocol.ts
|
|
18381
|
-
var MAX_FRAME_BYTES = 64 * 1024;
|
|
18382
|
-
var AgentNameSchema = exports_external.string().min(1).max(64, "agent name max 64 chars").regex(/^[a-zA-Z0-9][a-zA-Z0-9_-]*$/, "agent name must be kebab-case ASCII (alnum + _- only, first char alnum)").refine((s) => !isReservedAgentName(s), {
|
|
18383
|
-
message: "agent name is reserved"
|
|
18384
|
-
});
|
|
18385
|
-
var GetRequestSchema = exports_external.object({
|
|
18386
|
-
v: exports_external.literal(1),
|
|
18387
|
-
op: exports_external.literal("get"),
|
|
18388
|
-
key: exports_external.string().min(1),
|
|
18389
|
-
filename: exports_external.string().optional(),
|
|
18390
|
-
token: exports_external.string().optional()
|
|
18391
|
-
});
|
|
18392
|
-
var PutRequestSchema = exports_external.object({
|
|
18393
|
-
v: exports_external.literal(1),
|
|
18394
|
-
op: exports_external.literal("put"),
|
|
18395
|
-
key: exports_external.string().min(1),
|
|
18396
|
-
entry: exports_external.union([
|
|
18397
|
-
exports_external.object({ kind: exports_external.literal("string"), value: exports_external.string() }),
|
|
18398
|
-
exports_external.object({ kind: exports_external.literal("binary"), value: exports_external.string() })
|
|
18399
|
-
]),
|
|
18400
|
-
token: exports_external.string().optional(),
|
|
18401
|
-
passphrase: exports_external.string().optional(),
|
|
18402
|
-
attest_via_posture: exports_external.boolean().optional()
|
|
18403
|
-
});
|
|
18404
|
-
var ListRequestSchema = exports_external.object({
|
|
18405
|
-
v: exports_external.literal(1),
|
|
18406
|
-
op: exports_external.literal("list"),
|
|
18407
|
-
token: exports_external.string().optional()
|
|
18408
|
-
});
|
|
18409
|
-
var MintGrantRequestSchema = exports_external.object({
|
|
18410
|
-
v: exports_external.literal(1),
|
|
18411
|
-
op: exports_external.literal("mint_grant"),
|
|
18412
|
-
agent: AgentNameSchema,
|
|
18413
|
-
keys: exports_external.array(exports_external.string().min(1)),
|
|
18414
|
-
ttl_seconds: exports_external.number().int().positive().nullable(),
|
|
18415
|
-
description: exports_external.string().optional(),
|
|
18416
|
-
write_keys: exports_external.array(exports_external.string().min(1)).optional(),
|
|
18417
|
-
passphrase: exports_external.string().optional(),
|
|
18418
|
-
attest_via_posture: exports_external.boolean().optional(),
|
|
18419
|
-
decision_id: exports_external.string().optional()
|
|
18420
|
-
});
|
|
18421
|
-
var ListGrantsRequestSchema = exports_external.object({
|
|
18422
|
-
v: exports_external.literal(1),
|
|
18423
|
-
op: exports_external.literal("list_grants"),
|
|
18424
|
-
agent: AgentNameSchema.optional(),
|
|
18425
|
-
passphrase: exports_external.string().optional(),
|
|
18426
|
-
attest_via_posture: exports_external.boolean().optional()
|
|
18427
|
-
});
|
|
18428
|
-
var RevokeGrantRequestSchema = exports_external.object({
|
|
18429
|
-
v: exports_external.literal(1),
|
|
18430
|
-
op: exports_external.literal("revoke_grant"),
|
|
18431
|
-
id: exports_external.string().min(1)
|
|
18432
|
-
});
|
|
18433
|
-
var StatusRequestSchema = exports_external.object({
|
|
18434
|
-
v: exports_external.literal(1),
|
|
18435
|
-
op: exports_external.literal("status")
|
|
18436
|
-
});
|
|
18437
|
-
var LockRequestSchema = exports_external.object({
|
|
18438
|
-
v: exports_external.literal(1),
|
|
18439
|
-
op: exports_external.literal("lock")
|
|
18440
|
-
});
|
|
18441
|
-
var PreflightAccessRequestSchema = exports_external.object({
|
|
18442
|
-
v: exports_external.literal(1),
|
|
18443
|
-
op: exports_external.literal("preflight_access"),
|
|
18444
|
-
agent: AgentNameSchema,
|
|
18445
|
-
keys: exports_external.array(exports_external.string().min(1)).min(1).max(128)
|
|
18446
|
-
});
|
|
18447
|
-
var OkPreflightAccessResponseSchema = exports_external.object({
|
|
18448
|
-
ok: exports_external.literal(true),
|
|
18449
|
-
op: exports_external.literal("preflight_access"),
|
|
18450
|
-
results: exports_external.array(exports_external.object({
|
|
18451
|
-
key: exports_external.string(),
|
|
18452
|
-
exists: exports_external.boolean(),
|
|
18453
|
-
acl_ok: exports_external.boolean(),
|
|
18454
|
-
acl_reason: exports_external.string().optional(),
|
|
18455
|
-
scope_ok: exports_external.boolean(),
|
|
18456
|
-
scope_reason: exports_external.string().optional()
|
|
18457
|
-
}))
|
|
18458
|
-
});
|
|
18459
|
-
var ApprovalRequestRequestSchema = exports_external.object({
|
|
18460
|
-
v: exports_external.literal(1),
|
|
18461
|
-
op: exports_external.literal("approval_request"),
|
|
18462
|
-
agent_unit: exports_external.string().min(1),
|
|
18463
|
-
scope: exports_external.string().min(1),
|
|
18464
|
-
action: exports_external.string().min(1),
|
|
18465
|
-
approver_set: exports_external.array(exports_external.string()),
|
|
18466
|
-
why: exports_external.string().optional(),
|
|
18467
|
-
ttl_ms: exports_external.number().int().positive().optional()
|
|
18468
|
-
});
|
|
18469
|
-
var ApprovalLookupRequestSchema = exports_external.object({
|
|
18470
|
-
v: exports_external.literal(1),
|
|
18471
|
-
op: exports_external.literal("approval_lookup"),
|
|
18472
|
-
agent_unit: exports_external.string().min(1),
|
|
18473
|
-
scope: exports_external.string().min(1),
|
|
18474
|
-
action: exports_external.string().min(1),
|
|
18475
|
-
current_approver_set: exports_external.array(exports_external.string())
|
|
18476
|
-
});
|
|
18477
|
-
var ApprovalLookupByRequestRequestSchema = exports_external.object({
|
|
18478
|
-
v: exports_external.literal(1),
|
|
18479
|
-
op: exports_external.literal("approval_lookup_by_request"),
|
|
18480
|
-
agent_unit: exports_external.string().min(1),
|
|
18481
|
-
request_id: exports_external.string().regex(/^[0-9a-f]{32}$/),
|
|
18482
|
-
current_approver_set: exports_external.array(exports_external.string())
|
|
18483
|
-
});
|
|
18484
|
-
var ApprovalConsumeRequestSchema = exports_external.object({
|
|
18485
|
-
v: exports_external.literal(1),
|
|
18486
|
-
op: exports_external.literal("approval_consume"),
|
|
18487
|
-
request_id: exports_external.string().regex(/^[0-9a-f]{32}$/)
|
|
18488
|
-
});
|
|
18489
|
-
var ApprovalRevokeRequestSchema = exports_external.object({
|
|
18490
|
-
v: exports_external.literal(1),
|
|
18491
|
-
op: exports_external.literal("approval_revoke"),
|
|
18492
|
-
decision_id: exports_external.string().min(1),
|
|
18493
|
-
actor: exports_external.string().min(1),
|
|
18494
|
-
reason: exports_external.string().optional()
|
|
18495
|
-
});
|
|
18496
|
-
var ApprovalListRequestSchema = exports_external.object({
|
|
18497
|
-
v: exports_external.literal(1),
|
|
18498
|
-
op: exports_external.literal("approval_list"),
|
|
18499
|
-
agent_unit: exports_external.string().optional()
|
|
18500
|
-
});
|
|
18501
|
-
var ApprovalDecisionModeSchema = exports_external.enum([
|
|
18502
|
-
"allow_once",
|
|
18503
|
-
"allow_always",
|
|
18504
|
-
"allow_ttl",
|
|
18505
|
-
"deny",
|
|
18506
|
-
"deny_perm"
|
|
18507
|
-
]);
|
|
18508
|
-
var ApprovalRecordRequestSchema = exports_external.object({
|
|
18509
|
-
v: exports_external.literal(1),
|
|
18510
|
-
op: exports_external.literal("approval_record"),
|
|
18511
|
-
request_id: exports_external.string().regex(/^[0-9a-f]{32}$/),
|
|
18512
|
-
decision: ApprovalDecisionModeSchema,
|
|
18513
|
-
approver_set: exports_external.array(exports_external.string()),
|
|
18514
|
-
granted_by_user_id: exports_external.number().int(),
|
|
18515
|
-
ttl_ms: exports_external.number().int().positive().nullable().optional()
|
|
18516
|
-
});
|
|
18517
|
-
var ApprovalConsumeRecordRequestSchema = exports_external.object({
|
|
18518
|
-
v: exports_external.literal(1),
|
|
18519
|
-
op: exports_external.literal("approval_consume_record"),
|
|
18520
|
-
request_id: exports_external.string().regex(/^[0-9a-f]{32}$/),
|
|
18521
|
-
decision: ApprovalDecisionModeSchema,
|
|
18522
|
-
approver_set: exports_external.array(exports_external.string()),
|
|
18523
|
-
granted_by_user_id: exports_external.number().int(),
|
|
18524
|
-
ttl_ms: exports_external.number().int().positive().nullable().optional()
|
|
18525
|
-
});
|
|
18526
|
-
var RequestSchema = exports_external.discriminatedUnion("op", [
|
|
18527
|
-
GetRequestSchema,
|
|
18528
|
-
PutRequestSchema,
|
|
18529
|
-
ListRequestSchema,
|
|
18530
|
-
StatusRequestSchema,
|
|
18531
|
-
LockRequestSchema,
|
|
18532
|
-
PreflightAccessRequestSchema,
|
|
18533
|
-
MintGrantRequestSchema,
|
|
18534
|
-
ListGrantsRequestSchema,
|
|
18535
|
-
RevokeGrantRequestSchema,
|
|
18536
|
-
ApprovalRequestRequestSchema,
|
|
18537
|
-
ApprovalLookupRequestSchema,
|
|
18538
|
-
ApprovalLookupByRequestRequestSchema,
|
|
18539
|
-
ApprovalConsumeRequestSchema,
|
|
18540
|
-
ApprovalRevokeRequestSchema,
|
|
18541
|
-
ApprovalListRequestSchema,
|
|
18542
|
-
ApprovalRecordRequestSchema,
|
|
18543
|
-
ApprovalConsumeRecordRequestSchema
|
|
18544
|
-
]);
|
|
18545
|
-
var VaultEntrySchema = exports_external.union([
|
|
18546
|
-
exports_external.object({ kind: exports_external.literal("string"), value: exports_external.string() }),
|
|
18547
|
-
exports_external.object({ kind: exports_external.literal("binary"), value: exports_external.string() }),
|
|
18548
|
-
exports_external.object({
|
|
18549
|
-
kind: exports_external.literal("files"),
|
|
18550
|
-
files: exports_external.record(exports_external.string(), exports_external.object({
|
|
18551
|
-
encoding: exports_external.enum(["utf8", "base64"]),
|
|
18552
|
-
value: exports_external.string()
|
|
18553
|
-
}))
|
|
18554
|
-
})
|
|
18555
|
-
]);
|
|
18556
|
-
var ErrorCode = exports_external.enum([
|
|
18557
|
-
"LOCKED",
|
|
18558
|
-
"DENIED",
|
|
18559
|
-
"UNKNOWN_KEY",
|
|
18560
|
-
"BAD_REQUEST",
|
|
18561
|
-
"INTERNAL",
|
|
18562
|
-
"AUDIT_UNAVAILABLE"
|
|
18563
|
-
]);
|
|
18564
|
-
var OkEntryResponseSchema = exports_external.object({
|
|
18565
|
-
ok: exports_external.literal(true),
|
|
18566
|
-
entry: VaultEntrySchema
|
|
18567
|
-
});
|
|
18568
|
-
var OkKeysResponseSchema = exports_external.object({
|
|
18569
|
-
ok: exports_external.literal(true),
|
|
18570
|
-
keys: exports_external.array(exports_external.string())
|
|
18571
|
-
});
|
|
18572
|
-
var BrokerStatus = exports_external.object({
|
|
18573
|
-
unlocked: exports_external.boolean(),
|
|
18574
|
-
keyCount: exports_external.number().int().nonnegative(),
|
|
18575
|
-
uptimeSec: exports_external.number().nonnegative()
|
|
18576
|
-
});
|
|
18577
|
-
var OkStatusResponseSchema = exports_external.object({
|
|
18578
|
-
ok: exports_external.literal(true),
|
|
18579
|
-
status: BrokerStatus
|
|
18580
|
-
});
|
|
18581
|
-
var OkLockResponseSchema = exports_external.object({
|
|
18582
|
-
ok: exports_external.literal(true),
|
|
18583
|
-
locked: exports_external.literal(true)
|
|
18584
|
-
});
|
|
18585
|
-
var OkPutResponseSchema = exports_external.object({
|
|
18586
|
-
ok: exports_external.literal(true),
|
|
18587
|
-
put: exports_external.literal(true),
|
|
18588
|
-
key: exports_external.string()
|
|
18589
|
-
});
|
|
18590
|
-
var OkMintGrantResponseSchema = exports_external.object({
|
|
18591
|
-
ok: exports_external.literal(true),
|
|
18592
|
-
token: exports_external.string(),
|
|
18593
|
-
id: exports_external.string(),
|
|
18594
|
-
expires_at: exports_external.number().nullable()
|
|
18595
|
-
});
|
|
18596
|
-
var GrantMetaSchema = exports_external.object({
|
|
18597
|
-
id: exports_external.string(),
|
|
18598
|
-
agent_slug: exports_external.string(),
|
|
18599
|
-
key_allow: exports_external.array(exports_external.string()),
|
|
18600
|
-
write_allow: exports_external.array(exports_external.string()).default([]),
|
|
18601
|
-
expires_at: exports_external.number().nullable(),
|
|
18602
|
-
created_at: exports_external.number(),
|
|
18603
|
-
description: exports_external.string().nullable()
|
|
18604
|
-
});
|
|
18605
|
-
var OkListGrantsResponseSchema = exports_external.object({
|
|
18606
|
-
ok: exports_external.literal(true),
|
|
18607
|
-
grants: exports_external.array(GrantMetaSchema)
|
|
18608
|
-
});
|
|
18609
|
-
var OkRevokeGrantResponseSchema = exports_external.object({
|
|
18610
|
-
ok: exports_external.literal(true),
|
|
18611
|
-
revoked: exports_external.boolean()
|
|
18612
|
-
});
|
|
18613
|
-
var OkApprovalRequestResponseSchema = exports_external.discriminatedUnion("state", [
|
|
18614
|
-
exports_external.object({
|
|
18615
|
-
ok: exports_external.literal(true),
|
|
18616
|
-
kind: exports_external.literal("approval_request"),
|
|
18617
|
-
state: exports_external.literal("pending"),
|
|
18618
|
-
request_id: exports_external.string(),
|
|
18619
|
-
expires_at: exports_external.number()
|
|
18620
|
-
}),
|
|
18621
|
-
exports_external.object({
|
|
18622
|
-
ok: exports_external.literal(true),
|
|
18623
|
-
kind: exports_external.literal("approval_request"),
|
|
18624
|
-
state: exports_external.literal("rate_limited"),
|
|
18625
|
-
retry_after_ms: exports_external.number()
|
|
18626
|
-
})
|
|
18627
|
-
]);
|
|
18628
|
-
var ApprovalDecisionMetaSchema = exports_external.object({
|
|
18629
|
-
id: exports_external.string(),
|
|
18630
|
-
agent_unit: exports_external.string(),
|
|
18631
|
-
scope: exports_external.string(),
|
|
18632
|
-
action: exports_external.string(),
|
|
18633
|
-
decision: ApprovalDecisionModeSchema,
|
|
18634
|
-
granted_at: exports_external.number(),
|
|
18635
|
-
granted_by_user_id: exports_external.number(),
|
|
18636
|
-
ttl_expires_at: exports_external.number().nullable(),
|
|
18637
|
-
last_used_at: exports_external.number().nullable(),
|
|
18638
|
-
revoked_at: exports_external.number().nullable(),
|
|
18639
|
-
revoke_reason: exports_external.string().nullable(),
|
|
18640
|
-
origin: exports_external.enum(["agent", "operator"]).optional()
|
|
18641
|
-
});
|
|
18642
|
-
var OkApprovalLookupResponseSchema = exports_external.object({
|
|
18643
|
-
ok: exports_external.literal(true),
|
|
18644
|
-
state: exports_external.enum(["granted", "denied", "pending", "expired", "drift_revoked", "no_decision"]),
|
|
18645
|
-
decision: ApprovalDecisionMetaSchema.nullable().optional()
|
|
18646
|
-
});
|
|
18647
|
-
var OkApprovalConsumeResponseSchema = exports_external.object({
|
|
18648
|
-
ok: exports_external.literal(true),
|
|
18649
|
-
consumed: exports_external.boolean(),
|
|
18650
|
-
agent_unit: exports_external.string().optional(),
|
|
18651
|
-
scope: exports_external.string().optional(),
|
|
18652
|
-
action: exports_external.string().optional(),
|
|
18653
|
-
why: exports_external.string().nullable().optional()
|
|
18654
|
-
});
|
|
18655
|
-
var OkApprovalRevokeResponseSchema = exports_external.object({
|
|
18656
|
-
ok: exports_external.literal(true),
|
|
18657
|
-
revoked: exports_external.boolean()
|
|
18658
|
-
});
|
|
18659
|
-
var OkApprovalListResponseSchema = exports_external.object({
|
|
18660
|
-
ok: exports_external.literal(true),
|
|
18661
|
-
decisions: exports_external.array(ApprovalDecisionMetaSchema)
|
|
18662
|
-
});
|
|
18663
|
-
var OkApprovalRecordResponseSchema = exports_external.object({
|
|
18664
|
-
ok: exports_external.literal(true),
|
|
18665
|
-
decision_id: exports_external.string()
|
|
18666
|
-
});
|
|
18667
|
-
var OkApprovalConsumeRecordResponseSchema = exports_external.object({
|
|
18668
|
-
ok: exports_external.literal(true),
|
|
18669
|
-
consumed: exports_external.boolean(),
|
|
18670
|
-
decision_id: exports_external.string().optional(),
|
|
18671
|
-
agent_unit: exports_external.string().optional(),
|
|
18672
|
-
scope: exports_external.string().optional(),
|
|
18673
|
-
action: exports_external.string().optional(),
|
|
18674
|
-
why: exports_external.string().nullable().optional()
|
|
18675
|
-
});
|
|
18676
|
-
var ErrorResponseSchema = exports_external.object({
|
|
18677
|
-
ok: exports_external.literal(false),
|
|
18678
|
-
code: ErrorCode,
|
|
18679
|
-
msg: exports_external.string()
|
|
18680
|
-
});
|
|
18681
|
-
var ResponseSchema = exports_external.union([
|
|
18682
|
-
OkEntryResponseSchema,
|
|
18683
|
-
OkKeysResponseSchema,
|
|
18684
|
-
OkStatusResponseSchema,
|
|
18685
|
-
OkLockResponseSchema,
|
|
18686
|
-
OkPreflightAccessResponseSchema,
|
|
18687
|
-
OkPutResponseSchema,
|
|
18688
|
-
OkMintGrantResponseSchema,
|
|
18689
|
-
OkListGrantsResponseSchema,
|
|
18690
|
-
OkRevokeGrantResponseSchema,
|
|
18691
|
-
OkApprovalRequestResponseSchema,
|
|
18692
|
-
OkApprovalLookupResponseSchema,
|
|
18693
|
-
OkApprovalConsumeResponseSchema,
|
|
18694
|
-
OkApprovalRevokeResponseSchema,
|
|
18695
|
-
OkApprovalListResponseSchema,
|
|
18696
|
-
OkApprovalRecordResponseSchema,
|
|
18697
|
-
OkApprovalConsumeRecordResponseSchema,
|
|
18698
|
-
ErrorResponseSchema
|
|
18699
|
-
]);
|
|
18700
|
-
function decodeRequest(line) {
|
|
18701
|
-
if (Buffer.byteLength(line, "utf8") > MAX_FRAME_BYTES) {
|
|
18702
|
-
throw new RangeError(`Request frame too large (${Buffer.byteLength(line, "utf8")} bytes; max ${MAX_FRAME_BYTES})`);
|
|
18703
|
-
}
|
|
18704
|
-
const obj = JSON.parse(line);
|
|
18705
|
-
return RequestSchema.parse(obj);
|
|
18706
|
-
}
|
|
18707
|
-
function encodeResponse(resp) {
|
|
18708
|
-
const json = JSON.stringify(resp);
|
|
18709
|
-
if (Buffer.byteLength(json, "utf8") > MAX_FRAME_BYTES) {
|
|
18710
|
-
throw new Error(`Response frame too large (${Buffer.byteLength(json, "utf8")} bytes; max ${MAX_FRAME_BYTES})`);
|
|
18711
|
-
}
|
|
18712
|
-
return json + `
|
|
18713
|
-
`;
|
|
18714
|
-
}
|
|
18715
|
-
function errorResponse(code, msg) {
|
|
18716
|
-
return { ok: false, code, msg };
|
|
18717
|
-
}
|
|
18718
|
-
|
|
18719
18761
|
// src/vault/approvals/kernel.ts
|
|
18720
18762
|
import { randomBytes, randomUUID } from "node:crypto";
|
|
18721
18763
|
|
|
@@ -19154,6 +19196,7 @@ import { dirname, isAbsolute, join as join4, relative, resolve as resolve5 } fro
|
|
|
19154
19196
|
init_atomic();
|
|
19155
19197
|
|
|
19156
19198
|
// src/agents/agent-uid.ts
|
|
19199
|
+
init_peercred();
|
|
19157
19200
|
import { createHash } from "node:crypto";
|
|
19158
19201
|
var AGENT_UID_MIN = 10001;
|
|
19159
19202
|
var AGENT_UID_MAX = 10999;
|
|
@@ -19177,6 +19220,9 @@ init_schema();
|
|
|
19177
19220
|
// src/config/users.ts
|
|
19178
19221
|
init_merge();
|
|
19179
19222
|
|
|
19223
|
+
// src/config/thinking-effort-risk.ts
|
|
19224
|
+
var RISKY_EFFORTS = new Set(["medium", "high", "xhigh", "max"]);
|
|
19225
|
+
|
|
19180
19226
|
// src/agents/scaffold.ts
|
|
19181
19227
|
init_merge();
|
|
19182
19228
|
init_timezone();
|
|
@@ -19298,12 +19344,15 @@ function pgMib(mib) {
|
|
|
19298
19344
|
}
|
|
19299
19345
|
var HINDSIGHT_PG_EFFECTIVE_CACHE_SIZE_ENV = "SWITCHROOM_HINDSIGHT_PG_EFFECTIVE_CACHE_SIZE";
|
|
19300
19346
|
var HINDSIGHT_PG_SHARED_BUFFERS_ENV = "SWITCHROOM_HINDSIGHT_PG_SHARED_BUFFERS";
|
|
19347
|
+
var HINDSIGHT_PG_FSYNC_ENV = "SWITCHROOM_HINDSIGHT_PG_FSYNC";
|
|
19348
|
+
var HINDSIGHT_PG_DEFAULT_FSYNC = "on";
|
|
19301
19349
|
var HINDSIGHT_PG_DEFAULTS = [
|
|
19302
19350
|
[
|
|
19303
19351
|
HINDSIGHT_PG_EFFECTIVE_CACHE_SIZE_ENV,
|
|
19304
19352
|
pgMib(HINDSIGHT_PG_DEFAULT_EFFECTIVE_CACHE_SIZE_MIB)
|
|
19305
19353
|
],
|
|
19306
|
-
[HINDSIGHT_PG_SHARED_BUFFERS_ENV, pgMib(HINDSIGHT_PG_DEFAULT_SHARED_BUFFERS_MIB)]
|
|
19354
|
+
[HINDSIGHT_PG_SHARED_BUFFERS_ENV, pgMib(HINDSIGHT_PG_DEFAULT_SHARED_BUFFERS_MIB)],
|
|
19355
|
+
[HINDSIGHT_PG_FSYNC_ENV, HINDSIGHT_PG_DEFAULT_FSYNC]
|
|
19307
19356
|
];
|
|
19308
19357
|
var HINDSIGHT_PG_ENV_KEYS = new Set(HINDSIGHT_PG_DEFAULTS.map(([k]) => k));
|
|
19309
19358
|
|
|
@@ -19465,6 +19514,8 @@ var HINDSIGHT_RETAIN_CLIENT_DEADLINE_S = hindsightRetainClientTimeoutSeconds() +
|
|
|
19465
19514
|
var HINDSIGHT_HEALTHCHECK_PY = 'import urllib.request,sys; sys.exit(0 if urllib.request.urlopen("http://localhost:8888/health",timeout=4).getcode()==200 else 1)';
|
|
19466
19515
|
var HINDSIGHT_HEALTHCHECK_CMD = `python3 -c '${HINDSIGHT_HEALTHCHECK_PY}'`;
|
|
19467
19516
|
var DOCKER_PROBE_TIMEOUT_MS = 60 * 1000;
|
|
19517
|
+
var HINDSIGHT_CP_UNAUTHENTICATED_BIND_ADDR = "127.0.0.1";
|
|
19518
|
+
var HINDSIGHT_CP_NO_ACCESS_KEY_WARNING = "hindsight: no `hindsight.cp_access_key` configured — the control-plane " + "dashboard has NO login (the access-key middleware is inert when " + "HINDSIGHT_CP_ACCESS_KEY is unset), so it is pinned to " + `${HINDSIGHT_CP_UNAUTHENTICATED_BIND_ADDR} and will NOT be reachable from ` + "the LAN or tailnet. Set `hindsight.cp_access_key: vault:<key>` in " + "switchroom.yaml to arm the login and open it up.";
|
|
19468
19519
|
|
|
19469
19520
|
// src/memory/hindsight.ts
|
|
19470
19521
|
var DEFAULT_RETAIN_MISSION = `Extract durable facts that will still be true and useful weeks from now, once this session is forgotten.
|
|
@@ -19743,28 +19794,8 @@ init_paths();
|
|
|
19743
19794
|
// src/agents/scaffold.ts
|
|
19744
19795
|
init_paths();
|
|
19745
19796
|
init_loader();
|
|
19746
|
-
|
|
19747
|
-
|
|
19748
|
-
var KNOWN_VAULT_ARTIFACT_NAMES = new Set([
|
|
19749
|
-
"vault.enc",
|
|
19750
|
-
"vault.enc.bak",
|
|
19751
|
-
"vault.enc.tmp",
|
|
19752
|
-
"vault.enc.lock",
|
|
19753
|
-
".vault.enc.symlink-tmp"
|
|
19754
|
-
]);
|
|
19755
|
-
var SCRYPT_MAXMEM = 128 * 1024 * 1024;
|
|
19756
|
-
|
|
19757
|
-
// src/vault/resolver.ts
|
|
19758
|
-
init_loader();
|
|
19759
|
-
|
|
19760
|
-
// src/vault/broker/client.ts
|
|
19761
|
-
import { homedir as homedir3 } from "node:os";
|
|
19762
|
-
import { join as join3 } from "node:path";
|
|
19763
|
-
var LEGACY_SOCKET_PATH = join3(homedir3(), ".switchroom", "vault-broker.sock");
|
|
19764
|
-
var OPERATOR_SOCKET_PATH = join3(homedir3(), ".switchroom", "broker-operator", "sock");
|
|
19765
|
-
|
|
19766
|
-
// src/vault/resolver.ts
|
|
19767
|
-
var materializedDirs = new Set;
|
|
19797
|
+
init_resolver();
|
|
19798
|
+
init_vault();
|
|
19768
19799
|
|
|
19769
19800
|
// src/setup/onboarding.ts
|
|
19770
19801
|
init_paths();
|