studiograph 1.3.48-next.123 → 1.3.48-next.124
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/tools/ops-tools.js +93 -0
- package/dist/agent/tools/ops-tools.js.map +1 -1
- package/dist/agent/tools/tool-loader.js +5 -4
- package/dist/agent/tools/tool-loader.js.map +1 -1
- package/dist/agent/tools/web-tools.js +58 -8
- package/dist/agent/tools/web-tools.js.map +1 -1
- package/dist/cli/commands/audit.d.ts +21 -0
- package/dist/cli/commands/audit.js +174 -0
- package/dist/cli/commands/audit.js.map +1 -0
- package/dist/cli/commands/clone.js +25 -8
- package/dist/cli/commands/clone.js.map +1 -1
- package/dist/cli/commands/deploy.js +13 -0
- package/dist/cli/commands/deploy.js.map +1 -1
- package/dist/cli/commands/join.js +19 -8
- package/dist/cli/commands/join.js.map +1 -1
- package/dist/cli/commands/mcp.js +7 -3
- package/dist/cli/commands/mcp.js.map +1 -1
- package/dist/cli/commands/redeploy.js +41 -1
- package/dist/cli/commands/redeploy.js.map +1 -1
- package/dist/cli/commands/secrets.d.ts +23 -0
- package/dist/cli/commands/secrets.js +256 -0
- package/dist/cli/commands/secrets.js.map +1 -0
- package/dist/cli/commands/serve.js +108 -0
- package/dist/cli/commands/serve.js.map +1 -1
- package/dist/cli/commands/sync.js +42 -10
- package/dist/cli/commands/sync.js.map +1 -1
- package/dist/cli/index.js +4 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/railway-provisioning.d.ts +53 -0
- package/dist/cli/railway-provisioning.js +85 -0
- package/dist/cli/railway-provisioning.js.map +1 -0
- package/dist/cli/setup-wizard.js +14 -0
- package/dist/cli/setup-wizard.js.map +1 -1
- package/dist/core/schemas/connector.d.ts +67 -0
- package/dist/core/schemas/connector.js +100 -0
- package/dist/core/schemas/connector.js.map +1 -0
- package/dist/core/schemas/workspace.d.ts +122 -0
- package/dist/core/schemas/workspace.js +211 -0
- package/dist/core/schemas/workspace.js.map +1 -0
- package/dist/core/secrets/SecretStore.d.ts +77 -0
- package/dist/core/secrets/SecretStore.js +13 -0
- package/dist/core/secrets/SecretStore.js.map +1 -0
- package/dist/core/secrets/SettingsResolver.d.ts +54 -0
- package/dist/core/secrets/SettingsResolver.js +80 -0
- package/dist/core/secrets/SettingsResolver.js.map +1 -0
- package/dist/core/secrets/SettingsStore.d.ts +30 -0
- package/dist/core/secrets/SettingsStore.js +9 -0
- package/dist/core/secrets/SettingsStore.js.map +1 -0
- package/dist/core/secrets/SqliteEncryptedStore.d.ts +78 -0
- package/dist/core/secrets/SqliteEncryptedStore.js +581 -0
- package/dist/core/secrets/SqliteEncryptedStore.js.map +1 -0
- package/dist/core/secrets/audit.d.ts +36 -0
- package/dist/core/secrets/audit.js +60 -0
- package/dist/core/secrets/audit.js.map +1 -0
- package/dist/core/secrets/auth-db-migration.d.ts +129 -0
- package/dist/core/secrets/auth-db-migration.js +653 -0
- package/dist/core/secrets/auth-db-migration.js.map +1 -0
- package/dist/core/secrets/bundle.d.ts +141 -0
- package/dist/core/secrets/bundle.js +435 -0
- package/dist/core/secrets/bundle.js.map +1 -0
- package/dist/core/secrets/dual-write.d.ts +79 -0
- package/dist/core/secrets/dual-write.js +229 -0
- package/dist/core/secrets/dual-write.js.map +1 -0
- package/dist/core/secrets/encryption.d.ts +44 -0
- package/dist/core/secrets/encryption.js +97 -0
- package/dist/core/secrets/encryption.js.map +1 -0
- package/dist/core/secrets/importer.d.ts +94 -0
- package/dist/core/secrets/importer.js +319 -0
- package/dist/core/secrets/importer.js.map +1 -0
- package/dist/core/secrets/index.d.ts +38 -0
- package/dist/core/secrets/index.js +61 -0
- package/dist/core/secrets/index.js.map +1 -0
- package/dist/core/secrets/master-key.d.ts +38 -0
- package/dist/core/secrets/master-key.js +122 -0
- package/dist/core/secrets/master-key.js.map +1 -0
- package/dist/core/secrets/probes/anthropic.d.ts +98 -0
- package/dist/core/secrets/probes/anthropic.js +300 -0
- package/dist/core/secrets/probes/anthropic.js.map +1 -0
- package/dist/core/secrets/probes/brave.d.ts +9 -0
- package/dist/core/secrets/probes/brave.js +15 -0
- package/dist/core/secrets/probes/brave.js.map +1 -0
- package/dist/core/secrets/probes/r2.d.ts +15 -0
- package/dist/core/secrets/probes/r2.js +14 -0
- package/dist/core/secrets/probes/r2.js.map +1 -0
- package/dist/core/secrets/probes/voyage.d.ts +13 -0
- package/dist/core/secrets/probes/voyage.js +52 -0
- package/dist/core/secrets/probes/voyage.js.map +1 -0
- package/dist/core/secrets/read-flip.d.ts +55 -0
- package/dist/core/secrets/read-flip.js +87 -0
- package/dist/core/secrets/read-flip.js.map +1 -0
- package/dist/core/secrets/registry.d.ts +195 -0
- package/dist/core/secrets/registry.js +565 -0
- package/dist/core/secrets/registry.js.map +1 -0
- package/dist/core/types.d.ts +1 -1
- package/dist/core/user-config.d.ts +34 -12
- package/dist/core/user-config.js +76 -11
- package/dist/core/user-config.js.map +1 -1
- package/dist/core/validation.d.ts +2 -2
- package/dist/core/workspace-manager.js +25 -12
- package/dist/core/workspace-manager.js.map +1 -1
- package/dist/core/workspace.d.ts +19 -1
- package/dist/core/workspace.js +44 -4
- package/dist/core/workspace.js.map +1 -1
- package/dist/mcp/connector-manager.d.ts +16 -1
- package/dist/mcp/connector-manager.js +40 -5
- package/dist/mcp/connector-manager.js.map +1 -1
- package/dist/mcp/server.d.ts +3 -1
- package/dist/mcp/server.js +5 -2
- package/dist/mcp/server.js.map +1 -1
- package/dist/server/index.d.ts +11 -0
- package/dist/server/index.js +99 -4
- package/dist/server/index.js.map +1 -1
- package/dist/server/middleware/sanitize.d.ts +46 -0
- package/dist/server/middleware/sanitize.js +171 -0
- package/dist/server/middleware/sanitize.js.map +1 -0
- package/dist/server/routes/audit-api.d.ts +24 -0
- package/dist/server/routes/audit-api.js +119 -0
- package/dist/server/routes/audit-api.js.map +1 -0
- package/dist/server/routes/auth-api.js +5 -1
- package/dist/server/routes/auth-api.js.map +1 -1
- package/dist/server/routes/chat.js +3 -2
- package/dist/server/routes/chat.js.map +1 -1
- package/dist/server/routes/config-api.js +162 -47
- package/dist/server/routes/config-api.js.map +1 -1
- package/dist/server/routes/connectors-api.js +13 -7
- package/dist/server/routes/connectors-api.js.map +1 -1
- package/dist/server/routes/features-api.d.ts +5 -0
- package/dist/server/routes/features-api.js +10 -1
- package/dist/server/routes/features-api.js.map +1 -1
- package/dist/server/routes/graph-api.js +6 -5
- package/dist/server/routes/graph-api.js.map +1 -1
- package/dist/server/routes/insights-api.js +11 -3
- package/dist/server/routes/insights-api.js.map +1 -1
- package/dist/server/routes/messages-api.js +5 -4
- package/dist/server/routes/messages-api.js.map +1 -1
- package/dist/server/routes/secrets-api.d.ts +36 -0
- package/dist/server/routes/secrets-api.js +319 -0
- package/dist/server/routes/secrets-api.js.map +1 -0
- package/dist/server/routes/settings-api.d.ts +28 -0
- package/dist/server/routes/settings-api.js +190 -0
- package/dist/server/routes/settings-api.js.map +1 -0
- package/dist/server/routes/workspace-api.js +3 -2
- package/dist/server/routes/workspace-api.js.map +1 -1
- package/dist/server/routes/ws.js +2 -1
- package/dist/server/routes/ws.js.map +1 -1
- package/dist/services/asset-upload-service.js +5 -4
- package/dist/services/asset-upload-service.js.map +1 -1
- package/dist/services/auth-service.d.ts +26 -1
- package/dist/services/auth-service.js +218 -27
- package/dist/services/auth-service.js.map +1 -1
- package/dist/services/briefing.js +7 -6
- package/dist/services/briefing.js.map +1 -1
- package/dist/services/event-processor.js +4 -3
- package/dist/services/event-processor.js.map +1 -1
- package/dist/services/heartbeat.js +4 -3
- package/dist/services/heartbeat.js.map +1 -1
- package/dist/services/vector-service.d.ts +13 -1
- package/dist/services/vector-service.js +18 -2
- package/dist/services/vector-service.js.map +1 -1
- package/dist/utils/log.d.ts +42 -0
- package/dist/utils/log.js +137 -0
- package/dist/utils/log.js.map +1 -0
- package/dist/web/_app/immutable/assets/0.Bp6xXZUi.css +2 -0
- package/dist/web/_app/immutable/assets/SettingsDialog.tBn8y9DD.css +1 -0
- package/dist/web/_app/immutable/chunks/{D0uHMAjI.js → 7baHosBC.js} +1 -1
- package/dist/web/_app/immutable/chunks/{DOYHH0jE.js → 8-RxxJ9g.js} +1 -1
- package/dist/web/_app/immutable/chunks/{Hjbzn7vd.js → 8LakcfiG.js} +1 -1
- package/dist/web/_app/immutable/chunks/{CEjfGaQ82.js → BDc-k7Rc2.js} +1 -1
- package/dist/web/_app/immutable/chunks/{C2oJr77v.js → CGfsuYRw.js} +1 -1
- package/dist/web/_app/immutable/chunks/{BSRkvyDi.js → CHZvrUFl.js} +1 -1
- package/dist/web/_app/immutable/chunks/{DhOomwVF.js → CIx0QS6c.js} +1 -1
- package/dist/web/_app/immutable/chunks/{D_SIhV96.js → C_7IjoHY.js} +1 -1
- package/dist/web/_app/immutable/chunks/{WxslGJR0.js → D9HkdR0B.js} +1 -1
- package/dist/web/_app/immutable/chunks/{lSINohfr2.js → DAxTM9Lb2.js} +1 -1
- package/dist/web/_app/immutable/chunks/DHepUItL.js +1 -0
- package/dist/web/_app/immutable/chunks/DN6UCrb2.js +1 -0
- package/dist/web/_app/immutable/chunks/DZ4kLH4V.js +6 -0
- package/dist/web/_app/immutable/chunks/{Dnc-uKGN.js → Db7a1qQf.js} +1 -1
- package/dist/web/_app/immutable/chunks/DqzLN-gX.js +1 -0
- package/dist/web/_app/immutable/chunks/{4cOIYCkN.js → FOL_I7KG.js} +1 -1
- package/dist/web/_app/immutable/chunks/G5IR3kw72.js +2 -0
- package/dist/web/_app/immutable/chunks/{CRb-2LlR.js → I7uLi56A.js} +1 -1
- package/dist/web/_app/immutable/chunks/{B06nh7yQ.js → ScubSdUz.js} +1 -1
- package/dist/web/_app/immutable/chunks/{DDmyGMfZ.js → TDQSSWj9.js} +1 -1
- package/dist/web/_app/immutable/chunks/{CA3H6v2m.js → _9N1NuMz.js} +3 -3
- package/dist/web/_app/immutable/chunks/{BqZ2sF9k2.js → pUKwtPEb2.js} +1 -1
- package/dist/web/_app/immutable/chunks/{C00bh6xa2.js → qZM8V82b2.js} +1 -1
- package/dist/web/_app/immutable/chunks/{2NMx1iHe.js → vJkT0IPN.js} +1 -1
- package/dist/web/_app/immutable/chunks/{BYEHshxp2.js → wcz-NS472.js} +1 -1
- package/dist/web/_app/immutable/entry/{app.DtfAMzjw.js → app.DaIQnNyv.js} +2 -2
- package/dist/web/_app/immutable/entry/start.BiLCB4pI.js +1 -0
- package/dist/web/_app/immutable/nodes/{0.Bo5JtNE9.js → 0.Dn7IoSsy.js} +2 -2
- package/dist/web/_app/immutable/nodes/{1.DMMq8CNh.js → 1.DrnZYjnA.js} +1 -1
- package/dist/web/_app/immutable/nodes/{10.DBt7Ix2R.js → 10.DOae4rA6.js} +1 -1
- package/dist/web/_app/immutable/nodes/{11.3kv4nphz.js → 11.CeGzx1dJ.js} +1 -1
- package/dist/web/_app/immutable/nodes/{12.X4iTl9bb.js → 12.B_YxHSnW.js} +1 -1
- package/dist/web/_app/immutable/nodes/{13.Cja-a3pw.js → 13.D57z7JEQ.js} +1 -1
- package/dist/web/_app/immutable/nodes/{2.xXjE1Dge.js → 2.CaWRQbU1.js} +4 -4
- package/dist/web/_app/immutable/nodes/{3.BL5LAwgX.js → 3.C-aq_orU.js} +1 -1
- package/dist/web/_app/immutable/nodes/4.Cso8n668.js +2 -0
- package/dist/web/_app/immutable/nodes/{5.Cfcja3HV.js → 5.Cvnuk49Z.js} +1 -1
- package/dist/web/_app/immutable/nodes/{6.1pFmyd4Y.js → 6.DaZknwcQ.js} +1 -1
- package/dist/web/_app/immutable/nodes/7.BKh_H0eN.js +1 -0
- package/dist/web/_app/immutable/nodes/{8.DSs8xC56.js → 8.gm_C2WcY.js} +1 -1
- package/dist/web/_app/immutable/nodes/{9.CCpAaOEh.js → 9.DHPIqGdt.js} +1 -1
- package/dist/web/_app/version.json +1 -1
- package/dist/web/index.html +14 -14
- package/package.json +4 -1
- package/dist/agent/skills/enrich-entities.md +0 -136
- package/dist/agent/skills/sync-configuration.md +0 -119
- package/dist/agent/skills/sync-setup.md +0 -82
- package/dist/cli/commands/app.d.ts +0 -7
- package/dist/cli/commands/app.js +0 -268
- package/dist/cli/commands/app.js.map +0 -1
- package/dist/cli/commands/collection.d.ts +0 -10
- package/dist/cli/commands/collection.js +0 -185
- package/dist/cli/commands/collection.js.map +0 -1
- package/dist/core/launch-entity-types.d.ts +0 -23
- package/dist/core/launch-entity-types.js +0 -48
- package/dist/core/launch-entity-types.js.map +0 -1
- package/dist/integrations/registry.d.ts +0 -8
- package/dist/integrations/registry.js +0 -7
- package/dist/integrations/registry.js.map +0 -1
- package/dist/integrations/types.d.ts +0 -43
- package/dist/integrations/types.js +0 -5
- package/dist/integrations/types.js.map +0 -1
- package/dist/lib/lib/utils.d.ts +0 -2
- package/dist/lib/lib/utils.js +0 -6
- package/dist/lib/lib/utils.js.map +0 -1
- package/dist/server/chrome/chrome.css +0 -701
- package/dist/server/chrome/chrome.js +0 -390
- package/dist/server/commit-scheduler.d.ts +0 -39
- package/dist/server/commit-scheduler.js +0 -113
- package/dist/server/commit-scheduler.js.map +0 -1
- package/dist/server/plugin-loader.d.ts +0 -53
- package/dist/server/plugin-loader.js +0 -155
- package/dist/server/plugin-loader.js.map +0 -1
- package/dist/server/routes/meeting-ingest-api.d.ts +0 -15
- package/dist/server/routes/meeting-ingest-api.js +0 -123
- package/dist/server/routes/meeting-ingest-api.js.map +0 -1
- package/dist/services/batch-processor.d.ts +0 -49
- package/dist/services/batch-processor.js +0 -166
- package/dist/services/batch-processor.js.map +0 -1
- package/dist/services/csv-service.d.ts +0 -36
- package/dist/services/csv-service.js +0 -143
- package/dist/services/csv-service.js.map +0 -1
- package/dist/services/image-import-service.d.ts +0 -24
- package/dist/services/image-import-service.js +0 -108
- package/dist/services/image-import-service.js.map +0 -1
- package/dist/services/insights.d.ts +0 -38
- package/dist/services/insights.js +0 -269
- package/dist/services/insights.js.map +0 -1
- package/dist/services/meeting-processor.d.ts +0 -99
- package/dist/services/meeting-processor.js +0 -436
- package/dist/services/meeting-processor.js.map +0 -1
- package/dist/services/private-folder.d.ts +0 -15
- package/dist/services/private-folder.js +0 -31
- package/dist/services/private-folder.js.map +0 -1
- package/dist/utils/workspace-config.d.ts +0 -8
- package/dist/utils/workspace-config.js +0 -22
- package/dist/utils/workspace-config.js.map +0 -1
- package/dist/web/_app/immutable/assets/0.CTaJA8Ft.css +0 -2
- package/dist/web/_app/immutable/assets/SettingsDialog.B4eW6kgF.css +0 -1
- package/dist/web/_app/immutable/chunks/BH4TlszM2.js +0 -2
- package/dist/web/_app/immutable/chunks/BM-cHVJB.js +0 -1
- package/dist/web/_app/immutable/chunks/DSA0EAGn.js +0 -1
- package/dist/web/_app/immutable/chunks/E9mKSNrh.js +0 -6
- package/dist/web/_app/immutable/chunks/kNNRSdiM.js +0 -1
- package/dist/web/_app/immutable/entry/start.DP7AQ0kH.js +0 -1
- package/dist/web/_app/immutable/nodes/4.DiYb6rTu.js +0 -2
- package/dist/web/_app/immutable/nodes/7.BzfBVLyt.js +0 -1
- /package/dist/web/_app/immutable/chunks/{DSvDEGYK.js → 54VmiJfH.js} +0 -0
- /package/dist/web/_app/immutable/chunks/{BU_aRUb2.js → B12eXGpE.js} +0 -0
- /package/dist/web/_app/immutable/chunks/{Biuvg81T.js → BqGj0_GS.js} +0 -0
|
@@ -9,7 +9,9 @@ import { Type as T } from 'typebox';
|
|
|
9
9
|
import { existsSync, readFileSync } from 'fs';
|
|
10
10
|
import { join } from 'path';
|
|
11
11
|
import { homedir } from 'os';
|
|
12
|
+
import { randomBytes } from 'crypto';
|
|
12
13
|
import { wrapToolResult } from './graph-tools.js';
|
|
14
|
+
import { provisionRequiredRailwaySecrets, } from '../../cli/railway-provisioning.js';
|
|
13
15
|
const RAILWAY_API = 'https://backboard.railway.com/graphql/v2';
|
|
14
16
|
async function railwayQuery(token, query, variables = {}) {
|
|
15
17
|
const res = await fetch(RAILWAY_API, {
|
|
@@ -101,6 +103,13 @@ export function createOpsTools(_workspacePath, workspaceConfig) {
|
|
|
101
103
|
await query(`
|
|
102
104
|
mutation($input: VariableCollectionUpsertInput!) { variableCollectionUpsert(input: $input) }
|
|
103
105
|
`, { input: { projectId, environmentId: envId, serviceId, variables: envVars } });
|
|
106
|
+
// H4 (Codex): Phase-2 bootstrap secrets must also land on the
|
|
107
|
+
// freshly-created service. The CLI deploy path (deploy.ts)
|
|
108
|
+
// calls provisionRequiredRailwaySecrets — the agent tool used
|
|
109
|
+
// to skip it, which would brick services created via the
|
|
110
|
+
// agent under Phase 4's hard-fail. Idempotent: if a value is
|
|
111
|
+
// already set we leave it, otherwise we generate a fresh one.
|
|
112
|
+
const provisionedBootstrap = await provisionRequiredRailwaySecrets((q, v) => query(q, v ?? {}), { projectId, serviceId, environmentId: envId });
|
|
104
113
|
// Generate domain
|
|
105
114
|
let domain = '';
|
|
106
115
|
try {
|
|
@@ -123,6 +132,7 @@ export function createOpsTools(_workspacePath, workspaceConfig) {
|
|
|
123
132
|
dashboardUrl: `https://railway.com/project/${projectId}`,
|
|
124
133
|
apiKey,
|
|
125
134
|
startCommand,
|
|
135
|
+
provisionedBootstrap,
|
|
126
136
|
});
|
|
127
137
|
}
|
|
128
138
|
catch (err) {
|
|
@@ -219,6 +229,89 @@ export function createOpsTools(_workspacePath, workspaceConfig) {
|
|
|
219
229
|
}
|
|
220
230
|
},
|
|
221
231
|
},
|
|
232
|
+
// Phase 2: provision STUDIOGRAPH_MASTER_KEY (and STUDIOGRAPH_JWT_SECRET
|
|
233
|
+
// if missing) on the linked Railway service. Idempotent — if both are
|
|
234
|
+
// already set, returns success with `provisioned: []`. Owner-gated: the
|
|
235
|
+
// agent only runs for authenticated workspace owners.
|
|
236
|
+
{
|
|
237
|
+
name: 'provision_master_key',
|
|
238
|
+
label: 'Provision Master Key',
|
|
239
|
+
description: 'Generate and set STUDIOGRAPH_MASTER_KEY (and STUDIOGRAPH_JWT_SECRET if missing) on the linked Railway service via the API. Idempotent — does NOT overwrite existing values. Use this when a Railway service is missing the master key required for the encrypted secrets store. Returns the names of the variables that were generated and set.',
|
|
240
|
+
parameters: T.Object({}),
|
|
241
|
+
execute: async (_toolCallId, _params) => {
|
|
242
|
+
try {
|
|
243
|
+
const userConfig = loadUserConfig();
|
|
244
|
+
const token = process.env.RAILWAY_TOKEN || userConfig.railway_token;
|
|
245
|
+
if (!token) {
|
|
246
|
+
return wrapToolResult({ success: false, error: 'No Railway token found. Set railway_token in ~/.studiograph/user.json or RAILWAY_TOKEN env var.' });
|
|
247
|
+
}
|
|
248
|
+
const projectId = workspaceConfig.railway?.project_id;
|
|
249
|
+
const serviceId = workspaceConfig.railway?.service_id;
|
|
250
|
+
const environmentId = workspaceConfig.railway?.environment_id;
|
|
251
|
+
if (!projectId || !serviceId || !environmentId) {
|
|
252
|
+
return wrapToolResult({ success: false, error: 'No Railway service linked to this workspace. Run `studiograph redeploy <railway-dashboard-url>` first.' });
|
|
253
|
+
}
|
|
254
|
+
const queryFn = (q, v) => railwayQuery(token, q, v ?? {});
|
|
255
|
+
const ctx = { projectId, serviceId, environmentId };
|
|
256
|
+
const provisioned = await provisionRequiredRailwaySecrets(queryFn, ctx);
|
|
257
|
+
return wrapToolResult({
|
|
258
|
+
success: true,
|
|
259
|
+
provisioned,
|
|
260
|
+
message: provisioned.length === 0
|
|
261
|
+
? 'All required env vars already present.'
|
|
262
|
+
: `Set ${provisioned.length} new variable(s): ${provisioned.join(', ')}. Trigger a redeploy for them to take effect.`,
|
|
263
|
+
});
|
|
264
|
+
}
|
|
265
|
+
catch (err) {
|
|
266
|
+
return wrapToolResult({ success: false, error: err instanceof Error ? err.message : String(err) });
|
|
267
|
+
}
|
|
268
|
+
},
|
|
269
|
+
},
|
|
270
|
+
// Phase 2: rotate the JWT signing secret. Generates a new 32-byte
|
|
271
|
+
// base64 secret, writes via the Railway API, and triggers a redeploy
|
|
272
|
+
// (the new value is only picked up at boot). Owner-gated by the
|
|
273
|
+
// calling context. Invalidates every extant session token — the user
|
|
274
|
+
// must explicitly accept that consequence.
|
|
275
|
+
{
|
|
276
|
+
name: 'rotate_jwt_secret',
|
|
277
|
+
label: 'Rotate JWT Secret',
|
|
278
|
+
description: 'Generate a new STUDIOGRAPH_JWT_SECRET on the linked Railway service. WARNING: this invalidates every extant session token — every user (including the caller) will need to log in again after the redeploy. The new secret is generated client-side and POSTed via the Railway API; the old value is overwritten and is unrecoverable. Confirm with the user before invoking.',
|
|
279
|
+
parameters: T.Object({}),
|
|
280
|
+
execute: async (_toolCallId, _params) => {
|
|
281
|
+
try {
|
|
282
|
+
const userConfig = loadUserConfig();
|
|
283
|
+
const token = process.env.RAILWAY_TOKEN || userConfig.railway_token;
|
|
284
|
+
if (!token) {
|
|
285
|
+
return wrapToolResult({ success: false, error: 'No Railway token found.' });
|
|
286
|
+
}
|
|
287
|
+
const projectId = workspaceConfig.railway?.project_id;
|
|
288
|
+
const serviceId = workspaceConfig.railway?.service_id;
|
|
289
|
+
const environmentId = workspaceConfig.railway?.environment_id;
|
|
290
|
+
if (!projectId || !serviceId || !environmentId) {
|
|
291
|
+
return wrapToolResult({ success: false, error: 'No Railway service linked.' });
|
|
292
|
+
}
|
|
293
|
+
const queryFn = (q, v) => railwayQuery(token, q, v ?? {});
|
|
294
|
+
const next = randomBytes(32).toString('base64');
|
|
295
|
+
await queryFn(`mutation($input: VariableCollectionUpsertInput!) {
|
|
296
|
+
variableCollectionUpsert(input: $input)
|
|
297
|
+
}`, {
|
|
298
|
+
input: {
|
|
299
|
+
projectId,
|
|
300
|
+
environmentId,
|
|
301
|
+
serviceId,
|
|
302
|
+
variables: { STUDIOGRAPH_JWT_SECRET: next },
|
|
303
|
+
},
|
|
304
|
+
});
|
|
305
|
+
return wrapToolResult({
|
|
306
|
+
success: true,
|
|
307
|
+
message: 'STUDIOGRAPH_JWT_SECRET rotated. Trigger a redeploy for it to take effect — every existing session will be invalidated at next boot.',
|
|
308
|
+
});
|
|
309
|
+
}
|
|
310
|
+
catch (err) {
|
|
311
|
+
return wrapToolResult({ success: false, error: err instanceof Error ? err.message : String(err) });
|
|
312
|
+
}
|
|
313
|
+
},
|
|
314
|
+
},
|
|
222
315
|
];
|
|
223
316
|
}
|
|
224
317
|
//# sourceMappingURL=ops-tools.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ops-tools.js","sourceRoot":"","sources":["../../../src/agent/tools/ops-tools.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ops-tools.js","sourceRoot":"","sources":["../../../src/agent/tools/ops-tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
*/
|
|
19
19
|
import { existsSync, readdirSync } from 'fs';
|
|
20
20
|
import { join } from 'path';
|
|
21
|
+
import { log } from '../../utils/log.js';
|
|
21
22
|
export async function loadCustomTools(toolsDirs, context) {
|
|
22
23
|
const tools = [];
|
|
23
24
|
const seen = new Set();
|
|
@@ -41,15 +42,15 @@ export async function loadCustomTools(toolsDirs, context) {
|
|
|
41
42
|
const mod = await import(toolPath);
|
|
42
43
|
const tool = mod.default ?? mod;
|
|
43
44
|
if (!tool || typeof tool !== 'object') {
|
|
44
|
-
|
|
45
|
+
log.warn(`Custom tool at ${toolPath}: does not export an object — skipping`);
|
|
45
46
|
continue;
|
|
46
47
|
}
|
|
47
48
|
if (typeof tool.name !== 'string' || !tool.name) {
|
|
48
|
-
|
|
49
|
+
log.warn(`Custom tool at ${toolPath}: missing required field "name" — skipping`);
|
|
49
50
|
continue;
|
|
50
51
|
}
|
|
51
52
|
if (typeof tool.execute !== 'function') {
|
|
52
|
-
|
|
53
|
+
log.warn(`Custom tool at ${toolPath}: missing required field "execute" — skipping`);
|
|
53
54
|
continue;
|
|
54
55
|
}
|
|
55
56
|
// First occurrence wins (workspace overrides app-bundled)
|
|
@@ -64,7 +65,7 @@ export async function loadCustomTools(toolsDirs, context) {
|
|
|
64
65
|
});
|
|
65
66
|
}
|
|
66
67
|
catch (err) {
|
|
67
|
-
|
|
68
|
+
log.warn(`Failed to load custom tool from ${toolPath}:`, err);
|
|
68
69
|
}
|
|
69
70
|
}
|
|
70
71
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-loader.js","sourceRoot":"","sources":["../../../src/agent/tools/tool-loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,IAAI,CAAC;AAC7C,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"tool-loader.js","sourceRoot":"","sources":["../../../src/agent/tools/tool-loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,IAAI,CAAC;AAC7C,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAG5B,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAOzC,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,SAAmB,EACnB,OAAoB;IAEpB,MAAM,KAAK,GAAU,EAAE,CAAC;IACxB,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAE/B,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;QAC5B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS;QAE/B,IAAI,OAAiB,CAAC;QACtB,IAAI,CAAC;YACH,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;QAC7B,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;QAED,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC;gBAAE,SAAS;YACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;YAC7C,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;gBAAE,SAAS;YAEpC,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC;gBACnC,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC;gBAEhC,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;oBACtC,GAAG,CAAC,IAAI,CAAC,kBAAkB,QAAQ,wCAAwC,CAAC,CAAC;oBAC7E,SAAS;gBACX,CAAC;gBACD,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;oBAChD,GAAG,CAAC,IAAI,CAAC,kBAAkB,QAAQ,4CAA4C,CAAC,CAAC;oBACjF,SAAS;gBACX,CAAC;gBACD,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,UAAU,EAAE,CAAC;oBACvC,GAAG,CAAC,IAAI,CAAC,kBAAkB,QAAQ,+CAA+C,CAAC,CAAC;oBACpF,SAAS;gBACX,CAAC;gBAED,0DAA0D;gBAC1D,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;oBAAE,SAAS;gBAClC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAEpB,mDAAmD;gBACnD,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAChD,KAAK,CAAC,IAAI,CAAC;oBACT,GAAG,IAAI;oBACP,OAAO,EAAE,CAAC,UAAkB,EAAE,MAAW,EAAE,EAAE,CAC3C,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC;iBAC/C,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,GAAG,CAAC,IAAI,CAAC,mCAAmC,QAAQ,GAAG,EAAE,GAAG,CAAC,CAAC;YAChE,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
* Provider is configured via workspace config or env vars.
|
|
7
7
|
*/
|
|
8
8
|
import { Type as T } from 'typebox';
|
|
9
|
+
import { tryResolve } from '../../core/secrets/read-flip.js';
|
|
9
10
|
function wrapToolResult(result) {
|
|
10
11
|
const text = JSON.stringify(result, null, 2);
|
|
11
12
|
return {
|
|
@@ -88,37 +89,86 @@ class TavilySearchProvider {
|
|
|
88
89
|
}
|
|
89
90
|
/**
|
|
90
91
|
* Resolve a search provider from config + env vars.
|
|
91
|
-
* Priority: workspace config > env vars > null (disabled).
|
|
92
92
|
*
|
|
93
|
-
*
|
|
93
|
+
* Phase 6 read-flip: when `STUDIOGRAPH_NEW_STORE=1`, the encrypted
|
|
94
|
+
* store wins via the resolver. We check the store for each provider's
|
|
95
|
+
* api_key + (for Google) `search.google.cx`, then fall back to the
|
|
96
|
+
* workspace config and env-var chain. The resolver itself bakes in
|
|
97
|
+
* env > store > default precedence, so calling tryResolve()
|
|
98
|
+
* is the right way to consult either source without duplicating
|
|
99
|
+
* precedence logic.
|
|
100
|
+
*
|
|
101
|
+
* Env vars checked (legacy fallback only):
|
|
94
102
|
* BRAVE_SEARCH_API_KEY
|
|
95
103
|
* GOOGLE_SEARCH_API_KEY + GOOGLE_SEARCH_CX
|
|
96
104
|
* TAVILY_API_KEY
|
|
97
105
|
*/
|
|
98
106
|
function resolveSearchProvider(config) {
|
|
99
|
-
//
|
|
107
|
+
// Three-tier resolution, in order of precedence:
|
|
108
|
+
// 1. `search.provider` setting in the new store — explicit, picker-driven.
|
|
109
|
+
// Uses ONLY that provider's key. Other keys, even if stored, are
|
|
110
|
+
// ignored (no silent cascade-overrides-my-pick).
|
|
111
|
+
// 2. Legacy workspace-config `search.provider` — same explicit behavior,
|
|
112
|
+
// kept for back-compat with old workspace.json files.
|
|
113
|
+
// 3. Auto-detect cascade (brave → tavily → google) for any setup that
|
|
114
|
+
// predates the picker. First key found wins.
|
|
115
|
+
const storeProvider = tryResolve('search.provider');
|
|
116
|
+
const storeBrave = tryResolve('search.brave.api_key');
|
|
117
|
+
const storeTavily = tryResolve('search.tavily.api_key');
|
|
118
|
+
const storeGoogle = tryResolve('search.google.api_key');
|
|
119
|
+
const storeGoogleCx = tryResolve('search.google.cx');
|
|
120
|
+
// 1. Explicit picker via the new store. When the user has chosen a
|
|
121
|
+
// provider in the settings UI, that choice is authoritative — no
|
|
122
|
+
// cascade. If the chosen provider's key isn't set, we return null
|
|
123
|
+
// rather than silently fall through to a different provider.
|
|
124
|
+
if (storeProvider === 'brave' || storeProvider === 'tavily' || storeProvider === 'google') {
|
|
125
|
+
switch (storeProvider) {
|
|
126
|
+
case 'brave': {
|
|
127
|
+
const key = storeBrave || process.env.BRAVE_SEARCH_API_KEY;
|
|
128
|
+
return key ? new BraveSearchProvider(key) : null;
|
|
129
|
+
}
|
|
130
|
+
case 'tavily': {
|
|
131
|
+
const key = storeTavily || process.env.TAVILY_API_KEY;
|
|
132
|
+
return key ? new TavilySearchProvider(key) : null;
|
|
133
|
+
}
|
|
134
|
+
case 'google': {
|
|
135
|
+
const key = storeGoogle || process.env.GOOGLE_SEARCH_API_KEY;
|
|
136
|
+
const cx = storeGoogleCx || process.env.GOOGLE_SEARCH_CX;
|
|
137
|
+
return key && cx ? new GoogleSearchProvider(key, cx) : null;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
// 2. Legacy workspace-config preference.
|
|
100
142
|
if (config?.provider && config?.api_key) {
|
|
101
143
|
const key = resolveEnvValue(config.api_key);
|
|
102
144
|
switch (config.provider) {
|
|
103
145
|
case 'brave':
|
|
104
|
-
return new BraveSearchProvider(key);
|
|
146
|
+
return new BraveSearchProvider(storeBrave || key);
|
|
105
147
|
case 'google': {
|
|
106
|
-
const cx = resolveEnvValue(config.google_cx ?? '');
|
|
148
|
+
const cx = storeGoogleCx || resolveEnvValue(config.google_cx ?? '');
|
|
107
149
|
if (!cx)
|
|
108
150
|
return null;
|
|
109
|
-
return new GoogleSearchProvider(key, cx);
|
|
151
|
+
return new GoogleSearchProvider(storeGoogle || key, cx);
|
|
110
152
|
}
|
|
111
153
|
case 'tavily':
|
|
112
|
-
return new TavilySearchProvider(key);
|
|
154
|
+
return new TavilySearchProvider(storeTavily || key);
|
|
113
155
|
}
|
|
114
156
|
}
|
|
115
|
-
// Auto-detect
|
|
157
|
+
// 3. Auto-detect cascade (back-compat for installs without an explicit
|
|
158
|
+
// picker setting). Brave wins if any of its surfaces are set.
|
|
159
|
+
if (storeBrave)
|
|
160
|
+
return new BraveSearchProvider(storeBrave);
|
|
116
161
|
if (process.env.BRAVE_SEARCH_API_KEY) {
|
|
117
162
|
return new BraveSearchProvider(process.env.BRAVE_SEARCH_API_KEY);
|
|
118
163
|
}
|
|
164
|
+
if (storeTavily)
|
|
165
|
+
return new TavilySearchProvider(storeTavily);
|
|
119
166
|
if (process.env.TAVILY_API_KEY) {
|
|
120
167
|
return new TavilySearchProvider(process.env.TAVILY_API_KEY);
|
|
121
168
|
}
|
|
169
|
+
if (storeGoogle && storeGoogleCx) {
|
|
170
|
+
return new GoogleSearchProvider(storeGoogle, storeGoogleCx);
|
|
171
|
+
}
|
|
122
172
|
if (process.env.GOOGLE_SEARCH_API_KEY && process.env.GOOGLE_SEARCH_CX) {
|
|
123
173
|
return new GoogleSearchProvider(process.env.GOOGLE_SEARCH_API_KEY, process.env.GOOGLE_SEARCH_CX);
|
|
124
174
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web-tools.js","sourceRoot":"","sources":["../../../src/agent/tools/web-tools.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,IAAI,IAAI,CAAC,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"web-tools.js","sourceRoot":"","sources":["../../../src/agent/tools/web-tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* studiograph audit — read-only operator view of the append-only audit log.
|
|
3
|
+
*
|
|
4
|
+
* studiograph audit list [filters]
|
|
5
|
+
* --key <pattern> Filter by key name (exact match)
|
|
6
|
+
* --actor <user-id> Filter by actor user-id
|
|
7
|
+
* --action <action> Filter by action type
|
|
8
|
+
* (set|delete|test|describe|migrate|...)
|
|
9
|
+
* --since <iso-date> Only events at-or-after this time
|
|
10
|
+
* --until <iso-date> Only events at-or-before this time
|
|
11
|
+
* --limit <n> Page size (default 50, max 500)
|
|
12
|
+
* --offset <n> Pagination offset
|
|
13
|
+
* --format <table|json> Output format (default table)
|
|
14
|
+
*
|
|
15
|
+
* Audit reads aren't audited themselves (append-only log; reading
|
|
16
|
+
* doesn't change state). The UI used to surface this as a Settings →
|
|
17
|
+
* Audit Log tab; removed because filtering and exporting are much
|
|
18
|
+
* better in a terminal.
|
|
19
|
+
*/
|
|
20
|
+
import { Command } from 'commander';
|
|
21
|
+
export declare const auditCommand: Command;
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* studiograph audit — read-only operator view of the append-only audit log.
|
|
3
|
+
*
|
|
4
|
+
* studiograph audit list [filters]
|
|
5
|
+
* --key <pattern> Filter by key name (exact match)
|
|
6
|
+
* --actor <user-id> Filter by actor user-id
|
|
7
|
+
* --action <action> Filter by action type
|
|
8
|
+
* (set|delete|test|describe|migrate|...)
|
|
9
|
+
* --since <iso-date> Only events at-or-after this time
|
|
10
|
+
* --until <iso-date> Only events at-or-before this time
|
|
11
|
+
* --limit <n> Page size (default 50, max 500)
|
|
12
|
+
* --offset <n> Pagination offset
|
|
13
|
+
* --format <table|json> Output format (default table)
|
|
14
|
+
*
|
|
15
|
+
* Audit reads aren't audited themselves (append-only log; reading
|
|
16
|
+
* doesn't change state). The UI used to surface this as a Settings →
|
|
17
|
+
* Audit Log tab; removed because filtering and exporting are much
|
|
18
|
+
* better in a terminal.
|
|
19
|
+
*/
|
|
20
|
+
import { Command } from 'commander';
|
|
21
|
+
import { log } from '@clack/prompts';
|
|
22
|
+
import { homedir } from 'os';
|
|
23
|
+
import { existsSync } from 'fs';
|
|
24
|
+
import { join } from 'path';
|
|
25
|
+
import { SqliteEncryptedStore, loadMasterKey, loadPreviousMasterKey, setSecretStore, } from '../../core/secrets/index.js';
|
|
26
|
+
function openStore() {
|
|
27
|
+
const loaded = loadMasterKey();
|
|
28
|
+
const previous = loadPreviousMasterKey();
|
|
29
|
+
const sgRoot = process.env.RAILWAY_ENVIRONMENT && existsSync('/workspace')
|
|
30
|
+
? '/workspace'
|
|
31
|
+
: join(homedir(), '.studiograph');
|
|
32
|
+
const dbPath = join(sgRoot, 'secrets.db');
|
|
33
|
+
if (!existsSync(dbPath)) {
|
|
34
|
+
log.error(`Secrets store not found at ${dbPath}`);
|
|
35
|
+
log.info('Run `studiograph init` first, or start `studiograph serve` to initialize the store.');
|
|
36
|
+
process.exit(1);
|
|
37
|
+
}
|
|
38
|
+
const store = new SqliteEncryptedStore({
|
|
39
|
+
dbPath,
|
|
40
|
+
masterKey: loaded.key,
|
|
41
|
+
previousMasterKey: previous,
|
|
42
|
+
});
|
|
43
|
+
setSecretStore(store);
|
|
44
|
+
return store;
|
|
45
|
+
}
|
|
46
|
+
function parseTs(v) {
|
|
47
|
+
if (!v)
|
|
48
|
+
return undefined;
|
|
49
|
+
const n = Number(v);
|
|
50
|
+
if (Number.isFinite(n) && n > 0)
|
|
51
|
+
return n;
|
|
52
|
+
const d = Date.parse(v);
|
|
53
|
+
return Number.isFinite(d) ? d : undefined;
|
|
54
|
+
}
|
|
55
|
+
function fmtTs(ms) {
|
|
56
|
+
return new Date(ms).toISOString();
|
|
57
|
+
}
|
|
58
|
+
function fmtActor(row) {
|
|
59
|
+
return row.actor_type === 'user'
|
|
60
|
+
? `user:${row.actor_user_id ?? '?'}`
|
|
61
|
+
: `system:${row.actor_system_id ?? '?'}`;
|
|
62
|
+
}
|
|
63
|
+
function fmtTable(rows) {
|
|
64
|
+
if (rows.length === 0)
|
|
65
|
+
return '';
|
|
66
|
+
const cols = Object.keys(rows[0]);
|
|
67
|
+
const widths = cols.map((c) => Math.max(c.length, ...rows.map((r) => r[c]?.length ?? 0)));
|
|
68
|
+
const header = cols.map((c, i) => c.padEnd(widths[i])).join(' ');
|
|
69
|
+
const sep = widths.map((w) => '─'.repeat(w)).join(' ');
|
|
70
|
+
const body = rows.map((r) => cols.map((c, i) => (r[c] ?? '').padEnd(widths[i])).join(' ')).join('\n');
|
|
71
|
+
return `${header}\n${sep}\n${body}`;
|
|
72
|
+
}
|
|
73
|
+
export const auditCommand = new Command('audit')
|
|
74
|
+
.description('Read the append-only audit log (formerly the Settings → Audit Log tab)');
|
|
75
|
+
auditCommand
|
|
76
|
+
.command('list')
|
|
77
|
+
.description('List recent audit events, newest first. Filters compose with AND.')
|
|
78
|
+
.option('--key <key>', 'Filter by key name (exact match)')
|
|
79
|
+
.option('--actor <user-id>', 'Filter by actor user-id')
|
|
80
|
+
.option('--actor-type <type>', 'Filter by actor type: user or system')
|
|
81
|
+
.option('--action <action>', 'Filter by action (set, delete, test, describe, migrate, decrypt_fail, rotate_master, bundle_export, bundle_import)')
|
|
82
|
+
.option('--since <iso-date>', 'Only events at-or-after this time (ISO date or epoch ms)')
|
|
83
|
+
.option('--until <iso-date>', 'Only events at-or-before this time (ISO date or epoch ms)')
|
|
84
|
+
.option('--limit <n>', 'Page size, default 50, max 500', '50')
|
|
85
|
+
.option('--offset <n>', 'Pagination offset', '0')
|
|
86
|
+
.option('--format <format>', 'Output format: table (default) or json', 'table')
|
|
87
|
+
.action(async (opts) => {
|
|
88
|
+
const store = openStore();
|
|
89
|
+
try {
|
|
90
|
+
const where = [];
|
|
91
|
+
const params = [];
|
|
92
|
+
if (opts.key) {
|
|
93
|
+
where.push('key = ?');
|
|
94
|
+
params.push(opts.key);
|
|
95
|
+
}
|
|
96
|
+
if (opts.actor) {
|
|
97
|
+
where.push('actor_user_id = ?');
|
|
98
|
+
params.push(opts.actor);
|
|
99
|
+
}
|
|
100
|
+
if (opts.actorType) {
|
|
101
|
+
where.push('actor_type = ?');
|
|
102
|
+
params.push(opts.actorType);
|
|
103
|
+
}
|
|
104
|
+
if (opts.action) {
|
|
105
|
+
where.push('action = ?');
|
|
106
|
+
params.push(opts.action);
|
|
107
|
+
}
|
|
108
|
+
const since = parseTs(opts.since);
|
|
109
|
+
const until = parseTs(opts.until);
|
|
110
|
+
if (since !== undefined) {
|
|
111
|
+
where.push('ts >= ?');
|
|
112
|
+
params.push(since);
|
|
113
|
+
}
|
|
114
|
+
if (until !== undefined) {
|
|
115
|
+
where.push('ts <= ?');
|
|
116
|
+
params.push(until);
|
|
117
|
+
}
|
|
118
|
+
const limit = Math.min(Math.max(parseInt(opts.limit, 10) || 50, 1), 500);
|
|
119
|
+
const offset = Math.max(parseInt(opts.offset, 10) || 0, 0);
|
|
120
|
+
const sql = `SELECT id, ts, actor_type, actor_user_id, actor_system_id, action,
|
|
121
|
+
key, success, ip, user_agent, detail_json
|
|
122
|
+
FROM audit_log
|
|
123
|
+
${where.length ? `WHERE ${where.join(' AND ')}` : ''}
|
|
124
|
+
ORDER BY ts DESC
|
|
125
|
+
LIMIT ? OFFSET ?`;
|
|
126
|
+
// `store.db` is private; the route code already reaches in via `(store as any).db`
|
|
127
|
+
// and we follow the same pattern. Refactoring the store to expose a public
|
|
128
|
+
// query helper is out of scope for this CLI.
|
|
129
|
+
const rows = (store.db
|
|
130
|
+
.prepare(sql)
|
|
131
|
+
.all(...params, limit, offset));
|
|
132
|
+
const totalRow = (store.db
|
|
133
|
+
.prepare(`SELECT COUNT(*) AS n FROM audit_log ${where.length ? `WHERE ${where.join(' AND ')}` : ''}`)
|
|
134
|
+
.get(...params));
|
|
135
|
+
if (opts.format === 'json') {
|
|
136
|
+
console.log(JSON.stringify({
|
|
137
|
+
total: totalRow.n,
|
|
138
|
+
limit,
|
|
139
|
+
offset,
|
|
140
|
+
items: rows.map((r) => ({
|
|
141
|
+
id: r.id,
|
|
142
|
+
ts: r.ts,
|
|
143
|
+
actor_type: r.actor_type,
|
|
144
|
+
actor_user_id: r.actor_user_id,
|
|
145
|
+
actor_system_id: r.actor_system_id,
|
|
146
|
+
action: r.action,
|
|
147
|
+
key: r.key,
|
|
148
|
+
success: !!r.success,
|
|
149
|
+
ip: r.ip,
|
|
150
|
+
user_agent: r.user_agent,
|
|
151
|
+
detail: r.detail_json ? JSON.parse(r.detail_json) : null,
|
|
152
|
+
})),
|
|
153
|
+
}, null, 2));
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
156
|
+
if (rows.length === 0) {
|
|
157
|
+
log.info(`No audit events found${where.length ? ' for the given filters' : ''}.`);
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
const tableRows = rows.map((r) => ({
|
|
161
|
+
time: fmtTs(r.ts),
|
|
162
|
+
actor: fmtActor(r),
|
|
163
|
+
action: r.action,
|
|
164
|
+
key: r.key ?? '—',
|
|
165
|
+
result: r.success ? 'ok' : 'fail',
|
|
166
|
+
}));
|
|
167
|
+
console.log(fmtTable(tableRows));
|
|
168
|
+
console.log(`\nShowing ${rows.length} of ${totalRow.n} events (offset=${offset}, limit=${limit})`);
|
|
169
|
+
}
|
|
170
|
+
finally {
|
|
171
|
+
store.close();
|
|
172
|
+
}
|
|
173
|
+
});
|
|
174
|
+
//# sourceMappingURL=audit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit.js","sourceRoot":"","sources":["../../../src/cli/commands/audit.ts"],"names":[],"mappings":"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"}
|