@a5c-ai/hooks-mux-cli 5.0.1-staging.e347c48b → 5.0.1-staging.ef4e872c
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 +11 -3
- package/dist/cli/adapter-loader.d.ts.map +1 -1
- package/dist/cli/adapter-loader.js +75 -4
- package/dist/cli/adapter-loader.js.map +1 -1
- 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 +3 -2
- package/dist/cli/commands/bootstrap.d.ts.map +1 -1
- package/dist/cli/commands/bootstrap.js +41 -29
- package/dist/cli/commands/bootstrap.js.map +1 -1
- package/dist/cli/commands/exec.d.ts.map +1 -1
- package/dist/cli/commands/exec.js +25 -0
- package/dist/cli/commands/exec.js.map +1 -1
- package/dist/cli/commands/invoke.d.ts +3 -2
- package/dist/cli/commands/invoke.d.ts.map +1 -1
- package/dist/cli/commands/invoke.js +155 -58
- package/dist/cli/commands/invoke.js.map +1 -1
- 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.map +1 -1
- package/dist/cli/main.js +5 -0
- package/dist/cli/main.js.map +1 -1
- package/package.json +19 -5
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
|
|
@@ -7,14 +7,22 @@
|
|
|
7
7
|
* Each adapter package is expected to export:
|
|
8
8
|
* - createAdapter(): AdapterCapabilities
|
|
9
9
|
* - phase mappings (e.g. CLAUDE_PHASE_MAPPINGS / equivalent)
|
|
10
|
-
* -
|
|
11
|
-
* -
|
|
10
|
+
* - optional normalizeForInvoke() hook for CLI-native normalization
|
|
11
|
+
* - optional renderForInvoke() hook for CLI-native output rendering
|
|
12
12
|
* - session resolver
|
|
13
13
|
*/
|
|
14
|
-
import type { AdapterCapabilities, PhaseMapping } from '@a5c-ai/hooks-mux-core';
|
|
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
|
+
};
|
|
15
20
|
export interface LoadedAdapter {
|
|
16
21
|
capabilities: AdapterCapabilities;
|
|
17
22
|
phaseMappings: PhaseMapping[];
|
|
23
|
+
normalizer?: AdapterNormalizer;
|
|
24
|
+
renderer?: AdapterRenderer;
|
|
25
|
+
sessionResolver?: AdapterSessionResolver;
|
|
18
26
|
/** Raw module exports for adapter-specific functions. */
|
|
19
27
|
module: Record<string, unknown>;
|
|
20
28
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter-loader.d.ts","sourceRoot":"","sources":["../../src/cli/adapter-loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;
|
|
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"}
|
|
@@ -8,14 +8,74 @@
|
|
|
8
8
|
* Each adapter package is expected to export:
|
|
9
9
|
* - createAdapter(): AdapterCapabilities
|
|
10
10
|
* - phase mappings (e.g. CLAUDE_PHASE_MAPPINGS / equivalent)
|
|
11
|
-
* -
|
|
12
|
-
* -
|
|
11
|
+
* - optional normalizeForInvoke() hook for CLI-native normalization
|
|
12
|
+
* - optional renderForInvoke() hook for CLI-native output rendering
|
|
13
13
|
* - session resolver
|
|
14
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
|
+
})();
|
|
15
48
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
49
|
exports.KNOWN_ADAPTERS = void 0;
|
|
17
50
|
exports.loadAdapter = loadAdapter;
|
|
51
|
+
const fs = __importStar(require("fs"));
|
|
52
|
+
const path = __importStar(require("path"));
|
|
18
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
|
+
}
|
|
19
79
|
/**
|
|
20
80
|
* Attempt to load an adapter package by name.
|
|
21
81
|
*
|
|
@@ -42,7 +102,11 @@ function loadAdapter(adapterName) {
|
|
|
42
102
|
mod = require(packageName);
|
|
43
103
|
}
|
|
44
104
|
catch (err) {
|
|
45
|
-
|
|
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;
|
|
46
110
|
}
|
|
47
111
|
// Extract createAdapter function
|
|
48
112
|
const createAdapterFn = mod['createAdapter'];
|
|
@@ -61,7 +125,14 @@ function loadAdapter(adapterName) {
|
|
|
61
125
|
}
|
|
62
126
|
}
|
|
63
127
|
}
|
|
64
|
-
return {
|
|
128
|
+
return {
|
|
129
|
+
capabilities,
|
|
130
|
+
phaseMappings,
|
|
131
|
+
normalizer: resolveNormalizer(mod),
|
|
132
|
+
renderer: resolveRenderer(mod),
|
|
133
|
+
sessionResolver: resolveSessionResolver(mod),
|
|
134
|
+
module: mod,
|
|
135
|
+
};
|
|
65
136
|
}
|
|
66
137
|
/**
|
|
67
138
|
* List of known adapter names for discovery/doctor purposes.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter-loader.js","sourceRoot":"","sources":["../../src/cli/adapter-loader.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;GAYG
|
|
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":"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"}
|
|
@@ -3,8 +3,9 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Spec section 18.3.
|
|
5
5
|
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
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.
|
|
8
9
|
*/
|
|
9
10
|
import type { CommandModule } from 'yargs';
|
|
10
11
|
interface BootstrapArgs {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/bootstrap.ts"],"names":[],"mappings":"AAAA
|
|
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"}
|
|
@@ -4,13 +4,17 @@
|
|
|
4
4
|
*
|
|
5
5
|
* Spec section 18.3.
|
|
6
6
|
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
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.
|
|
9
10
|
*/
|
|
10
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
12
|
exports.bootstrapCommand = void 0;
|
|
12
13
|
const hooks_mux_core_1 = require("@a5c-ai/hooks-mux-core");
|
|
13
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");
|
|
14
18
|
exports.bootstrapCommand = {
|
|
15
19
|
command: 'bootstrap',
|
|
16
20
|
describe: 'No-op context bootstrap — initialize session without running handlers',
|
|
@@ -30,47 +34,55 @@ exports.bootstrapCommand = {
|
|
|
30
34
|
describe: 'Output JSON format',
|
|
31
35
|
}),
|
|
32
36
|
handler: async (args) => {
|
|
37
|
+
const logger = (0, hooks_logger_1.createHooksLogger)('bootstrap');
|
|
33
38
|
const loaded = (0, adapter_loader_1.loadAdapter)(args.adapter);
|
|
34
39
|
const env = process.env;
|
|
35
|
-
|
|
36
|
-
const
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
const
|
|
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),
|
|
41
60
|
adapter: args.adapter,
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
adapterMappings: loaded.phaseMappings,
|
|
61
|
+
event,
|
|
62
|
+
sessionId,
|
|
45
63
|
});
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
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
|
-
};
|
|
64
|
+
const session = prepared.session;
|
|
65
|
+
if (session) {
|
|
66
|
+
await (0, hooks_mux_core_1.saveSession)(session);
|
|
61
67
|
}
|
|
62
|
-
await (0,
|
|
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
|
+
});
|
|
63
75
|
const output = {
|
|
64
76
|
status: 'bootstrapped',
|
|
65
77
|
sessionId,
|
|
66
78
|
adapter: args.adapter,
|
|
67
|
-
createdAt: session
|
|
79
|
+
createdAt: session?.createdAt ?? null,
|
|
68
80
|
};
|
|
69
81
|
if (args.json) {
|
|
70
82
|
process.stdout.write(JSON.stringify(output, null, 2) + '\n');
|
|
71
83
|
}
|
|
72
84
|
else {
|
|
73
|
-
|
|
85
|
+
process.stderr.write(`Session bootstrapped: ${sessionId} (adapter: ${args.adapter})\n`);
|
|
74
86
|
}
|
|
75
87
|
},
|
|
76
88
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../../src/cli/commands/bootstrap.ts"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../../src/cli/commands/bootstrap.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +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;
|
|
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;AAO3C,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,CAiGvD,CAAC"}
|
|
@@ -13,6 +13,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
13
13
|
exports.execCommand = void 0;
|
|
14
14
|
const child_process_1 = require("child_process");
|
|
15
15
|
const hooks_mux_core_1 = require("@a5c-ai/hooks-mux-core");
|
|
16
|
+
const hooks_logger_1 = require("../hooks-logger");
|
|
16
17
|
exports.execCommand = {
|
|
17
18
|
command: 'exec',
|
|
18
19
|
describe: 'Run a command with restored session context',
|
|
@@ -25,9 +26,11 @@ exports.execCommand = {
|
|
|
25
26
|
.parserConfiguration({ 'populate--': true })
|
|
26
27
|
.example('$0 exec --session-id abc123 -- echo hello', 'Run "echo hello" with session abc123 context'),
|
|
27
28
|
handler: async (args) => {
|
|
29
|
+
const logger = (0, hooks_logger_1.createHooksLogger)('exec');
|
|
28
30
|
const sessionId = args['session-id'];
|
|
29
31
|
const command = args['--'] ?? [];
|
|
30
32
|
if (command.length === 0) {
|
|
33
|
+
await logger.error('exec invoked without command', { sessionId });
|
|
31
34
|
console.error('Error: No command specified after --');
|
|
32
35
|
process.exitCode = 1;
|
|
33
36
|
return;
|
|
@@ -49,6 +52,10 @@ exports.execCommand = {
|
|
|
49
52
|
...process.env,
|
|
50
53
|
...materialized.env,
|
|
51
54
|
};
|
|
55
|
+
await logger.debug('exec materialized session context', {
|
|
56
|
+
sessionId,
|
|
57
|
+
command: command.join(' '),
|
|
58
|
+
});
|
|
52
59
|
}
|
|
53
60
|
catch {
|
|
54
61
|
// Fallback: inject at least AGENT_SESSION_ID even if session not found
|
|
@@ -56,18 +63,36 @@ exports.execCommand = {
|
|
|
56
63
|
...process.env,
|
|
57
64
|
AGENT_SESSION_ID: sessionId,
|
|
58
65
|
};
|
|
66
|
+
await logger.warn('exec fell back to minimal session context', {
|
|
67
|
+
sessionId,
|
|
68
|
+
command: command.join(' '),
|
|
69
|
+
});
|
|
59
70
|
}
|
|
60
71
|
// Spawn the target command
|
|
61
72
|
const [cmd, ...cmdArgs] = command;
|
|
73
|
+
await logger.info('exec spawning command', {
|
|
74
|
+
sessionId,
|
|
75
|
+
command: [cmd, ...cmdArgs].join(' '),
|
|
76
|
+
});
|
|
62
77
|
const child = (0, child_process_1.spawn)(cmd, cmdArgs, {
|
|
63
78
|
env: childEnv,
|
|
64
79
|
stdio: 'inherit',
|
|
65
80
|
});
|
|
66
81
|
child.on('error', (err) => {
|
|
82
|
+
void logger.error('exec spawn failed', {
|
|
83
|
+
sessionId,
|
|
84
|
+
command: [cmd, ...cmdArgs].join(' '),
|
|
85
|
+
error: err.message,
|
|
86
|
+
});
|
|
67
87
|
console.error(`Failed to execute command: ${err.message}`);
|
|
68
88
|
process.exitCode = 1;
|
|
69
89
|
});
|
|
70
90
|
child.on('close', (code) => {
|
|
91
|
+
void logger.info('exec completed', {
|
|
92
|
+
sessionId,
|
|
93
|
+
command: [cmd, ...cmdArgs].join(' '),
|
|
94
|
+
exitCode: code ?? 0,
|
|
95
|
+
});
|
|
71
96
|
process.exitCode = code ?? 0;
|
|
72
97
|
});
|
|
73
98
|
// Wait for the child process to finish
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exec.js","sourceRoot":"","sources":["../../../src/cli/commands/exec.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;;AAEH,iDAAsC;AAEtC,2DAGgC;
|
|
1
|
+
{"version":3,"file":"exec.js","sourceRoot":"","sources":["../../../src/cli/commands/exec.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,19 +5,20 @@
|
|
|
5
5
|
*
|
|
6
6
|
* Pipeline:
|
|
7
7
|
* 1. Read stdin when adapter expects it
|
|
8
|
-
* 2. Normalize event via core normalizeEvent
|
|
8
|
+
* 2. Normalize event via adapter normalizer when available, else core normalizeEvent
|
|
9
9
|
* 3. Resolve/load session context via core session store
|
|
10
10
|
* 4. Run handler or fan-out plan via core runPlan
|
|
11
11
|
* 5. Merge results via core mergeResults
|
|
12
12
|
* 6. Persist session store
|
|
13
13
|
* 7. Apply propagation backend
|
|
14
|
-
* 8. Emit adapter-native output
|
|
14
|
+
* 8. Emit adapter-native output via adapter renderer when available
|
|
15
15
|
*/
|
|
16
16
|
import type { CommandModule } from 'yargs';
|
|
17
17
|
interface InvokeArgs {
|
|
18
18
|
adapter: string;
|
|
19
19
|
handler?: string[];
|
|
20
20
|
'bootstrap-only'?: boolean;
|
|
21
|
+
'native-event'?: string;
|
|
21
22
|
'session-id'?: string;
|
|
22
23
|
json?: boolean;
|
|
23
24
|
}
|
|
@@ -1 +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;
|
|
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;AAyB3C,UAAU,UAAU;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAkKD,eAAO,MAAM,aAAa,EAAE,aAAa,CAAC,MAAM,EAAE,UAAU,CAiM3D,CAAC"}
|
|
@@ -6,53 +6,118 @@
|
|
|
6
6
|
*
|
|
7
7
|
* Pipeline:
|
|
8
8
|
* 1. Read stdin when adapter expects it
|
|
9
|
-
* 2. Normalize event via core normalizeEvent
|
|
9
|
+
* 2. Normalize event via adapter normalizer when available, else core normalizeEvent
|
|
10
10
|
* 3. Resolve/load session context via core session store
|
|
11
11
|
* 4. Run handler or fan-out plan via core runPlan
|
|
12
12
|
* 5. Merge results via core mergeResults
|
|
13
13
|
* 6. Persist session store
|
|
14
14
|
* 7. Apply propagation backend
|
|
15
|
-
* 8. Emit adapter-native output
|
|
15
|
+
* 8. Emit adapter-native output via adapter renderer when available
|
|
16
16
|
*/
|
|
17
17
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
18
|
exports.invokeCommand = void 0;
|
|
19
19
|
const hooks_mux_core_1 = require("@a5c-ai/hooks-mux-core");
|
|
20
20
|
const adapter_loader_1 = require("../adapter-loader");
|
|
21
|
+
const bootstrap_runtime_1 = require("../bootstrap-runtime");
|
|
22
|
+
const hooks_logger_1 = require("../hooks-logger");
|
|
21
23
|
const stdin_1 = require("../stdin");
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
*/
|
|
25
|
-
function tryParseJson(raw) {
|
|
26
|
-
const trimmed = raw.trim();
|
|
27
|
-
if (!trimmed)
|
|
24
|
+
function inferClaudeNativeEventName(stdinData) {
|
|
25
|
+
if (!stdinData) {
|
|
28
26
|
return undefined;
|
|
29
|
-
try {
|
|
30
|
-
return JSON.parse(trimmed);
|
|
31
27
|
}
|
|
32
|
-
|
|
33
|
-
|
|
28
|
+
if (typeof stdinData['tool_name'] === 'string'
|
|
29
|
+
|| typeof stdinData['tool_call_id'] === 'string'
|
|
30
|
+
|| stdinData['tool_input'] !== undefined) {
|
|
31
|
+
return stdinData['tool_response'] !== undefined ? 'PostToolUse' : 'PreToolUse';
|
|
32
|
+
}
|
|
33
|
+
if (stdinData['stop_hook_active'] !== undefined
|
|
34
|
+
|| typeof stdinData['last_assistant_message'] === 'string'
|
|
35
|
+
|| typeof stdinData['reason'] === 'string') {
|
|
36
|
+
return 'Stop';
|
|
37
|
+
}
|
|
38
|
+
if (typeof stdinData['source'] === 'string'
|
|
39
|
+
|| stdinData['initial_prompt'] !== undefined) {
|
|
40
|
+
return 'SessionStart';
|
|
41
|
+
}
|
|
42
|
+
if (stdinData['prompt'] !== undefined) {
|
|
43
|
+
return 'UserPromptSubmit';
|
|
34
44
|
}
|
|
45
|
+
if (stdinData['agent_type'] !== undefined) {
|
|
46
|
+
return 'SubagentStop';
|
|
47
|
+
}
|
|
48
|
+
if (stdinData['title'] !== undefined || stdinData['message'] !== undefined) {
|
|
49
|
+
return 'Notification';
|
|
50
|
+
}
|
|
51
|
+
return undefined;
|
|
35
52
|
}
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
if (
|
|
41
|
-
return
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
53
|
+
function resolveRawEventName(explicitNativeEvent, adapterName, stdinData, env) {
|
|
54
|
+
if (explicitNativeEvent) {
|
|
55
|
+
return { rawEventName: explicitNativeEvent, source: 'cli' };
|
|
56
|
+
}
|
|
57
|
+
if (env['HOOKS_PROXY_EVENT_NAME']) {
|
|
58
|
+
return { rawEventName: env['HOOKS_PROXY_EVENT_NAME'], source: 'env' };
|
|
59
|
+
}
|
|
60
|
+
if (typeof stdinData?.['event_name'] === 'string') {
|
|
61
|
+
return { rawEventName: stdinData['event_name'], source: 'stdin' };
|
|
62
|
+
}
|
|
63
|
+
if (adapterName === 'claude') {
|
|
64
|
+
const inferred = inferClaudeNativeEventName(stdinData);
|
|
65
|
+
if (inferred) {
|
|
66
|
+
return { rawEventName: inferred, source: 'claude-heuristic' };
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return { rawEventName: 'unknown', source: 'default' };
|
|
70
|
+
}
|
|
71
|
+
function renderOutput(args, loaded, merged, rawEventName, stdinPayload, event) {
|
|
72
|
+
if (!loaded.renderer) {
|
|
73
|
+
return (0, hooks_mux_core_1.adaptOutput)({
|
|
74
|
+
adapter: args.adapter,
|
|
75
|
+
mergedResult: merged,
|
|
76
|
+
nativeInput: stdinPayload,
|
|
77
|
+
capabilities: loaded.capabilities,
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
const rendered = loaded.renderer(merged, rawEventName, event);
|
|
81
|
+
if (rendered && typeof rendered === 'object' && !Array.isArray(rendered) && 'output' in rendered) {
|
|
82
|
+
const adapterRendered = rendered;
|
|
83
|
+
return {
|
|
84
|
+
output: (adapterRendered.output
|
|
85
|
+
&& typeof adapterRendered.output === 'object'
|
|
86
|
+
&& !Array.isArray(adapterRendered.output))
|
|
87
|
+
? adapterRendered.output
|
|
88
|
+
: {},
|
|
89
|
+
degradedFields: [
|
|
90
|
+
...(Array.isArray(adapterRendered.degradedFields) ? adapterRendered.degradedFields : []),
|
|
91
|
+
...(Array.isArray(adapterRendered.droppedFields) ? adapterRendered.droppedFields : []),
|
|
92
|
+
].filter((value) => typeof value === 'string'),
|
|
93
|
+
};
|
|
46
94
|
}
|
|
47
|
-
return
|
|
95
|
+
return {
|
|
96
|
+
output: (rendered && typeof rendered === 'object' && !Array.isArray(rendered))
|
|
97
|
+
? rendered
|
|
98
|
+
: {},
|
|
99
|
+
degradedFields: [],
|
|
100
|
+
};
|
|
48
101
|
}
|
|
49
102
|
/**
|
|
50
103
|
* Parse --handler values into HandlerRef objects.
|
|
51
104
|
* Format: "source:handler" or just "source" (handler defaults to "handler").
|
|
52
105
|
*/
|
|
106
|
+
function findWindowsPathPrefixLength(value) {
|
|
107
|
+
if (/^[A-Za-z]:[\\/]/.test(value)) {
|
|
108
|
+
return 2;
|
|
109
|
+
}
|
|
110
|
+
if (/^[\\/]{2}\?[\\/][A-Za-z]:[\\/]/.test(value)) {
|
|
111
|
+
return 6;
|
|
112
|
+
}
|
|
113
|
+
return 0;
|
|
114
|
+
}
|
|
53
115
|
function parseHandlerArgs(handlers) {
|
|
54
116
|
return handlers.map((h) => {
|
|
55
|
-
const
|
|
117
|
+
const windowsPrefixLength = findWindowsPathPrefixLength(h);
|
|
118
|
+
const colonIdx = windowsPrefixLength > 0
|
|
119
|
+
? h.indexOf(':', windowsPrefixLength)
|
|
120
|
+
: h.indexOf(':');
|
|
56
121
|
if (colonIdx >= 0) {
|
|
57
122
|
return { source: h.slice(0, colonIdx), handler: h.slice(colonIdx + 1) };
|
|
58
123
|
}
|
|
@@ -77,6 +142,10 @@ exports.invokeCommand = {
|
|
|
77
142
|
type: 'boolean',
|
|
78
143
|
default: false,
|
|
79
144
|
describe: 'Only bootstrap session context, skip handler execution',
|
|
145
|
+
})
|
|
146
|
+
.option('native-event', {
|
|
147
|
+
type: 'string',
|
|
148
|
+
describe: 'Explicit native hook event name (for Claude: SessionStart, PreToolUse, PostToolUse, Stop, etc.)',
|
|
80
149
|
})
|
|
81
150
|
.option('session-id', {
|
|
82
151
|
type: 'string',
|
|
@@ -88,59 +157,79 @@ exports.invokeCommand = {
|
|
|
88
157
|
describe: 'Output JSON format',
|
|
89
158
|
}),
|
|
90
159
|
handler: async (args) => {
|
|
160
|
+
const logger = (0, hooks_logger_1.createHooksLogger)('invoke');
|
|
91
161
|
// 1. Load adapter
|
|
92
162
|
const loaded = (0, adapter_loader_1.loadAdapter)(args.adapter);
|
|
163
|
+
await logger.info('invoke started', {
|
|
164
|
+
adapter: args.adapter,
|
|
165
|
+
bootstrapOnly: Boolean(args['bootstrap-only']),
|
|
166
|
+
handlerCount: args.handler?.length ?? 0,
|
|
167
|
+
});
|
|
93
168
|
// 2. Read stdin
|
|
94
169
|
const rawStdin = await (0, stdin_1.readStdin)();
|
|
95
|
-
const stdinPayload = tryParseJson(rawStdin);
|
|
170
|
+
const stdinPayload = (0, bootstrap_runtime_1.tryParseJson)(rawStdin);
|
|
96
171
|
const stdinData = (typeof stdinPayload === 'object' && stdinPayload !== null && !Array.isArray(stdinPayload))
|
|
97
172
|
? stdinPayload
|
|
98
173
|
: undefined;
|
|
99
174
|
// Determine raw event name from env or stdin
|
|
100
175
|
const env = process.env;
|
|
101
|
-
const
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
// 3. Normalize event
|
|
105
|
-
const event = (0, hooks_mux_core_1.normalizeEvent)({
|
|
106
|
-
adapter: args.adapter,
|
|
176
|
+
const rawEvent = resolveRawEventName(args['native-event'], loaded.capabilities.name, stdinData, env);
|
|
177
|
+
const { rawEventName } = rawEvent;
|
|
178
|
+
await logger.debug('stdin parsed', {
|
|
107
179
|
rawEventName,
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
180
|
+
rawEventNameSource: rawEvent.source,
|
|
181
|
+
stdinBytes: rawStdin.length,
|
|
182
|
+
stdinJson: Boolean(stdinData),
|
|
111
183
|
});
|
|
184
|
+
// 3. Normalize event
|
|
185
|
+
const event = loaded.normalizer
|
|
186
|
+
? loaded.normalizer(rawEventName, rawStdin, env)
|
|
187
|
+
: (0, hooks_mux_core_1.normalizeEvent)({
|
|
188
|
+
adapter: args.adapter,
|
|
189
|
+
rawEventName,
|
|
190
|
+
stdinPayload,
|
|
191
|
+
env,
|
|
192
|
+
adapterMappings: loaded.phaseMappings,
|
|
193
|
+
});
|
|
112
194
|
// 4. Resolve session
|
|
113
|
-
const sessionId = resolveSessionId(args['session-id'], stdinData, env);
|
|
195
|
+
const sessionId = (0, bootstrap_runtime_1.resolveSessionId)(loaded.sessionResolver, args['session-id'], event.execution.sessionId, stdinData, env);
|
|
196
|
+
await logger.debug('session resolved', {
|
|
197
|
+
sessionId,
|
|
198
|
+
explicitSessionId: args['session-id'] ?? null,
|
|
199
|
+
});
|
|
114
200
|
let session = null;
|
|
115
201
|
if (sessionId) {
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
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
|
-
}
|
|
202
|
+
const prepared = (0, bootstrap_runtime_1.prepareBootstrapSession)({
|
|
203
|
+
existingSession: await (0, hooks_mux_core_1.loadSession)(sessionId),
|
|
204
|
+
adapter: args.adapter,
|
|
205
|
+
event,
|
|
206
|
+
sessionId,
|
|
207
|
+
});
|
|
208
|
+
session = prepared.session;
|
|
133
209
|
// Inject session context into event execution
|
|
134
210
|
event.execution.sessionId = sessionId;
|
|
135
|
-
if (session
|
|
211
|
+
if (session?.persistedEnv) {
|
|
136
212
|
Object.assign(event.execution.persistedEnv, session.persistedEnv);
|
|
137
213
|
}
|
|
138
214
|
}
|
|
139
215
|
// 5. Bootstrap-only mode: persist session and exit
|
|
140
216
|
if (args['bootstrap-only']) {
|
|
217
|
+
const prepared = (0, bootstrap_runtime_1.prepareBootstrapSession)({
|
|
218
|
+
existingSession: session,
|
|
219
|
+
adapter: args.adapter,
|
|
220
|
+
event,
|
|
221
|
+
sessionId,
|
|
222
|
+
});
|
|
223
|
+
session = prepared.session;
|
|
141
224
|
if (session) {
|
|
142
225
|
await (0, hooks_mux_core_1.saveSession)(session);
|
|
143
226
|
}
|
|
227
|
+
const propagated = await (0, bootstrap_runtime_1.propagateBootstrapEnv)(loaded.capabilities.envPersistenceMode, prepared.persistEnv, env);
|
|
228
|
+
await logger.info('bootstrap-only invoke completed', {
|
|
229
|
+
adapter: args.adapter,
|
|
230
|
+
sessionId,
|
|
231
|
+
propagated,
|
|
232
|
+
});
|
|
144
233
|
if (args.json) {
|
|
145
234
|
process.stdout.write(JSON.stringify({ status: 'bootstrapped', sessionId }, null, 2) + '\n');
|
|
146
235
|
}
|
|
@@ -162,6 +251,12 @@ exports.invokeCommand = {
|
|
|
162
251
|
// No handlers: produce a noop result
|
|
163
252
|
merged = (0, hooks_mux_core_1.mergeResults)([{ decision: 'noop' }]);
|
|
164
253
|
}
|
|
254
|
+
await logger.debug('plan executed', {
|
|
255
|
+
phase: event.phase,
|
|
256
|
+
planLength: plan.length,
|
|
257
|
+
decision: merged.decision,
|
|
258
|
+
degradedFields: merged.diagnostics.degradedFields,
|
|
259
|
+
});
|
|
165
260
|
// 8. Persist session updates
|
|
166
261
|
if (session && sessionId) {
|
|
167
262
|
if (Object.keys(merged.persistEnv).length > 0) {
|
|
@@ -180,15 +275,17 @@ exports.invokeCommand = {
|
|
|
180
275
|
if (Object.keys(merged.persistEnv).length > 0) {
|
|
181
276
|
const backend = loaded.capabilities.envPersistenceMode;
|
|
182
277
|
await (0, hooks_mux_core_1.propagateEnv)(backend, merged.persistEnv, {
|
|
183
|
-
nativeEnvFilePath:
|
|
278
|
+
nativeEnvFilePath: (0, bootstrap_runtime_1.resolveNativeEnvFilePath)(env),
|
|
184
279
|
});
|
|
185
280
|
}
|
|
186
281
|
// 10. Emit adapter-native output
|
|
187
|
-
const adapted = (
|
|
282
|
+
const adapted = renderOutput(args, loaded, merged, rawEventName, stdinPayload, event);
|
|
283
|
+
await logger.info('invoke completed', {
|
|
188
284
|
adapter: args.adapter,
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
285
|
+
phase: event.phase,
|
|
286
|
+
sessionId,
|
|
287
|
+
decision: merged.decision,
|
|
288
|
+
degradedFields: adapted.degradedFields,
|
|
192
289
|
});
|
|
193
290
|
process.stdout.write(JSON.stringify(adapted.output, null, args.json ? 2 : 0) + '\n');
|
|
194
291
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"invoke.js","sourceRoot":"","sources":["../../../src/cli/commands/invoke.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;GAcG;;;AAGH,
|
|
1
|
+
{"version":3,"file":"invoke.js","sourceRoot":"","sources":["../../../src/cli/commands/invoke.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export type HooksLogLevel = 'debug' | 'info' | 'warn' | 'error';
|
|
2
|
+
export declare function getHooksLogDir(): string;
|
|
3
|
+
export declare function getHooksLogPath(): string;
|
|
4
|
+
export declare function shouldLog(level: HooksLogLevel): boolean;
|
|
5
|
+
export declare function appendHooksLog(command: string, level: HooksLogLevel, message: string, context?: Record<string, unknown>): Promise<void>;
|
|
6
|
+
export declare function createHooksLogger(command: string): {
|
|
7
|
+
debug: (message: string, context?: Record<string, unknown>) => Promise<void>;
|
|
8
|
+
info: (message: string, context?: Record<string, unknown>) => Promise<void>;
|
|
9
|
+
warn: (message: string, context?: Record<string, unknown>) => Promise<void>;
|
|
10
|
+
error: (message: string, context?: Record<string, unknown>) => Promise<void>;
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=hooks-logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks-logger.d.ts","sourceRoot":"","sources":["../../src/cli/hooks-logger.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AA+ChE,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAGvD;AAED,wBAAsB,cAAc,CAClC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,aAAa,EACpB,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,OAAO,CAAC,IAAI,CAAC,CAuBf;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM;qBAE5B,MAAM,YAAY,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;oBAE1C,MAAM,YAAY,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;oBAEzC,MAAM,YAAY,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;qBAExC,MAAM,YAAY,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;EAG7D"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.getHooksLogDir = getHooksLogDir;
|
|
37
|
+
exports.getHooksLogPath = getHooksLogPath;
|
|
38
|
+
exports.shouldLog = shouldLog;
|
|
39
|
+
exports.appendHooksLog = appendHooksLog;
|
|
40
|
+
exports.createHooksLogger = createHooksLogger;
|
|
41
|
+
const fs = __importStar(require("fs"));
|
|
42
|
+
const os = __importStar(require("os"));
|
|
43
|
+
const path = __importStar(require("path"));
|
|
44
|
+
const LOG_LEVELS = {
|
|
45
|
+
debug: 10,
|
|
46
|
+
info: 20,
|
|
47
|
+
warn: 30,
|
|
48
|
+
error: 40,
|
|
49
|
+
};
|
|
50
|
+
const LOG_LEVEL_ENV = 'A5C_LOGGING_HOOKS_LEVEL';
|
|
51
|
+
const LOG_FILE_NAME = 'hooks-mux.log';
|
|
52
|
+
function resolveHomeDir() {
|
|
53
|
+
const envHome = process.env.HOME?.trim();
|
|
54
|
+
if (envHome) {
|
|
55
|
+
return envHome;
|
|
56
|
+
}
|
|
57
|
+
const userProfile = process.env.USERPROFILE?.trim();
|
|
58
|
+
if (userProfile) {
|
|
59
|
+
return userProfile;
|
|
60
|
+
}
|
|
61
|
+
return os.homedir();
|
|
62
|
+
}
|
|
63
|
+
function parseLogLevel(value) {
|
|
64
|
+
switch ((value ?? '').trim().toLowerCase()) {
|
|
65
|
+
case 'debug':
|
|
66
|
+
return 'debug';
|
|
67
|
+
case 'warn':
|
|
68
|
+
return 'warn';
|
|
69
|
+
case 'error':
|
|
70
|
+
return 'error';
|
|
71
|
+
default:
|
|
72
|
+
return 'info';
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
function getHooksLogDir() {
|
|
76
|
+
return path.join(resolveHomeDir(), '.a5c', 'logs', 'hooks');
|
|
77
|
+
}
|
|
78
|
+
function getHooksLogPath() {
|
|
79
|
+
return path.join(getHooksLogDir(), LOG_FILE_NAME);
|
|
80
|
+
}
|
|
81
|
+
function shouldLog(level) {
|
|
82
|
+
const configured = parseLogLevel(process.env[LOG_LEVEL_ENV]);
|
|
83
|
+
return LOG_LEVELS[level] >= LOG_LEVELS[configured];
|
|
84
|
+
}
|
|
85
|
+
async function appendHooksLog(command, level, message, context) {
|
|
86
|
+
if (!shouldLog(level)) {
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
const entry = {
|
|
90
|
+
ts: new Date().toISOString(),
|
|
91
|
+
level,
|
|
92
|
+
command,
|
|
93
|
+
msg: message,
|
|
94
|
+
};
|
|
95
|
+
if (context && Object.keys(context).length > 0) {
|
|
96
|
+
entry.ctx = context;
|
|
97
|
+
}
|
|
98
|
+
try {
|
|
99
|
+
const logDir = getHooksLogDir();
|
|
100
|
+
await fs.promises.mkdir(logDir, { recursive: true });
|
|
101
|
+
await fs.promises.appendFile(getHooksLogPath(), JSON.stringify(entry) + '\n', 'utf8');
|
|
102
|
+
}
|
|
103
|
+
catch {
|
|
104
|
+
// Logging must never interfere with hook execution.
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
function createHooksLogger(command) {
|
|
108
|
+
return {
|
|
109
|
+
debug: (message, context) => appendHooksLog(command, 'debug', message, context),
|
|
110
|
+
info: (message, context) => appendHooksLog(command, 'info', message, context),
|
|
111
|
+
warn: (message, context) => appendHooksLog(command, 'warn', message, context),
|
|
112
|
+
error: (message, context) => appendHooksLog(command, 'error', message, context),
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=hooks-logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks-logger.js","sourceRoot":"","sources":["../../src/cli/hooks-logger.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/main.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":";AAYA,wBAAsB,IAAI,CAAC,IAAI,GAAE,MAAM,EAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAcvE"}
|
package/dist/cli/main.js
CHANGED
|
@@ -7,6 +7,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
7
7
|
exports.main = main;
|
|
8
8
|
const yargs_1 = __importDefault(require("yargs"));
|
|
9
9
|
const helpers_1 = require("yargs/helpers");
|
|
10
|
+
const hooks_logger_1 = require("./hooks-logger");
|
|
10
11
|
const invoke_1 = require("./commands/invoke");
|
|
11
12
|
const exec_1 = require("./commands/exec");
|
|
12
13
|
const bootstrap_1 = require("./commands/bootstrap");
|
|
@@ -29,7 +30,11 @@ async function main(argv = process.argv) {
|
|
|
29
30
|
.parseAsync();
|
|
30
31
|
}
|
|
31
32
|
if (require.main === module) {
|
|
33
|
+
const logger = (0, hooks_logger_1.createHooksLogger)('main');
|
|
32
34
|
main().catch((err) => {
|
|
35
|
+
void logger.error('cli main failed', {
|
|
36
|
+
error: err instanceof Error ? err.message : String(err),
|
|
37
|
+
});
|
|
33
38
|
console.error(err);
|
|
34
39
|
process.exit(1);
|
|
35
40
|
});
|
package/dist/cli/main.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":";;;;;;AAYA,oBAcC;AAxBD,kDAA0B;AAC1B,2CAAwC;AACxC,iDAAmD;AACnD,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,MAAM,MAAM,GAAG,IAAA,gCAAiB,EAAC,MAAM,CAAC,CAAC;IACzC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;QAC5B,KAAK,MAAM,CAAC,KAAK,CAAC,iBAAiB,EAAE;YACnC,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;SACxD,CAAC,CAAC;QACH,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACnB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@a5c-ai/hooks-mux-cli",
|
|
3
|
-
"version": "5.0.1-staging.
|
|
3
|
+
"version": "5.0.1-staging.ef4e872c",
|
|
4
4
|
"description": "CLI entrypoint for the hooks-mux system",
|
|
5
|
-
"license": "
|
|
5
|
+
"license": "MIT",
|
|
6
6
|
"type": "commonjs",
|
|
7
7
|
"main": "dist/index.js",
|
|
8
8
|
"types": "dist/index.d.ts",
|
|
@@ -14,11 +14,16 @@
|
|
|
14
14
|
},
|
|
15
15
|
"repository": {
|
|
16
16
|
"type": "git",
|
|
17
|
-
"url": "https://github.com/a5c-ai/babysitter.git",
|
|
17
|
+
"url": "git+https://github.com/a5c-ai/babysitter.git",
|
|
18
18
|
"directory": "packages/hooks-mux/cli"
|
|
19
19
|
},
|
|
20
|
+
"homepage": "https://github.com/a5c-ai/babysitter/tree/main/packages/hooks-mux/cli#readme",
|
|
21
|
+
"bugs": {
|
|
22
|
+
"url": "https://github.com/a5c-ai/babysitter/issues"
|
|
23
|
+
},
|
|
20
24
|
"files": [
|
|
21
|
-
"dist"
|
|
25
|
+
"dist",
|
|
26
|
+
"README.md"
|
|
22
27
|
],
|
|
23
28
|
"scripts": {
|
|
24
29
|
"build": "tsc -p tsconfig.json",
|
|
@@ -28,7 +33,16 @@
|
|
|
28
33
|
"test:watch": "vitest"
|
|
29
34
|
},
|
|
30
35
|
"dependencies": {
|
|
31
|
-
"@a5c-ai/hooks-mux-
|
|
36
|
+
"@a5c-ai/hooks-mux-adapter-claude": "5.0.1-staging.ef4e872c",
|
|
37
|
+
"@a5c-ai/hooks-mux-adapter-codex": "5.0.1-staging.ef4e872c",
|
|
38
|
+
"@a5c-ai/hooks-mux-adapter-copilot": "5.0.1-staging.ef4e872c",
|
|
39
|
+
"@a5c-ai/hooks-mux-adapter-cursor": "5.0.1-staging.ef4e872c",
|
|
40
|
+
"@a5c-ai/hooks-mux-adapter-gemini": "5.0.1-staging.ef4e872c",
|
|
41
|
+
"@a5c-ai/hooks-mux-adapter-oh-my-pi": "5.0.1-staging.ef4e872c",
|
|
42
|
+
"@a5c-ai/hooks-mux-adapter-openclaw": "5.0.1-staging.ef4e872c",
|
|
43
|
+
"@a5c-ai/hooks-mux-adapter-opencode": "5.0.1-staging.ef4e872c",
|
|
44
|
+
"@a5c-ai/hooks-mux-adapter-pi": "5.0.1-staging.ef4e872c",
|
|
45
|
+
"@a5c-ai/hooks-mux-core": "5.0.1-staging.ef4e872c",
|
|
32
46
|
"yargs": "^17.0.0"
|
|
33
47
|
},
|
|
34
48
|
"devDependencies": {
|