@a5c-ai/hooks-adapter-cli 5.1.1-staging.52898ebfc24f

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 (54) hide show
  1. package/README.md +27 -0
  2. package/dist/cli/a5c-hooks-adapter.d.ts +3 -0
  3. package/dist/cli/a5c-hooks-adapter.d.ts.map +1 -0
  4. package/dist/cli/a5c-hooks-adapter.js +15 -0
  5. package/dist/cli/a5c-hooks-adapter.js.map +1 -0
  6. package/dist/cli/adapter-loader.d.ts +38 -0
  7. package/dist/cli/adapter-loader.d.ts.map +1 -0
  8. package/dist/cli/adapter-loader.js +165 -0
  9. package/dist/cli/adapter-loader.js.map +1 -0
  10. package/dist/cli/bootstrap-runtime.d.ts +18 -0
  11. package/dist/cli/bootstrap-runtime.d.ts.map +1 -0
  12. package/dist/cli/bootstrap-runtime.js +108 -0
  13. package/dist/cli/bootstrap-runtime.js.map +1 -0
  14. package/dist/cli/commands/bootstrap.d.ts +18 -0
  15. package/dist/cli/commands/bootstrap.d.ts.map +1 -0
  16. package/dist/cli/commands/bootstrap.js +89 -0
  17. package/dist/cli/commands/bootstrap.js.map +1 -0
  18. package/dist/cli/commands/clear-session.d.ts +13 -0
  19. package/dist/cli/commands/clear-session.d.ts.map +1 -0
  20. package/dist/cli/commands/clear-session.js +34 -0
  21. package/dist/cli/commands/clear-session.js.map +1 -0
  22. package/dist/cli/commands/doctor.d.ts +16 -0
  23. package/dist/cli/commands/doctor.d.ts.map +1 -0
  24. package/dist/cli/commands/doctor.js +321 -0
  25. package/dist/cli/commands/doctor.js.map +1 -0
  26. package/dist/cli/commands/exec.d.ts +18 -0
  27. package/dist/cli/commands/exec.d.ts.map +1 -0
  28. package/dist/cli/commands/exec.js +104 -0
  29. package/dist/cli/commands/exec.js.map +1 -0
  30. package/dist/cli/commands/invoke.d.ts +30 -0
  31. package/dist/cli/commands/invoke.d.ts.map +1 -0
  32. package/dist/cli/commands/invoke.js +322 -0
  33. package/dist/cli/commands/invoke.js.map +1 -0
  34. package/dist/cli/commands/show-session.d.ts +13 -0
  35. package/dist/cli/commands/show-session.d.ts.map +1 -0
  36. package/dist/cli/commands/show-session.js +53 -0
  37. package/dist/cli/commands/show-session.js.map +1 -0
  38. package/dist/cli/hooks-logger.d.ts +12 -0
  39. package/dist/cli/hooks-logger.d.ts.map +1 -0
  40. package/dist/cli/hooks-logger.js +118 -0
  41. package/dist/cli/hooks-logger.js.map +1 -0
  42. package/dist/cli/main.d.ts +3 -0
  43. package/dist/cli/main.d.ts.map +1 -0
  44. package/dist/cli/main.js +42 -0
  45. package/dist/cli/main.js.map +1 -0
  46. package/dist/cli/stdin.d.ts +9 -0
  47. package/dist/cli/stdin.d.ts.map +1 -0
  48. package/dist/cli/stdin.js +24 -0
  49. package/dist/cli/stdin.js.map +1 -0
  50. package/dist/index.d.ts +2 -0
  51. package/dist/index.d.ts.map +1 -0
  52. package/dist/index.js +6 -0
  53. package/dist/index.js.map +1 -0
  54. package/package.json +65 -0
