@karis-ai/cli 0.1.0

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 (154) hide show
  1. package/bin/karis.js +2 -0
  2. package/dist/commands/brand/customize.d.ts +11 -0
  3. package/dist/commands/brand/customize.d.ts.map +1 -0
  4. package/dist/commands/brand/customize.js +115 -0
  5. package/dist/commands/brand/customize.js.map +1 -0
  6. package/dist/commands/brand/info.d.ts +3 -0
  7. package/dist/commands/brand/info.d.ts.map +1 -0
  8. package/dist/commands/brand/info.js +14 -0
  9. package/dist/commands/brand/info.js.map +1 -0
  10. package/dist/commands/brand/init.d.ts +7 -0
  11. package/dist/commands/brand/init.d.ts.map +1 -0
  12. package/dist/commands/brand/init.js +133 -0
  13. package/dist/commands/brand/init.js.map +1 -0
  14. package/dist/commands/brand/list.d.ts +4 -0
  15. package/dist/commands/brand/list.d.ts.map +1 -0
  16. package/dist/commands/brand/list.js +46 -0
  17. package/dist/commands/brand/list.js.map +1 -0
  18. package/dist/commands/brand/refresh.d.ts +7 -0
  19. package/dist/commands/brand/refresh.d.ts.map +1 -0
  20. package/dist/commands/brand/refresh.js +63 -0
  21. package/dist/commands/brand/refresh.js.map +1 -0
  22. package/dist/commands/brand/select.d.ts +6 -0
  23. package/dist/commands/brand/select.d.ts.map +1 -0
  24. package/dist/commands/brand/select.js +104 -0
  25. package/dist/commands/brand/select.js.map +1 -0
  26. package/dist/commands/brand/show.d.ts +4 -0
  27. package/dist/commands/brand/show.d.ts.map +1 -0
  28. package/dist/commands/brand/show.js +122 -0
  29. package/dist/commands/brand/show.js.map +1 -0
  30. package/dist/commands/capabilities.d.ts +3 -0
  31. package/dist/commands/capabilities.d.ts.map +1 -0
  32. package/dist/commands/capabilities.js +103 -0
  33. package/dist/commands/capabilities.js.map +1 -0
  34. package/dist/commands/chat.d.ts +3 -0
  35. package/dist/commands/chat.d.ts.map +1 -0
  36. package/dist/commands/chat.js +336 -0
  37. package/dist/commands/chat.js.map +1 -0
  38. package/dist/commands/config.d.ts +3 -0
  39. package/dist/commands/config.d.ts.map +1 -0
  40. package/dist/commands/config.js +91 -0
  41. package/dist/commands/config.js.map +1 -0
  42. package/dist/commands/doctor.d.ts +3 -0
  43. package/dist/commands/doctor.d.ts.map +1 -0
  44. package/dist/commands/doctor.js +148 -0
  45. package/dist/commands/doctor.js.map +1 -0
  46. package/dist/commands/geo.d.ts +3 -0
  47. package/dist/commands/geo.d.ts.map +1 -0
  48. package/dist/commands/geo.js +22 -0
  49. package/dist/commands/geo.js.map +1 -0
  50. package/dist/commands/login.d.ts +8 -0
  51. package/dist/commands/login.d.ts.map +1 -0
  52. package/dist/commands/login.js +173 -0
  53. package/dist/commands/login.js.map +1 -0
  54. package/dist/commands/memory.d.ts +3 -0
  55. package/dist/commands/memory.d.ts.map +1 -0
  56. package/dist/commands/memory.js +19 -0
  57. package/dist/commands/memory.js.map +1 -0
  58. package/dist/commands/reddit.d.ts +3 -0
  59. package/dist/commands/reddit.d.ts.map +1 -0
  60. package/dist/commands/reddit.js +61 -0
  61. package/dist/commands/reddit.js.map +1 -0
  62. package/dist/commands/schedule.d.ts +3 -0
  63. package/dist/commands/schedule.d.ts.map +1 -0
  64. package/dist/commands/schedule.js +15 -0
  65. package/dist/commands/schedule.js.map +1 -0
  66. package/dist/commands/setup.d.ts +11 -0
  67. package/dist/commands/setup.d.ts.map +1 -0
  68. package/dist/commands/setup.js +303 -0
  69. package/dist/commands/setup.js.map +1 -0
  70. package/dist/commands/show.d.ts +3 -0
  71. package/dist/commands/show.d.ts.map +1 -0
  72. package/dist/commands/show.js +46 -0
  73. package/dist/commands/show.js.map +1 -0
  74. package/dist/commands/tools.d.ts +3 -0
  75. package/dist/commands/tools.d.ts.map +1 -0
  76. package/dist/commands/tools.js +139 -0
  77. package/dist/commands/tools.js.map +1 -0
  78. package/dist/commands/web.d.ts +3 -0
  79. package/dist/commands/web.d.ts.map +1 -0
  80. package/dist/commands/web.js +29 -0
  81. package/dist/commands/web.js.map +1 -0
  82. package/dist/commands/x.d.ts +3 -0
  83. package/dist/commands/x.d.ts.map +1 -0
  84. package/dist/commands/x.js +29 -0
  85. package/dist/commands/x.js.map +1 -0
  86. package/dist/commands/youtube.d.ts +3 -0
  87. package/dist/commands/youtube.d.ts.map +1 -0
  88. package/dist/commands/youtube.js +16 -0
  89. package/dist/commands/youtube.js.map +1 -0
  90. package/dist/core/agent-factory.d.ts +20 -0
  91. package/dist/core/agent-factory.d.ts.map +1 -0
  92. package/dist/core/agent-factory.js +26 -0
  93. package/dist/core/agent-factory.js.map +1 -0
  94. package/dist/core/agent-interface.d.ts +68 -0
  95. package/dist/core/agent-interface.d.ts.map +1 -0
  96. package/dist/core/agent-interface.js +5 -0
  97. package/dist/core/agent-interface.js.map +1 -0
  98. package/dist/core/browser-bridge.d.ts +19 -0
  99. package/dist/core/browser-bridge.d.ts.map +1 -0
  100. package/dist/core/browser-bridge.js +56 -0
  101. package/dist/core/browser-bridge.js.map +1 -0
  102. package/dist/core/cli-context.d.ts +19 -0
  103. package/dist/core/cli-context.d.ts.map +1 -0
  104. package/dist/core/cli-context.js +43 -0
  105. package/dist/core/cli-context.js.map +1 -0
  106. package/dist/core/client.d.ts +219 -0
  107. package/dist/core/client.d.ts.map +1 -0
  108. package/dist/core/client.js +638 -0
  109. package/dist/core/client.js.map +1 -0
  110. package/dist/core/errors.d.ts +18 -0
  111. package/dist/core/errors.d.ts.map +1 -0
  112. package/dist/core/errors.js +107 -0
  113. package/dist/core/errors.js.map +1 -0
  114. package/dist/core/remote-agent.d.ts +36 -0
  115. package/dist/core/remote-agent.d.ts.map +1 -0
  116. package/dist/core/remote-agent.js +195 -0
  117. package/dist/core/remote-agent.js.map +1 -0
  118. package/dist/index.d.ts +2 -0
  119. package/dist/index.d.ts.map +1 -0
  120. package/dist/index.js +178 -0
  121. package/dist/index.js.map +1 -0
  122. package/dist/utils/agent-helper.d.ts +14 -0
  123. package/dist/utils/agent-helper.d.ts.map +1 -0
  124. package/dist/utils/agent-helper.js +54 -0
  125. package/dist/utils/agent-helper.js.map +1 -0
  126. package/dist/utils/config.d.ts +26 -0
  127. package/dist/utils/config.d.ts.map +1 -0
  128. package/dist/utils/config.js +93 -0
  129. package/dist/utils/config.js.map +1 -0
  130. package/dist/utils/form-prompt.d.ts +15 -0
  131. package/dist/utils/form-prompt.d.ts.map +1 -0
  132. package/dist/utils/form-prompt.js +153 -0
  133. package/dist/utils/form-prompt.js.map +1 -0
  134. package/dist/utils/formatter.d.ts +7 -0
  135. package/dist/utils/formatter.d.ts.map +1 -0
  136. package/dist/utils/formatter.js +132 -0
  137. package/dist/utils/formatter.js.map +1 -0
  138. package/dist/utils/index-cache.d.ts +10 -0
  139. package/dist/utils/index-cache.d.ts.map +1 -0
  140. package/dist/utils/index-cache.js +22 -0
  141. package/dist/utils/index-cache.js.map +1 -0
  142. package/dist/utils/interactive.d.ts +19 -0
  143. package/dist/utils/interactive.d.ts.map +1 -0
  144. package/dist/utils/interactive.js +73 -0
  145. package/dist/utils/interactive.js.map +1 -0
  146. package/dist/utils/output.d.ts +41 -0
  147. package/dist/utils/output.d.ts.map +1 -0
  148. package/dist/utils/output.js +259 -0
  149. package/dist/utils/output.js.map +1 -0
  150. package/dist/utils/run-command.d.ts +2 -0
  151. package/dist/utils/run-command.d.ts.map +1 -0
  152. package/dist/utils/run-command.js +12 -0
  153. package/dist/utils/run-command.js.map +1 -0
  154. package/package.json +50 -0
