@agent-link/agent 0.1.282 → 0.1.284

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.
@@ -1,40 +0,0 @@
1
- import { resolve } from 'path';
2
- import { loadLaunchSpec } from './launch-spec.js';
3
- export function parseDaemonLaunchArgs(args) {
4
- if (args[0] === '--launch-spec') {
5
- if (!args[1])
6
- throw new Error('missing LaunchSpec path');
7
- const launchSpec = loadLaunchSpec(resolve(args[1]));
8
- if (launchSpec.mode !== 'daemon') {
9
- throw new Error(`LaunchSpec mode must be daemon, received ${launchSpec.mode}`);
10
- }
11
- return {
12
- config: launchSpec.config,
13
- ephemeral: launchSpec.runtime.ephemeral,
14
- resolvedExecPaths: launchSpec.runtime.resolvedExecPaths,
15
- launchSpec,
16
- };
17
- }
18
- if (!args[0])
19
- throw new Error('missing config argument');
20
- let parsed;
21
- try {
22
- parsed = JSON.parse(args[0]);
23
- }
24
- catch {
25
- throw new Error('invalid config JSON');
26
- }
27
- if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {
28
- throw new Error('invalid config JSON');
29
- }
30
- const legacy = { ...parsed };
31
- const ephemeral = legacy.ephemeral === true;
32
- delete legacy.ephemeral;
33
- return {
34
- config: legacy,
35
- ephemeral,
36
- resolvedExecPaths: {},
37
- launchSpec: null,
38
- };
39
- }
40
- //# sourceMappingURL=daemon-launch.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"daemon-launch.js","sourceRoot":"","sources":["../src/daemon-launch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAG/B,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAUlD,MAAM,UAAU,qBAAqB,CAAC,IAAc;IAClD,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,eAAe,EAAE,CAAC;QAChC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QACzD,MAAM,UAAU,GAAG,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACpD,IAAI,UAAU,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,4CAA4C,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;QACjF,CAAC;QACD,OAAO;YACL,MAAM,EAAE,UAAU,CAAC,MAAM;YACzB,SAAS,EAAE,UAAU,CAAC,OAAO,CAAC,SAAS;YACvC,iBAAiB,EAAE,UAAU,CAAC,OAAO,CAAC,iBAAiB;YACvD,UAAU;SACX,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IACzD,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;IACzC,CAAC;IACD,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACnE,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;IACzC,CAAC;IAED,MAAM,MAAM,GAAG,EAAE,GAAI,MAAgD,EAAE,CAAC;IACxE,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,KAAK,IAAI,CAAC;IAC5C,OAAO,MAAM,CAAC,SAAS,CAAC;IACxB,OAAO;QACL,MAAM,EAAE,MAAM;QACd,SAAS;QACT,iBAAiB,EAAE,EAAE;QACrB,UAAU,EAAE,IAAI;KACjB,CAAC;AACJ,CAAC"}
@@ -1,51 +0,0 @@
1
- import type { BackendType } from './backends/types.js';
2
- import type { AgentConfig } from './config.js';
3
- import type { ResolvedExecPaths } from './sdk.js';
4
- export declare const LAUNCH_SPEC_SCHEMA_VERSION = 1;
5
- export declare const DEFAULT_NODE_ARGS: readonly ["--max-old-space-size=4096"];
6
- export type LaunchMode = 'foreground' | 'daemon';
7
- export type LaunchHostType = 'standalone' | 'systemd' | 'launchd' | 'windows-startup' | 'winsw';
8
- export interface LaunchSpecConfig {
9
- server: string;
10
- dir: string;
11
- name: string;
12
- password?: string;
13
- entra: boolean;
14
- msentra: boolean;
15
- entraClientId?: string;
16
- entraTenantId?: string;
17
- agent: BackendType;
18
- msInternal: boolean;
19
- }
20
- export interface LaunchSpec {
21
- schemaVersion: 1;
22
- createdAt: string;
23
- mode: LaunchMode;
24
- host: {
25
- type: LaunchHostType;
26
- };
27
- config: LaunchSpecConfig;
28
- runtime: {
29
- ephemeral: boolean;
30
- pidFile: string | null;
31
- nodeArgs: string[];
32
- resolvedExecPaths: ResolvedExecPaths;
33
- };
34
- }
35
- export interface LaunchSpecContext {
36
- mode: LaunchMode;
37
- ephemeral?: boolean;
38
- pidFile?: string | null;
39
- hostType?: LaunchHostType;
40
- nodeArgs?: readonly string[];
41
- resolvedExecPaths?: ResolvedExecPaths;
42
- createdAt?: string;
43
- }
44
- export declare function getLaunchSpecPath(): string;
45
- export declare function getLaunchSpecSnapshotPath(): string;
46
- export declare function detectLaunchHostType(): LaunchHostType;
47
- export declare function createLaunchSpec(config: AgentConfig, context: LaunchSpecContext): LaunchSpec;
48
- export declare function validateLaunchSpec(value: unknown): LaunchSpec;
49
- export declare function saveLaunchSpec(spec: LaunchSpec, filePath?: string): string;
50
- export declare function saveLaunchSpecSnapshot(spec: LaunchSpec): string;
51
- export declare function loadLaunchSpec(filePath?: string): LaunchSpec;
@@ -1,197 +0,0 @@
1
- import { chmodSync, closeSync, existsSync, fsyncSync, mkdirSync, openSync, readFileSync, renameSync, rmSync, writeFileSync, } from 'fs';
2
- import { randomUUID } from 'crypto';
3
- import { dirname, isAbsolute, join, resolve } from 'path';
4
- import { KNOWN_BACKEND_TYPES } from './backends/types.js';
5
- import { CONFIG_DIR } from './config.js';
6
- export const LAUNCH_SPEC_SCHEMA_VERSION = 1;
7
- export const DEFAULT_NODE_ARGS = ['--max-old-space-size=4096'];
8
- const HOST_TYPES = [
9
- 'standalone',
10
- 'systemd',
11
- 'launchd',
12
- 'windows-startup',
13
- 'winsw',
14
- ];
15
- function requireObject(value, field) {
16
- if (!value || typeof value !== 'object' || Array.isArray(value)) {
17
- throw new Error(`Invalid LaunchSpec: ${field} must be an object`);
18
- }
19
- return value;
20
- }
21
- function requireString(value, field) {
22
- if (typeof value !== 'string' || value.length === 0) {
23
- throw new Error(`Invalid LaunchSpec: ${field} must be a non-empty string`);
24
- }
25
- return value;
26
- }
27
- function requireOptionalString(value, field) {
28
- if (value !== undefined && typeof value !== 'string') {
29
- throw new Error(`Invalid LaunchSpec: ${field} must be a string when present`);
30
- }
31
- }
32
- function requireBoolean(value, field) {
33
- if (typeof value !== 'boolean') {
34
- throw new Error(`Invalid LaunchSpec: ${field} must be a boolean`);
35
- }
36
- return value;
37
- }
38
- export function getLaunchSpecPath() {
39
- return join(CONFIG_DIR, 'launch.json');
40
- }
41
- export function getLaunchSpecSnapshotPath() {
42
- return join(CONFIG_DIR, 'launches', `${Date.now()}-${process.pid}-${randomUUID()}.json`);
43
- }
44
- export function detectLaunchHostType() {
45
- const requested = process.env.AGENTLINK_HOST_TYPE;
46
- if (requested && HOST_TYPES.includes(requested)) {
47
- return requested;
48
- }
49
- return 'standalone';
50
- }
51
- export function createLaunchSpec(config, context) {
52
- const createdAt = context.createdAt ?? new Date().toISOString();
53
- const agent = config.agent ?? 'claude';
54
- if (!KNOWN_BACKEND_TYPES.includes(agent)) {
55
- throw new Error(`Invalid LaunchSpec: config.agent is not supported: ${agent}`);
56
- }
57
- return {
58
- schemaVersion: LAUNCH_SPEC_SCHEMA_VERSION,
59
- createdAt,
60
- mode: context.mode,
61
- host: {
62
- type: context.hostType ?? detectLaunchHostType(),
63
- },
64
- config: {
65
- server: config.server,
66
- dir: resolve(config.dir),
67
- name: config.name,
68
- password: config.password,
69
- entra: config.entra === true,
70
- msentra: config.msentra === true,
71
- entraClientId: config.entraClientId,
72
- entraTenantId: config.entraTenantId,
73
- agent,
74
- msInternal: config.msInternal === true,
75
- },
76
- runtime: {
77
- ephemeral: context.ephemeral === true,
78
- pidFile: context.pidFile ? resolve(context.pidFile) : null,
79
- nodeArgs: [...(context.nodeArgs ?? DEFAULT_NODE_ARGS)],
80
- resolvedExecPaths: { ...(context.resolvedExecPaths ?? {}) },
81
- },
82
- };
83
- }
84
- export function validateLaunchSpec(value) {
85
- const root = requireObject(value, 'root');
86
- if (root.schemaVersion !== LAUNCH_SPEC_SCHEMA_VERSION) {
87
- throw new Error('Invalid LaunchSpec: unsupported schemaVersion');
88
- }
89
- const createdAt = requireString(root.createdAt, 'createdAt');
90
- if (!Number.isFinite(Date.parse(createdAt))) {
91
- throw new Error('Invalid LaunchSpec: createdAt must be an ISO timestamp');
92
- }
93
- if (root.mode !== 'foreground' && root.mode !== 'daemon') {
94
- throw new Error('Invalid LaunchSpec: mode must be foreground or daemon');
95
- }
96
- const host = requireObject(root.host, 'host');
97
- const hostType = requireString(host.type, 'host.type');
98
- if (!HOST_TYPES.includes(hostType)) {
99
- throw new Error(`Invalid LaunchSpec: unsupported host.type: ${hostType}`);
100
- }
101
- const config = requireObject(root.config, 'config');
102
- requireString(config.server, 'config.server');
103
- const workDir = requireString(config.dir, 'config.dir');
104
- if (!isAbsolute(workDir)) {
105
- throw new Error('Invalid LaunchSpec: config.dir must be absolute');
106
- }
107
- requireString(config.name, 'config.name');
108
- requireOptionalString(config.password, 'config.password');
109
- requireBoolean(config.entra, 'config.entra');
110
- requireBoolean(config.msentra, 'config.msentra');
111
- requireOptionalString(config.entraClientId, 'config.entraClientId');
112
- requireOptionalString(config.entraTenantId, 'config.entraTenantId');
113
- const agent = requireString(config.agent, 'config.agent');
114
- if (!KNOWN_BACKEND_TYPES.includes(agent)) {
115
- throw new Error(`Invalid LaunchSpec: unsupported config.agent: ${agent}`);
116
- }
117
- requireBoolean(config.msInternal, 'config.msInternal');
118
- const runtime = requireObject(root.runtime, 'runtime');
119
- requireBoolean(runtime.ephemeral, 'runtime.ephemeral');
120
- if (runtime.pidFile !== null) {
121
- const pidFile = requireString(runtime.pidFile, 'runtime.pidFile');
122
- if (!isAbsolute(pidFile)) {
123
- throw new Error('Invalid LaunchSpec: runtime.pidFile must be absolute');
124
- }
125
- }
126
- if (!Array.isArray(runtime.nodeArgs) || runtime.nodeArgs.some(arg => typeof arg !== 'string')) {
127
- throw new Error('Invalid LaunchSpec: runtime.nodeArgs must be an array of strings');
128
- }
129
- const execPaths = requireObject(runtime.resolvedExecPaths, 'runtime.resolvedExecPaths');
130
- for (const [name, executablePath] of Object.entries(execPaths)) {
131
- if (typeof executablePath !== 'string' || executablePath.length === 0) {
132
- throw new Error(`Invalid LaunchSpec: runtime.resolvedExecPaths.${name} must be a non-empty string`);
133
- }
134
- }
135
- return value;
136
- }
137
- function sleepSync(milliseconds) {
138
- const buffer = new SharedArrayBuffer(4);
139
- Atomics.wait(new Int32Array(buffer), 0, 0, milliseconds);
140
- }
141
- function replaceAtomically(tempPath, targetPath) {
142
- let lastError;
143
- for (let attempt = 0; attempt < 5; attempt++) {
144
- try {
145
- renameSync(tempPath, targetPath);
146
- return;
147
- }
148
- catch (error) {
149
- lastError = error;
150
- const code = error.code;
151
- if (!['EACCES', 'EBUSY', 'EPERM'].includes(code ?? '') || attempt === 4)
152
- break;
153
- sleepSync(20 * (attempt + 1));
154
- }
155
- }
156
- throw lastError;
157
- }
158
- export function saveLaunchSpec(spec, filePath = getLaunchSpecPath()) {
159
- validateLaunchSpec(spec);
160
- mkdirSync(dirname(filePath), { recursive: true });
161
- const tempPath = `${filePath}.${process.pid}.${randomUUID()}.tmp`;
162
- const fd = openSync(tempPath, 'wx', 0o600);
163
- try {
164
- writeFileSync(fd, `${JSON.stringify(spec, null, 2)}\n`, 'utf8');
165
- fsyncSync(fd);
166
- }
167
- finally {
168
- closeSync(fd);
169
- }
170
- try {
171
- replaceAtomically(tempPath, filePath);
172
- if (process.platform !== 'win32')
173
- chmodSync(filePath, 0o600);
174
- return filePath;
175
- }
176
- catch (error) {
177
- rmSync(tempPath, { force: true });
178
- throw error;
179
- }
180
- }
181
- export function saveLaunchSpecSnapshot(spec) {
182
- return saveLaunchSpec(spec, getLaunchSpecSnapshotPath());
183
- }
184
- export function loadLaunchSpec(filePath = getLaunchSpecPath()) {
185
- if (!existsSync(filePath)) {
186
- throw new Error(`LaunchSpec not found: ${filePath}`);
187
- }
188
- let value;
189
- try {
190
- value = JSON.parse(readFileSync(filePath, 'utf8'));
191
- }
192
- catch (error) {
193
- throw new Error(`Invalid LaunchSpec file: ${error.message}`);
194
- }
195
- return validateLaunchSpec(value);
196
- }
197
- //# sourceMappingURL=launch-spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"launch-spec.js","sourceRoot":"","sources":["../src/launch-spec.ts"],"names":[],"mappings":"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"}