@a5c-ai/hooks-mux-cli 5.0.1-staging.05a8c224

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.
Files changed (50) hide show
  1. package/README.md +27 -0
  2. package/dist/cli/adapter-loader.d.ts +41 -0
  3. package/dist/cli/adapter-loader.d.ts.map +1 -0
  4. package/dist/cli/adapter-loader.js +151 -0
  5. package/dist/cli/adapter-loader.js.map +1 -0
  6. package/dist/cli/bootstrap-runtime.d.ts +18 -0
  7. package/dist/cli/bootstrap-runtime.d.ts.map +1 -0
  8. package/dist/cli/bootstrap-runtime.js +108 -0
  9. package/dist/cli/bootstrap-runtime.js.map +1 -0
  10. package/dist/cli/commands/bootstrap.d.ts +18 -0
  11. package/dist/cli/commands/bootstrap.d.ts.map +1 -0
  12. package/dist/cli/commands/bootstrap.js +89 -0
  13. package/dist/cli/commands/bootstrap.js.map +1 -0
  14. package/dist/cli/commands/clear-session.d.ts +13 -0
  15. package/dist/cli/commands/clear-session.d.ts.map +1 -0
  16. package/dist/cli/commands/clear-session.js +34 -0
  17. package/dist/cli/commands/clear-session.js.map +1 -0
  18. package/dist/cli/commands/doctor.d.ts +16 -0
  19. package/dist/cli/commands/doctor.d.ts.map +1 -0
  20. package/dist/cli/commands/doctor.js +333 -0
  21. package/dist/cli/commands/doctor.js.map +1 -0
  22. package/dist/cli/commands/exec.d.ts +18 -0
  23. package/dist/cli/commands/exec.d.ts.map +1 -0
  24. package/dist/cli/commands/exec.js +104 -0
  25. package/dist/cli/commands/exec.js.map +1 -0
  26. package/dist/cli/commands/invoke.d.ts +27 -0
  27. package/dist/cli/commands/invoke.d.ts.map +1 -0
  28. package/dist/cli/commands/invoke.js +293 -0
  29. package/dist/cli/commands/invoke.js.map +1 -0
  30. package/dist/cli/commands/show-session.d.ts +13 -0
  31. package/dist/cli/commands/show-session.d.ts.map +1 -0
  32. package/dist/cli/commands/show-session.js +53 -0
  33. package/dist/cli/commands/show-session.js.map +1 -0
  34. package/dist/cli/hooks-logger.d.ts +12 -0
  35. package/dist/cli/hooks-logger.d.ts.map +1 -0
  36. package/dist/cli/hooks-logger.js +115 -0
  37. package/dist/cli/hooks-logger.js.map +1 -0
  38. package/dist/cli/main.d.ts +3 -0
  39. package/dist/cli/main.d.ts.map +1 -0
  40. package/dist/cli/main.js +42 -0
  41. package/dist/cli/main.js.map +1 -0
  42. package/dist/cli/stdin.d.ts +9 -0
  43. package/dist/cli/stdin.d.ts.map +1 -0
  44. package/dist/cli/stdin.js +24 -0
  45. package/dist/cli/stdin.js.map +1 -0
  46. package/dist/index.d.ts +2 -0
  47. package/dist/index.d.ts.map +1 -0
  48. package/dist/index.js +6 -0
  49. package/dist/index.js.map +1 -0
  50. package/package.json +54 -0