@@ -0,0 +1,322 @@
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_adapter_core_1 = require("@a5c-ai/hooks-adapter-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_adapter_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, shell) {
116
+ return handlers.map((h) => {
117
+ const windowsPrefixLength = findWindowsPathPrefixLength(h);
118
+ const colonIdx = windowsPrefixLength > 0
119
+ ? h.indexOf(':', windowsPrefixLength)
120
+ : h.indexOf(':');
121
+ const withShell = (handler) => (shell ? { ...handler, shell } : handler);
122
+ if (colonIdx >= 0) {
123
+ return withShell({ source: h.slice(0, colonIdx), handler: h.slice(colonIdx + 1) });
124
+ }
125
+ return withShell({ source: h, handler: 'handler' });
126
+ });
127
+ }
128
+ exports.invokeCommand = {
129
+ command: 'invoke',
130
+ describe: 'Primary hook entrypoint — normalize, execute, merge, propagate',
131
+ builder: (yargs) => yargs
132
+ .option('adapter', {
133
+ type: 'string',
134
+ demandOption: true,
135
+ describe: 'Adapter name (e.g. claude, codex, copilot) or "auto" to detect from environment',
136
+ })
137
+ .option('handler', {
138
+ type: 'array',
139
+ string: true,
140
+ describe: 'Shell command handler(s) in command:label format',
141
+ })
142
+ .option('bootstrap-only', {
143
+ type: 'boolean',
144
+ default: false,
145
+ describe: 'Only bootstrap session context, skip handler execution',
146
+ })
147
+ .option('native-event', {
148
+ type: 'string',
149
+ describe: 'Explicit native hook event name (for Claude: SessionStart, PreToolUse, PostToolUse, Stop, etc.)',
150
+ })
151
+ .option('session-id', {
152
+ type: 'string',
153
+ describe: 'Explicit session ID override',
154
+ })
155
+ .option('disable-all-hooks', {
156
+ type: 'boolean',
157
+ default: false,
158
+ describe: 'Skip hook execution and return a disabled noop diagnostic result',
159
+ })
160
+ .option('handler-timeout-ms', {
161
+ type: 'number',
162
+ describe: 'Default timeout in milliseconds for command handlers',
163
+ })
164
+ .option('shell', {
165
+ type: 'string',
166
+ describe: 'Shell executable to use for explicit command handlers',
167
+ })
168
+ .option('json', {
169
+ type: 'boolean',
170
+ default: false,
171
+ describe: 'Output JSON format',
172
+ }),
173
+ handler: async (args) => {
174
+ const logger = (0, hooks_logger_1.createHooksLogger)('invoke');
175
+ // 1. Load adapter
176
+ const loaded = (0, adapter_loader_1.loadAdapter)(args.adapter);
177
+ await logger.info('invoke started', {
178
+ adapter: args.adapter,
179
+ bootstrapOnly: Boolean(args['bootstrap-only']),
180
+ handlerCount: args.handler?.length ?? 0,
181
+ });
182
+ // 2. Read stdin
183
+ const rawStdin = await (0, stdin_1.readStdin)();
184
+ const stdinPayload = (0, bootstrap_runtime_1.tryParseJson)(rawStdin);
185
+ const stdinData = (typeof stdinPayload === 'object' && stdinPayload !== null && !Array.isArray(stdinPayload))
186
+ ? stdinPayload
187
+ : undefined;
188
+ // Determine raw event name from env or stdin
189
+ const env = process.env;
190
+ const rawEvent = resolveRawEventName(args['native-event'], loaded.capabilities.name, stdinData, env);
191
+ const { rawEventName } = rawEvent;
192
+ await logger.debug('stdin parsed', {
193
+ rawEventName,
194
+ rawEventNameSource: rawEvent.source,
195
+ stdinBytes: rawStdin.length,
196
+ stdinJson: Boolean(stdinData),
197
+ });
198
+ // 3. Normalize event
199
+ const event = loaded.normalizer
200
+ ? loaded.normalizer(rawEventName, rawStdin, env)
201
+ : (0, hooks_adapter_core_1.normalizeEvent)({
202
+ adapter: args.adapter,
203
+ rawEventName,
204
+ stdinPayload,
205
+ env,
206
+ adapterMappings: loaded.phaseMappings,
207
+ });
208
+ // 4. Resolve session
209
+ const sessionId = (0, bootstrap_runtime_1.resolveSessionId)(loaded.sessionResolver, args['session-id'], event.execution.sessionId, stdinData, env);
210
+ await logger.debug('session resolved', {
211
+ sessionId,
212
+ explicitSessionId: args['session-id'] ?? null,
213
+ });
214
+ let session = null;
215
+ if (sessionId) {
216
+ const prepared = (0, bootstrap_runtime_1.prepareBootstrapSession)({
217
+ existingSession: await (0, hooks_adapter_core_1.loadSession)(sessionId),
218
+ adapter: args.adapter,
219
+ event,
220
+ sessionId,
221
+ });
222
+ session = prepared.session;
223
+ // Inject session context into event execution
224
+ event.execution.sessionId = sessionId;
225
+ if (session?.persistedEnv) {
226
+ Object.assign(event.execution.persistedEnv, session.persistedEnv);
227
+ }
228
+ }
229
+ // 5. Bootstrap-only mode: persist session and exit
230
+ if (args['bootstrap-only']) {
231
+ const prepared = (0, bootstrap_runtime_1.prepareBootstrapSession)({
232
+ existingSession: session,
233
+ adapter: args.adapter,
234
+ event,
235
+ sessionId,
236
+ });
237
+ session = prepared.session;
238
+ if (session) {
239
+ await (0, hooks_adapter_core_1.saveSession)(session);
240
+ }
241
+ const propagated = await (0, bootstrap_runtime_1.propagateBootstrapEnv)(loaded.capabilities.envPersistenceMode, prepared.persistEnv, env);
242
+ await logger.info('bootstrap-only invoke completed', {
243
+ adapter: args.adapter,
244
+ sessionId,
245
+ propagated,
246
+ });
247
+ if (args.json) {
248
+ process.stdout.write(JSON.stringify({ status: 'bootstrapped', sessionId }, null, 2) + '\n');
249
+ }
250
+ return;
251
+ }
252
+ // 6. Resolve execution plan
253
+ const handlers = args.handler ? parseHandlerArgs(args.handler, args.shell) : [];
254
+ const plan = (0, hooks_adapter_core_1.resolveHookPlan)({
255
+ phase: event.phase,
256
+ handlers,
257
+ });
258
+ // 7. Run plan and merge
259
+ let merged;
260
+ if (plan.length > 0) {
261
+ const results = await (0, hooks_adapter_core_1.runPlan)(event, plan, {
262
+ capabilities: loaded.capabilities,
263
+ disableAllHooks: args['disable-all-hooks'] || undefined,
264
+ handlerTimeoutMs: args['handler-timeout-ms'],
265
+ });
266
+ merged = (0, hooks_adapter_core_1.mergeResults)(results);
267
+ }
268
+ else {
269
+ // No handlers: produce a noop result
270
+ merged = (0, hooks_adapter_core_1.mergeResults)([{ decision: 'noop' }]);
271
+ }
272
+ await logger.debug('plan executed', {
273
+ phase: event.phase,
274
+ planLength: plan.length,
275
+ decision: merged.decision,
276
+ degradedFields: merged.diagnostics.degradedFields,
277
+ });
278
+ // 8. Persist session updates
279
+ if (session && sessionId) {
280
+ if (Object.keys(merged.persistEnv).length > 0) {
281
+ session.persistedEnv = { ...session.persistedEnv, ...merged.persistEnv };
282
+ }
283
+ if (Object.keys(merged.contextVars).length > 0) {
284
+ session.contextVars = { ...session.contextVars, ...merged.contextVars };
285
+ }
286
+ for (const key of merged.unsetEnv) {
287
+ delete session.persistedEnv[key];
288
+ }
289
+ session.updatedAt = new Date().toISOString();
290
+ await (0, hooks_adapter_core_1.saveSession)(session);
291
+ }
292
+ // 9. Apply propagation backend
293
+ if (Object.keys(merged.persistEnv).length > 0) {
294
+ const backend = loaded.capabilities.envPersistenceMode;
295
+ await (0, hooks_adapter_core_1.propagateEnv)(backend, merged.persistEnv, {
296
+ nativeEnvFilePath: (0, bootstrap_runtime_1.resolveNativeEnvFilePath)(env),
297
+ });
298
+ }
299
+ // 10. Emit adapter-native output
300
+ const adapted = renderOutput(args, loaded, merged, rawEventName, stdinPayload, event);
301
+ await logger.info('invoke completed', {
302
+ adapter: args.adapter,
303
+ phase: event.phase,
304
+ sessionId,
305
+ decision: merged.decision,
306
+ degradedFields: adapted.degradedFields,
307
+ });
308
+ const finalOutput = { ...adapted.output };
309
+ if (Object.keys(adapted.output).length === 0) {
310
+ finalOutput.decision = merged.decision;
311
+ }
312
+ if (Object.keys(merged.persistEnv).length > 0) {
313
+ finalOutput.persistEnv = merged.persistEnv;
314
+ }
315
+ finalOutput.metadata = {
316
+ ...(sessionId ? { AGENT_SESSION_ID: sessionId } : {}),
317
+ AGENT_ADAPTER: args.adapter,
318
+ };
319
+ process.stdout.write(JSON.stringify(finalOutput, null, args.json ? 2 : 0) + '\n');
320
+ },
321
+ };
322
+ //# 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_adapter_core_1 = require("@a5c-ai/hooks-adapter-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_adapter_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,mEAAyD;AAO5C,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,gCAAW,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,CA0Bf;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,118 @@
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-adapter.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
+ const logDir = getHooksLogDir();
99
+ const logPath = getHooksLogPath();
100
+ process.stderr.write(`[hooks-logger] writing to ${logPath} (home=${resolveHomeDir()})\n`);
101
+ try {
102
+ fs.mkdirSync(logDir, { recursive: true });
103
+ fs.appendFileSync(logPath, JSON.stringify(entry) + '\n', 'utf8');
104
+ process.stderr.write(`[hooks-logger] write OK\n`);
105
+ }
106
+ catch (err) {
107
+ process.stderr.write(`[hooks-logger] FAILED: ${err instanceof Error ? err.message : String(err)}\n`);
108
+ }
109
+ }
110
+ function createHooksLogger(command) {
111
+ return {
112
+ debug: (message, context) => appendHooksLog(command, 'debug', message, context),
113
+ info: (message, context) => appendHooksLog(command, 'info', message, context),
114
+ warn: (message, context) => appendHooksLog(command, 'warn', message, context),
115
+ error: (message, context) => appendHooksLog(command, 'error', message, context),
116
+ };
117
+ }
118
+ //# 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/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('adapters-hooks')
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
+ .parse();
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,wDAAgC;AAChC,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,gBAAgB,CAAC;SAC5B,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,KAAK,EAAE,CAAC;AACb,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