@a5c-ai/hooks-mux-cli 5.0.1-staging.05ee168a
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/README.md +27 -0
- package/dist/cli/adapter-loader.d.ts +41 -0
- package/dist/cli/adapter-loader.d.ts.map +1 -0
- package/dist/cli/adapter-loader.js +151 -0
- package/dist/cli/adapter-loader.js.map +1 -0
- package/dist/cli/bootstrap-runtime.d.ts +18 -0
- package/dist/cli/bootstrap-runtime.d.ts.map +1 -0
- package/dist/cli/bootstrap-runtime.js +108 -0
- package/dist/cli/bootstrap-runtime.js.map +1 -0
- package/dist/cli/commands/bootstrap.d.ts +18 -0
- package/dist/cli/commands/bootstrap.d.ts.map +1 -0
- package/dist/cli/commands/bootstrap.js +89 -0
- package/dist/cli/commands/bootstrap.js.map +1 -0
- package/dist/cli/commands/clear-session.d.ts +13 -0
- package/dist/cli/commands/clear-session.d.ts.map +1 -0
- package/dist/cli/commands/clear-session.js +34 -0
- package/dist/cli/commands/clear-session.js.map +1 -0
- package/dist/cli/commands/doctor.d.ts +16 -0
- package/dist/cli/commands/doctor.d.ts.map +1 -0
- package/dist/cli/commands/doctor.js +333 -0
- package/dist/cli/commands/doctor.js.map +1 -0
- package/dist/cli/commands/exec.d.ts +18 -0
- package/dist/cli/commands/exec.d.ts.map +1 -0
- package/dist/cli/commands/exec.js +104 -0
- package/dist/cli/commands/exec.js.map +1 -0
- package/dist/cli/commands/invoke.d.ts +27 -0
- package/dist/cli/commands/invoke.d.ts.map +1 -0
- package/dist/cli/commands/invoke.js +281 -0
- package/dist/cli/commands/invoke.js.map +1 -0
- package/dist/cli/commands/show-session.d.ts +13 -0
- package/dist/cli/commands/show-session.d.ts.map +1 -0
- package/dist/cli/commands/show-session.js +53 -0
- package/dist/cli/commands/show-session.js.map +1 -0
- package/dist/cli/hooks-logger.d.ts +12 -0
- package/dist/cli/hooks-logger.d.ts.map +1 -0
- package/dist/cli/hooks-logger.js +115 -0
- package/dist/cli/hooks-logger.js.map +1 -0
- package/dist/cli/main.d.ts +3 -0
- package/dist/cli/main.d.ts.map +1 -0
- package/dist/cli/main.js +42 -0
- package/dist/cli/main.js.map +1 -0
- package/dist/cli/stdin.d.ts +9 -0
- package/dist/cli/stdin.d.ts.map +1 -0
- package/dist/cli/stdin.js +24 -0
- package/dist/cli/stdin.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/package.json +45 -0
package/README.md
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# @a5c-ai/hooks-mux-cli
|
|
2
|
+
|
|
3
|
+
CLI entrypoint for hooks-mux.
|
|
4
|
+
|
|
5
|
+
## Install
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install -g @a5c-ai/hooks-mux-cli
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
This package ships the built CLI in `dist/` and this package README for npm publish-surface auditing.
|
|
12
|
+
|
|
13
|
+
## CLI Surface
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
a5c-hooks-mux --help
|
|
17
|
+
a5c-hooks-mux doctor
|
|
18
|
+
a5c-hooks-mux invoke --adapter claude --native-event SessionStart
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
Use this package when you want the `a5c-hooks-mux` binary without depending on the full monorepo source tree.
|
|
22
|
+
|
|
23
|
+
See the workspace overview in [`packages/hooks-mux/README.md`](../README.md) and the operational guides in `packages/hooks-mux/docs/`.
|
|
24
|
+
|
|
25
|
+
## License
|
|
26
|
+
|
|
27
|
+
MIT © a5c-ai
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dynamic adapter resolution.
|
|
3
|
+
*
|
|
4
|
+
* Attempts to load a harness adapter package by convention:
|
|
5
|
+
* @a5c-ai/hooks-mux-adapter-<name>
|
|
6
|
+
*
|
|
7
|
+
* Each adapter package is expected to export:
|
|
8
|
+
* - createAdapter(): AdapterCapabilities
|
|
9
|
+
* - phase mappings (e.g. CLAUDE_PHASE_MAPPINGS / equivalent)
|
|
10
|
+
* - optional normalizeForInvoke() hook for CLI-native normalization
|
|
11
|
+
* - optional renderForInvoke() hook for CLI-native output rendering
|
|
12
|
+
* - session resolver
|
|
13
|
+
*/
|
|
14
|
+
import type { AdapterCapabilities, MergedExecutionResult, PhaseMapping, UnifiedHookEvent } from '@a5c-ai/hooks-mux-core';
|
|
15
|
+
export type AdapterNormalizer = (nativeEventName: string, stdinPayload: unknown, env?: Record<string, string>) => UnifiedHookEvent;
|
|
16
|
+
export type AdapterRenderer = (mergedResult: MergedExecutionResult, nativeEventName: string, event?: UnifiedHookEvent) => unknown;
|
|
17
|
+
export type AdapterSessionResolver = (stdinData: Record<string, unknown>, env?: Record<string, string>, explicitSessionId?: string) => string | null | {
|
|
18
|
+
sessionId: string | null;
|
|
19
|
+
};
|
|
20
|
+
export interface LoadedAdapter {
|
|
21
|
+
capabilities: AdapterCapabilities;
|
|
22
|
+
phaseMappings: PhaseMapping[];
|
|
23
|
+
normalizer?: AdapterNormalizer;
|
|
24
|
+
renderer?: AdapterRenderer;
|
|
25
|
+
sessionResolver?: AdapterSessionResolver;
|
|
26
|
+
/** Raw module exports for adapter-specific functions. */
|
|
27
|
+
module: Record<string, unknown>;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Attempt to load an adapter package by name.
|
|
31
|
+
*
|
|
32
|
+
* @param adapterName - Short adapter name (e.g. 'claude', 'codex', 'copilot').
|
|
33
|
+
* @returns The loaded adapter with capabilities, phase mappings, and raw module.
|
|
34
|
+
* @throws If the adapter package cannot be found or loaded.
|
|
35
|
+
*/
|
|
36
|
+
export declare function loadAdapter(adapterName: string): LoadedAdapter;
|
|
37
|
+
/**
|
|
38
|
+
* List of known adapter names for discovery/doctor purposes.
|
|
39
|
+
*/
|
|
40
|
+
export declare const KNOWN_ADAPTERS: readonly ["claude", "codex", "copilot", "cursor", "gemini", "oh-my-pi", "openclaw", "opencode", "pi"];
|
|
41
|
+
//# sourceMappingURL=adapter-loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter-loader.d.ts","sourceRoot":"","sources":["../../src/cli/adapter-loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,OAAO,KAAK,EACV,mBAAmB,EACnB,qBAAqB,EACrB,YAAY,EACZ,gBAAgB,EACjB,MAAM,wBAAwB,CAAC;AAGhC,MAAM,MAAM,iBAAiB,GAAG,CAC9B,eAAe,EAAE,MAAM,EACvB,YAAY,EAAE,OAAO,EACrB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KACzB,gBAAgB,CAAC;AAEtB,MAAM,MAAM,eAAe,GAAG,CAC5B,YAAY,EAAE,qBAAqB,EACnC,eAAe,EAAE,MAAM,EACvB,KAAK,CAAC,EAAE,gBAAgB,KACrB,OAAO,CAAC;AAEb,MAAM,MAAM,sBAAsB,GAAG,CACnC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC5B,iBAAiB,CAAC,EAAE,MAAM,KACvB,MAAM,GAAG,IAAI,GAAG;IAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC;AAElD,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,mBAAmB,CAAC;IAClC,aAAa,EAAE,YAAY,EAAE,CAAC;IAC9B,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAC/B,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B,eAAe,CAAC,EAAE,sBAAsB,CAAC;IACzC,yDAAyD;IACzD,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAkCD;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,aAAa,CAiE9D;AAED;;GAEG;AACH,eAAO,MAAM,cAAc,uGAUjB,CAAC"}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Dynamic adapter resolution.
|
|
4
|
+
*
|
|
5
|
+
* Attempts to load a harness adapter package by convention:
|
|
6
|
+
* @a5c-ai/hooks-mux-adapter-<name>
|
|
7
|
+
*
|
|
8
|
+
* Each adapter package is expected to export:
|
|
9
|
+
* - createAdapter(): AdapterCapabilities
|
|
10
|
+
* - phase mappings (e.g. CLAUDE_PHASE_MAPPINGS / equivalent)
|
|
11
|
+
* - optional normalizeForInvoke() hook for CLI-native normalization
|
|
12
|
+
* - optional renderForInvoke() hook for CLI-native output rendering
|
|
13
|
+
* - session resolver
|
|
14
|
+
*/
|
|
15
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
16
|
+
if (k2 === undefined) k2 = k;
|
|
17
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
18
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
19
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
20
|
+
}
|
|
21
|
+
Object.defineProperty(o, k2, desc);
|
|
22
|
+
}) : (function(o, m, k, k2) {
|
|
23
|
+
if (k2 === undefined) k2 = k;
|
|
24
|
+
o[k2] = m[k];
|
|
25
|
+
}));
|
|
26
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
27
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
28
|
+
}) : function(o, v) {
|
|
29
|
+
o["default"] = v;
|
|
30
|
+
});
|
|
31
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
32
|
+
var ownKeys = function(o) {
|
|
33
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
34
|
+
var ar = [];
|
|
35
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
36
|
+
return ar;
|
|
37
|
+
};
|
|
38
|
+
return ownKeys(o);
|
|
39
|
+
};
|
|
40
|
+
return function (mod) {
|
|
41
|
+
if (mod && mod.__esModule) return mod;
|
|
42
|
+
var result = {};
|
|
43
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
44
|
+
__setModuleDefault(result, mod);
|
|
45
|
+
return result;
|
|
46
|
+
};
|
|
47
|
+
})();
|
|
48
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
49
|
+
exports.KNOWN_ADAPTERS = void 0;
|
|
50
|
+
exports.loadAdapter = loadAdapter;
|
|
51
|
+
const fs = __importStar(require("fs"));
|
|
52
|
+
const path = __importStar(require("path"));
|
|
53
|
+
const hooks_mux_core_1 = require("@a5c-ai/hooks-mux-core");
|
|
54
|
+
function isFunction(value) {
|
|
55
|
+
return typeof value === 'function';
|
|
56
|
+
}
|
|
57
|
+
function resolveNormalizer(mod) {
|
|
58
|
+
const candidate = mod['normalizeForInvoke'];
|
|
59
|
+
return isFunction(candidate) ? candidate : undefined;
|
|
60
|
+
}
|
|
61
|
+
function resolveRenderer(mod) {
|
|
62
|
+
const candidate = mod['renderForInvoke'];
|
|
63
|
+
return isFunction(candidate) ? candidate : undefined;
|
|
64
|
+
}
|
|
65
|
+
function resolveSessionResolver(mod) {
|
|
66
|
+
const candidate = mod['resolveSessionId'];
|
|
67
|
+
return isFunction(candidate) ? candidate : undefined;
|
|
68
|
+
}
|
|
69
|
+
function loadWorkspaceAdapter(adapterName) {
|
|
70
|
+
const packageDir = path.resolve(__dirname, '..', '..');
|
|
71
|
+
const workspacePackageDir = path.resolve(packageDir, '..', `adapter-${adapterName}`);
|
|
72
|
+
const distEntry = path.join(workspacePackageDir, 'dist', 'index.js');
|
|
73
|
+
if (!fs.existsSync(distEntry)) {
|
|
74
|
+
return null;
|
|
75
|
+
}
|
|
76
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
77
|
+
return require(workspacePackageDir);
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Attempt to load an adapter package by name.
|
|
81
|
+
*
|
|
82
|
+
* @param adapterName - Short adapter name (e.g. 'claude', 'codex', 'copilot').
|
|
83
|
+
* @returns The loaded adapter with capabilities, phase mappings, and raw module.
|
|
84
|
+
* @throws If the adapter package cannot be found or loaded.
|
|
85
|
+
*/
|
|
86
|
+
function loadAdapter(adapterName) {
|
|
87
|
+
// Auto-detection: probe env vars to determine the adapter
|
|
88
|
+
if (adapterName === 'auto') {
|
|
89
|
+
const detected = (0, hooks_mux_core_1.detectHarness)();
|
|
90
|
+
if (!detected) {
|
|
91
|
+
process.stderr.write('[hooks-mux] auto-detection failed: no harness signals found in environment\n');
|
|
92
|
+
process.exit(1);
|
|
93
|
+
}
|
|
94
|
+
process.stderr.write(`[hooks-mux] auto-detected adapter="${detected.adapter}" ` +
|
|
95
|
+
`confidence=${detected.confidence} evidence=[${detected.evidence.join(', ')}]\n`);
|
|
96
|
+
adapterName = detected.adapter;
|
|
97
|
+
}
|
|
98
|
+
const packageName = `@a5c-ai/hooks-mux-adapter-${adapterName}`;
|
|
99
|
+
let mod;
|
|
100
|
+
try {
|
|
101
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
102
|
+
mod = require(packageName);
|
|
103
|
+
}
|
|
104
|
+
catch (err) {
|
|
105
|
+
const workspaceAdapter = loadWorkspaceAdapter(adapterName);
|
|
106
|
+
if (!workspaceAdapter) {
|
|
107
|
+
throw new Error(`Failed to load adapter "${adapterName}" (package: ${packageName}): ${err instanceof Error ? err.message : String(err)}`);
|
|
108
|
+
}
|
|
109
|
+
mod = workspaceAdapter;
|
|
110
|
+
}
|
|
111
|
+
// Extract createAdapter function
|
|
112
|
+
const createAdapterFn = mod['createAdapter'];
|
|
113
|
+
if (typeof createAdapterFn !== 'function') {
|
|
114
|
+
throw new Error(`Adapter package "${packageName}" does not export a createAdapter function`);
|
|
115
|
+
}
|
|
116
|
+
const capabilities = createAdapterFn();
|
|
117
|
+
// Extract phase mappings -- convention: <ADAPTER>_PHASE_MAPPINGS or phaseMappings
|
|
118
|
+
let phaseMappings = [];
|
|
119
|
+
for (const key of Object.keys(mod)) {
|
|
120
|
+
if (key.endsWith('_PHASE_MAPPINGS') || key === 'phaseMappings') {
|
|
121
|
+
const candidate = mod[key];
|
|
122
|
+
if (Array.isArray(candidate)) {
|
|
123
|
+
phaseMappings = candidate;
|
|
124
|
+
break;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
return {
|
|
129
|
+
capabilities,
|
|
130
|
+
phaseMappings,
|
|
131
|
+
normalizer: resolveNormalizer(mod),
|
|
132
|
+
renderer: resolveRenderer(mod),
|
|
133
|
+
sessionResolver: resolveSessionResolver(mod),
|
|
134
|
+
module: mod,
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* List of known adapter names for discovery/doctor purposes.
|
|
139
|
+
*/
|
|
140
|
+
exports.KNOWN_ADAPTERS = [
|
|
141
|
+
'claude',
|
|
142
|
+
'codex',
|
|
143
|
+
'copilot',
|
|
144
|
+
'cursor',
|
|
145
|
+
'gemini',
|
|
146
|
+
'oh-my-pi',
|
|
147
|
+
'openclaw',
|
|
148
|
+
'opencode',
|
|
149
|
+
'pi',
|
|
150
|
+
];
|
|
151
|
+
//# sourceMappingURL=adapter-loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter-loader.js","sourceRoot":"","sources":["../../src/cli/adapter-loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { type PropagationBackend, type SessionState, type UnifiedHookEvent } from '@a5c-ai/hooks-mux-core';
|
|
2
|
+
import type { loadAdapter } from './adapter-loader';
|
|
3
|
+
export declare function tryParseJson(raw: string): unknown | undefined;
|
|
4
|
+
export declare function resolveSessionId(adapterSessionResolver: ReturnType<typeof loadAdapter>['sessionResolver'], explicitSessionId: string | undefined, normalizedSessionId: string | null | undefined, stdinData: Record<string, unknown> | undefined, env: Record<string, string>): string | null;
|
|
5
|
+
export declare function resolveNativeEnvFilePath(env: Record<string, string>): string | undefined;
|
|
6
|
+
export declare function buildBootstrapPersistEnv(event: UnifiedHookEvent, sessionId: string | null): Record<string, string>;
|
|
7
|
+
export declare function prepareBootstrapSession(args: {
|
|
8
|
+
existingSession: SessionState | null;
|
|
9
|
+
adapter: string;
|
|
10
|
+
event: UnifiedHookEvent;
|
|
11
|
+
sessionId: string | null;
|
|
12
|
+
now?: Date;
|
|
13
|
+
}): {
|
|
14
|
+
session: SessionState | null;
|
|
15
|
+
persistEnv: Record<string, string>;
|
|
16
|
+
};
|
|
17
|
+
export declare function propagateBootstrapEnv(backend: PropagationBackend, persistEnv: Record<string, string>, env: Record<string, string>): Promise<boolean>;
|
|
18
|
+
//# sourceMappingURL=bootstrap-runtime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bootstrap-runtime.d.ts","sourceRoot":"","sources":["../../src/cli/bootstrap-runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,YAAY,EACjB,KAAK,gBAAgB,EAEtB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAQ7D;AAED,wBAAgB,gBAAgB,CAC9B,sBAAsB,EAAE,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC,iBAAiB,CAAC,EACzE,iBAAiB,EAAE,MAAM,GAAG,SAAS,EACrC,mBAAmB,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAC9C,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAC9C,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC1B,MAAM,GAAG,IAAI,CAkBf;AAED,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,GAAG,SAAS,CAExF;AAED,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,gBAAgB,EACvB,SAAS,EAAE,MAAM,GAAG,IAAI,GACvB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAMxB;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE;IAC5C,eAAe,EAAE,YAAY,GAAG,IAAI,CAAC;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,gBAAgB,CAAC;IACxB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,GAAG,CAAC,EAAE,IAAI,CAAC;CACZ,GAAG;IACF,OAAO,EAAE,YAAY,GAAG,IAAI,CAAC;IAC7B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACpC,CAyCA;AAED,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,kBAAkB,EAC3B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAClC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC1B,OAAO,CAAC,OAAO,CAAC,CAkBlB"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.tryParseJson = tryParseJson;
|
|
4
|
+
exports.resolveSessionId = resolveSessionId;
|
|
5
|
+
exports.resolveNativeEnvFilePath = resolveNativeEnvFilePath;
|
|
6
|
+
exports.buildBootstrapPersistEnv = buildBootstrapPersistEnv;
|
|
7
|
+
exports.prepareBootstrapSession = prepareBootstrapSession;
|
|
8
|
+
exports.propagateBootstrapEnv = propagateBootstrapEnv;
|
|
9
|
+
const hooks_mux_core_1 = require("@a5c-ai/hooks-mux-core");
|
|
10
|
+
function tryParseJson(raw) {
|
|
11
|
+
const trimmed = raw.trim();
|
|
12
|
+
if (!trimmed)
|
|
13
|
+
return undefined;
|
|
14
|
+
try {
|
|
15
|
+
return JSON.parse(trimmed);
|
|
16
|
+
}
|
|
17
|
+
catch {
|
|
18
|
+
return undefined;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
function resolveSessionId(adapterSessionResolver, explicitSessionId, normalizedSessionId, stdinData, env) {
|
|
22
|
+
if (adapterSessionResolver) {
|
|
23
|
+
const resolved = adapterSessionResolver(stdinData ?? {}, env, explicitSessionId);
|
|
24
|
+
const adapterSessionId = typeof resolved === 'string'
|
|
25
|
+
? resolved
|
|
26
|
+
: resolved?.sessionId;
|
|
27
|
+
if (adapterSessionId) {
|
|
28
|
+
return adapterSessionId;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
if (explicitSessionId)
|
|
32
|
+
return explicitSessionId;
|
|
33
|
+
if (env['AGENT_SESSION_ID'])
|
|
34
|
+
return env['AGENT_SESSION_ID'];
|
|
35
|
+
if (normalizedSessionId)
|
|
36
|
+
return normalizedSessionId;
|
|
37
|
+
if (stdinData && typeof stdinData['session_id'] === 'string') {
|
|
38
|
+
return stdinData['session_id'];
|
|
39
|
+
}
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
42
|
+
function resolveNativeEnvFilePath(env) {
|
|
43
|
+
return env['CLAUDE_ENV_FILE'] ?? env['HOOKS_PROXY_ENV_FILE'];
|
|
44
|
+
}
|
|
45
|
+
function buildBootstrapPersistEnv(event, sessionId) {
|
|
46
|
+
const persistEnv = { ...event.env.persisted };
|
|
47
|
+
if (sessionId) {
|
|
48
|
+
persistEnv['AGENT_SESSION_ID'] = sessionId;
|
|
49
|
+
}
|
|
50
|
+
return persistEnv;
|
|
51
|
+
}
|
|
52
|
+
function prepareBootstrapSession(args) {
|
|
53
|
+
const nowIso = (args.now ?? new Date()).toISOString();
|
|
54
|
+
const persistEnv = buildBootstrapPersistEnv(args.event, args.sessionId);
|
|
55
|
+
if (!args.sessionId) {
|
|
56
|
+
return {
|
|
57
|
+
session: null,
|
|
58
|
+
persistEnv,
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
const existing = args.existingSession;
|
|
62
|
+
const session = existing
|
|
63
|
+
? {
|
|
64
|
+
...existing,
|
|
65
|
+
updatedAt: nowIso,
|
|
66
|
+
cwd: existing.cwd ?? args.event.execution.cwd ?? undefined,
|
|
67
|
+
transcriptPath: existing.transcriptPath ?? args.event.execution.transcriptPath ?? undefined,
|
|
68
|
+
persistedEnv: { ...existing.persistedEnv, ...persistEnv },
|
|
69
|
+
contextVars: existing.contextVars ?? {},
|
|
70
|
+
contextFragments: existing.contextFragments ?? [],
|
|
71
|
+
metadata: existing.metadata ?? {},
|
|
72
|
+
}
|
|
73
|
+
: {
|
|
74
|
+
version: 'a5c.hooks.session.v1',
|
|
75
|
+
sessionId: args.sessionId,
|
|
76
|
+
adapter: args.adapter,
|
|
77
|
+
createdAt: nowIso,
|
|
78
|
+
updatedAt: nowIso,
|
|
79
|
+
cwd: args.event.execution.cwd ?? undefined,
|
|
80
|
+
transcriptPath: args.event.execution.transcriptPath ?? undefined,
|
|
81
|
+
persistedEnv: persistEnv,
|
|
82
|
+
contextVars: {},
|
|
83
|
+
contextFragments: [],
|
|
84
|
+
metadata: {},
|
|
85
|
+
};
|
|
86
|
+
return {
|
|
87
|
+
session,
|
|
88
|
+
persistEnv,
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
async function propagateBootstrapEnv(backend, persistEnv, env) {
|
|
92
|
+
if (Object.keys(persistEnv).length === 0) {
|
|
93
|
+
return false;
|
|
94
|
+
}
|
|
95
|
+
if (backend === 'native_env_file') {
|
|
96
|
+
const nativeEnvFilePath = resolveNativeEnvFilePath(env);
|
|
97
|
+
if (!nativeEnvFilePath) {
|
|
98
|
+
return false;
|
|
99
|
+
}
|
|
100
|
+
await (0, hooks_mux_core_1.propagateEnv)(backend, persistEnv, { nativeEnvFilePath });
|
|
101
|
+
return true;
|
|
102
|
+
}
|
|
103
|
+
await (0, hooks_mux_core_1.propagateEnv)(backend, persistEnv, {
|
|
104
|
+
nativeEnvFilePath: resolveNativeEnvFilePath(env),
|
|
105
|
+
});
|
|
106
|
+
return true;
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=bootstrap-runtime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bootstrap-runtime.js","sourceRoot":"","sources":["../../src/cli/bootstrap-runtime.ts"],"names":[],"mappings":";;AAQA,oCAQC;AAED,4CAwBC;AAED,4DAEC;AAED,4DASC;AAED,0DAkDC;AAED,sDAsBC;AArID,2DAKgC;AAGhC,SAAgB,YAAY,CAAC,GAAW;IACtC,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IAC3B,IAAI,CAAC,OAAO;QAAE,OAAO,SAAS,CAAC;IAC/B,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,SAAgB,gBAAgB,CAC9B,sBAAyE,EACzE,iBAAqC,EACrC,mBAA8C,EAC9C,SAA8C,EAC9C,GAA2B;IAE3B,IAAI,sBAAsB,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,sBAAsB,CAAC,SAAS,IAAI,EAAE,EAAE,GAAG,EAAE,iBAAiB,CAAC,CAAC;QACjF,MAAM,gBAAgB,GAAG,OAAO,QAAQ,KAAK,QAAQ;YACnD,CAAC,CAAC,QAAQ;YACV,CAAC,CAAC,QAAQ,EAAE,SAAS,CAAC;QACxB,IAAI,gBAAgB,EAAE,CAAC;YACrB,OAAO,gBAAgB,CAAC;QAC1B,CAAC;IACH,CAAC;IAED,IAAI,iBAAiB;QAAE,OAAO,iBAAiB,CAAC;IAChD,IAAI,GAAG,CAAC,kBAAkB,CAAC;QAAE,OAAO,GAAG,CAAC,kBAAkB,CAAC,CAAC;IAC5D,IAAI,mBAAmB;QAAE,OAAO,mBAAmB,CAAC;IACpD,IAAI,SAAS,IAAI,OAAO,SAAS,CAAC,YAAY,CAAC,KAAK,QAAQ,EAAE,CAAC;QAC7D,OAAO,SAAS,CAAC,YAAY,CAAW,CAAC;IAC3C,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAgB,wBAAwB,CAAC,GAA2B;IAClE,OAAO,GAAG,CAAC,iBAAiB,CAAC,IAAI,GAAG,CAAC,sBAAsB,CAAC,CAAC;AAC/D,CAAC;AAED,SAAgB,wBAAwB,CACtC,KAAuB,EACvB,SAAwB;IAExB,MAAM,UAAU,GAAG,EAAE,GAAG,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;IAC9C,IAAI,SAAS,EAAE,CAAC;QACd,UAAU,CAAC,kBAAkB,CAAC,GAAG,SAAS,CAAC;IAC7C,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAgB,uBAAuB,CAAC,IAMvC;IAIC,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IACtD,MAAM,UAAU,GAAG,wBAAwB,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IAExE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;QACpB,OAAO;YACL,OAAO,EAAE,IAAI;YACb,UAAU;SACX,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC;IACtC,MAAM,OAAO,GAAiB,QAAQ;QACpC,CAAC,CAAC;YACA,GAAG,QAAQ;YACX,SAAS,EAAE,MAAM;YACjB,GAAG,EAAE,QAAQ,CAAC,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,IAAI,SAAS;YAC1D,cAAc,EAAE,QAAQ,CAAC,cAAc,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,cAAc,IAAI,SAAS;YAC3F,YAAY,EAAE,EAAE,GAAG,QAAQ,CAAC,YAAY,EAAE,GAAG,UAAU,EAAE;YACzD,WAAW,EAAE,QAAQ,CAAC,WAAW,IAAI,EAAE;YACvC,gBAAgB,EAAE,QAAQ,CAAC,gBAAgB,IAAI,EAAE;YACjD,QAAQ,EAAE,QAAQ,CAAC,QAAQ,IAAI,EAAE;SAClC;QACD,CAAC,CAAC;YACA,OAAO,EAAE,sBAAsB;YAC/B,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,SAAS,EAAE,MAAM;YACjB,SAAS,EAAE,MAAM;YACjB,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,IAAI,SAAS;YAC1C,cAAc,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,cAAc,IAAI,SAAS;YAChE,YAAY,EAAE,UAAU;YACxB,WAAW,EAAE,EAAE;YACf,gBAAgB,EAAE,EAAE;YACpB,QAAQ,EAAE,EAAE;SACb,CAAC;IAEJ,OAAO;QACL,OAAO;QACP,UAAU;KACX,CAAC;AACJ,CAAC;AAEM,KAAK,UAAU,qBAAqB,CACzC,OAA2B,EAC3B,UAAkC,EAClC,GAA2B;IAE3B,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,OAAO,KAAK,iBAAiB,EAAE,CAAC;QAClC,MAAM,iBAAiB,GAAG,wBAAwB,CAAC,GAAG,CAAC,CAAC;QACxD,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACvB,OAAO,KAAK,CAAC;QACf,CAAC;QACD,MAAM,IAAA,6BAAY,EAAC,OAAO,EAAE,UAAU,EAAE,EAAE,iBAAiB,EAAE,CAAC,CAAC;QAC/D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,IAAA,6BAAY,EAAC,OAAO,EAAE,UAAU,EAAE;QACtC,iBAAiB,EAAE,wBAAwB,CAAC,GAAG,CAAC;KACjD,CAAC,CAAC;IACH,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* bootstrap command — Dedicated no-op context bootstrap.
|
|
3
|
+
*
|
|
4
|
+
* Spec section 18.3.
|
|
5
|
+
*
|
|
6
|
+
* Reads stdin for session discovery, resolves adapter-native session IDs,
|
|
7
|
+
* creates/loads session state, persists baseline env, and applies any
|
|
8
|
+
* supported propagation backend.
|
|
9
|
+
*/
|
|
10
|
+
import type { CommandModule } from 'yargs';
|
|
11
|
+
interface BootstrapArgs {
|
|
12
|
+
adapter: string;
|
|
13
|
+
'session-id'?: string;
|
|
14
|
+
json?: boolean;
|
|
15
|
+
}
|
|
16
|
+
export declare const bootstrapCommand: CommandModule<object, BootstrapArgs>;
|
|
17
|
+
export {};
|
|
18
|
+
//# sourceMappingURL=bootstrap.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/bootstrap.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAgB3C,UAAU,aAAa;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,eAAO,MAAM,gBAAgB,EAAE,aAAa,CAAC,MAAM,EAAE,aAAa,CAuFjE,CAAC"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* bootstrap command — Dedicated no-op context bootstrap.
|
|
4
|
+
*
|
|
5
|
+
* Spec section 18.3.
|
|
6
|
+
*
|
|
7
|
+
* Reads stdin for session discovery, resolves adapter-native session IDs,
|
|
8
|
+
* creates/loads session state, persists baseline env, and applies any
|
|
9
|
+
* supported propagation backend.
|
|
10
|
+
*/
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.bootstrapCommand = void 0;
|
|
13
|
+
const hooks_mux_core_1 = require("@a5c-ai/hooks-mux-core");
|
|
14
|
+
const adapter_loader_1 = require("../adapter-loader");
|
|
15
|
+
const bootstrap_runtime_1 = require("../bootstrap-runtime");
|
|
16
|
+
const hooks_logger_1 = require("../hooks-logger");
|
|
17
|
+
const stdin_1 = require("../stdin");
|
|
18
|
+
exports.bootstrapCommand = {
|
|
19
|
+
command: 'bootstrap',
|
|
20
|
+
describe: 'No-op context bootstrap — initialize session without running handlers',
|
|
21
|
+
builder: (yargs) => yargs
|
|
22
|
+
.option('adapter', {
|
|
23
|
+
type: 'string',
|
|
24
|
+
demandOption: true,
|
|
25
|
+
describe: 'Adapter name (e.g. claude, codex, copilot) or "auto" to detect from environment',
|
|
26
|
+
})
|
|
27
|
+
.option('session-id', {
|
|
28
|
+
type: 'string',
|
|
29
|
+
describe: 'Explicit session ID override',
|
|
30
|
+
})
|
|
31
|
+
.option('json', {
|
|
32
|
+
type: 'boolean',
|
|
33
|
+
default: false,
|
|
34
|
+
describe: 'Output JSON format',
|
|
35
|
+
}),
|
|
36
|
+
handler: async (args) => {
|
|
37
|
+
const logger = (0, hooks_logger_1.createHooksLogger)('bootstrap');
|
|
38
|
+
const loaded = (0, adapter_loader_1.loadAdapter)(args.adapter);
|
|
39
|
+
const env = process.env;
|
|
40
|
+
const rawStdin = await (0, stdin_1.readStdin)();
|
|
41
|
+
const stdinPayload = (0, bootstrap_runtime_1.tryParseJson)(rawStdin);
|
|
42
|
+
const stdinData = (typeof stdinPayload === 'object' && stdinPayload !== null && !Array.isArray(stdinPayload))
|
|
43
|
+
? stdinPayload
|
|
44
|
+
: undefined;
|
|
45
|
+
const rawEventName = loaded.capabilities.name === 'claude'
|
|
46
|
+
? 'SessionStart'
|
|
47
|
+
: 'bootstrap';
|
|
48
|
+
const event = loaded.normalizer
|
|
49
|
+
? loaded.normalizer(rawEventName, rawStdin, env)
|
|
50
|
+
: (0, hooks_mux_core_1.normalizeEvent)({
|
|
51
|
+
adapter: args.adapter,
|
|
52
|
+
rawEventName,
|
|
53
|
+
stdinPayload,
|
|
54
|
+
env,
|
|
55
|
+
adapterMappings: loaded.phaseMappings,
|
|
56
|
+
});
|
|
57
|
+
const sessionId = (0, bootstrap_runtime_1.resolveSessionId)(loaded.sessionResolver, args['session-id'], event.execution.sessionId, stdinData, env) ?? `bootstrap-${Date.now()}`;
|
|
58
|
+
const prepared = (0, bootstrap_runtime_1.prepareBootstrapSession)({
|
|
59
|
+
existingSession: await (0, hooks_mux_core_1.loadSession)(sessionId),
|
|
60
|
+
adapter: args.adapter,
|
|
61
|
+
event,
|
|
62
|
+
sessionId,
|
|
63
|
+
});
|
|
64
|
+
const session = prepared.session;
|
|
65
|
+
if (session) {
|
|
66
|
+
await (0, hooks_mux_core_1.saveSession)(session);
|
|
67
|
+
}
|
|
68
|
+
const propagated = await (0, bootstrap_runtime_1.propagateBootstrapEnv)(loaded.capabilities.envPersistenceMode, prepared.persistEnv, env);
|
|
69
|
+
await logger.info('bootstrap completed', {
|
|
70
|
+
adapter: args.adapter,
|
|
71
|
+
sessionId,
|
|
72
|
+
createdAt: session?.createdAt ?? null,
|
|
73
|
+
propagated,
|
|
74
|
+
});
|
|
75
|
+
const output = {
|
|
76
|
+
status: 'bootstrapped',
|
|
77
|
+
sessionId,
|
|
78
|
+
adapter: args.adapter,
|
|
79
|
+
createdAt: session?.createdAt ?? null,
|
|
80
|
+
};
|
|
81
|
+
if (args.json) {
|
|
82
|
+
process.stdout.write(JSON.stringify(output, null, 2) + '\n');
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
process.stderr.write(`Session bootstrapped: ${sessionId} (adapter: ${args.adapter})\n`);
|
|
86
|
+
}
|
|
87
|
+
},
|
|
88
|
+
};
|
|
89
|
+
//# sourceMappingURL=bootstrap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../../src/cli/commands/bootstrap.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* clear-session command — Delete one session state file.
|
|
3
|
+
*
|
|
4
|
+
* Spec section 18.5.
|
|
5
|
+
*/
|
|
6
|
+
import type { CommandModule } from 'yargs';
|
|
7
|
+
interface ClearSessionArgs {
|
|
8
|
+
'session-id': string;
|
|
9
|
+
json?: boolean;
|
|
10
|
+
}
|
|
11
|
+
export declare const clearSessionCommand: CommandModule<object, ClearSessionArgs>;
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=clear-session.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clear-session.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/clear-session.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAG3C,UAAU,gBAAgB;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,eAAO,MAAM,mBAAmB,EAAE,aAAa,CAAC,MAAM,EAAE,gBAAgB,CA0BvE,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* clear-session command — Delete one session state file.
|
|
4
|
+
*
|
|
5
|
+
* Spec section 18.5.
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.clearSessionCommand = void 0;
|
|
9
|
+
const hooks_mux_core_1 = require("@a5c-ai/hooks-mux-core");
|
|
10
|
+
exports.clearSessionCommand = {
|
|
11
|
+
command: 'clear-session',
|
|
12
|
+
describe: 'Delete a session state file',
|
|
13
|
+
builder: (yargs) => yargs
|
|
14
|
+
.option('session-id', {
|
|
15
|
+
type: 'string',
|
|
16
|
+
demandOption: true,
|
|
17
|
+
describe: 'Session ID to delete',
|
|
18
|
+
})
|
|
19
|
+
.option('json', {
|
|
20
|
+
type: 'boolean',
|
|
21
|
+
default: false,
|
|
22
|
+
describe: 'Output JSON format',
|
|
23
|
+
}),
|
|
24
|
+
handler: async (args) => {
|
|
25
|
+
await (0, hooks_mux_core_1.deleteSession)(args['session-id']);
|
|
26
|
+
if (args.json) {
|
|
27
|
+
process.stdout.write(JSON.stringify({ status: 'deleted', sessionId: args['session-id'] }) + '\n');
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
console.log(`Session deleted: ${args['session-id']}`);
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
};
|
|
34
|
+
//# sourceMappingURL=clear-session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clear-session.js","sourceRoot":"","sources":["../../../src/cli/commands/clear-session.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAGH,2DAAuD;AAO1C,QAAA,mBAAmB,GAA4C;IAC1E,OAAO,EAAE,eAAe;IACxB,QAAQ,EAAE,6BAA6B;IACvC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CACjB,KAAK;SACF,MAAM,CAAC,YAAY,EAAE;QACpB,IAAI,EAAE,QAAQ;QACd,YAAY,EAAE,IAAI;QAClB,QAAQ,EAAE,sBAAsB;KACjC,CAAC;SACD,MAAM,CAAC,MAAM,EAAE;QACd,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,KAAK;QACd,QAAQ,EAAE,oBAAoB;KAC/B,CAAC;IACN,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QACtB,MAAM,IAAA,8BAAa,EAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;QAExC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,GAAG,IAAI,CAC5E,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* doctor command — Report adapter capability profile, integration warnings,
|
|
3
|
+
* session store health, and stale session detection.
|
|
4
|
+
*
|
|
5
|
+
* Spec section 18.6 (Phase 5 enhancement).
|
|
6
|
+
*/
|
|
7
|
+
import type { CommandModule } from 'yargs';
|
|
8
|
+
interface DoctorArgs {
|
|
9
|
+
adapter?: string;
|
|
10
|
+
json?: boolean;
|
|
11
|
+
'session-dir'?: string;
|
|
12
|
+
'stale-threshold'?: number;
|
|
13
|
+
}
|
|
14
|
+
export declare const doctorCommand: CommandModule<object, DoctorArgs>;
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=doctor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/doctor.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAO3C,UAAU,UAAU;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AA0PD,eAAO,MAAM,aAAa,EAAE,aAAa,CAAC,MAAM,EAAE,UAAU,CAoH3D,CAAC"}
|