@@ -0,0 +1,54 @@
1
+ import { AgentFactory } from '../core/agent-factory.js';
2
+ import { createAuthRequiredError } from '../core/errors.js';
3
+ import { getCliContext, isJsonOutput, isYamlOutput } from '../core/cli-context.js';
4
+ import { printCommandResult, renderStreamChunk, resetToolCallCounter } from './output.js';
5
+ import { RemoteAgent } from '../core/remote-agent.js';
6
+ /**
7
+ * Create and validate agent
8
+ */
9
+ export async function createAgent() {
10
+ const agent = await AgentFactory.create();
11
+ if (!(await agent.isAvailable())) {
12
+ throw createAuthRequiredError();
13
+ }
14
+ return agent;
15
+ }
16
+ /**
17
+ * Execute a single-turn chat with Karis Platform
18
+ */
19
+ export async function executeSingleTurn(prompt) {
20
+ const agent = await createAgent();
21
+ const chunks = [];
22
+ let response = '';
23
+ resetToolCallCounter();
24
+ for await (const chunk of agent.streamChat([
25
+ { role: 'user', content: prompt }
26
+ ])) {
27
+ chunks.push(chunk);
28
+ if (chunk.type === 'content' && chunk.content) {
29
+ response += chunk.content;
30
+ }
31
+ renderChunk(chunk);
32
+ }
33
+ if (isJsonOutput() || isYamlOutput()) {
34
+ printCommandResult({
35
+ prompt,
36
+ response,
37
+ events: chunks,
38
+ conversation_id: agent instanceof RemoteAgent ? (agent.getConversationId() || undefined) : undefined,
39
+ mode: agent.getMode(),
40
+ }, {
41
+ command: getCliContext().commandPath,
42
+ meta: {
43
+ runtime: agent.getDescription(),
44
+ },
45
+ });
46
+ }
47
+ }
48
+ /**
49
+ * Render stream chunk
50
+ */
51
+ export function renderChunk(chunk) {
52
+ renderStreamChunk(chunk);
53
+ }
54
+ //# sourceMappingURL=agent-helper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-helper.js","sourceRoot":"","sources":["../../src/utils/agent-helper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAExD,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACnF,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAC1F,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAEtD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,MAAM,EAAE,CAAC;IAE1C,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;QACjC,MAAM,uBAAuB,EAAE,CAAC;IAClC,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,MAAc;IACpD,MAAM,KAAK,GAAG,MAAM,WAAW,EAAE,CAAC;IAClC,MAAM,MAAM,GAAkB,EAAE,CAAC;IACjC,IAAI,QAAQ,GAAG,EAAE,CAAC;IAElB,oBAAoB,EAAE,CAAC;IACvB,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,KAAK,CAAC,UAAU,CAAC;QACzC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE;KAClC,CAAC,EAAE,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnB,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YAC9C,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC;QAC5B,CAAC;QACD,WAAW,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;IAED,IAAI,YAAY,EAAE,IAAI,YAAY,EAAE,EAAE,CAAC;QACrC,kBAAkB,CAAC;YACjB,MAAM;YACN,QAAQ;YACR,MAAM,EAAE,MAAM;YACd,eAAe,EAAE,KAAK,YAAY,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,iBAAiB,EAAE,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS;YACpG,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE;SACtB,EAAE;YACD,OAAO,EAAE,aAAa,EAAE,CAAC,WAAW;YACpC,IAAI,EAAE;gBACJ,OAAO,EAAE,KAAK,CAAC,cAAc,EAAE;aAChC;SACF,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,KAAkB;IAC5C,iBAAiB,CAAC,KAAK,CAAC,CAAC;AAC3B,CAAC"}
@@ -0,0 +1,26 @@
1
+ export declare const SUPPORTED_CONFIG_KEYS: readonly ["api-key", "base-url", "last-conversation-id"];
2
+ export interface KarisConfig {
3
+ 'api-key'?: string;
4
+ 'base-url'?: string;
5
+ 'last-conversation-id'?: string;
6
+ [key: string]: string | undefined;
7
+ }
8
+ export interface ResolvedConfigEntry {
9
+ value?: string;
10
+ source: 'env' | 'config' | 'default' | 'unset';
11
+ }
12
+ export interface ResolvedConfig {
13
+ apiKey: ResolvedConfigEntry;
14
+ apiUrl: ResolvedConfigEntry;
15
+ }
16
+ export declare function ensureKarisDir(): Promise<string>;
17
+ export declare function loadConfig(): Promise<KarisConfig>;
18
+ export declare function saveConfig(config: KarisConfig): Promise<void>;
19
+ export declare function getConfigValue(key: string): Promise<string | undefined>;
20
+ export declare function setConfigValue(key: string, value: string): Promise<void>;
21
+ export declare function listConfig(): Promise<KarisConfig>;
22
+ export declare function getLastConversationId(): Promise<string | undefined>;
23
+ export declare function setLastConversationId(conversationId: string): Promise<void>;
24
+ export declare function loadResolvedConfig(): Promise<ResolvedConfig>;
25
+ export declare function maskValue(key: string, value: string): string;
26
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,qBAAqB,0DAA2D,CAAC;AAE9F,MAAM,WAAW,WAAW;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;CACnC;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,KAAK,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,CAAC;CAChD;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,mBAAmB,CAAC;IAC5B,MAAM,EAAE,mBAAmB,CAAC;CAC7B;AAMD,wBAAsB,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC,CAItD;AAED,wBAAsB,UAAU,IAAI,OAAO,CAAC,WAAW,CAAC,CAOvD;AAED,wBAAsB,UAAU,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAanE;AAED,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAG7E;AAED,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAI9E;AAED,wBAAsB,UAAU,IAAI,OAAO,CAAC,WAAW,CAAC,CAEvD;AAED,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAGzE;AAED,wBAAsB,qBAAqB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEjF;AAID,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,cAAc,CAAC,CASlE;AAwBD,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAK5D"}
@@ -0,0 +1,93 @@
1
+ import { readFile, writeFile, mkdir } from 'node:fs/promises';
2
+ import { join } from 'node:path';
3
+ import { homedir } from 'node:os';
4
+ const KARIS_DIR = '.karis';
5
+ const CONFIG_FILE = 'config.json';
6
+ export const SUPPORTED_CONFIG_KEYS = ['api-key', 'base-url', 'last-conversation-id'];
7
+ function globalConfigPath() {
8
+ return join(homedir(), KARIS_DIR, CONFIG_FILE);
9
+ }
10
+ export async function ensureKarisDir() {
11
+ const dir = join(homedir(), KARIS_DIR);
12
+ await mkdir(dir, { recursive: true });
13
+ return dir;
14
+ }
15
+ export async function loadConfig() {
16
+ try {
17
+ const raw = await readFile(globalConfigPath(), 'utf-8');
18
+ return sanitizeConfig(JSON.parse(raw));
19
+ }
20
+ catch {
21
+ return {};
22
+ }
23
+ }
24
+ export async function saveConfig(config) {
25
+ await ensureKarisDir();
26
+ const configPath = globalConfigPath();
27
+ const sanitizedConfig = sanitizeConfig(config);
28
+ await writeFile(configPath, JSON.stringify(sanitizedConfig, null, 2) + '\n', 'utf-8');
29
+ // Set restrictive permissions (600 = owner read/write only)
30
+ try {
31
+ const { chmod } = await import('node:fs/promises');
32
+ await chmod(configPath, 0o600);
33
+ }
34
+ catch {
35
+ // Ignore permission errors on Windows
36
+ }
37
+ }
38
+ export async function getConfigValue(key) {
39
+ const config = await loadConfig();
40
+ return config[key];
41
+ }
42
+ export async function setConfigValue(key, value) {
43
+ const config = await loadConfig();
44
+ config[key] = value;
45
+ await saveConfig(config);
46
+ }
47
+ export async function listConfig() {
48
+ return loadConfig();
49
+ }
50
+ export async function getLastConversationId() {
51
+ const config = await loadConfig();
52
+ return config['last-conversation-id'];
53
+ }
54
+ export async function setLastConversationId(conversationId) {
55
+ await setConfigValue('last-conversation-id', conversationId);
56
+ }
57
+ let _resolvedConfigCache = null;
58
+ export async function loadResolvedConfig() {
59
+ if (_resolvedConfigCache)
60
+ return _resolvedConfigCache;
61
+ const config = await loadConfig();
62
+ _resolvedConfigCache = {
63
+ apiKey: resolveValue(process.env.KARIS_API_KEY, config['api-key']),
64
+ apiUrl: resolveValue(process.env.KARIS_API_URL, config['base-url'], 'https://api.karis.im'),
65
+ };
66
+ return _resolvedConfigCache;
67
+ }
68
+ function resolveValue(envValue, configValue, defaultValue) {
69
+ if (envValue) {
70
+ return { value: envValue, source: 'env' };
71
+ }
72
+ if (configValue) {
73
+ return { value: configValue, source: 'config' };
74
+ }
75
+ if (defaultValue !== undefined) {
76
+ return { value: defaultValue, source: 'default' };
77
+ }
78
+ return { source: 'unset' };
79
+ }
80
+ const SENSITIVE_KEYS = ['api-key'];
81
+ export function maskValue(key, value) {
82
+ if (SENSITIVE_KEYS.includes(key) && value.length > 8) {
83
+ return value.slice(0, 5) + '...' + value.slice(-3);
84
+ }
85
+ return value;
86
+ }
87
+ function sanitizeConfig(config) {
88
+ return Object.fromEntries(Object.entries(config).filter((entry) => entry[1] !== undefined && isSupportedConfigKey(entry[0])));
89
+ }
90
+ function isSupportedConfigKey(key) {
91
+ return SUPPORTED_CONFIG_KEYS.includes(key);
92
+ }
93
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { HitlFormData } from '../core/agent-interface.js';
2
+ /**
3
+ * Classify whether an HITL form is a "confirmation" (auto-skippable with --yes)
4
+ * or a "decision" (always requires user input).
5
+ *
6
+ * Confirmation signals: title contains "Confirm", all items have defaults/values.
7
+ */
8
+ export declare function isConfirmationForm(formData: HitlFormData): boolean;
9
+ /**
10
+ * Convert an agent form_data schema into terminal prompts and collect user input.
11
+ * In autoConfirm mode, confirmation-type forms are auto-submitted with defaults.
12
+ */
13
+ export declare function promptForm(formData: HitlFormData, autoConfirm?: boolean): Promise<Record<string, unknown>>;
14
+ export type { HitlFormData };
15
+ //# sourceMappingURL=form-prompt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"form-prompt.d.ts","sourceRoot":"","sources":["../../src/utils/form-prompt.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAiC,MAAM,4BAA4B,CAAC;AAwB9F;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,YAAY,GAAG,OAAO,CAalE;AA4ED;;;GAGG;AACH,wBAAsB,UAAU,CAC9B,QAAQ,EAAE,YAAY,EACtB,WAAW,GAAE,OAAe,GAC3B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CA2ClC;AAED,YAAY,EAAE,YAAY,EAAE,CAAC"}
@@ -0,0 +1,153 @@
1
+ import { select, checkbox, confirm, input } from '@inquirer/prompts';
2
+ import chalk from 'chalk';
3
+ function toSnakeCase(label) {
4
+ return label
5
+ .toLowerCase()
6
+ .replace(/[^a-z0-9]+/g, '_')
7
+ .replace(/^_|_$/g, '');
8
+ }
9
+ function getDefaultValue(item) {
10
+ if (item.type === 'checkbox')
11
+ return item.value ?? false;
12
+ if (item.type === 'find-keywords') {
13
+ const defaults = item.default ?? [];
14
+ return defaults.flatMap(d => d.split(',').map(k => k.trim())).filter(Boolean);
15
+ }
16
+ const explicit = item.default?.[0] ?? item.value;
17
+ if (explicit !== undefined && explicit !== '')
18
+ return explicit;
19
+ if ((item.type === 'select' || item.type === 'radio') && item.options?.length) {
20
+ const first = item.options[0];
21
+ return typeof first === 'string' ? first : first.value;
22
+ }
23
+ return '';
24
+ }
25
+ /**
26
+ * Classify whether an HITL form is a "confirmation" (auto-skippable with --yes)
27
+ * or a "decision" (always requires user input).
28
+ *
29
+ * Confirmation signals: title contains "Confirm", all items have defaults/values.
30
+ */
31
+ export function isConfirmationForm(formData) {
32
+ const title = (formData.title ?? '').toLowerCase();
33
+ if (title.includes('confirm') || title.includes('确认'))
34
+ return true;
35
+ const items = (formData.sections ?? []).flatMap(s => s.items);
36
+ return items.length > 0 && items.every(i => {
37
+ if (i.type === 'checkbox')
38
+ return i.value !== undefined;
39
+ if (i.type === 'find-keywords')
40
+ return i.default?.length > 0;
41
+ if ((i.default?.[0] ?? '') !== '')
42
+ return true;
43
+ if (i.value !== undefined && i.value !== '')
44
+ return true;
45
+ if ((i.type === 'select' || i.type === 'radio') && i.options?.length)
46
+ return true;
47
+ return false;
48
+ });
49
+ }
50
+ async function promptCheckboxGroup(section, result) {
51
+ const checkboxItems = section.items.filter(i => i.type === 'checkbox');
52
+ if (checkboxItems.length === 0)
53
+ return;
54
+ const selected = await checkbox({
55
+ message: section.subtitle || 'Select options',
56
+ choices: checkboxItems.map(item => ({
57
+ name: item.label,
58
+ value: item.label,
59
+ checked: !!item.value,
60
+ })),
61
+ });
62
+ for (const item of checkboxItems) {
63
+ result[toSnakeCase(item.label)] = selected.includes(item.label);
64
+ }
65
+ }
66
+ async function promptFindKeywords(item) {
67
+ const defaults = item.default ?? [];
68
+ const keywords = defaults.flatMap(d => d.split(',').map(k => k.trim())).filter(Boolean);
69
+ if (keywords.length === 0) {
70
+ const raw = await input({ message: item.label });
71
+ return raw.split(',').map(k => k.trim()).filter(Boolean);
72
+ }
73
+ return checkbox({
74
+ message: item.label || 'Select keywords',
75
+ choices: keywords.map(k => ({ name: k, value: k, checked: true })),
76
+ });
77
+ }
78
+ async function promptItem(item) {
79
+ switch (item.type) {
80
+ case 'find-keywords':
81
+ return promptFindKeywords(item);
82
+ case 'input': {
83
+ const defaultVal = item.default?.[0] ?? '';
84
+ return input({
85
+ message: item.label,
86
+ default: defaultVal ? String(defaultVal) : undefined,
87
+ });
88
+ }
89
+ case 'radio':
90
+ case 'select': {
91
+ const choices = (item.options ?? []).map(o => {
92
+ if (typeof o === 'string')
93
+ return { name: o, value: o };
94
+ return { name: o.label, value: o.value };
95
+ });
96
+ if (choices.length === 0)
97
+ return input({ message: item.label });
98
+ return select({ message: item.label, choices });
99
+ }
100
+ case 'switch':
101
+ return confirm({
102
+ message: item.label,
103
+ default: !!item.value,
104
+ });
105
+ default:
106
+ return input({ message: item.label });
107
+ }
108
+ }
109
+ /**
110
+ * Convert an agent form_data schema into terminal prompts and collect user input.
111
+ * In autoConfirm mode, confirmation-type forms are auto-submitted with defaults.
112
+ */
113
+ export async function promptForm(formData, autoConfirm = false) {
114
+ const result = {};
115
+ if (autoConfirm) {
116
+ for (const section of formData.sections ?? []) {
117
+ for (const item of section.items) {
118
+ result[toSnakeCase(item.label)] = getDefaultValue(item);
119
+ }
120
+ }
121
+ const label = formData.title || 'form';
122
+ if (isConfirmationForm(formData)) {
123
+ console.log(chalk.dim(`[Auto-confirmed: ${label}]`));
124
+ }
125
+ else {
126
+ console.log(chalk.dim(`[Auto-submitted with defaults: ${label}]`));
127
+ }
128
+ return result;
129
+ }
130
+ if (formData.title) {
131
+ console.log(chalk.bold(`\n◆ ${formData.title}`));
132
+ }
133
+ for (const section of formData.sections ?? []) {
134
+ const checkboxItems = section.items.filter(i => i.type === 'checkbox');
135
+ const otherItems = section.items.filter(i => i.type !== 'checkbox');
136
+ if (checkboxItems.length > 1) {
137
+ await promptCheckboxGroup(section, result);
138
+ }
139
+ else if (checkboxItems.length === 1) {
140
+ const item = checkboxItems[0];
141
+ result[toSnakeCase(item.label)] = await confirm({
142
+ message: item.label,
143
+ default: !!item.value,
144
+ });
145
+ }
146
+ for (const item of otherItems) {
147
+ const key = toSnakeCase(item.label);
148
+ result[key] = await promptItem(item);
149
+ }
150
+ }
151
+ return result;
152
+ }
153
+ //# sourceMappingURL=form-prompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"form-prompt.js","sourceRoot":"","sources":["../../src/utils/form-prompt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,SAAS,WAAW,CAAC,KAAa;IAChC,OAAO,KAAK;SACT,WAAW,EAAE;SACb,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;SAC3B,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;AAC3B,CAAC;AAED,SAAS,eAAe,CAAC,IAAkB;IACzC,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU;QAAE,OAAO,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC;IACzD,IAAI,IAAI,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;QAClC,MAAM,QAAQ,GAAI,IAAI,CAAC,OAAoB,IAAI,EAAE,CAAC;QAClD,OAAO,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAChF,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC;IACjD,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,EAAE;QAAE,OAAO,QAAQ,CAAC;IAC/D,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;QAC9E,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC;IACzD,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,QAAsB;IACvD,MAAM,KAAK,GAAG,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IACnD,IAAI,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAEnE,MAAM,KAAK,GAAG,CAAC,QAAQ,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAC9D,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;QACzC,IAAI,CAAC,CAAC,IAAI,KAAK,UAAU;YAAE,OAAO,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC;QACxD,IAAI,CAAC,CAAC,IAAI,KAAK,eAAe;YAAE,OAAQ,CAAC,CAAC,OAAqB,EAAE,MAAM,GAAG,CAAC,CAAC;QAC5E,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE;YAAE,OAAO,IAAI,CAAC;QAC/C,IAAI,CAAC,CAAC,KAAK,KAAK,SAAS,IAAI,CAAC,CAAC,KAAK,KAAK,EAAE;YAAE,OAAO,IAAI,CAAC;QACzD,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM;YAAE,OAAO,IAAI,CAAC;QAClF,OAAO,KAAK,CAAC;IACf,CAAC,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,mBAAmB,CAChC,OAAwB,EACxB,MAA+B;IAE/B,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;IACvE,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAEvC,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC;QAC9B,OAAO,EAAE,OAAO,CAAC,QAAQ,IAAI,gBAAgB;QAC7C,OAAO,EAAE,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAClC,IAAI,EAAE,IAAI,CAAC,KAAK;YAChB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK;SACtB,CAAC,CAAC;KACJ,CAAC,CAAC;IAEH,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;QACjC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClE,CAAC;AACH,CAAC;AAED,KAAK,UAAU,kBAAkB,CAC/B,IAAkB;IAElB,MAAM,QAAQ,GAAI,IAAI,CAAC,OAAoB,IAAI,EAAE,CAAC;IAClD,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAExF,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QACjD,OAAO,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC3D,CAAC;IAED,OAAO,QAAQ,CAAC;QACd,OAAO,EAAE,IAAI,CAAC,KAAK,IAAI,iBAAiB;QACxC,OAAO,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;KACnE,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,UAAU,CACvB,IAAkB;IAElB,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,KAAK,eAAe;YAClB,OAAO,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAElC,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAC3C,OAAO,KAAK,CAAC;gBACX,OAAO,EAAE,IAAI,CAAC,KAAK;gBACnB,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS;aACrD,CAAC,CAAC;QACL,CAAC;QAED,KAAK,OAAO,CAAC;QACb,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;gBAC3C,IAAI,OAAO,CAAC,KAAK,QAAQ;oBAAE,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;gBACxD,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;YAC3C,CAAC,CAAC,CAAC;YACH,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,KAAK,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;YAChE,OAAO,MAAM,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;QAClD,CAAC;QAED,KAAK,QAAQ;YACX,OAAO,OAAO,CAAC;gBACb,OAAO,EAAE,IAAI,CAAC,KAAK;gBACnB,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK;aACtB,CAAC,CAAC;QAEL;YACE,OAAO,KAAK,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;IAC1C,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,QAAsB,EACtB,cAAuB,KAAK;IAE5B,MAAM,MAAM,GAA4B,EAAE,CAAC;IAE3C,IAAI,WAAW,EAAE,CAAC;QAChB,KAAK,MAAM,OAAO,IAAI,QAAQ,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;YAC9C,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;gBACjC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;YAC1D,CAAC;QACH,CAAC;QACD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,IAAI,MAAM,CAAC;QACvC,IAAI,kBAAkB,CAAC,QAAQ,CAAC,EAAE,CAAC;YACjC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,oBAAoB,KAAK,GAAG,CAAC,CAAC,CAAC;QACvD,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,kCAAkC,KAAK,GAAG,CAAC,CAAC,CAAC;QACrE,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACnD,CAAC;IAED,KAAK,MAAM,OAAO,IAAI,QAAQ,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;QAC9C,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;QACvE,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;QAEpE,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,MAAM,mBAAmB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC7C,CAAC;aAAM,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtC,MAAM,IAAI,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;YAC9B,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,MAAM,OAAO,CAAC;gBAC9C,OAAO,EAAE,IAAI,CAAC,KAAK;gBACnB,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK;aACtB,CAAC,CAAC;QACL,CAAC;QAED,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;YAC9B,MAAM,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACpC,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Render tool-direct result in the current output format.
3
+ * For structured modes (json/yaml/jsonl) delegates to printCommandResult.
4
+ * For human-readable modes (text/table/csv/md) auto-detects tabular data.
5
+ */
6
+ export declare function renderToolResult(result: unknown): void;
7
+ //# sourceMappingURL=formatter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatter.d.ts","sourceRoot":"","sources":["../../src/utils/formatter.ts"],"names":[],"mappings":"AAMA;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CA6BtD"}
@@ -0,0 +1,132 @@
1
+ import Table from 'cli-table3';
2
+ import { getCliContext } from '../core/cli-context.js';
3
+ import { printCommandResult } from './output.js';
4
+ /**
5
+ * Render tool-direct result in the current output format.
6
+ * For structured modes (json/yaml/jsonl) delegates to printCommandResult.
7
+ * For human-readable modes (text/table/csv/md) auto-detects tabular data.
8
+ */
9
+ export function renderToolResult(result) {
10
+ const mode = getCliContext().outputMode;
11
+ if (mode === 'json' || mode === 'yaml' || mode === 'jsonl') {
12
+ printCommandResult(result);
13
+ return;
14
+ }
15
+ const rows = extractRows(result);
16
+ switch (mode) {
17
+ case 'table':
18
+ renderTable(rows, result);
19
+ break;
20
+ case 'csv':
21
+ renderCsv(rows, result);
22
+ break;
23
+ case 'md':
24
+ renderMarkdownTable(rows, result);
25
+ break;
26
+ case 'text':
27
+ default:
28
+ if (rows.length > 0) {
29
+ renderTable(rows, result);
30
+ }
31
+ else {
32
+ console.log(JSON.stringify(result, null, 2));
33
+ }
34
+ break;
35
+ }
36
+ }
37
+ function extractRows(result) {
38
+ if (Array.isArray(result))
39
+ return result.filter(isRow);
40
+ if (result && typeof result === 'object') {
41
+ const obj = result;
42
+ if (obj.data && Array.isArray(obj.data))
43
+ return obj.data.filter(isRow);
44
+ if (obj.results && Array.isArray(obj.results))
45
+ return obj.results.filter(isRow);
46
+ if (obj.items && Array.isArray(obj.items))
47
+ return obj.items.filter(isRow);
48
+ if (isRow(result))
49
+ return [result];
50
+ }
51
+ return [];
52
+ }
53
+ function isRow(v) {
54
+ return v !== null && typeof v === 'object' && !Array.isArray(v);
55
+ }
56
+ function pickColumns(rows) {
57
+ if (rows.length === 0)
58
+ return [];
59
+ const freq = new Map();
60
+ for (const row of rows) {
61
+ for (const key of Object.keys(row)) {
62
+ const val = row[key];
63
+ if (val !== null && val !== undefined && typeof val !== 'object') {
64
+ freq.set(key, (freq.get(key) ?? 0) + 1);
65
+ }
66
+ }
67
+ }
68
+ return [...freq.entries()]
69
+ .sort((a, b) => b[1] - a[1])
70
+ .slice(0, 8)
71
+ .map(([k]) => k);
72
+ }
73
+ function cellStr(val, maxLen = 60) {
74
+ if (val === null || val === undefined)
75
+ return '';
76
+ const s = String(val);
77
+ return s.length > maxLen ? s.slice(0, maxLen - 1) + '…' : s;
78
+ }
79
+ function renderTable(rows, fallback) {
80
+ if (rows.length === 0) {
81
+ console.log(JSON.stringify(fallback, null, 2));
82
+ return;
83
+ }
84
+ const cols = pickColumns(rows);
85
+ if (cols.length === 0) {
86
+ console.log(JSON.stringify(fallback, null, 2));
87
+ return;
88
+ }
89
+ const table = new Table({ head: cols, style: { head: ['cyan'] } });
90
+ for (const row of rows) {
91
+ table.push(cols.map(c => cellStr(row[c])));
92
+ }
93
+ console.log(table.toString());
94
+ }
95
+ function renderCsv(rows, fallback) {
96
+ if (rows.length === 0) {
97
+ console.log(JSON.stringify(fallback, null, 2));
98
+ return;
99
+ }
100
+ const cols = pickColumns(rows);
101
+ if (cols.length === 0) {
102
+ console.log(JSON.stringify(fallback, null, 2));
103
+ return;
104
+ }
105
+ console.log(cols.map(csvEscape).join(','));
106
+ for (const row of rows) {
107
+ console.log(cols.map(c => csvEscape(cellStr(row[c], 200))).join(','));
108
+ }
109
+ }
110
+ function csvEscape(val) {
111
+ if (/[",\n\r]/.test(val)) {
112
+ return `"${val.replace(/"/g, '""')}"`;
113
+ }
114
+ return val;
115
+ }
116
+ function renderMarkdownTable(rows, fallback) {
117
+ if (rows.length === 0) {
118
+ console.log(JSON.stringify(fallback, null, 2));
119
+ return;
120
+ }
121
+ const cols = pickColumns(rows);
122
+ if (cols.length === 0) {
123
+ console.log(JSON.stringify(fallback, null, 2));
124
+ return;
125
+ }
126
+ console.log('| ' + cols.join(' | ') + ' |');
127
+ console.log('| ' + cols.map(() => '---').join(' | ') + ' |');
128
+ for (const row of rows) {
129
+ console.log('| ' + cols.map(c => cellStr(row[c], 80).replace(/\|/g, '\\|')).join(' | ') + ' |');
130
+ }
131
+ }
132
+ //# sourceMappingURL=formatter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatter.js","sourceRoot":"","sources":["../../src/utils/formatter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export interface IndexEntry {
2
+ id: string;
3
+ label: string;
4
+ type: string;
5
+ [key: string]: unknown;
6
+ }
7
+ export declare function saveIndex(entries: IndexEntry[]): Promise<void>;
8
+ export declare function loadIndex(): Promise<IndexEntry[]>;
9
+ export declare function getIndexEntry(n: number): Promise<IndexEntry | undefined>;
10
+ //# sourceMappingURL=index-cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-cache.d.ts","sourceRoot":"","sources":["../../src/utils/index-cache.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,wBAAsB,SAAS,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAGpE;AAED,wBAAsB,SAAS,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC,CAOvD;AAED,wBAAsB,aAAa,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAG9E"}
@@ -0,0 +1,22 @@
1
+ import { readFile, writeFile, mkdir } from 'node:fs/promises';
2
+ import { join } from 'node:path';
3
+ import { homedir } from 'node:os';
4
+ const CACHE_PATH = join(homedir(), '.karis', 'last-index.json');
5
+ export async function saveIndex(entries) {
6
+ await mkdir(join(homedir(), '.karis'), { recursive: true });
7
+ await writeFile(CACHE_PATH, JSON.stringify(entries), 'utf-8');
8
+ }
9
+ export async function loadIndex() {
10
+ try {
11
+ const raw = await readFile(CACHE_PATH, 'utf-8');
12
+ return JSON.parse(raw);
13
+ }
14
+ catch {
15
+ return [];
16
+ }
17
+ }
18
+ export async function getIndexEntry(n) {
19
+ const entries = await loadIndex();
20
+ return entries[n - 1]; // 1-based index
21
+ }
22
+ //# sourceMappingURL=index-cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-cache.js","sourceRoot":"","sources":["../../src/utils/index-cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,iBAAiB,CAAC,CAAC;AAShE,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,OAAqB;IACnD,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5D,MAAM,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;AAChE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS;IAC7B,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAChD,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,CAAS;IAC3C,MAAM,OAAO,GAAG,MAAM,SAAS,EAAE,CAAC;IAClC,OAAO,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,gBAAgB;AACzC,CAAC"}
@@ -0,0 +1,19 @@
1
+ export interface PromptRecord {
2
+ prompt: string;
3
+ default_value?: string;
4
+ answer: string;
5
+ used_default: boolean;
6
+ }
7
+ export interface AskOptions {
8
+ defaultValue?: string;
9
+ }
10
+ export declare class InteractiveSession {
11
+ private readonly rl;
12
+ private readonly prompts;
13
+ private closed;
14
+ constructor();
15
+ ask(prompt: string, options?: AskOptions): Promise<string>;
16
+ close(): void;
17
+ getTranscript(): PromptRecord[];
18
+ }
19
+ //# sourceMappingURL=interactive.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interactive.d.ts","sourceRoot":"","sources":["../../src/utils/interactive.ts"],"names":[],"mappings":"AAaA,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,UAAU;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAqB;IACxC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAsB;IAC9C,OAAO,CAAC,MAAM,CAAS;;IAYjB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,UAAe,GAAG,OAAO,CAAC,MAAM,CAAC;IA+CpE,KAAK,IAAI,IAAI;IAIb,aAAa,IAAI,YAAY,EAAE;CAGhC"}