@a5c-ai/hooks-mux-cli 5.0.1-staging.37ca18bd
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/adapter-loader.d.ts +33 -0
- package/dist/cli/adapter-loader.d.ts.map +1 -0
- package/dist/cli/adapter-loader.js +80 -0
- package/dist/cli/adapter-loader.js.map +1 -0
- package/dist/cli/commands/bootstrap.d.ts +17 -0
- package/dist/cli/commands/bootstrap.d.ts.map +1 -0
- package/dist/cli/commands/bootstrap.js +77 -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 +79 -0
- package/dist/cli/commands/exec.js.map +1 -0
- package/dist/cli/commands/invoke.d.ts +26 -0
- package/dist/cli/commands/invoke.d.ts.map +1 -0
- package/dist/cli/commands/invoke.js +196 -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/main.d.ts +3 -0
- package/dist/cli/main.d.ts.map +1 -0
- package/dist/cli/main.js +37 -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 +40 -0
|
@@ -0,0 +1,33 @@
|
|
|
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
|
+
* - normalizer function
|
|
11
|
+
* - renderer function
|
|
12
|
+
* - session resolver
|
|
13
|
+
*/
|
|
14
|
+
import type { AdapterCapabilities, PhaseMapping } from '@a5c-ai/hooks-mux-core';
|
|
15
|
+
export interface LoadedAdapter {
|
|
16
|
+
capabilities: AdapterCapabilities;
|
|
17
|
+
phaseMappings: PhaseMapping[];
|
|
18
|
+
/** Raw module exports for adapter-specific functions. */
|
|
19
|
+
module: Record<string, unknown>;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Attempt to load an adapter package by name.
|
|
23
|
+
*
|
|
24
|
+
* @param adapterName - Short adapter name (e.g. 'claude', 'codex', 'copilot').
|
|
25
|
+
* @returns The loaded adapter with capabilities, phase mappings, and raw module.
|
|
26
|
+
* @throws If the adapter package cannot be found or loaded.
|
|
27
|
+
*/
|
|
28
|
+
export declare function loadAdapter(adapterName: string): LoadedAdapter;
|
|
29
|
+
/**
|
|
30
|
+
* List of known adapter names for discovery/doctor purposes.
|
|
31
|
+
*/
|
|
32
|
+
export declare const KNOWN_ADAPTERS: readonly ["claude", "codex", "copilot", "cursor", "gemini", "oh-my-pi", "openclaw", "opencode", "pi"];
|
|
33
|
+
//# 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;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAGhF,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,mBAAmB,CAAC;IAClC,aAAa,EAAE,YAAY,EAAE,CAAC;IAC9B,yDAAyD;IACzD,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,aAAa,CAsD9D;AAED;;GAEG;AACH,eAAO,MAAM,cAAc,uGAUjB,CAAC"}
|
|
@@ -0,0 +1,80 @@
|
|
|
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
|
+
* - normalizer function
|
|
12
|
+
* - renderer function
|
|
13
|
+
* - session resolver
|
|
14
|
+
*/
|
|
15
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
+
exports.KNOWN_ADAPTERS = void 0;
|
|
17
|
+
exports.loadAdapter = loadAdapter;
|
|
18
|
+
const hooks_mux_core_1 = require("@a5c-ai/hooks-mux-core");
|
|
19
|
+
/**
|
|
20
|
+
* Attempt to load an adapter package by name.
|
|
21
|
+
*
|
|
22
|
+
* @param adapterName - Short adapter name (e.g. 'claude', 'codex', 'copilot').
|
|
23
|
+
* @returns The loaded adapter with capabilities, phase mappings, and raw module.
|
|
24
|
+
* @throws If the adapter package cannot be found or loaded.
|
|
25
|
+
*/
|
|
26
|
+
function loadAdapter(adapterName) {
|
|
27
|
+
// Auto-detection: probe env vars to determine the adapter
|
|
28
|
+
if (adapterName === 'auto') {
|
|
29
|
+
const detected = (0, hooks_mux_core_1.detectHarness)();
|
|
30
|
+
if (!detected) {
|
|
31
|
+
process.stderr.write('[hooks-mux] auto-detection failed: no harness signals found in environment\n');
|
|
32
|
+
process.exit(1);
|
|
33
|
+
}
|
|
34
|
+
process.stderr.write(`[hooks-mux] auto-detected adapter="${detected.adapter}" ` +
|
|
35
|
+
`confidence=${detected.confidence} evidence=[${detected.evidence.join(', ')}]\n`);
|
|
36
|
+
adapterName = detected.adapter;
|
|
37
|
+
}
|
|
38
|
+
const packageName = `@a5c-ai/hooks-mux-adapter-${adapterName}`;
|
|
39
|
+
let mod;
|
|
40
|
+
try {
|
|
41
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
42
|
+
mod = require(packageName);
|
|
43
|
+
}
|
|
44
|
+
catch (err) {
|
|
45
|
+
throw new Error(`Failed to load adapter "${adapterName}" (package: ${packageName}): ${err instanceof Error ? err.message : String(err)}`);
|
|
46
|
+
}
|
|
47
|
+
// Extract createAdapter function
|
|
48
|
+
const createAdapterFn = mod['createAdapter'];
|
|
49
|
+
if (typeof createAdapterFn !== 'function') {
|
|
50
|
+
throw new Error(`Adapter package "${packageName}" does not export a createAdapter function`);
|
|
51
|
+
}
|
|
52
|
+
const capabilities = createAdapterFn();
|
|
53
|
+
// Extract phase mappings -- convention: <ADAPTER>_PHASE_MAPPINGS or phaseMappings
|
|
54
|
+
let phaseMappings = [];
|
|
55
|
+
for (const key of Object.keys(mod)) {
|
|
56
|
+
if (key.endsWith('_PHASE_MAPPINGS') || key === 'phaseMappings') {
|
|
57
|
+
const candidate = mod[key];
|
|
58
|
+
if (Array.isArray(candidate)) {
|
|
59
|
+
phaseMappings = candidate;
|
|
60
|
+
break;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
return { capabilities, phaseMappings, module: mod };
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* List of known adapter names for discovery/doctor purposes.
|
|
68
|
+
*/
|
|
69
|
+
exports.KNOWN_ADAPTERS = [
|
|
70
|
+
'claude',
|
|
71
|
+
'codex',
|
|
72
|
+
'copilot',
|
|
73
|
+
'cursor',
|
|
74
|
+
'gemini',
|
|
75
|
+
'oh-my-pi',
|
|
76
|
+
'openclaw',
|
|
77
|
+
'opencode',
|
|
78
|
+
'pi',
|
|
79
|
+
];
|
|
80
|
+
//# sourceMappingURL=adapter-loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter-loader.js","sourceRoot":"","sources":["../../src/cli/adapter-loader.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;GAYG;;;AAmBH,kCAsDC;AAtED,2DAAuD;AASvD;;;;;;GAMG;AACH,SAAgB,WAAW,CAAC,WAAmB;IAC7C,0DAA0D;IAC1D,IAAI,WAAW,KAAK,MAAM,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,IAAA,8BAAa,GAAE,CAAC;QACjC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,8EAA8E,CAC/E,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,sCAAsC,QAAQ,CAAC,OAAO,IAAI;YAC1D,cAAc,QAAQ,CAAC,UAAU,cAAc,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CACjF,CAAC;QACF,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC;IACjC,CAAC;IAED,MAAM,WAAW,GAAG,6BAA6B,WAAW,EAAE,CAAC;IAE/D,IAAI,GAA4B,CAAC;IACjC,IAAI,CAAC;QACH,8DAA8D;QAC9D,GAAG,GAAG,OAAO,CAAC,WAAW,CAA4B,CAAC;IACxD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CACb,2BAA2B,WAAW,eAAe,WAAW,MAC9D,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CACjD,EAAE,CACH,CAAC;IACJ,CAAC;IAED,iCAAiC;IACjC,MAAM,eAAe,GAAG,GAAG,CAAC,eAAe,CAAC,CAAC;IAC7C,IAAI,OAAO,eAAe,KAAK,UAAU,EAAE,CAAC;QAC1C,MAAM,IAAI,KAAK,CACb,oBAAoB,WAAW,4CAA4C,CAC5E,CAAC;IACJ,CAAC;IAED,MAAM,YAAY,GAAG,eAAe,EAAyB,CAAC;IAE9D,kFAAkF;IAClF,IAAI,aAAa,GAAmB,EAAE,CAAC;IACvC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACnC,IAAI,GAAG,CAAC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,GAAG,KAAK,eAAe,EAAE,CAAC;YAC/D,MAAM,SAAS,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;YAC3B,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC7B,aAAa,GAAG,SAA2B,CAAC;gBAC5C,MAAM;YACR,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;AACtD,CAAC;AAED;;GAEG;AACU,QAAA,cAAc,GAAG;IAC5B,QAAQ;IACR,OAAO;IACP,SAAS;IACT,QAAQ;IACR,QAAQ;IACR,UAAU;IACV,UAAU;IACV,UAAU;IACV,IAAI;CACI,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* bootstrap command — Dedicated no-op context bootstrap.
|
|
3
|
+
*
|
|
4
|
+
* Spec section 18.3.
|
|
5
|
+
*
|
|
6
|
+
* Delegates to invoke with --bootstrap-only flag internally.
|
|
7
|
+
* Reads stdin for session discovery, creates/loads session, and persists it.
|
|
8
|
+
*/
|
|
9
|
+
import type { CommandModule } from 'yargs';
|
|
10
|
+
interface BootstrapArgs {
|
|
11
|
+
adapter: string;
|
|
12
|
+
'session-id'?: string;
|
|
13
|
+
json?: boolean;
|
|
14
|
+
}
|
|
15
|
+
export declare const bootstrapCommand: CommandModule<object, BootstrapArgs>;
|
|
16
|
+
export {};
|
|
17
|
+
//# 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;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAQ3C,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,CAoEjE,CAAC"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* bootstrap command — Dedicated no-op context bootstrap.
|
|
4
|
+
*
|
|
5
|
+
* Spec section 18.3.
|
|
6
|
+
*
|
|
7
|
+
* Delegates to invoke with --bootstrap-only flag internally.
|
|
8
|
+
* Reads stdin for session discovery, creates/loads session, and persists it.
|
|
9
|
+
*/
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
exports.bootstrapCommand = void 0;
|
|
12
|
+
const hooks_mux_core_1 = require("@a5c-ai/hooks-mux-core");
|
|
13
|
+
const adapter_loader_1 = require("../adapter-loader");
|
|
14
|
+
exports.bootstrapCommand = {
|
|
15
|
+
command: 'bootstrap',
|
|
16
|
+
describe: 'No-op context bootstrap — initialize session without running handlers',
|
|
17
|
+
builder: (yargs) => yargs
|
|
18
|
+
.option('adapter', {
|
|
19
|
+
type: 'string',
|
|
20
|
+
demandOption: true,
|
|
21
|
+
describe: 'Adapter name (e.g. claude, codex, copilot) or "auto" to detect from environment',
|
|
22
|
+
})
|
|
23
|
+
.option('session-id', {
|
|
24
|
+
type: 'string',
|
|
25
|
+
describe: 'Explicit session ID override',
|
|
26
|
+
})
|
|
27
|
+
.option('json', {
|
|
28
|
+
type: 'boolean',
|
|
29
|
+
default: false,
|
|
30
|
+
describe: 'Output JSON format',
|
|
31
|
+
}),
|
|
32
|
+
handler: async (args) => {
|
|
33
|
+
const loaded = (0, adapter_loader_1.loadAdapter)(args.adapter);
|
|
34
|
+
const env = process.env;
|
|
35
|
+
// Determine session ID
|
|
36
|
+
const sessionId = args['session-id']
|
|
37
|
+
?? env['AGENT_SESSION_ID']
|
|
38
|
+
?? `bootstrap-${Date.now()}`;
|
|
39
|
+
// Normalize a synthetic session.start event for context extraction
|
|
40
|
+
const event = (0, hooks_mux_core_1.normalizeEvent)({
|
|
41
|
+
adapter: args.adapter,
|
|
42
|
+
rawEventName: 'bootstrap',
|
|
43
|
+
env,
|
|
44
|
+
adapterMappings: loaded.phaseMappings,
|
|
45
|
+
});
|
|
46
|
+
// Load or create session
|
|
47
|
+
let session = await (0, hooks_mux_core_1.loadSession)(sessionId);
|
|
48
|
+
if (!session) {
|
|
49
|
+
session = {
|
|
50
|
+
version: 'a5c.hooks.session.v1',
|
|
51
|
+
sessionId,
|
|
52
|
+
adapter: args.adapter,
|
|
53
|
+
createdAt: new Date().toISOString(),
|
|
54
|
+
updatedAt: new Date().toISOString(),
|
|
55
|
+
cwd: event.execution.cwd ?? undefined,
|
|
56
|
+
persistedEnv: { ...event.env.persisted },
|
|
57
|
+
contextVars: {},
|
|
58
|
+
contextFragments: [],
|
|
59
|
+
metadata: {},
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
await (0, hooks_mux_core_1.saveSession)(session);
|
|
63
|
+
const output = {
|
|
64
|
+
status: 'bootstrapped',
|
|
65
|
+
sessionId,
|
|
66
|
+
adapter: args.adapter,
|
|
67
|
+
createdAt: session.createdAt,
|
|
68
|
+
};
|
|
69
|
+
if (args.json) {
|
|
70
|
+
process.stdout.write(JSON.stringify(output, null, 2) + '\n');
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
console.log(`Session bootstrapped: ${sessionId} (adapter: ${args.adapter})`);
|
|
74
|
+
}
|
|
75
|
+
},
|
|
76
|
+
};
|
|
77
|
+
//# sourceMappingURL=bootstrap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../../src/cli/commands/bootstrap.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;AAGH,2DAIgC;AAChC,sDAAgD;AAQnC,QAAA,gBAAgB,GAAyC;IACpE,OAAO,EAAE,WAAW;IACpB,QAAQ,EAAE,uEAAuE;IACjF,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CACjB,KAAK;SACF,MAAM,CAAC,SAAS,EAAE;QACjB,IAAI,EAAE,QAAQ;QACd,YAAY,EAAE,IAAI;QAClB,QAAQ,EAAE,iFAAiF;KAC5F,CAAC;SACD,MAAM,CAAC,YAAY,EAAE;QACpB,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,8BAA8B;KACzC,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,MAAM,GAAG,IAAA,4BAAW,EAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACzC,MAAM,GAAG,GAAG,OAAO,CAAC,GAA6B,CAAC;QAElD,uBAAuB;QACvB,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC;eAC/B,GAAG,CAAC,kBAAkB,CAAC;eACvB,aAAa,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;QAE/B,mEAAmE;QACnE,MAAM,KAAK,GAAG,IAAA,+BAAc,EAAC;YAC3B,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,YAAY,EAAE,WAAW;YACzB,GAAG;YACH,eAAe,EAAE,MAAM,CAAC,aAAa;SACtC,CAAC,CAAC;QAEH,yBAAyB;QACzB,IAAI,OAAO,GAAG,MAAM,IAAA,4BAAW,EAAC,SAAS,CAAC,CAAC;QAC3C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,GAAG;gBACR,OAAO,EAAE,sBAAsB;gBAC/B,SAAS;gBACT,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACnC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACnC,GAAG,EAAE,KAAK,CAAC,SAAS,CAAC,GAAG,IAAI,SAAS;gBACrC,YAAY,EAAE,EAAE,GAAG,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE;gBACxC,WAAW,EAAE,EAAE;gBACf,gBAAgB,EAAE,EAAE;gBACpB,QAAQ,EAAE,EAAE;aACb,CAAC;QACJ,CAAC;QAED,MAAM,IAAA,4BAAW,EAAC,OAAO,CAAC,CAAC;QAE3B,MAAM,MAAM,GAAG;YACb,MAAM,EAAE,cAAc;YACtB,SAAS;YACT,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,SAAS,EAAE,OAAO,CAAC,SAAS;SAC7B,CAAC;QAEF,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;QAC/D,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,yBAAyB,SAAS,cAAc,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;QAC/E,CAAC;IACH,CAAC;CACF,CAAC"}
|
|
@@ -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"}
|
|
@@ -0,0 +1,333 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* doctor command — Report adapter capability profile, integration warnings,
|
|
4
|
+
* session store health, and stale session detection.
|
|
5
|
+
*
|
|
6
|
+
* Spec section 18.6 (Phase 5 enhancement).
|
|
7
|
+
*/
|
|
8
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
9
|
+
if (k2 === undefined) k2 = k;
|
|
10
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
11
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
12
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
13
|
+
}
|
|
14
|
+
Object.defineProperty(o, k2, desc);
|
|
15
|
+
}) : (function(o, m, k, k2) {
|
|
16
|
+
if (k2 === undefined) k2 = k;
|
|
17
|
+
o[k2] = m[k];
|
|
18
|
+
}));
|
|
19
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
20
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
21
|
+
}) : function(o, v) {
|
|
22
|
+
o["default"] = v;
|
|
23
|
+
});
|
|
24
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
25
|
+
var ownKeys = function(o) {
|
|
26
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
27
|
+
var ar = [];
|
|
28
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
29
|
+
return ar;
|
|
30
|
+
};
|
|
31
|
+
return ownKeys(o);
|
|
32
|
+
};
|
|
33
|
+
return function (mod) {
|
|
34
|
+
if (mod && mod.__esModule) return mod;
|
|
35
|
+
var result = {};
|
|
36
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
37
|
+
__setModuleDefault(result, mod);
|
|
38
|
+
return result;
|
|
39
|
+
};
|
|
40
|
+
})();
|
|
41
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
42
|
+
exports.doctorCommand = void 0;
|
|
43
|
+
const hooks_mux_core_1 = require("@a5c-ai/hooks-mux-core");
|
|
44
|
+
const adapter_loader_1 = require("../adapter-loader");
|
|
45
|
+
const fs = __importStar(require("fs"));
|
|
46
|
+
const path = __importStar(require("path"));
|
|
47
|
+
const ALL_CANONICAL_PHASES = [
|
|
48
|
+
'session.start', 'session.end', 'session.cwd_changed', 'session.file_changed',
|
|
49
|
+
'session.config_changed', 'session.compact.before', 'session.compact.after',
|
|
50
|
+
'turn.user_prompt_submitted', 'turn.before_agent', 'turn.after_agent',
|
|
51
|
+
'turn.stop', 'turn.error',
|
|
52
|
+
'model.before_request', 'model.after_response',
|
|
53
|
+
'planner.before_tool_selection',
|
|
54
|
+
'tool.before', 'tool.after', 'tool.error',
|
|
55
|
+
'tool.permission_request', 'tool.permission_denied',
|
|
56
|
+
'subagent.start', 'subagent.end',
|
|
57
|
+
'notification', 'message.received', 'message.sending', 'message.sent',
|
|
58
|
+
'mcp.elicitation', 'mcp.elicitation_result',
|
|
59
|
+
];
|
|
60
|
+
function buildCapabilityProfile(mappings) {
|
|
61
|
+
const supported = new Set();
|
|
62
|
+
const blockable = new Set();
|
|
63
|
+
const mutable = new Set();
|
|
64
|
+
const lossy = new Set();
|
|
65
|
+
const emulated = new Set();
|
|
66
|
+
for (const m of mappings) {
|
|
67
|
+
supported.add(m.canonicalPhase);
|
|
68
|
+
if (m.blockCapability)
|
|
69
|
+
blockable.add(m.canonicalPhase);
|
|
70
|
+
if (m.mutationCapability)
|
|
71
|
+
mutable.add(m.canonicalPhase);
|
|
72
|
+
if (m.supportLevel === 'lossy')
|
|
73
|
+
lossy.add(m.canonicalPhase);
|
|
74
|
+
if (m.supportLevel === 'emulated')
|
|
75
|
+
emulated.add(m.canonicalPhase);
|
|
76
|
+
}
|
|
77
|
+
const unsupported = ALL_CANONICAL_PHASES.filter((p) => !supported.has(p));
|
|
78
|
+
return {
|
|
79
|
+
supportedPhases: [...supported],
|
|
80
|
+
unsupportedPhases: unsupported,
|
|
81
|
+
blockablePhases: [...blockable],
|
|
82
|
+
mutablePhases: [...mutable],
|
|
83
|
+
lossyPhases: [...lossy],
|
|
84
|
+
emulatedPhases: [...emulated],
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
function analyzeAdapter(name) {
|
|
88
|
+
const warnings = [];
|
|
89
|
+
const packageName = `@a5c-ai/hooks-mux-adapter-${name}`;
|
|
90
|
+
try {
|
|
91
|
+
const loaded = (0, adapter_loader_1.loadAdapter)(name);
|
|
92
|
+
const caps = loaded.capabilities;
|
|
93
|
+
const profile = buildCapabilityProfile(loaded.phaseMappings);
|
|
94
|
+
// Generate warnings based on capability gaps
|
|
95
|
+
if (!caps.supportsBlock) {
|
|
96
|
+
warnings.push('Adapter does not support blocking decisions (deny/ask will be downgraded to noop)');
|
|
97
|
+
}
|
|
98
|
+
if (!caps.supportsNativeAdditionalContext) {
|
|
99
|
+
warnings.push('Adapter does not support native additionalContext injection');
|
|
100
|
+
}
|
|
101
|
+
if (caps.envPersistenceMode === 'none') {
|
|
102
|
+
warnings.push('No env persistence -- session context will not propagate to downstream tools');
|
|
103
|
+
}
|
|
104
|
+
if (caps.sessionIdQuality === 'synthetic' || caps.sessionIdQuality === 'none') {
|
|
105
|
+
warnings.push('Session ID is synthetic or unavailable -- cross-hook state may be unreliable');
|
|
106
|
+
}
|
|
107
|
+
if (caps.toolInterceptionScope === 'none') {
|
|
108
|
+
warnings.push('No tool interception -- tool.before/tool.after phases will be unsupported');
|
|
109
|
+
}
|
|
110
|
+
if (loaded.phaseMappings.length === 0) {
|
|
111
|
+
warnings.push('No phase mappings found -- all events will map to "unknown" phase');
|
|
112
|
+
}
|
|
113
|
+
// Capability gap warnings
|
|
114
|
+
if (profile.unsupportedPhases.length > 0) {
|
|
115
|
+
warnings.push(`${profile.unsupportedPhases.length} canonical phases are unsupported: ${profile.unsupportedPhases.slice(0, 5).join(', ')}${profile.unsupportedPhases.length > 5 ? '...' : ''}`);
|
|
116
|
+
}
|
|
117
|
+
if (profile.lossyPhases.length > 0) {
|
|
118
|
+
warnings.push(`${profile.lossyPhases.length} phases have lossy mapping: ${profile.lossyPhases.join(', ')}`);
|
|
119
|
+
}
|
|
120
|
+
if (!caps.supportsAsk && caps.supportsBlock) {
|
|
121
|
+
warnings.push('Adapter supports block but not ask -- interactive approval flows will not work');
|
|
122
|
+
}
|
|
123
|
+
if (!caps.supportsToolInputMutation && !caps.supportsToolResultMutation) {
|
|
124
|
+
warnings.push('No tool mutation support -- toolMutation results will be ignored');
|
|
125
|
+
}
|
|
126
|
+
if (caps.notes) {
|
|
127
|
+
for (const note of caps.notes) {
|
|
128
|
+
warnings.push(`Note: ${note}`);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
const phaseSummaries = loaded.phaseMappings.map((m) => ({
|
|
132
|
+
canonicalPhase: m.canonicalPhase,
|
|
133
|
+
nativeHook: m.nativeHook,
|
|
134
|
+
supportLevel: m.supportLevel,
|
|
135
|
+
blockCapability: m.blockCapability,
|
|
136
|
+
mutationCapability: m.mutationCapability,
|
|
137
|
+
}));
|
|
138
|
+
return {
|
|
139
|
+
name,
|
|
140
|
+
available: true,
|
|
141
|
+
packageName,
|
|
142
|
+
capabilities: caps,
|
|
143
|
+
phaseMappings: phaseSummaries,
|
|
144
|
+
capabilityProfile: profile,
|
|
145
|
+
warnings,
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
catch (err) {
|
|
149
|
+
return {
|
|
150
|
+
name,
|
|
151
|
+
available: false,
|
|
152
|
+
packageName,
|
|
153
|
+
warnings: [],
|
|
154
|
+
error: err instanceof Error ? err.message : String(err),
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
async function checkSessionHealth(sessionDir, staleThresholdHours) {
|
|
159
|
+
const report = {
|
|
160
|
+
sessionDir,
|
|
161
|
+
dirExists: false,
|
|
162
|
+
sessionCount: 0,
|
|
163
|
+
staleSessions: [],
|
|
164
|
+
corruptSessions: [],
|
|
165
|
+
totalSizeBytes: 0,
|
|
166
|
+
errors: [],
|
|
167
|
+
};
|
|
168
|
+
try {
|
|
169
|
+
await fs.promises.access(sessionDir);
|
|
170
|
+
report.dirExists = true;
|
|
171
|
+
}
|
|
172
|
+
catch {
|
|
173
|
+
return report;
|
|
174
|
+
}
|
|
175
|
+
let entries;
|
|
176
|
+
try {
|
|
177
|
+
entries = await fs.promises.readdir(sessionDir);
|
|
178
|
+
}
|
|
179
|
+
catch (err) {
|
|
180
|
+
report.errors.push(`Failed to read session directory: ${err instanceof Error ? err.message : String(err)}`);
|
|
181
|
+
return report;
|
|
182
|
+
}
|
|
183
|
+
const jsonFiles = entries.filter((e) => e.endsWith('.json') && !e.includes('.corrupt.') && !e.endsWith('.lock'));
|
|
184
|
+
report.sessionCount = jsonFiles.length;
|
|
185
|
+
const now = Date.now();
|
|
186
|
+
for (const file of jsonFiles) {
|
|
187
|
+
const filePath = path.join(sessionDir, file);
|
|
188
|
+
try {
|
|
189
|
+
const stat = await fs.promises.stat(filePath);
|
|
190
|
+
report.totalSizeBytes += stat.size;
|
|
191
|
+
const raw = await fs.promises.readFile(filePath, 'utf-8');
|
|
192
|
+
const envelope = JSON.parse(raw);
|
|
193
|
+
const session = envelope.session;
|
|
194
|
+
if (!session || !session.updatedAt || !session.sessionId) {
|
|
195
|
+
report.corruptSessions.push(file);
|
|
196
|
+
continue;
|
|
197
|
+
}
|
|
198
|
+
const updatedAt = new Date(session.updatedAt).getTime();
|
|
199
|
+
const ageHours = (now - updatedAt) / (1000 * 60 * 60);
|
|
200
|
+
if (ageHours > staleThresholdHours) {
|
|
201
|
+
report.staleSessions.push({
|
|
202
|
+
sessionId: session.sessionId,
|
|
203
|
+
lastUpdated: session.updatedAt,
|
|
204
|
+
ageHours: Math.round(ageHours * 10) / 10,
|
|
205
|
+
adapter: session.adapter ?? 'unknown',
|
|
206
|
+
fileSizeBytes: stat.size,
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
catch {
|
|
211
|
+
report.corruptSessions.push(file);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
// Check for corrupt backup files
|
|
215
|
+
const corruptBackups = entries.filter((e) => e.includes('.corrupt.'));
|
|
216
|
+
if (corruptBackups.length > 0) {
|
|
217
|
+
report.errors.push(`${corruptBackups.length} corrupt backup file(s) found in session directory`);
|
|
218
|
+
}
|
|
219
|
+
return report;
|
|
220
|
+
}
|
|
221
|
+
exports.doctorCommand = {
|
|
222
|
+
command: 'doctor',
|
|
223
|
+
describe: 'Report adapter capability profile, session health, and integration warnings',
|
|
224
|
+
builder: (yargs) => yargs
|
|
225
|
+
.option('adapter', {
|
|
226
|
+
type: 'string',
|
|
227
|
+
describe: 'Specific adapter to check (omit for all known adapters)',
|
|
228
|
+
})
|
|
229
|
+
.option('json', {
|
|
230
|
+
type: 'boolean',
|
|
231
|
+
default: false,
|
|
232
|
+
describe: 'Output JSON format',
|
|
233
|
+
})
|
|
234
|
+
.option('session-dir', {
|
|
235
|
+
type: 'string',
|
|
236
|
+
describe: 'Session store directory to check (defaults to platform default)',
|
|
237
|
+
})
|
|
238
|
+
.option('stale-threshold', {
|
|
239
|
+
type: 'number',
|
|
240
|
+
default: 24,
|
|
241
|
+
describe: 'Hours after which a session is considered stale',
|
|
242
|
+
}),
|
|
243
|
+
handler: async (args) => {
|
|
244
|
+
const adapterNames = args.adapter ? [args.adapter] : [...adapter_loader_1.KNOWN_ADAPTERS];
|
|
245
|
+
const adapterReports = adapterNames.map(analyzeAdapter);
|
|
246
|
+
const sessionDir = args['session-dir'] ?? (0, hooks_mux_core_1.getDefaultSessionDir)();
|
|
247
|
+
const sessionHealth = await checkSessionHealth(sessionDir, args['stale-threshold'] ?? 24);
|
|
248
|
+
const report = {
|
|
249
|
+
timestamp: new Date().toISOString(),
|
|
250
|
+
adapters: adapterReports,
|
|
251
|
+
sessionHealth,
|
|
252
|
+
};
|
|
253
|
+
if (args.json) {
|
|
254
|
+
process.stdout.write(JSON.stringify(report, null, 2) + '\n');
|
|
255
|
+
return;
|
|
256
|
+
}
|
|
257
|
+
// Human-readable output
|
|
258
|
+
console.log('=== Hooks Proxy Doctor ===');
|
|
259
|
+
console.log('');
|
|
260
|
+
// Adapter reports
|
|
261
|
+
console.log('--- Adapters ---');
|
|
262
|
+
for (const r of adapterReports) {
|
|
263
|
+
if (!r.available) {
|
|
264
|
+
console.log(`[x] ${r.name} (${r.packageName}): not available`);
|
|
265
|
+
if (r.error) {
|
|
266
|
+
console.log(` ${r.error}`);
|
|
267
|
+
}
|
|
268
|
+
console.log('');
|
|
269
|
+
continue;
|
|
270
|
+
}
|
|
271
|
+
const caps = r.capabilities;
|
|
272
|
+
const profile = r.capabilityProfile;
|
|
273
|
+
console.log(`[ok] ${r.name} (${r.packageName})`);
|
|
274
|
+
console.log(` Family: ${caps.family}`);
|
|
275
|
+
console.log(` Session ID: ${caps.sessionIdQuality}`);
|
|
276
|
+
console.log(` Env persistence: ${caps.envPersistenceMode}`);
|
|
277
|
+
console.log(` Blocking: ${caps.supportsBlock ? 'yes' : 'no'}`);
|
|
278
|
+
console.log(` Ask: ${caps.supportsAsk ? 'yes' : 'no'}`);
|
|
279
|
+
console.log(` Tool scope: ${caps.toolInterceptionScope}`);
|
|
280
|
+
console.log(` Tool mutation: input=${caps.supportsToolInputMutation ? 'yes' : 'no'} result=${caps.supportsToolResultMutation ? 'yes' : 'no'}`);
|
|
281
|
+
console.log(` Phases: ${profile.supportedPhases.length} supported, ${profile.unsupportedPhases.length} unsupported`);
|
|
282
|
+
if (profile.lossyPhases.length > 0) {
|
|
283
|
+
console.log(` Lossy phases: ${profile.lossyPhases.join(', ')}`);
|
|
284
|
+
}
|
|
285
|
+
if (profile.emulatedPhases.length > 0) {
|
|
286
|
+
console.log(` Emulated phases: ${profile.emulatedPhases.join(', ')}`);
|
|
287
|
+
}
|
|
288
|
+
if (r.warnings.length > 0) {
|
|
289
|
+
console.log(' Warnings:');
|
|
290
|
+
for (const w of r.warnings) {
|
|
291
|
+
console.log(` - ${w}`);
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
console.log('');
|
|
295
|
+
}
|
|
296
|
+
// Session health
|
|
297
|
+
console.log('--- Session Store ---');
|
|
298
|
+
console.log(` Directory: ${sessionHealth.sessionDir}`);
|
|
299
|
+
console.log(` Exists: ${sessionHealth.dirExists ? 'yes' : 'no'}`);
|
|
300
|
+
if (sessionHealth.dirExists) {
|
|
301
|
+
console.log(` Sessions: ${sessionHealth.sessionCount}`);
|
|
302
|
+
console.log(` Total size: ${formatBytes(sessionHealth.totalSizeBytes)}`);
|
|
303
|
+
if (sessionHealth.staleSessions.length > 0) {
|
|
304
|
+
console.log(` Stale (>${args['stale-threshold'] ?? 24}h): ${sessionHealth.staleSessions.length}`);
|
|
305
|
+
for (const s of sessionHealth.staleSessions) {
|
|
306
|
+
console.log(` - ${s.sessionId} (${s.adapter}, ${s.ageHours}h old, ${formatBytes(s.fileSizeBytes)})`);
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
if (sessionHealth.corruptSessions.length > 0) {
|
|
310
|
+
console.log(` Corrupt: ${sessionHealth.corruptSessions.length}`);
|
|
311
|
+
for (const c of sessionHealth.corruptSessions) {
|
|
312
|
+
console.log(` - ${c}`);
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
if (sessionHealth.errors.length > 0) {
|
|
316
|
+
console.log(' Errors:');
|
|
317
|
+
for (const e of sessionHealth.errors) {
|
|
318
|
+
console.log(` - ${e}`);
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
console.log('');
|
|
323
|
+
},
|
|
324
|
+
};
|
|
325
|
+
function formatBytes(bytes) {
|
|
326
|
+
if (bytes === 0)
|
|
327
|
+
return '0 B';
|
|
328
|
+
const units = ['B', 'KB', 'MB', 'GB'];
|
|
329
|
+
const i = Math.floor(Math.log(bytes) / Math.log(1024));
|
|
330
|
+
const val = bytes / Math.pow(1024, i);
|
|
331
|
+
return `${val.toFixed(i > 0 ? 1 : 0)} ${units[i]}`;
|
|
332
|
+
}
|
|
333
|
+
//# sourceMappingURL=doctor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../../src/cli/commands/doctor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* exec command — Run a command with restored session context.
|
|
3
|
+
*
|
|
4
|
+
* Spec section 18.2.
|
|
5
|
+
*
|
|
6
|
+
* Pipeline:
|
|
7
|
+
* 1. Load session state
|
|
8
|
+
* 2. Materialize env/context into subprocess
|
|
9
|
+
* 3. Exec target command
|
|
10
|
+
*/
|
|
11
|
+
import type { CommandModule } from 'yargs';
|
|
12
|
+
interface ExecArgs {
|
|
13
|
+
'session-id': string;
|
|
14
|
+
_: (string | number)[];
|
|
15
|
+
}
|
|
16
|
+
export declare const execCommand: CommandModule<object, ExecArgs>;
|
|
17
|
+
export {};
|
|
18
|
+
//# sourceMappingURL=exec.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exec.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/exec.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAM3C,UAAU,QAAQ;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,CAAC,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;CACxB;AAED,eAAO,MAAM,WAAW,EAAE,aAAa,CAAC,MAAM,EAAE,QAAQ,CAyEvD,CAAC"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* exec command — Run a command with restored session context.
|
|
4
|
+
*
|
|
5
|
+
* Spec section 18.2.
|
|
6
|
+
*
|
|
7
|
+
* Pipeline:
|
|
8
|
+
* 1. Load session state
|
|
9
|
+
* 2. Materialize env/context into subprocess
|
|
10
|
+
* 3. Exec target command
|
|
11
|
+
*/
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.execCommand = void 0;
|
|
14
|
+
const child_process_1 = require("child_process");
|
|
15
|
+
const hooks_mux_core_1 = require("@a5c-ai/hooks-mux-core");
|
|
16
|
+
exports.execCommand = {
|
|
17
|
+
command: 'exec',
|
|
18
|
+
describe: 'Run a command with restored session context',
|
|
19
|
+
builder: (yargs) => yargs
|
|
20
|
+
.option('session-id', {
|
|
21
|
+
type: 'string',
|
|
22
|
+
demandOption: true,
|
|
23
|
+
describe: 'Session ID to load context from',
|
|
24
|
+
})
|
|
25
|
+
.parserConfiguration({ 'populate--': true })
|
|
26
|
+
.example('$0 exec --session-id abc123 -- echo hello', 'Run "echo hello" with session abc123 context'),
|
|
27
|
+
handler: async (args) => {
|
|
28
|
+
const sessionId = args['session-id'];
|
|
29
|
+
const command = args['--'] ?? [];
|
|
30
|
+
if (command.length === 0) {
|
|
31
|
+
console.error('Error: No command specified after --');
|
|
32
|
+
process.exitCode = 1;
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
// Create a session store shim for materializeExecContext
|
|
36
|
+
const sessionStore = {
|
|
37
|
+
loadSession: (id) => (0, hooks_mux_core_1.loadSession)(id),
|
|
38
|
+
saveSession: async () => { },
|
|
39
|
+
};
|
|
40
|
+
// Materialize execution context
|
|
41
|
+
let childEnv;
|
|
42
|
+
try {
|
|
43
|
+
const materialized = await (0, hooks_mux_core_1.materializeExecContext)({
|
|
44
|
+
sessionId,
|
|
45
|
+
sessionStore,
|
|
46
|
+
});
|
|
47
|
+
// Merge materialized env with current process env
|
|
48
|
+
childEnv = {
|
|
49
|
+
...process.env,
|
|
50
|
+
...materialized.env,
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
// Fallback: inject at least AGENT_SESSION_ID even if session not found
|
|
55
|
+
childEnv = {
|
|
56
|
+
...process.env,
|
|
57
|
+
AGENT_SESSION_ID: sessionId,
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
// Spawn the target command
|
|
61
|
+
const [cmd, ...cmdArgs] = command;
|
|
62
|
+
const child = (0, child_process_1.spawn)(cmd, cmdArgs, {
|
|
63
|
+
env: childEnv,
|
|
64
|
+
stdio: 'inherit',
|
|
65
|
+
});
|
|
66
|
+
child.on('error', (err) => {
|
|
67
|
+
console.error(`Failed to execute command: ${err.message}`);
|
|
68
|
+
process.exitCode = 1;
|
|
69
|
+
});
|
|
70
|
+
child.on('close', (code) => {
|
|
71
|
+
process.exitCode = code ?? 0;
|
|
72
|
+
});
|
|
73
|
+
// Wait for the child process to finish
|
|
74
|
+
await new Promise((resolve) => {
|
|
75
|
+
child.on('close', () => resolve());
|
|
76
|
+
});
|
|
77
|
+
},
|
|
78
|
+
};
|
|
79
|
+
//# sourceMappingURL=exec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exec.js","sourceRoot":"","sources":["../../../src/cli/commands/exec.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;;AAEH,iDAAsC;AAEtC,2DAGgC;AAOnB,QAAA,WAAW,GAAoC;IAC1D,OAAO,EAAE,MAAM;IACf,QAAQ,EAAE,6CAA6C;IACvD,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CACjB,KAAK;SACF,MAAM,CAAC,YAAY,EAAE;QACpB,IAAI,EAAE,QAAQ;QACd,YAAY,EAAE,IAAI;QAClB,QAAQ,EAAE,iCAAiC;KAC5C,CAAC;SACD,mBAAmB,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;SAC3C,OAAO,CACN,2CAA2C,EAC3C,8CAA8C,CAC/C;IACL,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QACtB,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC;QACrC,MAAM,OAAO,GAAI,IAAI,CAAC,IAAI,CAA0B,IAAI,EAAE,CAAC;QAE3D,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;YACtD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACrB,OAAO;QACT,CAAC;QAED,yDAAyD;QACzD,MAAM,YAAY,GAAG;YACnB,WAAW,EAAE,CAAC,EAAU,EAAE,EAAE,CAAC,IAAA,4BAAW,EAAC,EAAE,CAAC;YAC5C,WAAW,EAAE,KAAK,IAAI,EAAE,GAA6B,CAAC;SACvD,CAAC;QAEF,gCAAgC;QAChC,IAAI,QAA4C,CAAC;QACjD,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,MAAM,IAAA,uCAAsB,EAAC;gBAChD,SAAS;gBACT,YAAY;aACb,CAAC,CAAC;YAEH,kDAAkD;YAClD,QAAQ,GAAG;gBACT,GAAG,OAAO,CAAC,GAAG;gBACd,GAAG,YAAY,CAAC,GAAG;aACpB,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,uEAAuE;YACvE,QAAQ,GAAG;gBACT,GAAG,OAAO,CAAC,GAAG;gBACd,gBAAgB,EAAE,SAAS;aAC5B,CAAC;QACJ,CAAC;QAED,2BAA2B;QAC3B,MAAM,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,OAAO,CAAC;QAClC,MAAM,KAAK,GAAG,IAAA,qBAAK,EAAC,GAAG,EAAE,OAAO,EAAE;YAChC,GAAG,EAAE,QAAQ;YACb,KAAK,EAAE,SAAS;SACjB,CAAC,CAAC;QAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YACxB,OAAO,CAAC,KAAK,CAAC,8BAA8B,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YAC3D,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACvB,CAAC,CAAC,CAAC;QAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YACzB,OAAO,CAAC,QAAQ,GAAG,IAAI,IAAI,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC;QAEH,uCAAuC;QACvC,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YAClC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;IACL,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* invoke command — Primary hook entrypoint.
|
|
3
|
+
*
|
|
4
|
+
* Spec section 18.1.
|
|
5
|
+
*
|
|
6
|
+
* Pipeline:
|
|
7
|
+
* 1. Read stdin when adapter expects it
|
|
8
|
+
* 2. Normalize event via core normalizeEvent
|
|
9
|
+
* 3. Resolve/load session context via core session store
|
|
10
|
+
* 4. Run handler or fan-out plan via core runPlan
|
|
11
|
+
* 5. Merge results via core mergeResults
|
|
12
|
+
* 6. Persist session store
|
|
13
|
+
* 7. Apply propagation backend
|
|
14
|
+
* 8. Emit adapter-native output
|
|
15
|
+
*/
|
|
16
|
+
import type { CommandModule } from 'yargs';
|
|
17
|
+
interface InvokeArgs {
|
|
18
|
+
adapter: string;
|
|
19
|
+
handler?: string[];
|
|
20
|
+
'bootstrap-only'?: boolean;
|
|
21
|
+
'session-id'?: string;
|
|
22
|
+
json?: boolean;
|
|
23
|
+
}
|
|
24
|
+
export declare const invokeCommand: CommandModule<object, InvokeArgs>;
|
|
25
|
+
export {};
|
|
26
|
+
//# sourceMappingURL=invoke.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"invoke.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/invoke.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAgB3C,UAAU,UAAU;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AA6CD,eAAO,MAAM,aAAa,EAAE,aAAa,CAAC,MAAM,EAAE,UAAU,CAiJ3D,CAAC"}
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* invoke command — Primary hook entrypoint.
|
|
4
|
+
*
|
|
5
|
+
* Spec section 18.1.
|
|
6
|
+
*
|
|
7
|
+
* Pipeline:
|
|
8
|
+
* 1. Read stdin when adapter expects it
|
|
9
|
+
* 2. Normalize event via core normalizeEvent
|
|
10
|
+
* 3. Resolve/load session context via core session store
|
|
11
|
+
* 4. Run handler or fan-out plan via core runPlan
|
|
12
|
+
* 5. Merge results via core mergeResults
|
|
13
|
+
* 6. Persist session store
|
|
14
|
+
* 7. Apply propagation backend
|
|
15
|
+
* 8. Emit adapter-native output
|
|
16
|
+
*/
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
exports.invokeCommand = void 0;
|
|
19
|
+
const hooks_mux_core_1 = require("@a5c-ai/hooks-mux-core");
|
|
20
|
+
const adapter_loader_1 = require("../adapter-loader");
|
|
21
|
+
const stdin_1 = require("../stdin");
|
|
22
|
+
/**
|
|
23
|
+
* Try to parse a string as JSON, returning undefined on failure.
|
|
24
|
+
*/
|
|
25
|
+
function tryParseJson(raw) {
|
|
26
|
+
const trimmed = raw.trim();
|
|
27
|
+
if (!trimmed)
|
|
28
|
+
return undefined;
|
|
29
|
+
try {
|
|
30
|
+
return JSON.parse(trimmed);
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
return undefined;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Resolve the session ID from explicit flag, env, or stdin payload.
|
|
38
|
+
*/
|
|
39
|
+
function resolveSessionId(explicitSessionId, stdinData, env) {
|
|
40
|
+
if (explicitSessionId)
|
|
41
|
+
return explicitSessionId;
|
|
42
|
+
if (env['AGENT_SESSION_ID'])
|
|
43
|
+
return env['AGENT_SESSION_ID'];
|
|
44
|
+
if (stdinData && typeof stdinData['session_id'] === 'string') {
|
|
45
|
+
return stdinData['session_id'];
|
|
46
|
+
}
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Parse --handler values into HandlerRef objects.
|
|
51
|
+
* Format: "source:handler" or just "source" (handler defaults to "handler").
|
|
52
|
+
*/
|
|
53
|
+
function parseHandlerArgs(handlers) {
|
|
54
|
+
return handlers.map((h) => {
|
|
55
|
+
const colonIdx = h.indexOf(':');
|
|
56
|
+
if (colonIdx >= 0) {
|
|
57
|
+
return { source: h.slice(0, colonIdx), handler: h.slice(colonIdx + 1) };
|
|
58
|
+
}
|
|
59
|
+
return { source: h, handler: 'handler' };
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
exports.invokeCommand = {
|
|
63
|
+
command: 'invoke',
|
|
64
|
+
describe: 'Primary hook entrypoint — normalize, execute, merge, propagate',
|
|
65
|
+
builder: (yargs) => yargs
|
|
66
|
+
.option('adapter', {
|
|
67
|
+
type: 'string',
|
|
68
|
+
demandOption: true,
|
|
69
|
+
describe: 'Adapter name (e.g. claude, codex, copilot) or "auto" to detect from environment',
|
|
70
|
+
})
|
|
71
|
+
.option('handler', {
|
|
72
|
+
type: 'array',
|
|
73
|
+
string: true,
|
|
74
|
+
describe: 'Shell command handler(s) in command:label format',
|
|
75
|
+
})
|
|
76
|
+
.option('bootstrap-only', {
|
|
77
|
+
type: 'boolean',
|
|
78
|
+
default: false,
|
|
79
|
+
describe: 'Only bootstrap session context, skip handler execution',
|
|
80
|
+
})
|
|
81
|
+
.option('session-id', {
|
|
82
|
+
type: 'string',
|
|
83
|
+
describe: 'Explicit session ID override',
|
|
84
|
+
})
|
|
85
|
+
.option('json', {
|
|
86
|
+
type: 'boolean',
|
|
87
|
+
default: false,
|
|
88
|
+
describe: 'Output JSON format',
|
|
89
|
+
}),
|
|
90
|
+
handler: async (args) => {
|
|
91
|
+
// 1. Load adapter
|
|
92
|
+
const loaded = (0, adapter_loader_1.loadAdapter)(args.adapter);
|
|
93
|
+
// 2. Read stdin
|
|
94
|
+
const rawStdin = await (0, stdin_1.readStdin)();
|
|
95
|
+
const stdinPayload = tryParseJson(rawStdin);
|
|
96
|
+
const stdinData = (typeof stdinPayload === 'object' && stdinPayload !== null && !Array.isArray(stdinPayload))
|
|
97
|
+
? stdinPayload
|
|
98
|
+
: undefined;
|
|
99
|
+
// Determine raw event name from env or stdin
|
|
100
|
+
const env = process.env;
|
|
101
|
+
const rawEventName = env['HOOKS_PROXY_EVENT_NAME']
|
|
102
|
+
?? stdinData?.['event_name']
|
|
103
|
+
?? 'unknown';
|
|
104
|
+
// 3. Normalize event
|
|
105
|
+
const event = (0, hooks_mux_core_1.normalizeEvent)({
|
|
106
|
+
adapter: args.adapter,
|
|
107
|
+
rawEventName,
|
|
108
|
+
stdinPayload,
|
|
109
|
+
env,
|
|
110
|
+
adapterMappings: loaded.phaseMappings,
|
|
111
|
+
});
|
|
112
|
+
// 4. Resolve session
|
|
113
|
+
const sessionId = resolveSessionId(args['session-id'], stdinData, env);
|
|
114
|
+
let session = null;
|
|
115
|
+
if (sessionId) {
|
|
116
|
+
session = await (0, hooks_mux_core_1.loadSession)(sessionId);
|
|
117
|
+
if (!session) {
|
|
118
|
+
// Create a new session
|
|
119
|
+
session = {
|
|
120
|
+
version: 'a5c.hooks.session.v1',
|
|
121
|
+
sessionId,
|
|
122
|
+
adapter: args.adapter,
|
|
123
|
+
createdAt: new Date().toISOString(),
|
|
124
|
+
updatedAt: new Date().toISOString(),
|
|
125
|
+
cwd: event.execution.cwd ?? undefined,
|
|
126
|
+
transcriptPath: event.execution.transcriptPath ?? undefined,
|
|
127
|
+
persistedEnv: { ...event.env.persisted },
|
|
128
|
+
contextVars: {},
|
|
129
|
+
contextFragments: [],
|
|
130
|
+
metadata: {},
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
// Inject session context into event execution
|
|
134
|
+
event.execution.sessionId = sessionId;
|
|
135
|
+
if (session.persistedEnv) {
|
|
136
|
+
Object.assign(event.execution.persistedEnv, session.persistedEnv);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
// 5. Bootstrap-only mode: persist session and exit
|
|
140
|
+
if (args['bootstrap-only']) {
|
|
141
|
+
if (session) {
|
|
142
|
+
await (0, hooks_mux_core_1.saveSession)(session);
|
|
143
|
+
}
|
|
144
|
+
if (args.json) {
|
|
145
|
+
process.stdout.write(JSON.stringify({ status: 'bootstrapped', sessionId }, null, 2) + '\n');
|
|
146
|
+
}
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
// 6. Resolve execution plan
|
|
150
|
+
const handlers = args.handler ? parseHandlerArgs(args.handler) : [];
|
|
151
|
+
const plan = (0, hooks_mux_core_1.resolveHookPlan)({
|
|
152
|
+
phase: event.phase,
|
|
153
|
+
handlers,
|
|
154
|
+
});
|
|
155
|
+
// 7. Run plan and merge
|
|
156
|
+
let merged;
|
|
157
|
+
if (plan.length > 0) {
|
|
158
|
+
const results = await (0, hooks_mux_core_1.runPlan)(event, plan, { capabilities: loaded.capabilities });
|
|
159
|
+
merged = (0, hooks_mux_core_1.mergeResults)(results);
|
|
160
|
+
}
|
|
161
|
+
else {
|
|
162
|
+
// No handlers: produce a noop result
|
|
163
|
+
merged = (0, hooks_mux_core_1.mergeResults)([{ decision: 'noop' }]);
|
|
164
|
+
}
|
|
165
|
+
// 8. Persist session updates
|
|
166
|
+
if (session && sessionId) {
|
|
167
|
+
if (Object.keys(merged.persistEnv).length > 0) {
|
|
168
|
+
session.persistedEnv = { ...session.persistedEnv, ...merged.persistEnv };
|
|
169
|
+
}
|
|
170
|
+
if (Object.keys(merged.contextVars).length > 0) {
|
|
171
|
+
session.contextVars = { ...session.contextVars, ...merged.contextVars };
|
|
172
|
+
}
|
|
173
|
+
for (const key of merged.unsetEnv) {
|
|
174
|
+
delete session.persistedEnv[key];
|
|
175
|
+
}
|
|
176
|
+
session.updatedAt = new Date().toISOString();
|
|
177
|
+
await (0, hooks_mux_core_1.saveSession)(session);
|
|
178
|
+
}
|
|
179
|
+
// 9. Apply propagation backend
|
|
180
|
+
if (Object.keys(merged.persistEnv).length > 0) {
|
|
181
|
+
const backend = loaded.capabilities.envPersistenceMode;
|
|
182
|
+
await (0, hooks_mux_core_1.propagateEnv)(backend, merged.persistEnv, {
|
|
183
|
+
nativeEnvFilePath: env['CLAUDE_ENV_FILE'] ?? env['HOOKS_PROXY_ENV_FILE'],
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
// 10. Emit adapter-native output
|
|
187
|
+
const adapted = (0, hooks_mux_core_1.adaptOutput)({
|
|
188
|
+
adapter: args.adapter,
|
|
189
|
+
mergedResult: merged,
|
|
190
|
+
nativeInput: stdinPayload,
|
|
191
|
+
capabilities: loaded.capabilities,
|
|
192
|
+
});
|
|
193
|
+
process.stdout.write(JSON.stringify(adapted.output, null, args.json ? 2 : 0) + '\n');
|
|
194
|
+
},
|
|
195
|
+
};
|
|
196
|
+
//# sourceMappingURL=invoke.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"invoke.js","sourceRoot":"","sources":["../../../src/cli/commands/invoke.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* show-session command — Inspect current session state.
|
|
3
|
+
*
|
|
4
|
+
* Spec section 18.4.
|
|
5
|
+
*/
|
|
6
|
+
import type { CommandModule } from 'yargs';
|
|
7
|
+
interface ShowSessionArgs {
|
|
8
|
+
'session-id': string;
|
|
9
|
+
json?: boolean;
|
|
10
|
+
}
|
|
11
|
+
export declare const showSessionCommand: CommandModule<object, ShowSessionArgs>;
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=show-session.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"show-session.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/show-session.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAG3C,UAAU,eAAe;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,eAAO,MAAM,kBAAkB,EAAE,aAAa,CAAC,MAAM,EAAE,eAAe,CA0CrE,CAAC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* show-session command — Inspect current session state.
|
|
4
|
+
*
|
|
5
|
+
* Spec section 18.4.
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.showSessionCommand = void 0;
|
|
9
|
+
const hooks_mux_core_1 = require("@a5c-ai/hooks-mux-core");
|
|
10
|
+
exports.showSessionCommand = {
|
|
11
|
+
command: 'show-session',
|
|
12
|
+
describe: 'Inspect current session state',
|
|
13
|
+
builder: (yargs) => yargs
|
|
14
|
+
.option('session-id', {
|
|
15
|
+
type: 'string',
|
|
16
|
+
demandOption: true,
|
|
17
|
+
describe: 'Session ID to inspect',
|
|
18
|
+
})
|
|
19
|
+
.option('json', {
|
|
20
|
+
type: 'boolean',
|
|
21
|
+
default: false,
|
|
22
|
+
describe: 'Output JSON format',
|
|
23
|
+
}),
|
|
24
|
+
handler: async (args) => {
|
|
25
|
+
const session = await (0, hooks_mux_core_1.loadSession)(args['session-id']);
|
|
26
|
+
if (!session) {
|
|
27
|
+
if (args.json) {
|
|
28
|
+
process.stdout.write(JSON.stringify({ error: 'Session not found', sessionId: args['session-id'] }) + '\n');
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
console.error(`Session not found: ${args['session-id']}`);
|
|
32
|
+
}
|
|
33
|
+
process.exitCode = 1;
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
if (args.json) {
|
|
37
|
+
process.stdout.write(JSON.stringify(session, null, 2) + '\n');
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
console.log(`Session: ${session.sessionId}`);
|
|
41
|
+
console.log(` Adapter: ${session.adapter}`);
|
|
42
|
+
console.log(` Created: ${session.createdAt}`);
|
|
43
|
+
console.log(` Updated: ${session.updatedAt}`);
|
|
44
|
+
if (session.cwd)
|
|
45
|
+
console.log(` CWD: ${session.cwd}`);
|
|
46
|
+
const envCount = Object.keys(session.persistedEnv).length;
|
|
47
|
+
console.log(` Env vars: ${envCount}`);
|
|
48
|
+
const varCount = Object.keys(session.contextVars).length;
|
|
49
|
+
console.log(` Context: ${varCount} vars, ${session.contextFragments.length} fragments`);
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
};
|
|
53
|
+
//# sourceMappingURL=show-session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"show-session.js","sourceRoot":"","sources":["../../../src/cli/commands/show-session.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAGH,2DAAqD;AAOxC,QAAA,kBAAkB,GAA2C;IACxE,OAAO,EAAE,cAAc;IACvB,QAAQ,EAAE,+BAA+B;IACzC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CACjB,KAAK;SACF,MAAM,CAAC,YAAY,EAAE;QACpB,IAAI,EAAE,QAAQ;QACd,YAAY,EAAE,IAAI;QAClB,QAAQ,EAAE,uBAAuB;KAClC,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,OAAO,GAAG,MAAM,IAAA,4BAAW,EAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;QAEtD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBACd,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,mBAAmB,EAAE,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;YAC7G,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CAAC,sBAAsB,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;YAC5D,CAAC;YACD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACrB,OAAO;QACT,CAAC;QAED,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;QAChE,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,YAAY,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;YAC7C,OAAO,CAAC,GAAG,CAAC,eAAe,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;YAC9C,OAAO,CAAC,GAAG,CAAC,eAAe,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;YAChD,OAAO,CAAC,GAAG,CAAC,eAAe,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;YAChD,IAAI,OAAO,CAAC,GAAG;gBAAE,OAAO,CAAC,GAAG,CAAC,eAAe,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;YAC3D,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC;YAC1D,OAAO,CAAC,GAAG,CAAC,eAAe,QAAQ,EAAE,CAAC,CAAC;YACvC,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC;YACzD,OAAO,CAAC,GAAG,CAAC,eAAe,QAAQ,UAAU,OAAO,CAAC,gBAAgB,CAAC,MAAM,YAAY,CAAC,CAAC;QAC5F,CAAC;IACH,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":";AAWA,wBAAsB,IAAI,CAAC,IAAI,GAAE,MAAM,EAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAcvE"}
|
package/dist/cli/main.js
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
4
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
5
|
+
};
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.main = main;
|
|
8
|
+
const yargs_1 = __importDefault(require("yargs"));
|
|
9
|
+
const helpers_1 = require("yargs/helpers");
|
|
10
|
+
const invoke_1 = require("./commands/invoke");
|
|
11
|
+
const exec_1 = require("./commands/exec");
|
|
12
|
+
const bootstrap_1 = require("./commands/bootstrap");
|
|
13
|
+
const show_session_1 = require("./commands/show-session");
|
|
14
|
+
const clear_session_1 = require("./commands/clear-session");
|
|
15
|
+
const doctor_1 = require("./commands/doctor");
|
|
16
|
+
async function main(argv = process.argv) {
|
|
17
|
+
await (0, yargs_1.default)((0, helpers_1.hideBin)(argv))
|
|
18
|
+
.scriptName('a5c-hooks-mux')
|
|
19
|
+
.usage('$0 <command> [options]')
|
|
20
|
+
.command(invoke_1.invokeCommand)
|
|
21
|
+
.command(exec_1.execCommand)
|
|
22
|
+
.command(bootstrap_1.bootstrapCommand)
|
|
23
|
+
.command(show_session_1.showSessionCommand)
|
|
24
|
+
.command(clear_session_1.clearSessionCommand)
|
|
25
|
+
.command(doctor_1.doctorCommand)
|
|
26
|
+
.demandCommand(1, 'You must provide a command')
|
|
27
|
+
.strict()
|
|
28
|
+
.help()
|
|
29
|
+
.parseAsync();
|
|
30
|
+
}
|
|
31
|
+
if (require.main === module) {
|
|
32
|
+
main().catch((err) => {
|
|
33
|
+
console.error(err);
|
|
34
|
+
process.exit(1);
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=main.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":";;;;;;AAWA,oBAcC;AAvBD,kDAA0B;AAC1B,2CAAwC;AACxC,8CAAkD;AAClD,0CAA8C;AAC9C,oDAAwD;AACxD,0DAA6D;AAC7D,4DAA+D;AAC/D,8CAAkD;AAE3C,KAAK,UAAU,IAAI,CAAC,OAAiB,OAAO,CAAC,IAAI;IACtD,MAAM,IAAA,eAAK,EAAC,IAAA,iBAAO,EAAC,IAAI,CAAC,CAAC;SACvB,UAAU,CAAC,eAAe,CAAC;SAC3B,KAAK,CAAC,wBAAwB,CAAC;SAC/B,OAAO,CAAC,sBAAa,CAAC;SACtB,OAAO,CAAC,kBAAW,CAAC;SACpB,OAAO,CAAC,4BAAgB,CAAC;SACzB,OAAO,CAAC,iCAAkB,CAAC;SAC3B,OAAO,CAAC,mCAAmB,CAAC;SAC5B,OAAO,CAAC,sBAAa,CAAC;SACtB,aAAa,CAAC,CAAC,EAAE,4BAA4B,CAAC;SAC9C,MAAM,EAAE;SACR,IAAI,EAAE;SACN,UAAU,EAAE,CAAC;AAClB,CAAC;AAED,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;IAC5B,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;QAC5B,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACnB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stdin.d.ts","sourceRoot":"","sources":["../../src/cli/stdin.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;GAGG;AACH,wBAAgB,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,CAc3C"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Stdin reading utility.
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.readStdin = readStdin;
|
|
7
|
+
/**
|
|
8
|
+
* Read all of stdin as a string.
|
|
9
|
+
* Returns empty string if stdin is a TTY (interactive terminal).
|
|
10
|
+
*/
|
|
11
|
+
function readStdin() {
|
|
12
|
+
return new Promise((resolve, reject) => {
|
|
13
|
+
const chunks = [];
|
|
14
|
+
const stdin = process.stdin;
|
|
15
|
+
if (stdin.isTTY) {
|
|
16
|
+
resolve('');
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
stdin.on('data', (chunk) => chunks.push(chunk));
|
|
20
|
+
stdin.on('end', () => resolve(Buffer.concat(chunks).toString('utf-8')));
|
|
21
|
+
stdin.on('error', reject);
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=stdin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stdin.js","sourceRoot":"","sources":["../../src/cli/stdin.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAMH,8BAcC;AAlBD;;;GAGG;AACH,SAAgB,SAAS;IACvB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAE5B,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YAChB,OAAO,CAAC,EAAE,CAAC,CAAC;YACZ,OAAO;QACT,CAAC;QAED,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QACxD,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACxE,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;AACL,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.main = void 0;
|
|
4
|
+
var main_1 = require("./cli/main");
|
|
5
|
+
Object.defineProperty(exports, "main", { enumerable: true, get: function () { return main_1.main; } });
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,mCAAkC;AAAzB,4FAAA,IAAI,OAAA"}
|
package/package.json
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@a5c-ai/hooks-mux-cli",
|
|
3
|
+
"version": "5.0.1-staging.37ca18bd",
|
|
4
|
+
"description": "CLI entrypoint for the hooks-mux system",
|
|
5
|
+
"license": "UNLICENSED",
|
|
6
|
+
"type": "commonjs",
|
|
7
|
+
"main": "dist/index.js",
|
|
8
|
+
"types": "dist/index.d.ts",
|
|
9
|
+
"bin": {
|
|
10
|
+
"a5c-hooks-mux": "dist/cli/main.js"
|
|
11
|
+
},
|
|
12
|
+
"publishConfig": {
|
|
13
|
+
"access": "public"
|
|
14
|
+
},
|
|
15
|
+
"repository": {
|
|
16
|
+
"type": "git",
|
|
17
|
+
"url": "https://github.com/a5c-ai/babysitter.git",
|
|
18
|
+
"directory": "packages/hooks-mux/cli"
|
|
19
|
+
},
|
|
20
|
+
"files": [
|
|
21
|
+
"dist"
|
|
22
|
+
],
|
|
23
|
+
"scripts": {
|
|
24
|
+
"build": "tsc -p tsconfig.json",
|
|
25
|
+
"clean": "rimraf dist",
|
|
26
|
+
"lint": "eslint \"src/**/*.ts\" --max-warnings=0",
|
|
27
|
+
"test": "vitest run",
|
|
28
|
+
"test:watch": "vitest"
|
|
29
|
+
},
|
|
30
|
+
"dependencies": {
|
|
31
|
+
"@a5c-ai/hooks-mux-core": "5.0.1-staging.37ca18bd",
|
|
32
|
+
"yargs": "^17.0.0"
|
|
33
|
+
},
|
|
34
|
+
"devDependencies": {
|
|
35
|
+
"@types/yargs": "^17.0.0",
|
|
36
|
+
"typescript": "^5.7.0",
|
|
37
|
+
"vitest": "^3.0.0",
|
|
38
|
+
"rimraf": "^6.0.0"
|
|
39
|
+
}
|
|
40
|
+
}
|