@akasecurity/ai-tc-claude-code 0.9.3 → 0.9.5
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/.claude-plugin/plugin.json +1 -1
- package/README.md +5 -1
- package/commands/setup.md +123 -35
- package/hooks/hooks.json +11 -0
- package/package.json +7 -6
- package/scripts/apply-suppressions.js +2178 -593
- package/scripts/backfill.js +3815 -429
- package/scripts/filescan.js +2379 -336
- package/scripts/firstrun.js +1748 -181
- package/scripts/intro.js +520 -48
- package/scripts/message-display.js +30054 -0
- package/scripts/onboard.js +2007 -208
- package/scripts/post-tool-use.js +3721 -388
- package/scripts/pre-tool-use.js +3900 -414
- package/scripts/query.js +1752 -181
- package/scripts/reconcile.js +3321 -372
- package/scripts/remediate.js +3925 -582
- package/scripts/scan-worker.js +18006 -0
- package/scripts/session-start.js +1879 -273
- package/scripts/start-light.js +540 -68
- package/scripts/statusline.js +1747 -180
- package/scripts/stop.js +504 -75
- package/scripts/user-prompt-submit.js +3695 -408
package/scripts/stop.js
CHANGED
|
@@ -492,13 +492,12 @@ var require_ignore = __commonJS({
|
|
|
492
492
|
});
|
|
493
493
|
|
|
494
494
|
// ../../packages/plugin-sdk/src/config.ts
|
|
495
|
-
import { existsSync as
|
|
496
|
-
import { join as
|
|
495
|
+
import { existsSync as existsSync5 } from "fs";
|
|
496
|
+
import { join as join8 } from "path";
|
|
497
497
|
|
|
498
498
|
// ../../packages/persistence/src/database.ts
|
|
499
|
-
import { randomUUID as
|
|
500
|
-
import {
|
|
501
|
-
import { join, sep } from "path";
|
|
499
|
+
import { randomUUID as randomUUID10 } from "crypto";
|
|
500
|
+
import { join as join2, sep } from "path";
|
|
502
501
|
import { DatabaseSync } from "node:sqlite";
|
|
503
502
|
|
|
504
503
|
// ../../packages/schema/src/exception-scope.ts
|
|
@@ -15093,7 +15092,17 @@ var Finding = external_exports.object({
|
|
|
15093
15092
|
}).meta({ id: "Finding" });
|
|
15094
15093
|
var DetectedFinding = Finding.meta({ id: "DetectedFinding" });
|
|
15095
15094
|
var FindingAction = external_exports.enum(["blocked", "redacted", "warned", "allowed", "quarantined", "monitored"]).meta({ id: "FindingAction" });
|
|
15096
|
-
var FindingProvider = external_exports.enum([
|
|
15095
|
+
var FindingProvider = external_exports.enum([
|
|
15096
|
+
"claudecode",
|
|
15097
|
+
"claudedesktop",
|
|
15098
|
+
"cursor",
|
|
15099
|
+
"copilot",
|
|
15100
|
+
"chatgpt",
|
|
15101
|
+
"claudeai",
|
|
15102
|
+
"codex",
|
|
15103
|
+
"antigravity",
|
|
15104
|
+
"api"
|
|
15105
|
+
]).meta({ id: "FindingProvider" });
|
|
15097
15106
|
var FindingCategory = external_exports.enum([
|
|
15098
15107
|
"secret",
|
|
15099
15108
|
"pii",
|
|
@@ -15147,7 +15156,16 @@ var FindingInstance = external_exports.object({
|
|
|
15147
15156
|
confidence: external_exports.number().min(0).max(1),
|
|
15148
15157
|
// Lifecycle status (see FindingStatus). Optional so legacy callers/rows
|
|
15149
15158
|
// that predate the resolution feature stay valid.
|
|
15150
|
-
status: FindingStatus.optional()
|
|
15159
|
+
status: FindingStatus.optional(),
|
|
15160
|
+
// The audit event this finding was captured from. Optional so callers that
|
|
15161
|
+
// do not project it stay valid. An at-rest finding is content-addressed by
|
|
15162
|
+
// finding_key and its row is upserted on re-detection, so this names the
|
|
15163
|
+
// MOST RECENT detection event, not the first.
|
|
15164
|
+
eventId: external_exports.string().optional(),
|
|
15165
|
+
// The session that event belongs to, when it has one — the seam a
|
|
15166
|
+
// per-instance "view session" link needs. Absent for events captured
|
|
15167
|
+
// outside a session.
|
|
15168
|
+
sessionId: external_exports.string().optional()
|
|
15151
15169
|
}).meta({ id: "FindingInstance" });
|
|
15152
15170
|
var FindingGroup = external_exports.object({
|
|
15153
15171
|
id: external_exports.string(),
|
|
@@ -15191,7 +15209,11 @@ var FindingFacets = external_exports.object({
|
|
|
15191
15209
|
// for every instance, so every group lands in a bucket; a status-less
|
|
15192
15210
|
// group (possible only for callers whose rows carry no statuses) is
|
|
15193
15211
|
// counted under no value.
|
|
15194
|
-
status: external_exports.array(FindingFacetItem)
|
|
15212
|
+
status: external_exports.array(FindingFacetItem),
|
|
15213
|
+
// Host tool (attributes.tool_name). Present only on the instance-level
|
|
15214
|
+
// reads, which can filter by it; the grouped read omits the dimension
|
|
15215
|
+
// because a group spans tools.
|
|
15216
|
+
tool: external_exports.array(FindingFacetItem).optional()
|
|
15195
15217
|
}).meta({ id: "FindingFacets" });
|
|
15196
15218
|
var ListGroupedFindingsQuery = external_exports.object({
|
|
15197
15219
|
// NOTE: severity filters by Severity (critical/high/medium/low), not by
|
|
@@ -15208,6 +15230,16 @@ var ListGroupedFindingsQuery = external_exports.object({
|
|
|
15208
15230
|
// Scope to findings whose event carries this session id (the Activity page's
|
|
15209
15231
|
// session → findings drilldown). Findings without a session never match.
|
|
15210
15232
|
sessionId: external_exports.string().optional(),
|
|
15233
|
+
// Inclusive lower bound on the parent event's timestamp, so a caller arriving
|
|
15234
|
+
// from a time-scoped page (Activity's range) can carry that scope. Absent
|
|
15235
|
+
// means all time — this list has no default window.
|
|
15236
|
+
from: external_exports.iso.datetime().optional(),
|
|
15237
|
+
// A group or instance id that must appear in the page even when the cursor
|
|
15238
|
+
// has already advanced past its sort position. This is what keeps the
|
|
15239
|
+
// Findings page's one-shot ?finding= deep link resolving once the list
|
|
15240
|
+
// paginates: the target group is appended out of sort order rather than
|
|
15241
|
+
// scanning forward for it. Never affects totals, facets or the cursor.
|
|
15242
|
+
includeId: external_exports.string().optional(),
|
|
15211
15243
|
groupBy: external_exports.literal("type").optional(),
|
|
15212
15244
|
limit: external_exports.coerce.number().int().min(1).max(100).optional(),
|
|
15213
15245
|
cursor: external_exports.string().optional()
|
|
@@ -15252,9 +15284,100 @@ var FindingInstanceDetail = FindingInstance.extend({
|
|
|
15252
15284
|
detection: FindingDetectionRef,
|
|
15253
15285
|
policy: FindingPolicyRef
|
|
15254
15286
|
}).meta({ id: "FindingInstanceDetail" });
|
|
15287
|
+
var ListFindingInstancesQuery = external_exports.object({
|
|
15288
|
+
severity: external_exports.array(Severity).optional(),
|
|
15289
|
+
// Rule ids, the same vocabulary the grouped list's `subtype` carries.
|
|
15290
|
+
subtype: external_exports.array(external_exports.string()).optional(),
|
|
15291
|
+
provider: external_exports.array(FindingProvider).optional(),
|
|
15292
|
+
action: external_exports.array(FindingAction).optional(),
|
|
15293
|
+
// Matches each instance's OWN derived status (deriveFindingStatus), unlike
|
|
15294
|
+
// the grouped query's group-level fold.
|
|
15295
|
+
status: external_exports.array(FindingStatus).optional(),
|
|
15296
|
+
// Exact host-tool names (attributes.tool_name, e.g. 'Bash'). A real filter,
|
|
15297
|
+
// where the free-text `q` can only match the rendered "via Bash" label.
|
|
15298
|
+
tool: external_exports.array(external_exports.string()).optional(),
|
|
15299
|
+
// Exact repository / file-path matches, for the drill-down out of the
|
|
15300
|
+
// locations view. A row whose event carries no repo/file matches neither.
|
|
15301
|
+
repo: external_exports.string().optional(),
|
|
15302
|
+
file: external_exports.string().optional(),
|
|
15303
|
+
q: external_exports.string().optional(),
|
|
15304
|
+
sessionId: external_exports.string().optional(),
|
|
15305
|
+
from: external_exports.iso.datetime().optional(),
|
|
15306
|
+
limit: external_exports.coerce.number().int().min(1).max(200).optional(),
|
|
15307
|
+
cursor: external_exports.string().optional()
|
|
15308
|
+
});
|
|
15309
|
+
var ListFindingInstancesResponse = external_exports.object({
|
|
15310
|
+
// Instances matching the filters across the whole scope, not just this
|
|
15311
|
+
// page — cursor-independent, like the grouped list's totals.
|
|
15312
|
+
totals: external_exports.object({ findings: external_exports.number().int().nonnegative() }),
|
|
15313
|
+
// Counts in INSTANCES here, where the grouped response counts groups. Each
|
|
15314
|
+
// dimension still excludes its own filter.
|
|
15315
|
+
facets: FindingFacets,
|
|
15316
|
+
items: external_exports.array(FindingInstanceDetail),
|
|
15317
|
+
nextCursor: external_exports.string().nullable()
|
|
15318
|
+
}).meta({ id: "ListFindingInstancesResponse" });
|
|
15319
|
+
var FindingLocationFile = external_exports.object({
|
|
15320
|
+
// Empty when the instances carried no file path (a prompt or a tool call
|
|
15321
|
+
// with no file attribution).
|
|
15322
|
+
file: external_exports.string(),
|
|
15323
|
+
instanceCount: external_exports.number().int().nonnegative(),
|
|
15324
|
+
maxSeverity: Severity,
|
|
15325
|
+
latestDetectedAt: external_exports.iso.datetime(),
|
|
15326
|
+
// Folded from the instances' derived statuses with the same
|
|
15327
|
+
// open-dominates precedence a group uses.
|
|
15328
|
+
status: FindingStatus.optional(),
|
|
15329
|
+
// Distinct rules seen at this location, capped — the row shows them as
|
|
15330
|
+
// chips, and the count is what conveys scale.
|
|
15331
|
+
ruleIds: external_exports.array(external_exports.string())
|
|
15332
|
+
}).meta({ id: "FindingLocationFile" });
|
|
15333
|
+
var FindingLocationRepo = external_exports.object({
|
|
15334
|
+
/** Empty when the instances carried no repo attribute. */
|
|
15335
|
+
repo: external_exports.string(),
|
|
15336
|
+
instanceCount: external_exports.number().int().nonnegative(),
|
|
15337
|
+
maxSeverity: Severity,
|
|
15338
|
+
latestDetectedAt: external_exports.iso.datetime(),
|
|
15339
|
+
status: FindingStatus.optional(),
|
|
15340
|
+
files: external_exports.array(FindingLocationFile)
|
|
15341
|
+
}).meta({ id: "FindingLocationRepo" });
|
|
15342
|
+
var ListFindingLocationsQuery = external_exports.object({
|
|
15343
|
+
severity: external_exports.array(Severity).optional(),
|
|
15344
|
+
subtype: external_exports.array(external_exports.string()).optional(),
|
|
15345
|
+
provider: external_exports.array(FindingProvider).optional(),
|
|
15346
|
+
action: external_exports.array(FindingAction).optional(),
|
|
15347
|
+
// Per-instance, as in ListFindingInstancesQuery: a location keeps the
|
|
15348
|
+
// instances that match, and folds its status from those.
|
|
15349
|
+
status: external_exports.array(FindingStatus).optional(),
|
|
15350
|
+
tool: external_exports.array(external_exports.string()).optional(),
|
|
15351
|
+
q: external_exports.string().optional(),
|
|
15352
|
+
sessionId: external_exports.string().optional(),
|
|
15353
|
+
from: external_exports.iso.datetime().optional(),
|
|
15354
|
+
limit: external_exports.coerce.number().int().min(1).max(500).optional()
|
|
15355
|
+
});
|
|
15356
|
+
var ListFindingLocationsResponse = external_exports.object({
|
|
15357
|
+
totals: external_exports.object({
|
|
15358
|
+
findings: external_exports.number().int().nonnegative(),
|
|
15359
|
+
repos: external_exports.number().int().nonnegative(),
|
|
15360
|
+
files: external_exports.number().int().nonnegative()
|
|
15361
|
+
}),
|
|
15362
|
+
/** Sorted by max severity, then most recent. */
|
|
15363
|
+
items: external_exports.array(FindingLocationRepo),
|
|
15364
|
+
/** Whether `limit` truncated the repo list. */
|
|
15365
|
+
hasMore: external_exports.boolean()
|
|
15366
|
+
}).meta({ id: "ListFindingLocationsResponse" });
|
|
15255
15367
|
|
|
15256
15368
|
// ../../packages/schema/src/zod/harness-map.ts
|
|
15257
|
-
var Harness = external_exports.enum([
|
|
15369
|
+
var Harness = external_exports.enum([
|
|
15370
|
+
"claudecode",
|
|
15371
|
+
"cursor",
|
|
15372
|
+
"copilot",
|
|
15373
|
+
"codex",
|
|
15374
|
+
"antigravity",
|
|
15375
|
+
"windsurf",
|
|
15376
|
+
"claudedesktop",
|
|
15377
|
+
"chatgpt",
|
|
15378
|
+
"claudeai",
|
|
15379
|
+
"api"
|
|
15380
|
+
]).meta({ id: "Harness" });
|
|
15258
15381
|
|
|
15259
15382
|
// ../../packages/schema/src/zod/meta.ts
|
|
15260
15383
|
var InventoryObjectType = external_exports.enum(["host", "harness", "user", "skill", "hook", "mcp_server", "config_file"]).meta({ id: "InventoryObjectType" });
|
|
@@ -15708,7 +15831,18 @@ var ActivityOverviewResponse = external_exports.object({
|
|
|
15708
15831
|
// ../../packages/schema/src/zod/event.ts
|
|
15709
15832
|
var EventKind = external_exports.enum(["prompt", "response", "code_change", "tool_use"]).meta({ id: "EventKind" });
|
|
15710
15833
|
var CAPTURE_EVENT_TYPES_SQL = EventKind.options.map((k) => `'${k}'`).join(",");
|
|
15711
|
-
var SourceTool = external_exports.enum([
|
|
15834
|
+
var SourceTool = external_exports.enum([
|
|
15835
|
+
"claude-code",
|
|
15836
|
+
"claude-desktop",
|
|
15837
|
+
"cursor",
|
|
15838
|
+
"chatgpt",
|
|
15839
|
+
"claude-ai",
|
|
15840
|
+
"github-copilot",
|
|
15841
|
+
"codex",
|
|
15842
|
+
"antigravity",
|
|
15843
|
+
"cli",
|
|
15844
|
+
"unknown"
|
|
15845
|
+
]).meta({ id: "SourceTool" });
|
|
15712
15846
|
var EventMetadata = external_exports.object({
|
|
15713
15847
|
sessionId: external_exports.string().optional(),
|
|
15714
15848
|
repo: external_exports.string().optional(),
|
|
@@ -15779,7 +15913,7 @@ var TrustLevel = external_exports.enum(["known-good", "risky", "unapproved"]).me
|
|
|
15779
15913
|
var Flag = external_exports.enum(["update", "stale", "conflict", "unknown", "change", "untracked", "risk", "findings"]).meta({ id: "Flag" });
|
|
15780
15914
|
var Visibility = external_exports.enum(["public", "private"]).meta({ id: "Visibility" });
|
|
15781
15915
|
var HarnessEventKind = external_exports.enum(["block", "redact", "warn"]).meta({ id: "HarnessEventKind" });
|
|
15782
|
-
var HarnessId = external_exports.enum(["claudecode", "cursor", "codex"]).meta({ id: "HarnessId" });
|
|
15916
|
+
var HarnessId = external_exports.enum(["claudecode", "cursor", "codex", "antigravity"]).meta({ id: "HarnessId" });
|
|
15783
15917
|
var AccessCounts = external_exports.object({
|
|
15784
15918
|
open: external_exports.number().int().nonnegative(),
|
|
15785
15919
|
approved: external_exports.number().int().nonnegative(),
|
|
@@ -16001,6 +16135,7 @@ var ExceptionConditions = external_exports.object({
|
|
|
16001
16135
|
sourceTool: external_exports.string().optional(),
|
|
16002
16136
|
provider: external_exports.string().optional()
|
|
16003
16137
|
}).strict();
|
|
16138
|
+
var ExceptionCapability = external_exports.enum(["suppress", "reveal_to_model"]);
|
|
16004
16139
|
var DetectionException = external_exports.object({
|
|
16005
16140
|
id: external_exports.guid(),
|
|
16006
16141
|
ruleId: external_exports.string(),
|
|
@@ -16017,6 +16152,7 @@ var DetectionException = external_exports.object({
|
|
|
16017
16152
|
keyVersion: external_exports.number().int().positive(),
|
|
16018
16153
|
// maskMatch() preview of the approved value — never the raw value.
|
|
16019
16154
|
maskedValue: external_exports.string(),
|
|
16155
|
+
capability: ExceptionCapability.default("suppress"),
|
|
16020
16156
|
scope: ExceptionScope,
|
|
16021
16157
|
expiresAt: external_exports.iso.datetime().nullable(),
|
|
16022
16158
|
maxUses: external_exports.number().int().positive().nullable(),
|
|
@@ -16040,11 +16176,13 @@ var ExceptionBundleEntry = DetectionException.pick({
|
|
|
16040
16176
|
ruleId: true,
|
|
16041
16177
|
valueFingerprint: true,
|
|
16042
16178
|
keyVersion: true,
|
|
16179
|
+
capability: true,
|
|
16043
16180
|
expiresAt: true,
|
|
16044
16181
|
maxUses: true,
|
|
16045
16182
|
useCount: true,
|
|
16046
16183
|
conditions: true
|
|
16047
16184
|
});
|
|
16185
|
+
var ExceptionDescriptor = DetectionException.omit({ valueFingerprint: true });
|
|
16048
16186
|
|
|
16049
16187
|
// ../../packages/schema/src/zod/rule.ts
|
|
16050
16188
|
var MatcherType = external_exports.enum(["keyword", "regex", "validator"]).meta({ id: "MatcherType" });
|
|
@@ -16770,6 +16908,35 @@ var EgressWriteSummary = external_exports.object({
|
|
|
16770
16908
|
droppedFiles: external_exports.array(external_exports.string()).default([])
|
|
16771
16909
|
}).meta({ id: "EgressWriteSummary" });
|
|
16772
16910
|
|
|
16911
|
+
// ../../packages/schema/src/zod/exception-action.ts
|
|
16912
|
+
var confirmation = external_exports.string().optional();
|
|
16913
|
+
var ApproveBlockedInput = external_exports.object({
|
|
16914
|
+
reference: external_exports.string(),
|
|
16915
|
+
scope: external_exports.string(),
|
|
16916
|
+
reason: external_exports.string(),
|
|
16917
|
+
confirmation
|
|
16918
|
+
});
|
|
16919
|
+
var AddExceptionInput = external_exports.object({
|
|
16920
|
+
ruleId: external_exports.string(),
|
|
16921
|
+
value: external_exports.string(),
|
|
16922
|
+
scope: external_exports.string(),
|
|
16923
|
+
reason: external_exports.string(),
|
|
16924
|
+
confirmation
|
|
16925
|
+
});
|
|
16926
|
+
var GrantRevealInput = external_exports.object({
|
|
16927
|
+
pointer: external_exports.string(),
|
|
16928
|
+
scope: external_exports.string(),
|
|
16929
|
+
justification: external_exports.string(),
|
|
16930
|
+
confirmation
|
|
16931
|
+
});
|
|
16932
|
+
var RevokeExceptionInput = external_exports.object({
|
|
16933
|
+
id: external_exports.string(),
|
|
16934
|
+
reason: external_exports.string()
|
|
16935
|
+
});
|
|
16936
|
+
var RotateKeyInput = external_exports.object({
|
|
16937
|
+
confirmation: external_exports.string()
|
|
16938
|
+
});
|
|
16939
|
+
|
|
16773
16940
|
// ../../packages/schema/src/zod/installed-pack.ts
|
|
16774
16941
|
var InstalledPack = external_exports.object({
|
|
16775
16942
|
id: external_exports.guid(),
|
|
@@ -16800,8 +16967,158 @@ var PatchInstalledPackRequest = external_exports.object({
|
|
|
16800
16967
|
message: "At least one field must be provided"
|
|
16801
16968
|
}).meta({ id: "PatchInstalledPackRequest" });
|
|
16802
16969
|
|
|
16970
|
+
// ../../packages/schema/src/zod/vault.ts
|
|
16971
|
+
var CATEGORY_ALTERNATION = DetectionCategory.options.join("|");
|
|
16972
|
+
var POINTER_TOKEN_PATTERN = new RegExp(
|
|
16973
|
+
`\\[\\[aka:(?:${CATEGORY_ALTERNATION}):[A-Z2-7]{2,7}\\.[A-Z2-7]{26}\\.[A-Z2-7]{16}\\]\\]`
|
|
16974
|
+
);
|
|
16975
|
+
var POINTER_TOKEN_ANCHORED = new RegExp(`^${POINTER_TOKEN_PATTERN.source}$`);
|
|
16976
|
+
var PointerToken = external_exports.string().regex(POINTER_TOKEN_ANCHORED);
|
|
16977
|
+
var ParsedPointer = external_exports.object({
|
|
16978
|
+
category: DetectionCategory,
|
|
16979
|
+
keyVersion: external_exports.number().int().positive(),
|
|
16980
|
+
pointerId: external_exports.string(),
|
|
16981
|
+
tag: external_exports.string()
|
|
16982
|
+
});
|
|
16983
|
+
var VaultEntry = external_exports.object({
|
|
16984
|
+
pointerId: external_exports.string(),
|
|
16985
|
+
// The keyed HMAC of the raw value under `exception.key`, and the epoch it was
|
|
16986
|
+
// derived under. This is what a reveal-to-model grant matches on, and it rotates
|
|
16987
|
+
// independently of the vault encryption key below.
|
|
16988
|
+
valueFingerprint: external_exports.string().regex(/^[0-9a-f]{64}$/),
|
|
16989
|
+
fingerprintKeyVersion: external_exports.number().int().positive(),
|
|
16990
|
+
// The vault-key epoch this row's ciphertext was sealed under.
|
|
16991
|
+
keyVersion: external_exports.number().int().positive(),
|
|
16992
|
+
// Fixed at first mint and never updated: the same value detected later under a
|
|
16993
|
+
// different rule's category keeps the category it was minted with, so one
|
|
16994
|
+
// value always produces exactly one wire token.
|
|
16995
|
+
category: DetectionCategory,
|
|
16996
|
+
ruleId: external_exports.string(),
|
|
16997
|
+
// Partial-reveal preview for badges and listings. Never the raw value.
|
|
16998
|
+
maskedMatch: external_exports.string(),
|
|
16999
|
+
provider: external_exports.string().optional(),
|
|
17000
|
+
ciphertext: external_exports.string(),
|
|
17001
|
+
nonce: external_exports.string(),
|
|
17002
|
+
authTag: external_exports.string(),
|
|
17003
|
+
// How many times this value has been detected on this machine — the reuse
|
|
17004
|
+
// signal the vault dashboard reads. Distinct from VaultDeref.pointerCount.
|
|
17005
|
+
occurrenceCount: external_exports.number().int().nonnegative(),
|
|
17006
|
+
firstSeen: external_exports.string(),
|
|
17007
|
+
lastSeen: external_exports.string()
|
|
17008
|
+
});
|
|
17009
|
+
var PointerDescriptor = external_exports.object({
|
|
17010
|
+
category: DetectionCategory,
|
|
17011
|
+
provider: external_exports.string().optional(),
|
|
17012
|
+
maskedMatch: external_exports.string(),
|
|
17013
|
+
occurrences: external_exports.number().int().nonnegative(),
|
|
17014
|
+
firstSeen: external_exports.string(),
|
|
17015
|
+
lastSeen: external_exports.string()
|
|
17016
|
+
});
|
|
17017
|
+
var PointerIdentity = external_exports.object({
|
|
17018
|
+
ruleId: external_exports.string(),
|
|
17019
|
+
valueFingerprint: external_exports.string().regex(/^[0-9a-f]{64}$/),
|
|
17020
|
+
fingerprintKeyVersion: external_exports.number().int().positive()
|
|
17021
|
+
});
|
|
17022
|
+
var DetokenizeTarget = external_exports.enum(["human", "model"]);
|
|
17023
|
+
var VaultDerefReason = external_exports.enum([
|
|
17024
|
+
"display",
|
|
17025
|
+
"explicit-reveal",
|
|
17026
|
+
"view-render",
|
|
17027
|
+
"model-input",
|
|
17028
|
+
"remediation",
|
|
17029
|
+
"purge"
|
|
17030
|
+
]);
|
|
17031
|
+
var VaultDerefOutcome = external_exports.enum(["revealed", "refused", "unavailable"]);
|
|
17032
|
+
var VaultDeref = external_exports.object({
|
|
17033
|
+
id: external_exports.guid(),
|
|
17034
|
+
pointerId: external_exports.string(),
|
|
17035
|
+
at: external_exports.string(),
|
|
17036
|
+
target: DetokenizeTarget,
|
|
17037
|
+
reason: VaultDerefReason,
|
|
17038
|
+
outcome: VaultDerefOutcome,
|
|
17039
|
+
// Present only on a model-target crossing that a reveal grant authorized.
|
|
17040
|
+
grantId: external_exports.string().optional(),
|
|
17041
|
+
// How many pointers ONE batched render resolved. 1 for unbatched rows. Named
|
|
17042
|
+
// apart from VaultEntry.occurrenceCount, which counts detections of a value.
|
|
17043
|
+
pointerCount: external_exports.number().int().positive().default(1)
|
|
17044
|
+
});
|
|
17045
|
+
var VaultSightingKind = external_exports.enum([
|
|
17046
|
+
"prompt",
|
|
17047
|
+
"tool-input",
|
|
17048
|
+
"tool-output",
|
|
17049
|
+
"file",
|
|
17050
|
+
"transcript"
|
|
17051
|
+
]);
|
|
17052
|
+
var VaultSighting = external_exports.object({
|
|
17053
|
+
location: external_exports.string(),
|
|
17054
|
+
kind: VaultSightingKind,
|
|
17055
|
+
firstSeen: external_exports.string(),
|
|
17056
|
+
lastSeen: external_exports.string()
|
|
17057
|
+
});
|
|
17058
|
+
var VaultInventoryEntry = external_exports.object({
|
|
17059
|
+
pointerId: external_exports.string(),
|
|
17060
|
+
category: DetectionCategory,
|
|
17061
|
+
provider: external_exports.string().optional(),
|
|
17062
|
+
maskedMatch: external_exports.string(),
|
|
17063
|
+
occurrences: external_exports.number().int().nonnegative(),
|
|
17064
|
+
firstSeen: external_exports.string(),
|
|
17065
|
+
lastSeen: external_exports.string(),
|
|
17066
|
+
// The active reveal-to-model grant covering this value, when one exists —
|
|
17067
|
+
// the inventory badges it, the row links to revocation.
|
|
17068
|
+
revealGrantId: external_exports.string().nullable(),
|
|
17069
|
+
sightings: external_exports.array(VaultSighting)
|
|
17070
|
+
});
|
|
17071
|
+
var MAX_VAULT_PAGE_LIMIT = 200;
|
|
17072
|
+
var ListVaultInventoryQuery = external_exports.object({
|
|
17073
|
+
limit: external_exports.coerce.number().int().min(1).max(MAX_VAULT_PAGE_LIMIT).optional(),
|
|
17074
|
+
// Opaque; names the last row of the page just served.
|
|
17075
|
+
cursor: external_exports.string().optional()
|
|
17076
|
+
});
|
|
17077
|
+
var ListVaultInventoryResponse = external_exports.object({
|
|
17078
|
+
// Vaulted values across the whole store, not just this page — cursor-
|
|
17079
|
+
// independent, so paging never changes what the count claims.
|
|
17080
|
+
totals: external_exports.object({ values: external_exports.number().int().nonnegative() }),
|
|
17081
|
+
items: external_exports.array(VaultInventoryEntry),
|
|
17082
|
+
// `null` once the last page is reached.
|
|
17083
|
+
nextCursor: external_exports.string().nullable()
|
|
17084
|
+
});
|
|
17085
|
+
var ListVaultReuseQuery = external_exports.object({
|
|
17086
|
+
limit: external_exports.coerce.number().int().min(1).max(MAX_VAULT_PAGE_LIMIT).optional(),
|
|
17087
|
+
cursor: external_exports.string().optional()
|
|
17088
|
+
});
|
|
17089
|
+
var ListVaultReuseResponse = external_exports.object({
|
|
17090
|
+
// Reused values across the whole store — the number the section's claim
|
|
17091
|
+
// ("values detected in more than one place") is about.
|
|
17092
|
+
totals: external_exports.object({ reused: external_exports.number().int().nonnegative() }),
|
|
17093
|
+
items: external_exports.array(VaultInventoryEntry),
|
|
17094
|
+
nextCursor: external_exports.string().nullable()
|
|
17095
|
+
});
|
|
17096
|
+
var ListVaultDerefsQuery = external_exports.object({
|
|
17097
|
+
// Include the batched, high-volume reasons (display, view-render). Omitted
|
|
17098
|
+
// hides them and counts them into `hiddenBatched` instead, so the model
|
|
17099
|
+
// crossings stay visible. A real boolean, not `z.stringbool()`: this arrives
|
|
17100
|
+
// over a Server Action, which preserves the type, never as a URL param.
|
|
17101
|
+
includeBatched: external_exports.boolean().optional(),
|
|
17102
|
+
limit: external_exports.coerce.number().int().min(1).max(MAX_VAULT_PAGE_LIMIT).optional(),
|
|
17103
|
+
cursor: external_exports.string().optional()
|
|
17104
|
+
});
|
|
17105
|
+
var ListVaultDerefsResponse = external_exports.object({
|
|
17106
|
+
items: external_exports.array(VaultDeref),
|
|
17107
|
+
nextCursor: external_exports.string().nullable(),
|
|
17108
|
+
// Display/view-render rows the query hid, over the WHOLE trail rather than
|
|
17109
|
+
// this page — it is the count the "N hidden" line and its toggle speak for.
|
|
17110
|
+
// Always 0 when `includeBatched` was set, since nothing was hidden.
|
|
17111
|
+
hiddenBatched: external_exports.number().int().nonnegative()
|
|
17112
|
+
});
|
|
17113
|
+
var VaultKeyCustody = external_exports.string();
|
|
17114
|
+
var VaultInlineReveal = external_exports.enum(["masked", "full", "off"]);
|
|
17115
|
+
var VaultConsent = external_exports.object({
|
|
17116
|
+
acknowledgedAt: external_exports.iso.datetime(),
|
|
17117
|
+
version: external_exports.number().int().positive()
|
|
17118
|
+
});
|
|
17119
|
+
|
|
16803
17120
|
// ../../packages/schema/src/zod/local.ts
|
|
16804
|
-
var WORKSPACE_SETTINGS_SPEC_VERSION =
|
|
17121
|
+
var WORKSPACE_SETTINGS_SPEC_VERSION = 5;
|
|
16805
17122
|
var RunMode = external_exports.enum(["standalone"]);
|
|
16806
17123
|
var SimpleDetectionPolicy = external_exports.enum(["redact", "warn"]);
|
|
16807
17124
|
var HistoricalAccess = external_exports.enum(["full", "session-only"]);
|
|
@@ -16823,6 +17140,16 @@ var WorkspaceSettings = external_exports.object({
|
|
|
16823
17140
|
// In-place egress extraction on the scan paths; disable to stop all Data
|
|
16824
17141
|
// Shares writes.
|
|
16825
17142
|
dataSharesInPlace: external_exports.boolean().default(true),
|
|
17143
|
+
// Consent to keep a RECOVERABLE encrypted copy of detected values in the local
|
|
17144
|
+
// vault, instead of destroying them. Absent by default: this is a custody
|
|
17145
|
+
// change from one-way redaction, so it is never an assumed grant on upgrade.
|
|
17146
|
+
// Revoking stops future vaulting; it does not erase what is already stored —
|
|
17147
|
+
// purging the vault is the eraser.
|
|
17148
|
+
vaultConsent: VaultConsent.optional(),
|
|
17149
|
+
// Where the vault master key lives.
|
|
17150
|
+
vaultKeyCustody: VaultKeyCustody.default("file"),
|
|
17151
|
+
// How a pointer renders in assistant prose on screen (see VaultInlineReveal).
|
|
17152
|
+
vaultInlineReveal: VaultInlineReveal.default("masked"),
|
|
16826
17153
|
// Absent until /aka:setup completes; its presence is what "onboarded" means.
|
|
16827
17154
|
onboardedAt: external_exports.iso.datetime().optional(),
|
|
16828
17155
|
// Records that the user consented to sending findings to the model API for
|
|
@@ -17042,7 +17369,7 @@ var TopSourcesQuery = external_exports.object({
|
|
|
17042
17369
|
// Omit for both kinds.
|
|
17043
17370
|
kind: external_exports.enum(SOURCE_KINDS).optional()
|
|
17044
17371
|
});
|
|
17045
|
-
var Provider = external_exports.enum(["claudecode", "cursor", "codex", "chatgpt", "copilot", "api"]).meta({ id: "Provider" });
|
|
17372
|
+
var Provider = external_exports.enum(["claudecode", "cursor", "codex", "antigravity", "claudeai", "chatgpt", "copilot", "api"]).meta({ id: "Provider" });
|
|
17046
17373
|
var ScanCoverageProvider = external_exports.object({
|
|
17047
17374
|
provider: Provider,
|
|
17048
17375
|
// Percent of that provider's traffic scanned in the window. 0 when unsupported.
|
|
@@ -17210,11 +17537,33 @@ var SetupHandoffOffer = external_exports.object({
|
|
|
17210
17537
|
// ../../packages/persistence/src/ids.ts
|
|
17211
17538
|
import { createHash } from "crypto";
|
|
17212
17539
|
|
|
17540
|
+
// ../../packages/persistence/src/internal/snapshot.ts
|
|
17541
|
+
import { randomUUID } from "crypto";
|
|
17542
|
+
import { existsSync, readdirSync, renameSync as renameSync2, rmSync as rmSync2, statSync } from "fs";
|
|
17543
|
+
import { basename, dirname, join } from "path";
|
|
17544
|
+
|
|
17213
17545
|
// ../../packages/persistence/src/paths.ts
|
|
17214
|
-
import {
|
|
17546
|
+
import {
|
|
17547
|
+
chmodSync,
|
|
17548
|
+
linkSync,
|
|
17549
|
+
lstatSync,
|
|
17550
|
+
mkdirSync,
|
|
17551
|
+
renameSync,
|
|
17552
|
+
rmSync,
|
|
17553
|
+
writeFileSync
|
|
17554
|
+
} from "fs";
|
|
17555
|
+
import { threadId } from "worker_threads";
|
|
17215
17556
|
var DATA_DIR_MODE = 448;
|
|
17216
17557
|
var DATA_FILE_MODE = 384;
|
|
17558
|
+
function isSymlink(path) {
|
|
17559
|
+
try {
|
|
17560
|
+
return lstatSync(path).isSymbolicLink();
|
|
17561
|
+
} catch {
|
|
17562
|
+
return false;
|
|
17563
|
+
}
|
|
17564
|
+
}
|
|
17217
17565
|
function chmodBestEffort(path, mode) {
|
|
17566
|
+
if (isSymlink(path)) return;
|
|
17218
17567
|
try {
|
|
17219
17568
|
chmodSync(path, mode);
|
|
17220
17569
|
} catch {
|
|
@@ -17228,13 +17577,12 @@ function ensureDataDirSync(dir) {
|
|
|
17228
17577
|
tightenDir(dir);
|
|
17229
17578
|
}
|
|
17230
17579
|
function tightenFile(file2) {
|
|
17231
|
-
try {
|
|
17232
|
-
if (lstatSync(file2).isSymbolicLink()) return;
|
|
17233
|
-
} catch {
|
|
17234
|
-
}
|
|
17235
17580
|
chmodBestEffort(file2, DATA_FILE_MODE);
|
|
17236
17581
|
}
|
|
17237
17582
|
|
|
17583
|
+
// ../../packages/persistence/src/internal/snapshot.ts
|
|
17584
|
+
var STALE_PARTIAL_MS = 5 * 6e4;
|
|
17585
|
+
|
|
17238
17586
|
// ../../packages/persistence/src/internal/json.ts
|
|
17239
17587
|
function parseJsonObject(s) {
|
|
17240
17588
|
if (s == null) return void 0;
|
|
@@ -17250,55 +17598,78 @@ function parseJsonObject(s) {
|
|
|
17250
17598
|
var LIVE_ACTIVITY_WINDOW_MS = 30 * 6e4;
|
|
17251
17599
|
|
|
17252
17600
|
// ../../packages/persistence/src/repositories/exceptions.ts
|
|
17253
|
-
import { randomUUID } from "crypto";
|
|
17601
|
+
import { randomUUID as randomUUID2 } from "crypto";
|
|
17254
17602
|
var BLOCKED_DETECTIONS_TTL_MS = 30 * 60 * 1e3;
|
|
17255
17603
|
var BLOCKED_DETECTIONS_RETENTION_MS = 24 * 60 * 60 * 1e3;
|
|
17604
|
+
var ACTIVE_PREDICATE = `revoked_at IS NULL
|
|
17605
|
+
AND (expires_at IS NULL OR expires_at > :now)
|
|
17606
|
+
AND (max_uses IS NULL OR use_count < max_uses)`;
|
|
17607
|
+
var ACTIVE_REVEAL_GRANT_PREDICATE = `capability = 'reveal_to_model'
|
|
17608
|
+
AND conditions IS NULL
|
|
17609
|
+
AND ${ACTIVE_PREDICATE}`;
|
|
17256
17610
|
|
|
17257
17611
|
// ../../packages/persistence/src/repositories/installed-packs.ts
|
|
17258
|
-
import { createHash as createHash2, randomUUID as
|
|
17612
|
+
import { createHash as createHash2, randomUUID as randomUUID3 } from "crypto";
|
|
17259
17613
|
|
|
17260
17614
|
// ../../packages/persistence/src/repositories/inventory-assets.ts
|
|
17261
|
-
import { randomUUID as
|
|
17615
|
+
import { randomUUID as randomUUID4 } from "crypto";
|
|
17262
17616
|
var VALID_HARNESS_IDS = new Set(HarnessId.options);
|
|
17263
17617
|
var HARNESS_LIVENESS_WINDOW_MS = 30 * 24 * 60 * 60 * 1e3;
|
|
17264
17618
|
|
|
17265
17619
|
// ../../packages/persistence/src/repositories/policies.ts
|
|
17266
|
-
import { randomUUID as
|
|
17620
|
+
import { randomUUID as randomUUID5 } from "crypto";
|
|
17267
17621
|
|
|
17268
17622
|
// ../../packages/persistence/src/repositories/project-files.ts
|
|
17269
|
-
import { randomUUID as
|
|
17623
|
+
import { randomUUID as randomUUID6 } from "crypto";
|
|
17270
17624
|
|
|
17271
17625
|
// ../../packages/persistence/src/repositories/resolutions.ts
|
|
17272
|
-
import { randomUUID as
|
|
17626
|
+
import { randomUUID as randomUUID7 } from "crypto";
|
|
17627
|
+
|
|
17628
|
+
// ../../packages/persistence/src/repositories/secret-vault.ts
|
|
17629
|
+
import { randomUUID as randomUUID8 } from "crypto";
|
|
17273
17630
|
|
|
17274
17631
|
// ../../packages/persistence/src/repositories/shares.ts
|
|
17275
|
-
import { randomUUID as
|
|
17632
|
+
import { randomUUID as randomUUID9 } from "crypto";
|
|
17633
|
+
|
|
17634
|
+
// ../../packages/persistence/src/file-lock.ts
|
|
17635
|
+
import { randomUUID as randomUUID11 } from "crypto";
|
|
17636
|
+
import {
|
|
17637
|
+
closeSync,
|
|
17638
|
+
existsSync as existsSync2,
|
|
17639
|
+
openSync,
|
|
17640
|
+
readFileSync,
|
|
17641
|
+
rmSync as rmSync3,
|
|
17642
|
+
statSync as statSync2,
|
|
17643
|
+
writeFileSync as writeFileSync2
|
|
17644
|
+
} from "fs";
|
|
17645
|
+
import { hostname as hostname3 } from "os";
|
|
17646
|
+
var PARK = new Int32Array(new SharedArrayBuffer(4));
|
|
17276
17647
|
|
|
17277
17648
|
// ../../packages/persistence/src/finding-key.ts
|
|
17278
17649
|
import { createHash as createHash3 } from "crypto";
|
|
17279
17650
|
|
|
17280
17651
|
// ../../packages/persistence/src/fingerprint.ts
|
|
17281
17652
|
import { createHmac, randomBytes } from "crypto";
|
|
17282
|
-
import { existsSync as
|
|
17283
|
-
import { join as
|
|
17653
|
+
import { existsSync as existsSync3, readFileSync as readFileSync2 } from "fs";
|
|
17654
|
+
import { join as join3 } from "path";
|
|
17284
17655
|
import { DatabaseSync as DatabaseSync2 } from "node:sqlite";
|
|
17285
17656
|
|
|
17286
17657
|
// ../../packages/persistence/src/local-layout.ts
|
|
17287
17658
|
import { renameSync as renameSync3 } from "fs";
|
|
17288
17659
|
import { mkdir } from "fs/promises";
|
|
17289
17660
|
import { homedir } from "os";
|
|
17290
|
-
import { join as
|
|
17661
|
+
import { join as join4 } from "path";
|
|
17291
17662
|
function defaultDataDir() {
|
|
17292
|
-
return
|
|
17663
|
+
return join4(homedir(), ".aka");
|
|
17293
17664
|
}
|
|
17294
17665
|
function settingsDir(base = defaultDataDir()) {
|
|
17295
|
-
return
|
|
17666
|
+
return join4(base, "settings");
|
|
17296
17667
|
}
|
|
17297
17668
|
function dataDir(base = defaultDataDir()) {
|
|
17298
|
-
return
|
|
17669
|
+
return join4(base, "data");
|
|
17299
17670
|
}
|
|
17300
17671
|
function dbPath(base = defaultDataDir()) {
|
|
17301
|
-
return
|
|
17672
|
+
return join4(dataDir(base), "aka.db");
|
|
17302
17673
|
}
|
|
17303
17674
|
function ensureLayoutDirSync(dir = defaultDataDir()) {
|
|
17304
17675
|
ensureDataDirSync(dir);
|
|
@@ -17311,8 +17682,8 @@ function migrateLegacyLayout(base = defaultDataDir()) {
|
|
|
17311
17682
|
for (const { name, dest } of moves) {
|
|
17312
17683
|
try {
|
|
17313
17684
|
ensureDataDirSync(dest);
|
|
17314
|
-
const moved =
|
|
17315
|
-
renameSync3(
|
|
17685
|
+
const moved = join4(dest, name);
|
|
17686
|
+
renameSync3(join4(base, name), moved);
|
|
17316
17687
|
tightenFile(moved);
|
|
17317
17688
|
} catch {
|
|
17318
17689
|
}
|
|
@@ -17320,10 +17691,11 @@ function migrateLegacyLayout(base = defaultDataDir()) {
|
|
|
17320
17691
|
}
|
|
17321
17692
|
|
|
17322
17693
|
// ../../packages/persistence/src/settings.ts
|
|
17323
|
-
import { readFileSync as
|
|
17324
|
-
import { join as
|
|
17694
|
+
import { readFileSync as readFileSync3 } from "fs";
|
|
17695
|
+
import { join as join5 } from "path";
|
|
17696
|
+
var SETTINGS_FILENAME = "settings.json";
|
|
17325
17697
|
function readWorkspaceSettings(base = defaultDataDir()) {
|
|
17326
|
-
const record2 = readJson(
|
|
17698
|
+
const record2 = readJson(join5(settingsDir(base), SETTINGS_FILENAME));
|
|
17327
17699
|
if (!record2) return defaultWorkspaceSettings();
|
|
17328
17700
|
try {
|
|
17329
17701
|
return WorkspaceSettings.parse(record2);
|
|
@@ -17334,16 +17706,42 @@ function readWorkspaceSettings(base = defaultDataDir()) {
|
|
|
17334
17706
|
function readJson(file2) {
|
|
17335
17707
|
let text;
|
|
17336
17708
|
try {
|
|
17337
|
-
text =
|
|
17709
|
+
text = readFileSync3(file2, "utf8");
|
|
17338
17710
|
} catch {
|
|
17339
17711
|
return null;
|
|
17340
17712
|
}
|
|
17341
17713
|
return parseJsonObject(text) ?? null;
|
|
17342
17714
|
}
|
|
17343
17715
|
|
|
17716
|
+
// ../../packages/persistence/src/vault/crypto.ts
|
|
17717
|
+
import {
|
|
17718
|
+
createCipheriv,
|
|
17719
|
+
createDecipheriv,
|
|
17720
|
+
createHmac as createHmac2,
|
|
17721
|
+
hkdfSync,
|
|
17722
|
+
timingSafeEqual
|
|
17723
|
+
} from "crypto";
|
|
17724
|
+
|
|
17725
|
+
// ../../packages/persistence/src/vault/key-provider.ts
|
|
17726
|
+
import { execFileSync } from "child_process";
|
|
17727
|
+
import { randomBytes as randomBytes2 } from "crypto";
|
|
17728
|
+
import {
|
|
17729
|
+
chmodSync as chmodSync2,
|
|
17730
|
+
mkdirSync as mkdirSync2,
|
|
17731
|
+
readFileSync as readFileSync4,
|
|
17732
|
+
renameSync as renameSync4,
|
|
17733
|
+
rmSync as rmSync4,
|
|
17734
|
+
statSync as statSync3,
|
|
17735
|
+
writeFileSync as writeFileSync3
|
|
17736
|
+
} from "fs";
|
|
17737
|
+
import { join as join6 } from "path";
|
|
17738
|
+
|
|
17739
|
+
// ../../packages/persistence/src/vault/vault.ts
|
|
17740
|
+
import { randomBytes as randomBytes3, randomUUID as randomUUID12 } from "crypto";
|
|
17741
|
+
|
|
17344
17742
|
// ../../packages/persistence/src/warn-era-cap.ts
|
|
17345
|
-
import { existsSync as
|
|
17346
|
-
import { join as
|
|
17743
|
+
import { existsSync as existsSync4, writeFileSync as writeFileSync4 } from "fs";
|
|
17744
|
+
import { join as join7 } from "path";
|
|
17347
17745
|
|
|
17348
17746
|
// ../../packages/plugin-sdk/src/provider-env.ts
|
|
17349
17747
|
var DEFAULT_ANTHROPIC_HOST = "api.anthropic.com";
|
|
@@ -17394,11 +17792,11 @@ function resolveProvider() {
|
|
|
17394
17792
|
}
|
|
17395
17793
|
|
|
17396
17794
|
// ../../packages/plugin-sdk/src/config.ts
|
|
17397
|
-
function loadConfig(base = defaultDataDir()) {
|
|
17795
|
+
function loadConfig(base = defaultDataDir(), resolveProviderFn = resolveProvider) {
|
|
17398
17796
|
try {
|
|
17399
17797
|
ensureLayoutDirSync(base);
|
|
17400
|
-
const settingsFile =
|
|
17401
|
-
if (
|
|
17798
|
+
const settingsFile = join8(settingsDir(base), "settings.json");
|
|
17799
|
+
if (existsSync5(settingsFile)) tightenFile(settingsFile);
|
|
17402
17800
|
} catch {
|
|
17403
17801
|
}
|
|
17404
17802
|
migrateLegacyLayout(base);
|
|
@@ -17409,21 +17807,21 @@ function loadConfig(base = defaultDataDir()) {
|
|
|
17409
17807
|
dbPath: dbPath(base),
|
|
17410
17808
|
settingsDir: settingsDir(base),
|
|
17411
17809
|
onboarded: settings.onboardedAt != null,
|
|
17412
|
-
provider: resolveProviderSafe()
|
|
17810
|
+
provider: resolveProviderSafe(resolveProviderFn)
|
|
17413
17811
|
};
|
|
17414
17812
|
}
|
|
17415
|
-
function resolveProviderSafe() {
|
|
17813
|
+
function resolveProviderSafe(resolveProviderFn) {
|
|
17416
17814
|
try {
|
|
17417
|
-
return
|
|
17815
|
+
return resolveProviderFn();
|
|
17418
17816
|
} catch {
|
|
17419
17817
|
return { provider: "anthropic" };
|
|
17420
17818
|
}
|
|
17421
17819
|
}
|
|
17422
17820
|
|
|
17423
17821
|
// ../../packages/plugin-sdk/src/config-inventory.ts
|
|
17424
|
-
import { readdirSync, readFileSync as
|
|
17822
|
+
import { readdirSync as readdirSync2, readFileSync as readFileSync6, realpathSync, statSync as statSync5 } from "fs";
|
|
17425
17823
|
import { homedir as homedir2 } from "os";
|
|
17426
|
-
import { basename as
|
|
17824
|
+
import { basename as basename3, join as join10 } from "path";
|
|
17427
17825
|
|
|
17428
17826
|
// ../../packages/detections/src/egress/registry.ts
|
|
17429
17827
|
var EXTRACTOR_VERSION = "1";
|
|
@@ -18134,46 +18532,77 @@ var POLYNOMIAL_PROBES = ["abc-", "a.", "a ", "a=", "x", "0", "a@", "a/", "ab"].m
|
|
|
18134
18532
|
);
|
|
18135
18533
|
|
|
18136
18534
|
// ../../packages/plugin-sdk/src/repo.ts
|
|
18137
|
-
import { existsSync as
|
|
18138
|
-
import { basename, dirname, isAbsolute, join as
|
|
18535
|
+
import { existsSync as existsSync6, readFileSync as readFileSync5, statSync as statSync4 } from "fs";
|
|
18536
|
+
import { basename as basename2, dirname as dirname2, isAbsolute, join as join9, sep as sep2 } from "path";
|
|
18139
18537
|
|
|
18140
18538
|
// ../../packages/plugin-sdk/src/events.ts
|
|
18141
|
-
import { createHash as createHash4, randomUUID as
|
|
18539
|
+
import { createHash as createHash4, randomUUID as randomUUID13 } from "crypto";
|
|
18540
|
+
|
|
18541
|
+
// ../../packages/plugin-sdk/src/isolated-scan.ts
|
|
18542
|
+
import { existsSync as existsSync7 } from "fs";
|
|
18543
|
+
import { fileURLToPath } from "url";
|
|
18544
|
+
import { Worker } from "worker_threads";
|
|
18142
18545
|
|
|
18143
18546
|
// ../../packages/plugin-sdk/src/inventory-resolver.ts
|
|
18144
|
-
import { arch, hostname as
|
|
18547
|
+
import { arch, hostname as hostname4, platform, release } from "os";
|
|
18145
18548
|
|
|
18146
18549
|
// ../../packages/plugin-sdk/src/nudge.ts
|
|
18147
|
-
import { mkdirSync as
|
|
18148
|
-
import { join as
|
|
18550
|
+
import { mkdirSync as mkdirSync3, readFileSync as readFileSync7, writeFileSync as writeFileSync5 } from "fs";
|
|
18551
|
+
import { join as join11 } from "path";
|
|
18149
18552
|
|
|
18150
18553
|
// ../../packages/plugin-sdk/src/paths.ts
|
|
18151
|
-
import { readdirSync as
|
|
18152
|
-
import { basename as
|
|
18554
|
+
import { readdirSync as readdirSync3, realpathSync as realpathSync2 } from "fs";
|
|
18555
|
+
import { basename as basename4, dirname as dirname3, sep as sep3 } from "path";
|
|
18153
18556
|
|
|
18154
18557
|
// ../../packages/plugin-sdk/src/project-files.ts
|
|
18155
18558
|
var import_ignore = __toESM(require_ignore(), 1);
|
|
18156
|
-
import { existsSync as
|
|
18157
|
-
import { basename as
|
|
18559
|
+
import { existsSync as existsSync8, readdirSync as readdirSync4, readFileSync as readFileSync8 } from "fs";
|
|
18560
|
+
import { basename as basename5, join as join12, relative, sep as sep4 } from "path";
|
|
18561
|
+
|
|
18562
|
+
// ../../packages/plugin-sdk/src/provider-env-antigravity.ts
|
|
18563
|
+
var optionalBaseUrl2 = external_exports.preprocess((v) => {
|
|
18564
|
+
if (typeof v === "string" && v.trim() === "") return void 0;
|
|
18565
|
+
return v;
|
|
18566
|
+
}, external_exports.string().optional()).catch(void 0);
|
|
18567
|
+
var optionalFlag = external_exports.preprocess((v) => {
|
|
18568
|
+
if (typeof v !== "string") return false;
|
|
18569
|
+
const normalized = v.trim().toLowerCase();
|
|
18570
|
+
return normalized !== "" && normalized !== "0" && normalized !== "false";
|
|
18571
|
+
}, external_exports.boolean()).catch(false);
|
|
18572
|
+
var antigravityProviderEnvShape = {
|
|
18573
|
+
GOOGLE_GENAI_USE_VERTEXAI: optionalFlag,
|
|
18574
|
+
GOOGLE_GEMINI_BASE_URL: optionalBaseUrl2
|
|
18575
|
+
};
|
|
18576
|
+
var AntigravityProviderEnvSchema = external_exports.object(antigravityProviderEnvShape);
|
|
18577
|
+
|
|
18578
|
+
// ../../packages/plugin-sdk/src/provider-env-codex.ts
|
|
18579
|
+
var optionalBaseUrl3 = external_exports.preprocess((v) => {
|
|
18580
|
+
if (typeof v === "string" && v.trim() === "") return void 0;
|
|
18581
|
+
return v;
|
|
18582
|
+
}, external_exports.string().optional()).catch(void 0);
|
|
18583
|
+
var codexProviderEnvShape = {
|
|
18584
|
+
OPENAI_BASE_URL: optionalBaseUrl3
|
|
18585
|
+
};
|
|
18586
|
+
var CodexProviderEnvSchema = external_exports.object(codexProviderEnvShape);
|
|
18158
18587
|
|
|
18159
18588
|
// ../../packages/plugin-sdk/src/runtime.ts
|
|
18160
|
-
import { randomUUID as
|
|
18589
|
+
import { randomUUID as randomUUID14 } from "crypto";
|
|
18161
18590
|
|
|
18162
18591
|
// ../../packages/plugin-sdk/src/suppressions.ts
|
|
18163
18592
|
var THIRTY_DAYS_MS = 30 * 24 * 60 * 60 * 1e3;
|
|
18164
18593
|
|
|
18165
18594
|
// ../../packages/plugin-sdk/src/throttle.ts
|
|
18166
|
-
import { mkdirSync as
|
|
18167
|
-
import { join as
|
|
18595
|
+
import { mkdirSync as mkdirSync4, statSync as statSync6, writeFileSync as writeFileSync6 } from "fs";
|
|
18596
|
+
import { join as join13 } from "path";
|
|
18168
18597
|
function throttled(dataDir2, markerName, windowMs) {
|
|
18169
|
-
const marker =
|
|
18598
|
+
const marker = join13(dataDir2, markerName);
|
|
18170
18599
|
try {
|
|
18171
|
-
if (Date.now() -
|
|
18600
|
+
if (Date.now() - statSync6(marker).mtimeMs < windowMs) return true;
|
|
18172
18601
|
} catch {
|
|
18173
18602
|
}
|
|
18174
18603
|
try {
|
|
18175
|
-
|
|
18176
|
-
|
|
18604
|
+
mkdirSync4(dataDir2, { recursive: true, mode: DATA_DIR_MODE });
|
|
18605
|
+
writeFileSync6(marker, String(Date.now()), { mode: DATA_FILE_MODE });
|
|
18177
18606
|
} catch {
|
|
18178
18607
|
}
|
|
18179
18608
|
return false;
|
|
@@ -18181,21 +18610,21 @@ function throttled(dataDir2, markerName, windowMs) {
|
|
|
18181
18610
|
|
|
18182
18611
|
// src/history/reconcile-trigger.ts
|
|
18183
18612
|
import { spawn } from "child_process";
|
|
18184
|
-
import { dirname as
|
|
18185
|
-
import { fileURLToPath } from "url";
|
|
18613
|
+
import { dirname as dirname4, join as join15 } from "path";
|
|
18614
|
+
import { fileURLToPath as fileURLToPath2 } from "url";
|
|
18186
18615
|
|
|
18187
18616
|
// src/history/tail.ts
|
|
18188
18617
|
import { createHash as createHash5 } from "crypto";
|
|
18189
18618
|
import {
|
|
18190
|
-
closeSync,
|
|
18619
|
+
closeSync as closeSync2,
|
|
18191
18620
|
fstatSync,
|
|
18192
|
-
mkdirSync as
|
|
18193
|
-
openSync,
|
|
18194
|
-
readFileSync as
|
|
18621
|
+
mkdirSync as mkdirSync5,
|
|
18622
|
+
openSync as openSync2,
|
|
18623
|
+
readFileSync as readFileSync9,
|
|
18195
18624
|
readSync,
|
|
18196
|
-
writeFileSync as
|
|
18625
|
+
writeFileSync as writeFileSync7
|
|
18197
18626
|
} from "fs";
|
|
18198
|
-
import { join as
|
|
18627
|
+
import { join as join14 } from "path";
|
|
18199
18628
|
var SAFE_SESSION_ID = /^[A-Za-z0-9._-]+$/;
|
|
18200
18629
|
function safeSessionId(sessionId) {
|
|
18201
18630
|
if (SAFE_SESSION_ID.test(sessionId) && sessionId !== "." && sessionId !== "..") {
|
|
@@ -18211,8 +18640,8 @@ function triggerReconcile(dataDir2, sessionId, transcriptPath) {
|
|
|
18211
18640
|
try {
|
|
18212
18641
|
const marker = `${RECONCILE_MARKER_PREFIX}-${safeSessionId(sessionId)}`;
|
|
18213
18642
|
if (throttled(dataDir2, marker, RECONCILE_THROTTLE_MS)) return;
|
|
18214
|
-
const here =
|
|
18215
|
-
const child = spawn(process.execPath, [
|
|
18643
|
+
const here = dirname4(fileURLToPath2(import.meta.url));
|
|
18644
|
+
const child = spawn(process.execPath, [join15(here, "reconcile.js"), sessionId, transcriptPath], {
|
|
18216
18645
|
detached: true,
|
|
18217
18646
|
stdio: "ignore"
|
|
18218
18647
|
});
|