@@ -0,0 +1,293 @@
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 adapter normalizer when available, else 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 via adapter renderer when available
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 bootstrap_runtime_1 = require("../bootstrap-runtime");
22
+ const hooks_logger_1 = require("../hooks-logger");
23
+ const stdin_1 = require("../stdin");
24
+ function inferClaudeNativeEventName(stdinData) {
25
+ if (!stdinData) {
26
+ return undefined;
27
+ }
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';
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;
52
+ }
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
+ };
94
+ }
95
+ return {
96
+ output: (rendered && typeof rendered === 'object' && !Array.isArray(rendered))
97
+ ? rendered
98
+ : {},
99
+ degradedFields: [],
100
+ };
101
+ }
102
+ /**
103
+ * Parse --handler values into HandlerRef objects.
104
+ * Format: "source:handler" or just "source" (handler defaults to "handler").
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
+ }
115
+ function parseHandlerArgs(handlers) {
116
+ return handlers.map((h) => {
117
+ const windowsPrefixLength = findWindowsPathPrefixLength(h);
118
+ const colonIdx = windowsPrefixLength > 0
119
+ ? h.indexOf(':', windowsPrefixLength)
120
+ : h.indexOf(':');
121
+ if (colonIdx >= 0) {
122
+ return { source: h.slice(0, colonIdx), handler: h.slice(colonIdx + 1) };
123
+ }
124
+ return { source: h, handler: 'handler' };
125
+ });
126
+ }
127
+ exports.invokeCommand = {
128
+ command: 'invoke',
129
+ describe: 'Primary hook entrypoint — normalize, execute, merge, propagate',
130
+ builder: (yargs) => yargs
131
+ .option('adapter', {
132
+ type: 'string',
133
+ demandOption: true,
134
+ describe: 'Adapter name (e.g. claude, codex, copilot) or "auto" to detect from environment',
135
+ })
136
+ .option('handler', {
137
+ type: 'array',
138
+ string: true,
139
+ describe: 'Shell command handler(s) in command:label format',
140
+ })
141
+ .option('bootstrap-only', {
142
+ type: 'boolean',
143
+ default: false,
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.)',
149
+ })
150
+ .option('session-id', {
151
+ type: 'string',
152
+ describe: 'Explicit session ID override',
153
+ })
154
+ .option('json', {
155
+ type: 'boolean',
156
+ default: false,
157
+ describe: 'Output JSON format',
158
+ }),
159
+ handler: async (args) => {
160
+ const logger = (0, hooks_logger_1.createHooksLogger)('invoke');
161
+ // 1. Load adapter
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
+ });
168
+ // 2. Read stdin
169
+ const rawStdin = await (0, stdin_1.readStdin)();
170
+ const stdinPayload = (0, bootstrap_runtime_1.tryParseJson)(rawStdin);
171
+ const stdinData = (typeof stdinPayload === 'object' && stdinPayload !== null && !Array.isArray(stdinPayload))
172
+ ? stdinPayload
173
+ : undefined;
174
+ // Determine raw event name from env or stdin
175
+ const env = process.env;
176
+ const rawEvent = resolveRawEventName(args['native-event'], loaded.capabilities.name, stdinData, env);
177
+ const { rawEventName } = rawEvent;
178
+ await logger.debug('stdin parsed', {
179
+ rawEventName,
180
+ rawEventNameSource: rawEvent.source,
181
+ stdinBytes: rawStdin.length,
182
+ stdinJson: Boolean(stdinData),
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
+ });
194
+ // 4. Resolve session
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
+ });
200
+ let session = null;
201
+ if (sessionId) {
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;
209
+ // Inject session context into event execution
210
+ event.execution.sessionId = sessionId;
211
+ if (session?.persistedEnv) {
212
+ Object.assign(event.execution.persistedEnv, session.persistedEnv);
213
+ }
214
+ }
215
+ // 5. Bootstrap-only mode: persist session and exit
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;
224
+ if (session) {
225
+ await (0, hooks_mux_core_1.saveSession)(session);
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
+ });
233
+ if (args.json) {
234
+ process.stdout.write(JSON.stringify({ status: 'bootstrapped', sessionId }, null, 2) + '\n');
235
+ }
236
+ return;
237
+ }
238
+ // 6. Resolve execution plan
239
+ const handlers = args.handler ? parseHandlerArgs(args.handler) : [];
240
+ const plan = (0, hooks_mux_core_1.resolveHookPlan)({
241
+ phase: event.phase,
242
+ handlers,
243
+ });
244
+ // 7. Run plan and merge
245
+ let merged;
246
+ if (plan.length > 0) {
247
+ const results = await (0, hooks_mux_core_1.runPlan)(event, plan, { capabilities: loaded.capabilities });
248
+ merged = (0, hooks_mux_core_1.mergeResults)(results);
249
+ }
250
+ else {
251
+ // No handlers: produce a noop result
252
+ merged = (0, hooks_mux_core_1.mergeResults)([{ decision: 'noop' }]);
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
+ });
260
+ // 8. Persist session updates
261
+ if (session && sessionId) {
262
+ if (Object.keys(merged.persistEnv).length > 0) {
263
+ session.persistedEnv = { ...session.persistedEnv, ...merged.persistEnv };
264
+ }
265
+ if (Object.keys(merged.contextVars).length > 0) {
266
+ session.contextVars = { ...session.contextVars, ...merged.contextVars };
267
+ }
268
+ for (const key of merged.unsetEnv) {
269
+ delete session.persistedEnv[key];
270
+ }
271
+ session.updatedAt = new Date().toISOString();
272
+ await (0, hooks_mux_core_1.saveSession)(session);
273
+ }
274
+ // 9. Apply propagation backend
275
+ if (Object.keys(merged.persistEnv).length > 0) {
276
+ const backend = loaded.capabilities.envPersistenceMode;
277
+ await (0, hooks_mux_core_1.propagateEnv)(backend, merged.persistEnv, {
278
+ nativeEnvFilePath: (0, bootstrap_runtime_1.resolveNativeEnvFilePath)(env),
279
+ });
280
+ }
281
+ // 10. Emit adapter-native output
282
+ const adapted = renderOutput(args, loaded, merged, rawEventName, stdinPayload, event);
283
+ await logger.info('invoke completed', {
284
+ adapter: args.adapter,
285
+ phase: event.phase,
286
+ sessionId,
287
+ decision: merged.decision,
288
+ degradedFields: adapted.degradedFields,
289
+ });
290
+ process.stdout.write(JSON.stringify(adapted.output, null, args.json ? 2 : 0) + '\n');
291
+ },
292
+ };
293
+ //# 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,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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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export declare function main(argv?: string[]): Promise<void>;
3
+ //# sourceMappingURL=main.d.ts.map
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,42 @@
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 hooks_logger_1 = require("./hooks-logger");
11
+ const invoke_1 = require("./commands/invoke");
12
+ const exec_1 = require("./commands/exec");
13
+ const bootstrap_1 = require("./commands/bootstrap");
14
+ const show_session_1 = require("./commands/show-session");
15
+ const clear_session_1 = require("./commands/clear-session");
16
+ const doctor_1 = require("./commands/doctor");
17
+ async function main(argv = process.argv) {
18
+ await (0, yargs_1.default)((0, helpers_1.hideBin)(argv))
19
+ .scriptName('a5c-hooks-mux')
20
+ .usage('$0 <command> [options]')
21
+ .command(invoke_1.invokeCommand)
22
+ .command(exec_1.execCommand)
23
+ .command(bootstrap_1.bootstrapCommand)
24
+ .command(show_session_1.showSessionCommand)
25
+ .command(clear_session_1.clearSessionCommand)
26
+ .command(doctor_1.doctorCommand)
27
+ .demandCommand(1, 'You must provide a command')
28
+ .strict()
29
+ .help()
30
+ .parseAsync();
31
+ }
32
+ if (require.main === module) {
33
+ const logger = (0, hooks_logger_1.createHooksLogger)('main');
34
+ main().catch((err) => {
35
+ void logger.error('cli main failed', {
36
+ error: err instanceof Error ? err.message : String(err),
37
+ });
38
+ console.error(err);
39
+ process.exit(1);
40
+ });
41
+ }
42
+ //# sourceMappingURL=main.js.map
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Stdin reading utility.
3
+ */
4
+ /**
5
+ * Read all of stdin as a string.
6
+ * Returns empty string if stdin is a TTY (interactive terminal).
7
+ */
8
+ export declare function readStdin(): Promise<string>;
9
+ //# sourceMappingURL=stdin.d.ts.map
@@ -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"}
@@ -0,0 +1,2 @@
1
+ export { main } from './cli/main';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -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"}