@dsh-enhanced/assistant-actions 0.1.30
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/LICENSE +21 -0
- package/README.md +247 -0
- package/cordis.patch.yml +3 -0
- package/lib/broker-cli.d.ts +70 -0
- package/lib/broker-cli.d.ts.map +1 -0
- package/lib/broker-cli.js +255 -0
- package/lib/broker-cli.js.map +1 -0
- package/lib/broker-client.d.ts +54 -0
- package/lib/broker-client.d.ts.map +1 -0
- package/lib/broker-client.js +266 -0
- package/lib/broker-client.js.map +1 -0
- package/lib/broker-core.d.ts +51 -0
- package/lib/broker-core.d.ts.map +1 -0
- package/lib/broker-core.js +441 -0
- package/lib/broker-core.js.map +1 -0
- package/lib/broker-ledger.d.ts +131 -0
- package/lib/broker-ledger.d.ts.map +1 -0
- package/lib/broker-ledger.js +925 -0
- package/lib/broker-ledger.js.map +1 -0
- package/lib/broker-peer-linux.d.ts +23 -0
- package/lib/broker-peer-linux.d.ts.map +1 -0
- package/lib/broker-peer-linux.js +68 -0
- package/lib/broker-peer-linux.js.map +1 -0
- package/lib/broker-protocol.d.ts +419 -0
- package/lib/broker-protocol.d.ts.map +1 -0
- package/lib/broker-protocol.js +786 -0
- package/lib/broker-protocol.js.map +1 -0
- package/lib/broker-server.d.ts +77 -0
- package/lib/broker-server.d.ts.map +1 -0
- package/lib/broker-server.js +467 -0
- package/lib/broker-server.js.map +1 -0
- package/lib/cli.d.ts +3 -0
- package/lib/cli.d.ts.map +1 -0
- package/lib/cli.js +36 -0
- package/lib/cli.js.map +1 -0
- package/lib/config.d.ts +54 -0
- package/lib/config.d.ts.map +1 -0
- package/lib/config.js +165 -0
- package/lib/config.js.map +1 -0
- package/lib/external-delivery-receipt.d.ts +11 -0
- package/lib/external-delivery-receipt.d.ts.map +1 -0
- package/lib/external-delivery-receipt.js +25 -0
- package/lib/external-delivery-receipt.js.map +1 -0
- package/lib/github.d.ts +78 -0
- package/lib/github.d.ts.map +1 -0
- package/lib/github.js +611 -0
- package/lib/github.js.map +1 -0
- package/lib/index.d.ts +19 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +23 -0
- package/lib/index.js.map +1 -0
- package/lib/ledger.d.ts +78 -0
- package/lib/ledger.d.ts.map +1 -0
- package/lib/ledger.js +1064 -0
- package/lib/ledger.js.map +1 -0
- package/lib/repository-readback.d.ts +34 -0
- package/lib/repository-readback.d.ts.map +1 -0
- package/lib/repository-readback.js +193 -0
- package/lib/repository-readback.js.map +1 -0
- package/lib/service.d.ts +86 -0
- package/lib/service.d.ts.map +1 -0
- package/lib/service.js +1259 -0
- package/lib/service.js.map +1 -0
- package/lib/types.d.ts +174 -0
- package/lib/types.d.ts.map +1 -0
- package/lib/types.js +2 -0
- package/lib/types.js.map +1 -0
- package/lib/verified-delivery.d.ts +104 -0
- package/lib/verified-delivery.d.ts.map +1 -0
- package/lib/verified-delivery.js +262 -0
- package/lib/verified-delivery.js.map +1 -0
- package/lib/version.d.ts +2 -0
- package/lib/version.d.ts.map +1 -0
- package/lib/version.js +2 -0
- package/lib/version.js.map +1 -0
- package/package.json +123 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,0BAA0B,CAAA;AAI7C,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,mBAAmB,EAAE,yBAAyB,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAA;AAErI,MAAM,WAAW,oBAAoB;IAAG,IAAI,EAAE,iBAAiB,CAAA;CAAE;AACjE,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,kBAAkB,CAAA;IACxB,gBAAgB,EAAE,MAAM,CAAA;IACxB,QAAQ,EAAE,MAAM,CAAA;IAChB,mBAAmB,EAAE,MAAM,CAAA;IAC3B,WAAW,EAAE,MAAM,CAAA;IACnB,oBAAoB,EAAE,MAAM,CAAA;IAC5B,gBAAgB,EAAE,MAAM,CAAA;IACxB,gBAAgB,EAAE,MAAM,CAAA;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,iBAAiB,EAAE,MAAM,CAAA;IACzB,iBAAiB,EAAE,MAAM,CAAA;IACzB,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,uBAAuB,CAAC,EAAE,MAAM,CAAA;IAChC,uBAAuB,CAAC,EAAE,MAAM,CAAA;IAChC,wBAAwB,CAAC,EAAE,MAAM,CAAA;IACjC,qBAAqB,EAAE,MAAM,CAAA;IAC7B,qBAAqB,EAAE,MAAM,CAAA;IAC7B,uBAAuB,CAAC,EAAE,MAAM,CAAA;CACjC;AACD,MAAM,MAAM,YAAY,GAAG,oBAAoB,GAAG,wBAAwB,CAAA;AAC1E,MAAM,WAAW,MAAM;IAAG,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,WAAW,EAAE,CAAC;IAAC,cAAc,CAAC,EAAE,SAAS,yBAAyB,EAAE,CAAC;IAAC,MAAM,CAAC,EAAE,YAAY,CAAA;CAAE;AACpJ,KAAK,iCAAiC,GAAG,QAAQ,CAAC,wBAAwB,CAAC,CAAA;AAC3E,MAAM,MAAM,eAAe,GACvB;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,WAAW,EAAE,CAAC;IAAC,cAAc,EAAE,EAAE,CAAC;IAAC,MAAM,EAAE,oBAAoB,CAAA;CAAE,GAC9F;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,EAAE,CAAC;IAAC,cAAc,EAAE,yBAAyB,EAAE,CAAC;IAAC,MAAM,EAAE,iCAAiC,CAAA;CAAE,CAAA;AAe7H,eAAO,MAAM,MAAM,EAAE,MAAM,CAAC,MAAM,CA6BhC,CAAA;AAEF,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAEzD;AAQD,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,eAAe,CA2D7D;AACD,wBAAgB,eAAe,CAAC,KAAK,EAAE,aAAa,GAAG,aAAa,CAQnE;AACD,eAAO,MAAM,WAAW,GAAI,SAAS,aAAa,KAAG,MAA4J,CAAA;AAEjN,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,mBAAmB,GAAG,mBAAmB,CASrF;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,uBAAuB,GAAG,uBAAuB,CASjG"}
|
package/lib/config.js
ADDED
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
import Schema from '@deepseek-ai/schemastery';
|
|
2
|
+
import { homedir } from 'node:os';
|
|
3
|
+
import { isAbsolute, join, resolve } from 'node:path';
|
|
4
|
+
import { normalizeBrokerGrantProjection } from './broker-protocol.js';
|
|
5
|
+
const positive = (max) => Schema.number().step(1).min(1).max(max);
|
|
6
|
+
const externalGrantSchema = Schema.object({
|
|
7
|
+
id: Schema.string().required(), revision: positive(Number.MAX_SAFE_INTEGER).required(), grantDigest: Schema.string().required(),
|
|
8
|
+
owner: Schema.object({ principalDigest: Schema.string().required(), principalRecordId: Schema.string().required(), principalVersion: positive(Number.MAX_SAFE_INTEGER).required(),
|
|
9
|
+
workspace: Schema.string().required(), preset: Schema.string().required(), bindingId: Schema.string().required(), bindingVersion: positive(Number.MAX_SAFE_INTEGER).required(), bindingGeneration: positive(Number.MAX_SAFE_INTEGER).required() }).required(),
|
|
10
|
+
sessionId: Schema.string().required(),
|
|
11
|
+
destination: Schema.object({ classification: Schema.const('github-repository').required(), repository: Schema.string().required(), branch: Schema.string().required(), baseBranch: Schema.string(), paths: Schema.array(Schema.string()).required() }).required(),
|
|
12
|
+
expiresAt: positive(Number.MAX_SAFE_INTEGER).required(), maxActions: positive(10_000).required(), maxTotalBytes: positive(64 * 1024 * 1024).required(),
|
|
13
|
+
source: Schema.object({ classification: Schema.union(['public', 'internal', 'confidential', 'restricted']).required(), provenanceDigest: Schema.string().required() }).required(),
|
|
14
|
+
maxCostUnits: Schema.number().step(1).min(0).max(Number.MAX_SAFE_INTEGER).required(),
|
|
15
|
+
allowedOperations: Schema.array(Schema.union(['commit', 'inspect', 'pull-request'])).required(),
|
|
16
|
+
allowedInspectKinds: Schema.array(Schema.union(['repository', 'branch', 'file', 'pull-request', 'checks', 'reviews'])).required(),
|
|
17
|
+
verifiedDelivery: Schema.object({ ownerRouteId: Schema.string().required(), budgetId: Schema.string().required(), acceptance: Schema.union(['goal-outcome', 'goal-step']) }),
|
|
18
|
+
});
|
|
19
|
+
export const Config = Schema.object({
|
|
20
|
+
stateRoot: Schema.string().default(join(homedir(), '.dsh', 'assistant-actions')),
|
|
21
|
+
grants: Schema.array(Schema.object({
|
|
22
|
+
id: Schema.string().required(), revision: positive(Number.MAX_SAFE_INTEGER).required(),
|
|
23
|
+
principalDigest: Schema.string().required(), principalRecordId: Schema.string().required(), principalVersion: positive(Number.MAX_SAFE_INTEGER).required(),
|
|
24
|
+
workspace: Schema.string().required(), agentPreset: Schema.string().required(), repository: Schema.string().required(), branch: Schema.string().required(),
|
|
25
|
+
paths: Schema.array(Schema.string()).required(), credentialHandle: Schema.string().required(), expiresAt: positive(Number.MAX_SAFE_INTEGER).required(),
|
|
26
|
+
maxActions: positive(10_000).required(), maxTotalBytes: positive(64 * 1024 * 1024).required(),
|
|
27
|
+
repoWorkflow: Schema.union([Schema.object({ baseBranch: Schema.string().required(), allowBranchCreate: Schema.boolean().required(), allowPullRequest: Schema.boolean().required() })]),
|
|
28
|
+
verifiedDelivery: Schema.union([Schema.object({ ownerRouteId: Schema.string().required(), budgetId: Schema.string().required(), acceptance: Schema.union(['goal-outcome', 'goal-step']) })]),
|
|
29
|
+
rollback: Schema.union([Schema.object({ allowRollback: Schema.const(true).required(), budgetId: Schema.string().required(),
|
|
30
|
+
maxActions: positive(10_000).required(), maxTotalBytes: positive(64 * 1024 * 1024).required() })]),
|
|
31
|
+
})).default([]),
|
|
32
|
+
externalGrants: Schema.array(externalGrantSchema).default([]),
|
|
33
|
+
broker: Schema.union([
|
|
34
|
+
Schema.object({ mode: Schema.const('embedded-compat').required() }),
|
|
35
|
+
Schema.object({
|
|
36
|
+
mode: Schema.const('external-unix-v1').required(), actionSocketPath: Schema.string().required(), brokerId: Schema.string().required(),
|
|
37
|
+
brokerPublicKeyPath: Schema.string().required(), clientKeyId: Schema.string().required(), clientSigningKeyPath: Schema.string().required(),
|
|
38
|
+
clientInstanceId: Schema.string().required(), clientGeneration: positive(Number.MAX_SAFE_INTEGER).required(),
|
|
39
|
+
requestTimeoutMs: positive(300_000).default(30_000), helloTtlMs: positive(300_000).default(30_000),
|
|
40
|
+
expectedSocketUid: Schema.number().step(1).min(0).max(0x7fffffff).required(), expectedSocketGid: Schema.number().step(1).min(0).max(0x7fffffff).required(),
|
|
41
|
+
expectedSocketMode: Schema.number().step(1).min(0).max(0o777).default(0o600),
|
|
42
|
+
expectedSocketParentUid: Schema.number().step(1).min(0).max(0x7fffffff), expectedSocketParentGid: Schema.number().step(1).min(0).max(0x7fffffff),
|
|
43
|
+
expectedSocketParentMode: Schema.number().step(1).min(0).max(0o777).default(0o700),
|
|
44
|
+
expectedBrokerPeerUid: Schema.number().step(1).min(0).max(0x7fffffff).required(), expectedBrokerPeerGid: Schema.number().step(1).min(0).max(0x7fffffff).required(),
|
|
45
|
+
minimumBrokerGeneration: positive(Number.MAX_SAFE_INTEGER).default(1),
|
|
46
|
+
}),
|
|
47
|
+
]).default({ mode: 'embedded-compat' }),
|
|
48
|
+
});
|
|
49
|
+
const text = (value, max = 256) => typeof value === 'string' && value.length > 0 && value.length <= max && !/[\p{Cc}]/u.test(value);
|
|
50
|
+
export function validPath(value) {
|
|
51
|
+
return text(value, 1024) && !value.includes('\\') && value.split('/').every(part => part !== '' && part !== '.' && part !== '..' && part.toLowerCase() !== '.git');
|
|
52
|
+
}
|
|
53
|
+
const identifier = (value) => text(value, 128) && /^[A-Za-z0-9][A-Za-z0-9._:-]*$/u.test(value);
|
|
54
|
+
const canonicalAbsolute = (value) => typeof value === 'string' && isAbsolute(value) && resolve(value) === value && value !== '/' && !value.includes('\0');
|
|
55
|
+
function validateExternalGrant(grant) {
|
|
56
|
+
try {
|
|
57
|
+
normalizeBrokerGrantProjection(grant);
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
throw new Error('assistant-actions: invalid external grant projection');
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
export function validateConfig(input) {
|
|
64
|
+
if (!input || typeof input !== 'object' || Array.isArray(input)
|
|
65
|
+
|| Object.keys(input).some(key => !['stateRoot', 'grants', 'externalGrants', 'broker'].includes(key)))
|
|
66
|
+
throw new Error('assistant-actions: invalid config');
|
|
67
|
+
const stateRoot = input.stateRoot ?? join(homedir(), '.dsh', 'assistant-actions');
|
|
68
|
+
if (!isAbsolute(stateRoot) || resolve(stateRoot) !== stateRoot || stateRoot === '/')
|
|
69
|
+
throw new Error('assistant-actions: canonical private state root required');
|
|
70
|
+
const grants = structuredClone(input.grants ?? []);
|
|
71
|
+
if (!Array.isArray(grants) || grants.length > 1000 || new Set(grants.map(grant => grant.id)).size !== grants.length)
|
|
72
|
+
throw new Error('assistant-actions: invalid grants');
|
|
73
|
+
for (const grant of grants) {
|
|
74
|
+
if (!grant || ![14, 15, 16, 17].includes(Object.keys(grant).length)
|
|
75
|
+
|| Object.keys(grant).some(key => !['id', 'revision', 'principalDigest', 'principalRecordId', 'principalVersion', 'workspace', 'agentPreset', 'repository', 'branch', 'paths', 'credentialHandle', 'expiresAt', 'maxActions', 'maxTotalBytes', 'repoWorkflow', 'verifiedDelivery', 'rollback'].includes(key))
|
|
76
|
+
|| grant.verifiedDelivery !== undefined && (!grant.verifiedDelivery || ![2, 3].includes(Object.keys(grant.verifiedDelivery).length) || Object.keys(grant.verifiedDelivery).some(key => !['ownerRouteId', 'budgetId', 'acceptance'].includes(key)) || grant.verifiedDelivery.acceptance !== undefined && !['goal-outcome', 'goal-step'].includes(grant.verifiedDelivery.acceptance) || !text(grant.verifiedDelivery.ownerRouteId, 200) || !text(grant.verifiedDelivery.budgetId, 200))
|
|
77
|
+
|| grant.rollback !== undefined && (!grant.rollback || Object.keys(grant.rollback).length !== 4
|
|
78
|
+
|| Object.keys(grant.rollback).some(key => !['allowRollback', 'budgetId', 'maxActions', 'maxTotalBytes'].includes(key))
|
|
79
|
+
|| grant.rollback.allowRollback !== true || !text(grant.rollback.budgetId, 200)
|
|
80
|
+
|| !Number.isSafeInteger(grant.rollback.maxActions) || grant.rollback.maxActions < 1 || grant.rollback.maxActions > 10_000
|
|
81
|
+
|| !Number.isSafeInteger(grant.rollback.maxTotalBytes) || grant.rollback.maxTotalBytes < 1 || grant.rollback.maxTotalBytes > 64 * 1024 * 1024)
|
|
82
|
+
|| !text(grant.id) || !Number.isSafeInteger(grant.revision) || grant.revision < 1
|
|
83
|
+
|| !/^[0-9a-f]{64}$/.test(grant.principalDigest) || !text(grant.principalRecordId) || !Number.isSafeInteger(grant.principalVersion) || grant.principalVersion < 1
|
|
84
|
+
|| !isAbsolute(grant.workspace) || resolve(grant.workspace) !== grant.workspace || !text(grant.agentPreset)
|
|
85
|
+
|| !/^[A-Za-z0-9][A-Za-z0-9-]*\/[A-Za-z0-9][A-Za-z0-9._-]*$/.test(grant.repository) || grant.repository.length > 256
|
|
86
|
+
|| !text(grant.branch) || !/^[A-Za-z0-9][A-Za-z0-9._/-]*$/.test(grant.branch) || grant.branch.includes('..') || grant.branch.startsWith('refs/')
|
|
87
|
+
|| grant.branch.split('/').some(part => !part || part.startsWith('.') || part.endsWith('.') || part.endsWith('.lock'))
|
|
88
|
+
|| !Array.isArray(grant.paths) || grant.paths.length < 1 || grant.paths.length > 128 || !grant.paths.every(validPath) || new Set(grant.paths).size !== grant.paths.length
|
|
89
|
+
|| !text(grant.credentialHandle) || !Number.isSafeInteger(grant.expiresAt) || grant.expiresAt < 1
|
|
90
|
+
|| !Number.isSafeInteger(grant.maxActions) || grant.maxActions < 1 || grant.maxActions > 10_000
|
|
91
|
+
|| !Number.isSafeInteger(grant.maxTotalBytes) || grant.maxTotalBytes < 1 || grant.maxTotalBytes > 64 * 1024 * 1024
|
|
92
|
+
|| (grant.repoWorkflow !== undefined && (!grant.repoWorkflow || Object.keys(grant.repoWorkflow).length !== 3 || !text(grant.repoWorkflow.baseBranch)
|
|
93
|
+
|| !/^[A-Za-z0-9][A-Za-z0-9._/-]*$/.test(grant.repoWorkflow.baseBranch) || grant.repoWorkflow.baseBranch.includes('..') || grant.repoWorkflow.baseBranch.startsWith('refs/')
|
|
94
|
+
|| grant.repoWorkflow.baseBranch === grant.branch || grant.repoWorkflow.baseBranch.split('/').some(part => !part || part.startsWith('.') || part.endsWith('.') || part.endsWith('.lock'))
|
|
95
|
+
|| typeof grant.repoWorkflow.allowBranchCreate !== 'boolean' || typeof grant.repoWorkflow.allowPullRequest !== 'boolean')))
|
|
96
|
+
throw new Error('assistant-actions: invalid grant');
|
|
97
|
+
}
|
|
98
|
+
const rawBroker = input.broker === undefined ? { mode: 'embedded-compat' } : structuredClone(input.broker);
|
|
99
|
+
const externalGrants = structuredClone(input.externalGrants ?? []);
|
|
100
|
+
if (!rawBroker || typeof rawBroker !== 'object' || Array.isArray(rawBroker) || !('mode' in rawBroker))
|
|
101
|
+
throw new Error('assistant-actions: invalid broker config');
|
|
102
|
+
if (rawBroker.mode === 'embedded-compat') {
|
|
103
|
+
if (Object.keys(rawBroker).length !== 1 || externalGrants.length !== 0)
|
|
104
|
+
throw new Error('assistant-actions: external grants require external broker mode');
|
|
105
|
+
return { stateRoot, grants, externalGrants: [], broker: rawBroker };
|
|
106
|
+
}
|
|
107
|
+
if (rawBroker.mode !== 'external-unix-v1'
|
|
108
|
+
|| Object.keys(rawBroker).some(key => !['mode', 'actionSocketPath', 'brokerId', 'brokerPublicKeyPath', 'clientKeyId', 'clientSigningKeyPath', 'clientInstanceId', 'clientGeneration', 'requestTimeoutMs', 'helloTtlMs', 'expectedSocketUid', 'expectedSocketGid', 'expectedSocketMode', 'expectedSocketParentUid', 'expectedSocketParentGid', 'expectedSocketParentMode', 'expectedBrokerPeerUid', 'expectedBrokerPeerGid', 'minimumBrokerGeneration'].includes(key)))
|
|
109
|
+
throw new Error('assistant-actions: invalid external broker config');
|
|
110
|
+
const broker = { ...rawBroker, requestTimeoutMs: rawBroker.requestTimeoutMs ?? 30_000, helloTtlMs: rawBroker.helloTtlMs ?? 30_000, expectedSocketMode: rawBroker.expectedSocketMode ?? 0o600,
|
|
111
|
+
expectedSocketParentUid: rawBroker.expectedSocketParentUid ?? rawBroker.expectedSocketUid, expectedSocketParentGid: rawBroker.expectedSocketParentGid ?? rawBroker.expectedSocketGid, expectedSocketParentMode: rawBroker.expectedSocketParentMode ?? 0o700, minimumBrokerGeneration: rawBroker.minimumBrokerGeneration ?? 1 };
|
|
112
|
+
if (grants.length !== 0 || !Array.isArray(externalGrants) || externalGrants.length > 1000 || new Set(externalGrants.map(grant => grant.id)).size !== externalGrants.length
|
|
113
|
+
|| !canonicalAbsolute(broker.actionSocketPath) || Buffer.byteLength(broker.actionSocketPath) > 100 || !identifier(broker.brokerId)
|
|
114
|
+
|| !canonicalAbsolute(broker.brokerPublicKeyPath) || !canonicalAbsolute(broker.clientSigningKeyPath) || broker.brokerPublicKeyPath === broker.clientSigningKeyPath
|
|
115
|
+
|| !identifier(broker.clientKeyId) || !identifier(broker.clientInstanceId) || !Number.isSafeInteger(broker.clientGeneration) || broker.clientGeneration < 1
|
|
116
|
+
|| !Number.isSafeInteger(broker.requestTimeoutMs) || broker.requestTimeoutMs < 1 || broker.requestTimeoutMs > 300_000
|
|
117
|
+
|| !Number.isSafeInteger(broker.helloTtlMs) || broker.helloTtlMs < 1 || broker.helloTtlMs > 300_000
|
|
118
|
+
|| !Number.isSafeInteger(broker.expectedSocketUid) || broker.expectedSocketUid < 0 || broker.expectedSocketUid > 0x7fffffff
|
|
119
|
+
|| !Number.isSafeInteger(broker.expectedSocketGid) || broker.expectedSocketGid < 0 || broker.expectedSocketGid > 0x7fffffff
|
|
120
|
+
|| !Number.isSafeInteger(broker.expectedSocketMode) || broker.expectedSocketMode < 0 || broker.expectedSocketMode > 0o777
|
|
121
|
+
|| !Number.isSafeInteger(broker.expectedSocketParentUid) || broker.expectedSocketParentUid < 0 || broker.expectedSocketParentUid > 0x7fffffff
|
|
122
|
+
|| !Number.isSafeInteger(broker.expectedSocketParentGid) || broker.expectedSocketParentGid < 0 || broker.expectedSocketParentGid > 0x7fffffff
|
|
123
|
+
|| !Number.isSafeInteger(broker.expectedSocketParentMode) || broker.expectedSocketParentMode < 0 || broker.expectedSocketParentMode > 0o777
|
|
124
|
+
|| !Number.isSafeInteger(broker.expectedBrokerPeerUid) || broker.expectedBrokerPeerUid < 0 || broker.expectedBrokerPeerUid > 0x7fffffff
|
|
125
|
+
|| !Number.isSafeInteger(broker.expectedBrokerPeerGid) || broker.expectedBrokerPeerGid < 0 || broker.expectedBrokerPeerGid > 0x7fffffff
|
|
126
|
+
|| !Number.isSafeInteger(broker.minimumBrokerGeneration) || broker.minimumBrokerGeneration < 1)
|
|
127
|
+
throw new Error('assistant-actions: invalid external broker config');
|
|
128
|
+
const normalizedExternalGrants = externalGrants.map(grant => { validateExternalGrant(grant); return normalizeBrokerGrantProjection(grant); });
|
|
129
|
+
return { stateRoot, grants: [], externalGrants: normalizedExternalGrants, broker };
|
|
130
|
+
}
|
|
131
|
+
export function normalizeCommit(value) {
|
|
132
|
+
if (!value || Object.keys(value).length !== 5 || !text(value.grantId) || !text(value.idempotencyKey)
|
|
133
|
+
|| !/^[0-9a-f]{40}$/.test(value.expectedHeadOid) || !text(value.headline, 200)
|
|
134
|
+
|| !Array.isArray(value.files) || value.files.length < 1 || value.files.length > 32
|
|
135
|
+
|| !value.files.every(file => file && Object.keys(file).length === 2 && validPath(file.path) && typeof file.content === 'string'
|
|
136
|
+
&& Buffer.byteLength(file.content) <= 1_048_576 && Buffer.from(file.content).toString('utf8') === file.content)
|
|
137
|
+
|| new Set(value.files.map(file => file.path)).size !== value.files.length || commitBytes(value) > 1_048_576)
|
|
138
|
+
throw new Error('assistant-actions: invalid commit request');
|
|
139
|
+
return structuredClone(value);
|
|
140
|
+
}
|
|
141
|
+
export const commitBytes = (request) => Buffer.byteLength(request.headline) + request.files.reduce((sum, file) => sum + Buffer.byteLength(file.path) + Buffer.byteLength(file.content), 0);
|
|
142
|
+
export function normalizeCompensation(value) {
|
|
143
|
+
if (!value || typeof value !== 'object' || Array.isArray(value)
|
|
144
|
+
|| Object.keys(value).length !== 6
|
|
145
|
+
|| Object.keys(value).some(key => !['grantId', 'idempotencyKey', 'forwardActionId', 'forwardActionVersion', 'forwardRequestDigest', 'forwardCommitOid'].includes(key))
|
|
146
|
+
|| !text(value.grantId) || !text(value.idempotencyKey) || !text(value.forwardActionId)
|
|
147
|
+
|| !Number.isSafeInteger(value.forwardActionVersion) || value.forwardActionVersion < 1
|
|
148
|
+
|| !/^[0-9a-f]{64}$/.test(value.forwardRequestDigest)
|
|
149
|
+
|| !/^[0-9a-f]{40,128}$/.test(value.forwardCommitOid))
|
|
150
|
+
throw new Error('assistant-actions: invalid compensation request');
|
|
151
|
+
return structuredClone(value);
|
|
152
|
+
}
|
|
153
|
+
export function normalizeVerifiedDelivery(input) {
|
|
154
|
+
if (!input || typeof input !== 'object' || Array.isArray(input)
|
|
155
|
+
|| Object.keys(input).some(key => !['grantId', 'idempotencyKey', 'expectedHeadOid', 'headline', 'paths', 'pullRequest'].includes(key))
|
|
156
|
+
|| !Array.isArray(input.paths) || input.paths.length < 1 || input.paths.length > 32 || !input.paths.every(validPath)
|
|
157
|
+
|| new Set(input.paths).size !== input.paths.length)
|
|
158
|
+
throw new Error('assistant-actions: invalid verified delivery');
|
|
159
|
+
normalizeCommit({ grantId: input.grantId, idempotencyKey: input.idempotencyKey, expectedHeadOid: input.expectedHeadOid, headline: input.headline, files: input.paths.map(path => ({ path, content: '' })) });
|
|
160
|
+
if (input.pullRequest !== undefined && (!input.pullRequest || Object.keys(input.pullRequest).length !== 2
|
|
161
|
+
|| !text(input.pullRequest.title, 200) || typeof input.pullRequest.body !== 'string' || Buffer.byteLength(input.pullRequest.body) > 65536))
|
|
162
|
+
throw new Error('assistant-actions: invalid verified pull request');
|
|
163
|
+
return structuredClone(input);
|
|
164
|
+
}
|
|
165
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { GitHubBrokerClientOptions } from './broker-client.js';
|
|
2
|
+
import { type BrokerClientRequest, type BrokerOperationPayload, type BrokerRequestIntent, type BrokerServerHello, type BrokerServerResponse } from './broker-protocol.js';
|
|
3
|
+
/** Signed history without artifact bytes; reconstruct payload from current accepted artifacts. */
|
|
4
|
+
export interface ExternalDeliveryReceipt {
|
|
5
|
+
hello: BrokerServerHello;
|
|
6
|
+
request: Omit<BrokerClientRequest, 'payload'>;
|
|
7
|
+
response: BrokerServerResponse;
|
|
8
|
+
}
|
|
9
|
+
export declare function captureExternalDeliveryReceipt(hello: BrokerServerHello, request: BrokerClientRequest, response: BrokerServerResponse): ExternalDeliveryReceipt;
|
|
10
|
+
export declare function verifyExternalDeliveryReceipt(receipt: ExternalDeliveryReceipt, payload: BrokerOperationPayload, expected: Pick<BrokerRequestIntent, 'actionId' | 'grantId' | 'grantRevision' | 'grantDigest' | 'owner' | 'sessionId' | 'operation' | 'source' | 'destination'>, client: GitHubBrokerClientOptions): BrokerServerResponse;
|
|
11
|
+
//# sourceMappingURL=external-delivery-receipt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"external-delivery-receipt.d.ts","sourceRoot":"","sources":["../src/external-delivery-receipt.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAA;AACnE,OAAO,EAEL,KAAK,mBAAmB,EAAE,KAAK,sBAAsB,EAAE,KAAK,mBAAmB,EAAE,KAAK,iBAAiB,EAAE,KAAK,oBAAoB,EACnI,MAAM,sBAAsB,CAAA;AAE7B,kGAAkG;AAClG,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,iBAAiB,CAAA;IACxB,OAAO,EAAE,IAAI,CAAC,mBAAmB,EAAE,SAAS,CAAC,CAAA;IAC7C,QAAQ,EAAE,oBAAoB,CAAA;CAC/B;AAED,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,iBAAiB,EAAE,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,oBAAoB,GAAG,uBAAuB,CAG9J;AAED,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,uBAAuB,EAAE,OAAO,EAAE,sBAAsB,EAC7G,QAAQ,EAAE,IAAI,CAAC,mBAAmB,EAAE,UAAU,GAAG,SAAS,GAAG,eAAe,GAAG,aAAa,GAAG,OAAO,GAAG,WAAW,GAAG,WAAW,GAAG,QAAQ,GAAG,aAAa,CAAC,EAC9J,MAAM,EAAE,yBAAyB,GAAG,oBAAoB,CAezD"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { createPublicKey } from 'node:crypto';
|
|
2
|
+
import { brokerDigest, verifyBrokerClientRequest, verifyBrokerServerHello, verifyBrokerServerResponse, } from './broker-protocol.js';
|
|
3
|
+
export function captureExternalDeliveryReceipt(hello, request, response) {
|
|
4
|
+
const { payload: _payload, ...header } = request;
|
|
5
|
+
return structuredClone({ hello, request: header, response });
|
|
6
|
+
}
|
|
7
|
+
export function verifyExternalDeliveryReceipt(receipt, payload, expected, client) {
|
|
8
|
+
// This verifies historical signatures, not present authority or remote freshness.
|
|
9
|
+
// The caller independently revalidates owner/goal/grant and performs fresh reads.
|
|
10
|
+
const historicalTime = Math.min(receipt.hello.expiresAt, receipt.request.deadline) - 1;
|
|
11
|
+
const hello = verifyBrokerServerHello(receipt.hello, client.serverPublicKey, { now: historicalTime });
|
|
12
|
+
const request = verifyBrokerClientRequest({ ...receipt.request, payload }, hello, createPublicKey(client.clientPrivateKey), { now: historicalTime, expectedClientKeyId: client.clientKeyId });
|
|
13
|
+
for (const key of Object.keys(expected)) {
|
|
14
|
+
if (brokerDigest(request[key]) !== brokerDigest(expected[key]))
|
|
15
|
+
throw new Error('assistant-actions: external delivery receipt scope mismatch');
|
|
16
|
+
}
|
|
17
|
+
if (request.client.instanceId !== client.source.instanceId || request.client.kind !== client.source.kind
|
|
18
|
+
|| hello.instanceId !== client.expectedServerInstanceId)
|
|
19
|
+
throw new Error('assistant-actions: external delivery receipt identity mismatch');
|
|
20
|
+
const response = verifyBrokerServerResponse(receipt.response, request, hello, client.serverPublicKey);
|
|
21
|
+
if (response.status !== 'succeeded')
|
|
22
|
+
throw new Error('assistant-actions: external delivery receipt is not successful');
|
|
23
|
+
return response;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=external-delivery-receipt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"external-delivery-receipt.js","sourceRoot":"","sources":["../src/external-delivery-receipt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAE7C,OAAO,EACL,YAAY,EAAE,yBAAyB,EAAE,uBAAuB,EAAE,0BAA0B,GAE7F,MAAM,sBAAsB,CAAA;AAS7B,MAAM,UAAU,8BAA8B,CAAC,KAAwB,EAAE,OAA4B,EAAE,QAA8B;IACnI,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,MAAM,EAAE,GAAG,OAAO,CAAA;IAChD,OAAO,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAA;AAC9D,CAAC;AAED,MAAM,UAAU,6BAA6B,CAAC,OAAgC,EAAE,OAA+B,EAC7G,QAA8J,EAC9J,MAAiC;IACjC,kFAAkF;IAClF,kFAAkF;IAClF,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;IACtF,MAAM,KAAK,GAAG,uBAAuB,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,eAAe,EAAE,EAAE,GAAG,EAAE,cAAc,EAAE,CAAC,CAAA;IACrG,MAAM,OAAO,GAAG,yBAAyB,CAAC,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,eAAe,CAAC,MAAM,CAAC,gBAAgB,CAAC,EACxH,EAAE,GAAG,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC,CAAA;IACnE,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAA8B,EAAE,CAAC;QACrE,IAAI,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAA;IAChJ,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,CAAC,UAAU,KAAK,MAAM,CAAC,MAAM,CAAC,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI;WACnG,KAAK,CAAC,UAAU,KAAK,MAAM,CAAC,wBAAwB;QAAE,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAA;IAC5I,MAAM,QAAQ,GAAG,0BAA0B,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,eAAe,CAAC,CAAA;IACrG,IAAI,QAAQ,CAAC,MAAM,KAAK,WAAW;QAAE,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAA;IACtH,OAAO,QAAQ,CAAA;AACjB,CAAC"}
|
package/lib/github.d.ts
ADDED
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { request as httpsRequest } from 'node:https';
|
|
2
|
+
import type { ActionGrant, ActionResult, CommitRequest, CompensationPreimage, CompensationPreimageFile, CompensationResult } from './types.js';
|
|
3
|
+
export interface GitHubCommitInput {
|
|
4
|
+
actionId: string;
|
|
5
|
+
grant: ActionGrant;
|
|
6
|
+
request: CommitRequest;
|
|
7
|
+
token: string;
|
|
8
|
+
signal: AbortSignal;
|
|
9
|
+
}
|
|
10
|
+
export type GitHubFilePreimage = CompensationPreimageFile;
|
|
11
|
+
export type GitHubPreimageSnapshot = CompensationPreimage;
|
|
12
|
+
export interface GitHubPreimageInput {
|
|
13
|
+
grant: ActionGrant;
|
|
14
|
+
commitOid: string;
|
|
15
|
+
paths: readonly string[];
|
|
16
|
+
token: string;
|
|
17
|
+
signal: AbortSignal;
|
|
18
|
+
}
|
|
19
|
+
export interface GitHubBranchHead {
|
|
20
|
+
repository: string;
|
|
21
|
+
branch: string;
|
|
22
|
+
headOid: string;
|
|
23
|
+
}
|
|
24
|
+
export interface GitHubCompensationInput {
|
|
25
|
+
actionId: string;
|
|
26
|
+
grant: ActionGrant;
|
|
27
|
+
forwardCommitOid: string;
|
|
28
|
+
preimage: GitHubPreimageSnapshot;
|
|
29
|
+
token: string;
|
|
30
|
+
signal: AbortSignal;
|
|
31
|
+
}
|
|
32
|
+
export type GitHubCompensationResult = CompensationResult;
|
|
33
|
+
export interface GitHubCompensationTransports {
|
|
34
|
+
graphql?: typeof httpsRequest;
|
|
35
|
+
rest?: typeof httpsRequest;
|
|
36
|
+
}
|
|
37
|
+
export type { CompensationPreimage, CompensationPreimageFile, CompensationResult } from './types.js';
|
|
38
|
+
type GitHubTransport = typeof httpsRequest;
|
|
39
|
+
/** Commit exactly the approved files through GitHub's atomic expected-head mutation. */
|
|
40
|
+
export declare function commitOnGitHub(input: GitHubCommitInput, transport?: GitHubTransport): Promise<ActionResult>;
|
|
41
|
+
type RestTransport = typeof httpsRequest;
|
|
42
|
+
/** Read exact allowed file states at one immutable Git commit without following redirects. */
|
|
43
|
+
export declare function readGitHubPreimage(input: GitHubPreimageInput, transport?: RestTransport): Promise<GitHubPreimageSnapshot | undefined>;
|
|
44
|
+
/** Inspect only the grant-fixed branch head and bind the observation to its scope. */
|
|
45
|
+
export declare function inspectGitHubBranchHead(input: {
|
|
46
|
+
grant: ActionGrant;
|
|
47
|
+
token: string;
|
|
48
|
+
signal: AbortSignal;
|
|
49
|
+
}, transport?: RestTransport): Promise<GitHubBranchHead | undefined>;
|
|
50
|
+
/** Restore a captured preimage through an expected-head commit; never force-pushes. */
|
|
51
|
+
export declare function createCompensatingCommitOnGitHub(input: GitHubCompensationInput, transports?: GitHubCompensationTransports): Promise<GitHubCompensationResult>;
|
|
52
|
+
export declare function createBranchOnGitHub(input: {
|
|
53
|
+
actionId: string;
|
|
54
|
+
grant: ActionGrant;
|
|
55
|
+
baseHeadOid: string;
|
|
56
|
+
token: string;
|
|
57
|
+
signal: AbortSignal;
|
|
58
|
+
}, transport?: RestTransport): Promise<ActionResult>;
|
|
59
|
+
export declare function createPullRequestOnGitHub(input: {
|
|
60
|
+
actionId: string;
|
|
61
|
+
grant: ActionGrant;
|
|
62
|
+
expectedHeadOid: string;
|
|
63
|
+
title: string;
|
|
64
|
+
body: string;
|
|
65
|
+
token: string;
|
|
66
|
+
signal: AbortSignal;
|
|
67
|
+
}, transport?: RestTransport): Promise<ActionResult>;
|
|
68
|
+
export declare function inspectGitHub(input: {
|
|
69
|
+
grant: ActionGrant;
|
|
70
|
+
kind: 'repository' | 'branch' | 'file' | 'pull-request' | 'checks' | 'reviews';
|
|
71
|
+
path?: string;
|
|
72
|
+
pullRequestNumber?: number;
|
|
73
|
+
token: string;
|
|
74
|
+
signal: AbortSignal;
|
|
75
|
+
}, transport?: RestTransport): Promise<{
|
|
76
|
+
observed: Record<string, unknown>;
|
|
77
|
+
} | undefined>;
|
|
78
|
+
//# sourceMappingURL=github.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github.d.ts","sourceRoot":"","sources":["../src/github.ts"],"names":[],"mappings":"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"}
|