marifold 0.60.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 (110) hide show
  1. package/LICENSE +674 -0
  2. package/dist/auth/ChatGptAuth.d.ts +17 -0
  3. package/dist/auth/ChatGptAuth.d.ts.map +1 -0
  4. package/dist/auth/ChatGptAuth.js +215 -0
  5. package/dist/auth/ChatGptAuth.js.map +1 -0
  6. package/dist/auth/GitHubCopilotAuth.d.ts +10 -0
  7. package/dist/auth/GitHubCopilotAuth.d.ts.map +1 -0
  8. package/dist/auth/GitHubCopilotAuth.js +118 -0
  9. package/dist/auth/GitHubCopilotAuth.js.map +1 -0
  10. package/dist/auth/XaiAuth.d.ts +27 -0
  11. package/dist/auth/XaiAuth.d.ts.map +1 -0
  12. package/dist/auth/XaiAuth.js +280 -0
  13. package/dist/auth/XaiAuth.js.map +1 -0
  14. package/dist/commands/RuntimeFactory.d.ts +8 -0
  15. package/dist/commands/RuntimeFactory.d.ts.map +1 -0
  16. package/dist/commands/RuntimeFactory.js +13 -0
  17. package/dist/commands/RuntimeFactory.js.map +1 -0
  18. package/dist/commands/agent.d.ts +4 -0
  19. package/dist/commands/agent.d.ts.map +1 -0
  20. package/dist/commands/agent.js +130 -0
  21. package/dist/commands/agent.js.map +1 -0
  22. package/dist/commands/ask.d.ts +4 -0
  23. package/dist/commands/ask.d.ts.map +1 -0
  24. package/dist/commands/ask.js +57 -0
  25. package/dist/commands/ask.js.map +1 -0
  26. package/dist/commands/channel.d.ts +8 -0
  27. package/dist/commands/channel.d.ts.map +1 -0
  28. package/dist/commands/channel.js +114 -0
  29. package/dist/commands/channel.js.map +1 -0
  30. package/dist/commands/chat.d.ts +4 -0
  31. package/dist/commands/chat.d.ts.map +1 -0
  32. package/dist/commands/chat.js +352 -0
  33. package/dist/commands/chat.js.map +1 -0
  34. package/dist/commands/config.d.ts +18 -0
  35. package/dist/commands/config.d.ts.map +1 -0
  36. package/dist/commands/config.js +228 -0
  37. package/dist/commands/config.js.map +1 -0
  38. package/dist/commands/doctor.d.ts +11 -0
  39. package/dist/commands/doctor.d.ts.map +1 -0
  40. package/dist/commands/doctor.js +86 -0
  41. package/dist/commands/doctor.js.map +1 -0
  42. package/dist/commands/init.d.ts +4 -0
  43. package/dist/commands/init.d.ts.map +1 -0
  44. package/dist/commands/init.js +135 -0
  45. package/dist/commands/init.js.map +1 -0
  46. package/dist/commands/model.d.ts +4 -0
  47. package/dist/commands/model.d.ts.map +1 -0
  48. package/dist/commands/model.js +384 -0
  49. package/dist/commands/model.js.map +1 -0
  50. package/dist/commands/profile.d.ts +4 -0
  51. package/dist/commands/profile.d.ts.map +1 -0
  52. package/dist/commands/profile.js +231 -0
  53. package/dist/commands/profile.js.map +1 -0
  54. package/dist/commands/provider.d.ts +4 -0
  55. package/dist/commands/provider.d.ts.map +1 -0
  56. package/dist/commands/provider.js +254 -0
  57. package/dist/commands/provider.js.map +1 -0
  58. package/dist/commands/schedule.d.ts +4 -0
  59. package/dist/commands/schedule.d.ts.map +1 -0
  60. package/dist/commands/schedule.js +141 -0
  61. package/dist/commands/schedule.js.map +1 -0
  62. package/dist/commands/service.d.ts +15 -0
  63. package/dist/commands/service.d.ts.map +1 -0
  64. package/dist/commands/service.js +421 -0
  65. package/dist/commands/service.js.map +1 -0
  66. package/dist/commands/session.d.ts +4 -0
  67. package/dist/commands/session.d.ts.map +1 -0
  68. package/dist/commands/session.js +171 -0
  69. package/dist/commands/session.js.map +1 -0
  70. package/dist/commands/status.d.ts +4 -0
  71. package/dist/commands/status.d.ts.map +1 -0
  72. package/dist/commands/status.js +59 -0
  73. package/dist/commands/status.js.map +1 -0
  74. package/dist/index.d.ts +3 -0
  75. package/dist/index.d.ts.map +1 -0
  76. package/dist/index.js +74 -0
  77. package/dist/index.js.map +1 -0
  78. package/dist/input/InteractivePrompt.d.ts +9 -0
  79. package/dist/input/InteractivePrompt.d.ts.map +1 -0
  80. package/dist/input/InteractivePrompt.js +101 -0
  81. package/dist/input/InteractivePrompt.js.map +1 -0
  82. package/dist/input/ModelPicker.d.ts +34 -0
  83. package/dist/input/ModelPicker.d.ts.map +1 -0
  84. package/dist/input/ModelPicker.js +327 -0
  85. package/dist/input/ModelPicker.js.map +1 -0
  86. package/dist/input/PromptAbort.d.ts +11 -0
  87. package/dist/input/PromptAbort.d.ts.map +1 -0
  88. package/dist/input/PromptAbort.js +28 -0
  89. package/dist/input/PromptAbort.js.map +1 -0
  90. package/dist/input/SecretPrompt.d.ts +3 -0
  91. package/dist/input/SecretPrompt.d.ts.map +1 -0
  92. package/dist/input/SecretPrompt.js +61 -0
  93. package/dist/input/SecretPrompt.js.map +1 -0
  94. package/dist/input/TerminalSelect.d.ts +17 -0
  95. package/dist/input/TerminalSelect.d.ts.map +1 -0
  96. package/dist/input/TerminalSelect.js +153 -0
  97. package/dist/input/TerminalSelect.js.map +1 -0
  98. package/dist/output/ConsolePrinter.d.ts +12 -0
  99. package/dist/output/ConsolePrinter.d.ts.map +1 -0
  100. package/dist/output/ConsolePrinter.js +69 -0
  101. package/dist/output/ConsolePrinter.js.map +1 -0
  102. package/dist/output/TerminalStyle.d.ts +11 -0
  103. package/dist/output/TerminalStyle.d.ts.map +1 -0
  104. package/dist/output/TerminalStyle.js +41 -0
  105. package/dist/output/TerminalStyle.js.map +1 -0
  106. package/dist/service/ServiceProcess.d.ts +45 -0
  107. package/dist/service/ServiceProcess.d.ts.map +1 -0
  108. package/dist/service/ServiceProcess.js +288 -0
  109. package/dist/service/ServiceProcess.js.map +1 -0
  110. package/package.json +34 -0
@@ -0,0 +1,114 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerChannelCommand = registerChannelCommand;
4
+ const core_1 = require("@marifold/core");
5
+ const InteractivePrompt_1 = require("../input/InteractivePrompt");
6
+ const PromptAbort_1 = require("../input/PromptAbort");
7
+ const SecretPrompt_1 = require("../input/SecretPrompt");
8
+ const TerminalSelect_1 = require("../input/TerminalSelect");
9
+ const RuntimeFactory_1 = require("./RuntimeFactory");
10
+ /**
11
+ * `marifold channel <app>` — messaging bridges. For now this is config-only
12
+ * (`telegram setup`); the running bridge (long-poll loop) is a separate command.
13
+ */
14
+ function registerChannelCommand(program, printer) {
15
+ const channel = program.command('channel').description('Messaging channels (Telegram, …).');
16
+ const telegram = channel.command('telegram').description('Telegram bot bridge.');
17
+ telegram
18
+ .command('setup')
19
+ .description('Configure the Telegram bot: token, allowlist, profile, default mode.')
20
+ .action(async () => {
21
+ const loaded = (0, RuntimeFactory_1.loadConfig)(program);
22
+ const runtime = new core_1.MarifoldRuntime({ loadedConfig: loaded });
23
+ // Open the readline-backed prompt lazily and only around the free-text
24
+ // read below: a live readline interface fights the raw-mode pickers/secret
25
+ // reads over stdin, leaving the next read to return EOF immediately.
26
+ let prompt;
27
+ const getPrompt = () => (prompt ??= new InteractivePrompt_1.InteractivePrompt());
28
+ try {
29
+ // Re-running `setup` edits the single [channel.telegram] entry: every
30
+ // prompt defaults to the current value so you can change one field
31
+ // (e.g. the profile) without re-entering the rest.
32
+ const existing = loaded.config.channels?.telegram;
33
+ // Profile — preselect the current one on re-run, else `default` (the
34
+ // profile `marifold init` guarantees), else the first available.
35
+ const profileNames = runtime.listProfiles().map(p => p.name);
36
+ const defaultProfileIndex = Math.max(0, existing?.profile && profileNames.includes(existing.profile)
37
+ ? profileNames.indexOf(existing.profile)
38
+ : profileNames.indexOf('default'));
39
+ const profile = (await (0, TerminalSelect_1.selectTerminalOption)('Profile the bot runs as:', profileNames.map(name => ({ label: name === existing?.profile ? `${name} (current)` : name, value: name })), { defaultIndex: defaultProfileIndex })) ?? existing?.profile ?? profileNames[defaultProfileIndex] ?? 'default';
40
+ // Token — keep the existing one (and its source) on an empty enter.
41
+ const hasToken = Boolean(existing?.botToken || existing?.botTokenEnv);
42
+ const tokenInput = await (0, SecretPrompt_1.readSecretLine)(hasToken ? 'Bot token (from @BotFather) [Enter to keep existing]: ' : 'Bot token (from @BotFather): ', getPrompt);
43
+ let tokenFields;
44
+ if (tokenInput.trim()) {
45
+ tokenFields = { botToken: tokenInput.trim() }; // new inline token wins; drop any prior env source
46
+ }
47
+ else if (hasToken) {
48
+ tokenFields = {
49
+ ...(existing?.botToken ? { botToken: existing.botToken } : {}),
50
+ ...(existing?.botTokenEnv ? { botTokenEnv: existing.botTokenEnv } : {}),
51
+ };
52
+ }
53
+ else {
54
+ throw core_1.MarifoldError.configInvalid('Bot token cannot be empty.');
55
+ }
56
+ // Allowlist — keep on empty enter when one already exists. Open the
57
+ // readline prompt only here and close it immediately so it never overlaps
58
+ // the raw-mode pickers before/after (which would swallow stdin).
59
+ const hasAllowlist = (existing?.allowlist?.length ?? 0) > 0;
60
+ const allowlistPrompt = getPrompt();
61
+ const idsRaw = await allowlistPrompt.readUserMessage(hasAllowlist
62
+ ? `Allowed Telegram user id(s) [Enter to keep: ${existing.allowlist.join(', ')}]: `
63
+ : 'Allowed Telegram user id(s), comma-separated: ');
64
+ allowlistPrompt.close();
65
+ prompt = undefined;
66
+ if (idsRaw === undefined)
67
+ throw new PromptAbort_1.PromptAbortError();
68
+ const allowlist = idsRaw.trim() ? parseIds(idsRaw) : (existing?.allowlist ?? []);
69
+ if (allowlist.length === 0) {
70
+ process.stderr.write('Warning: empty allowlist — the bot will respond to nobody until you add an id.\n');
71
+ }
72
+ // Default mode — preselect the current one on re-run.
73
+ const defaultMode = ((await (0, TerminalSelect_1.selectTerminalOption)('Default mode for a new chat:', [
74
+ { label: existing?.defaultMode === 'agent' ? 'agent (tools, current)' : 'agent (tools)', value: 'agent' },
75
+ { label: existing?.defaultMode === 'chat' ? 'chat (current)' : 'chat', value: 'chat' },
76
+ ], { defaultIndex: existing?.defaultMode === 'chat' ? 1 : 0 })) ?? existing?.defaultMode ?? 'agent');
77
+ loaded.config.channels = {
78
+ ...(loaded.config.channels ?? {}),
79
+ telegram: {
80
+ ...(existing?.enabled !== undefined ? { enabled: existing.enabled } : {}),
81
+ ...tokenFields,
82
+ allowlist,
83
+ profile,
84
+ defaultMode,
85
+ },
86
+ };
87
+ const savedPath = new core_1.ConfigManager(loaded).save();
88
+ const tokenNote = tokenInput.trim() ? 'updated' : 'kept';
89
+ process.stdout.write(`\nSaved [channel.telegram] to ${savedPath}.\n`);
90
+ process.stdout.write(` profile: ${profile} · default mode: ${defaultMode} · ${allowlist.length} allowed user(s) · token ${tokenNote}\n`);
91
+ if (tokenFields.botToken) {
92
+ process.stdout.write('Note: the token is stored in config.toml. For better hygiene, move it to an env var and set\n');
93
+ process.stdout.write(' bot_token_env instead of bot_token. Run `marifold doctor` to check readiness.\n');
94
+ }
95
+ }
96
+ catch (error) {
97
+ if ((0, PromptAbort_1.isPromptAbortError)(error)) {
98
+ process.stderr.write('Aborted.\n');
99
+ process.exitCode = 130;
100
+ return;
101
+ }
102
+ printer.printError(error);
103
+ process.exitCode = 1;
104
+ }
105
+ finally {
106
+ prompt?.close();
107
+ runtime.close();
108
+ }
109
+ });
110
+ }
111
+ function parseIds(raw) {
112
+ return [...new Set(raw.split(',').map(s => s.trim()).filter(Boolean).map(Number).filter(n => Number.isInteger(n) && n > 0))];
113
+ }
114
+ //# sourceMappingURL=channel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"channel.js","sourceRoot":"","sources":["../../src/commands/channel.ts"],"names":[],"mappings":";;;AACA,yCAAiG;AACjG,kEAA+D;AAC/D,sDAA4E;AAC5E,wDAAuD;AACvD,4DAA+D;AAE/D,qDAA8C;AAE9C;;;GAGG;AACH,gCAAuC,OAAgB,EAAE,OAAuB;IAC9E,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,WAAW,CAAC,mCAAmC,CAAC,CAAC;IAC5F,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC;IAEjF,QAAQ;SACL,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,sEAAsE,CAAC;SACnF,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,MAAM,GAAG,IAAA,2BAAU,EAAC,OAAO,CAAC,CAAC;QACnC,MAAM,OAAO,GAAG,IAAI,sBAAe,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,CAAC;QAC9D,uEAAuE;QACvE,2EAA2E;QAC3E,qEAAqE;QACrE,IAAI,MAAqC,CAAC;QAC1C,MAAM,SAAS,GAAG,GAAsB,EAAE,CAAC,CAAC,MAAM,KAAK,IAAI,qCAAiB,EAAE,CAAC,CAAC;QAChF,IAAI,CAAC;YACH,sEAAsE;YACtE,mEAAmE;YACnE,mDAAmD;YACnD,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC;YAElD,qEAAqE;YACrE,iEAAiE;YACjE,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAC7D,MAAM,mBAAmB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EACpC,QAAQ,EAAE,OAAO,IAAI,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC;gBAC1D,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;gBACxC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,SAAS,CAAC,CACpC,CAAC;YACF,MAAM,OAAO,GAAG,CAAC,MAAM,IAAA,qCAAoB,EACzC,0BAA0B,EAC1B,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,KAAK,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAC3G,EAAE,YAAY,EAAE,mBAAmB,EAAE,CACtC,CAAC,IAAI,QAAQ,EAAE,OAAO,IAAI,YAAY,CAAC,mBAAmB,CAAC,IAAI,SAAS,CAAC;YAE1E,oEAAoE;YACpE,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,EAAE,QAAQ,IAAI,QAAQ,EAAE,WAAW,CAAC,CAAC;YACtE,MAAM,UAAU,GAAG,MAAM,IAAA,6BAAc,EACrC,QAAQ,CAAC,CAAC,CAAC,wDAAwD,CAAC,CAAC,CAAC,+BAA+B,EACrG,SAAS,CACV,CAAC;YACF,IAAI,WAAwD,CAAC;YAC7D,IAAI,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC;gBACtB,WAAW,GAAG,EAAE,QAAQ,EAAE,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,mDAAmD;YACpG,CAAC;iBAAM,IAAI,QAAQ,EAAE,CAAC;gBACpB,WAAW,GAAG;oBACZ,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC9D,GAAG,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBACxE,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,MAAM,oBAAa,CAAC,aAAa,CAAC,4BAA4B,CAAC,CAAC;YAClE,CAAC;YAED,oEAAoE;YACpE,0EAA0E;YAC1E,iEAAiE;YACjE,MAAM,YAAY,GAAG,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YAC5D,MAAM,eAAe,GAAG,SAAS,EAAE,CAAC;YACpC,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,eAAe,CAClD,YAAY;gBACV,CAAC,CAAC,+CAA+C,QAAS,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK;gBACpF,CAAC,CAAC,gDAAgD,CACrD,CAAC;YACF,eAAe,CAAC,KAAK,EAAE,CAAC;YACxB,MAAM,GAAG,SAAS,CAAC;YACnB,IAAI,MAAM,KAAK,SAAS;gBAAE,MAAM,IAAI,8BAAgB,EAAE,CAAC;YACvD,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,SAAS,IAAI,EAAE,CAAC,CAAC;YACjF,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC3B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,kFAAkF,CAAC,CAAC;YAC3G,CAAC;YAED,sDAAsD;YACtD,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,IAAA,qCAAoB,EAAC,8BAA8B,EAAE;gBAC/E,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,eAAe,EAAE,KAAK,EAAE,OAAO,EAAE;gBACzG,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,KAAK,MAAM,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;aACvF,EAAE,EAAE,YAAY,EAAE,QAAQ,EAAE,WAAW,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,QAAQ,EAAE,WAAW,IAAI,OAAO,CAAgB,CAAC;YAEpH,MAAM,CAAC,MAAM,CAAC,QAAQ,GAAG;gBACvB,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC;gBACjC,QAAQ,EAAE;oBACR,GAAG,CAAC,QAAQ,EAAE,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACzE,GAAG,WAAW;oBACd,SAAS;oBACT,OAAO;oBACP,WAAW;iBACZ;aACF,CAAC;YACF,MAAM,SAAS,GAAG,IAAI,oBAAa,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;YAEnD,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC;YACzD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,iCAAiC,SAAS,KAAK,CAAC,CAAC;YACtE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,OAAO,oBAAoB,WAAW,MAAM,SAAS,CAAC,MAAM,4BAA4B,SAAS,IAAI,CAAC,CAAC;YAC1I,IAAI,WAAW,CAAC,QAAQ,EAAE,CAAC;gBACzB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,+FAA+F,CAAC,CAAC;gBACtH,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,uFAAuF,CAAC,CAAC;YAChH,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,IAAA,gCAAkB,EAAC,KAAK,CAAC,EAAE,CAAC;gBAC9B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;gBACnC,OAAO,CAAC,QAAQ,GAAG,GAAG,CAAC;gBACvB,OAAO;YACT,CAAC;YACD,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YAC1B,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACvB,CAAC;gBAAS,CAAC;YACT,MAAM,EAAE,KAAK,EAAE,CAAC;YAChB,OAAO,CAAC,KAAK,EAAE,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC;AAED,SAAS,QAAQ,CAAC,GAAW;IAC3B,OAAO,CAAC,GAAG,IAAI,GAAG,CAChB,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CACxG,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { Command } from 'commander';
2
+ import { ConsolePrinter } from '../output/ConsolePrinter';
3
+ export declare function registerChatCommand(program: Command, printer: ConsolePrinter): void;
4
+ //# sourceMappingURL=chat.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../src/commands/chat.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAkC1D,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,cAAc,GAAG,IAAI,CAuLnF"}
@@ -0,0 +1,352 @@
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.registerChatCommand = registerChatCommand;
37
+ const crypto_1 = require("crypto");
38
+ const fs = __importStar(require("fs"));
39
+ const path = __importStar(require("path"));
40
+ const core_1 = require("@marifold/core");
41
+ const InteractivePrompt_1 = require("../input/InteractivePrompt");
42
+ const TerminalStyle_1 = require("../output/TerminalStyle");
43
+ const RuntimeFactory_1 = require("./RuntimeFactory");
44
+ const EXIT_COMMANDS = new Set(['/exit', '/quit']);
45
+ const READ_FILE_CHAR_LIMIT = 100000;
46
+ const CHAT_HELP = `Chat commands:
47
+ /help Show this help.
48
+ /new Start a new session with the same profile and model.
49
+ /think on Enable thinking mode for supported providers.
50
+ /think off Disable thinking mode.
51
+ /read <path> Attach a local file's content to your next message.
52
+ /image <path> Attach an image to your next message. Repeatable.
53
+ /image clear Drop pending image attachments.
54
+ /remember <text> Save short-term memory.
55
+ /remember user <text> Save durable user memory.
56
+ /remember pref <text> Save durable preference memory.
57
+ /forget <query> Soft-forget matching active memory.
58
+ /delete-memory <q> Permanently delete matching memory records.
59
+ /exit Exit the chat.
60
+ /quit Exit the chat.
61
+ \\ End a line with backslash to continue on the next line.
62
+ `;
63
+ function registerChatCommand(program, printer) {
64
+ program
65
+ .command('chat')
66
+ .description('Start an interactive Marifold chat session.')
67
+ .option('--profile <name>', 'Profile name.')
68
+ .option('--provider <name>', 'Provider key from config.toml.')
69
+ .option('--model <model>', 'Model name.')
70
+ .option('--session <id>', 'Session id to continue or create.')
71
+ .option('--resume [mode]', 'Resume a profile session. Use "last" for the most recent session.')
72
+ .option('--no-memories', 'Disable profile memory for this chat run.')
73
+ .option('--think [state]', 'Enable or disable thinking mode for this chat run. Accepts true/false.', parseOptionalBoolean)
74
+ .action(async (options) => {
75
+ const runtime = (0, RuntimeFactory_1.createRuntime)(program);
76
+ const prompt = new InteractivePrompt_1.InteractivePrompt();
77
+ const style = new TerminalStyle_1.TerminalStyle();
78
+ let sessionId = options.session ?? (0, crypto_1.randomUUID)();
79
+ let think = false;
80
+ const pendingContext = [];
81
+ const pendingImages = [];
82
+ try {
83
+ const settings = runtime.resolveSettings({
84
+ profile: options.profile,
85
+ provider: options.provider,
86
+ model: options.model,
87
+ think: options.think,
88
+ });
89
+ think = settings.think;
90
+ if (options.session && options.resume !== undefined) {
91
+ throw new Error('--session and --resume are mutually exclusive.');
92
+ }
93
+ if (options.resume !== undefined) {
94
+ sessionId = await resolveResumeSession(runtime, prompt, settings.profile, options.resume);
95
+ }
96
+ const memoryOn = runtime.memoryEnabled(settings.profile, options.memories);
97
+ if (memoryOn)
98
+ runtime.ensureProfileMemoryFiles(settings.profile);
99
+ process.stdout.write(style.dim(`Model: ${settings.provider}/${settings.model}\n`));
100
+ process.stdout.write(style.dim(`Profile: ${settings.profile}\n`));
101
+ process.stdout.write(style.dim(`Session: ${sessionId}\n`));
102
+ process.stdout.write(style.dim(`Memory: ${memoryOn ? 'on' : 'off'}\n`));
103
+ process.stdout.write(style.dim(`Think: ${think ? 'on' : 'off'}\n`));
104
+ process.stdout.write(style.dim('Type /help for commands, Ctrl-C to quit.\n\n'));
105
+ const streamTurn = async (turnPrompt, extraContext = []) => {
106
+ const userContext = [...extraContext, ...pendingContext.splice(0)];
107
+ const images = pendingImages.splice(0);
108
+ let responseStarted = false;
109
+ let reasoningStarted = false;
110
+ for await (const chunk of runtime.stream({
111
+ prompt: turnPrompt,
112
+ profile: settings.profile,
113
+ provider: settings.provider,
114
+ model: settings.model,
115
+ sessionId,
116
+ memories: options.memories,
117
+ think,
118
+ userContext: userContext.length > 0 ? userContext : undefined,
119
+ images: images.length > 0 ? images : undefined,
120
+ }, undefined, summary => {
121
+ if (!reasoningStarted) {
122
+ process.stdout.write(`\n${style.dim('reasoning >')}\n`);
123
+ reasoningStarted = true;
124
+ }
125
+ process.stdout.write(style.dim(summary));
126
+ })) {
127
+ if (!responseStarted) {
128
+ if (reasoningStarted)
129
+ process.stdout.write('\n');
130
+ process.stdout.write(`\n${style.bold(`${settings.profile} >`)}\n`);
131
+ responseStarted = true;
132
+ }
133
+ process.stdout.write(chunk);
134
+ }
135
+ if (!responseStarted)
136
+ process.stdout.write(`\n${style.bold(`${settings.profile} >`)}\n`);
137
+ process.stdout.write('\n\n');
138
+ };
139
+ while (true) {
140
+ const raw = await prompt.readMultilineMessage(style.bold('user > '), style.dim('... > '));
141
+ if (raw === undefined)
142
+ break;
143
+ const message = raw.trim();
144
+ if (!message)
145
+ continue;
146
+ if (EXIT_COMMANDS.has(message.toLowerCase()))
147
+ break;
148
+ if (message === '/help') {
149
+ process.stdout.write(`${CHAT_HELP}\n`);
150
+ continue;
151
+ }
152
+ if (message === '/new') {
153
+ sessionId = (0, crypto_1.randomUUID)();
154
+ process.stdout.write(style.dim(`New session: ${sessionId}\n\n`));
155
+ continue;
156
+ }
157
+ if (isCommand(message, '/think')) {
158
+ const next = parseThinkCommand(message);
159
+ if (next === undefined) {
160
+ process.stderr.write('Usage: /think on|off\n');
161
+ continue;
162
+ }
163
+ think = next;
164
+ process.stdout.write(style.dim(`Thinking mode ${think ? 'on' : 'off'}.\n\n`));
165
+ continue;
166
+ }
167
+ if (isCommand(message, '/read')) {
168
+ const filePath = commandPayload(message, '/read');
169
+ if (!filePath) {
170
+ process.stderr.write('Usage: /read <path>\n');
171
+ continue;
172
+ }
173
+ const attached = readFileForChat(filePath);
174
+ if (!attached)
175
+ continue;
176
+ pendingContext.push(attached.block);
177
+ process.stdout.write(style.dim(`Attached ${attached.path} (${attached.chars} chars) to your next message.\n\n`));
178
+ continue;
179
+ }
180
+ if (isCommand(message, '/image')) {
181
+ const payload = commandPayload(message, '/image');
182
+ if (!payload) {
183
+ process.stderr.write('Usage: /image <path> | /image clear\n');
184
+ continue;
185
+ }
186
+ if (payload.toLowerCase() === 'clear') {
187
+ pendingImages.length = 0;
188
+ process.stdout.write(style.dim('Cleared pending images.\n\n'));
189
+ continue;
190
+ }
191
+ const imagePath = path.resolve((0, core_1.expandHome)(payload));
192
+ if (!fs.existsSync(imagePath)) {
193
+ process.stderr.write(`Image not found: ${imagePath}\n`);
194
+ continue;
195
+ }
196
+ pendingImages.push({ path: imagePath });
197
+ process.stdout.write(style.dim(`Attached image #${pendingImages.length}: ${imagePath}\n\n`));
198
+ continue;
199
+ }
200
+ if (isCommand(message, '/remember')) {
201
+ const parsed = parseRememberCommand(message);
202
+ if (!parsed) {
203
+ process.stderr.write('Usage: /remember [user|pref] <text>\n');
204
+ continue;
205
+ }
206
+ const result = runtime.rememberMemory(settings.profile, parsed.kind, parsed.text, sessionId);
207
+ const verb = result.created ? 'Remembered' : 'Already remembered';
208
+ process.stdout.write(style.dim(`${verb} ${memoryKindLabel(result.kind)} memory: ${result.entry.id}\n\n`));
209
+ continue;
210
+ }
211
+ if (isCommand(message, '/forget')) {
212
+ const query = commandPayload(message, '/forget');
213
+ if (!query) {
214
+ process.stderr.write('Usage: /forget <query>\n');
215
+ continue;
216
+ }
217
+ const result = runtime.forgetMemories(settings.profile, query);
218
+ process.stdout.write(style.dim(formatMutationResult('Forgot', result.count)));
219
+ continue;
220
+ }
221
+ if (isCommand(message, '/delete-memory')) {
222
+ const query = commandPayload(message, '/delete-memory');
223
+ if (!query) {
224
+ process.stderr.write('Usage: /delete-memory <query>\n');
225
+ continue;
226
+ }
227
+ const result = runtime.deleteMemories(settings.profile, query);
228
+ process.stdout.write(style.dim(formatMutationResult('Deleted', result.count)));
229
+ continue;
230
+ }
231
+ if (message.startsWith('/')) {
232
+ process.stderr.write(`Unknown command: ${message}. Type /help for commands.\n`);
233
+ continue;
234
+ }
235
+ await streamTurn(message);
236
+ }
237
+ }
238
+ catch (error) {
239
+ printer.printError(error);
240
+ process.exitCode = 1;
241
+ }
242
+ finally {
243
+ prompt.close();
244
+ runtime.close();
245
+ }
246
+ });
247
+ }
248
+ function parseOptionalBoolean(value) {
249
+ if (value === undefined)
250
+ return true;
251
+ const normalized = value.trim().toLowerCase();
252
+ if (normalized === 'true' || normalized === 'on' || normalized === '1')
253
+ return true;
254
+ if (normalized === 'false' || normalized === 'off' || normalized === '0')
255
+ return false;
256
+ throw new Error('Expected --think to be true or false.');
257
+ }
258
+ function parseThinkCommand(message) {
259
+ const payload = commandPayload(message, '/think').toLowerCase();
260
+ if (payload === 'on' || payload === 'true' || payload === '1')
261
+ return true;
262
+ if (payload === 'off' || payload === 'false' || payload === '0')
263
+ return false;
264
+ return undefined;
265
+ }
266
+ async function resolveResumeSession(runtime, prompt, profile, resume) {
267
+ if (resume === 'last') {
268
+ const latest = runtime.latestSession(profile);
269
+ if (!latest) {
270
+ process.stderr.write(`No sessions found for profile '${profile}'. Starting a new session.\n`);
271
+ return (0, crypto_1.randomUUID)();
272
+ }
273
+ return latest.id;
274
+ }
275
+ if (resume !== true) {
276
+ return String(resume);
277
+ }
278
+ const sessions = runtime.listSessions(20, profile);
279
+ if (sessions.length === 0) {
280
+ process.stderr.write(`No sessions found for profile '${profile}'. Starting a new session.\n`);
281
+ return (0, crypto_1.randomUUID)();
282
+ }
283
+ process.stdout.write(`Recent sessions for profile '${profile}':\n`);
284
+ for (const session of sessions) {
285
+ process.stdout.write(`${session.id}\t${session.turnCount} turns\t${session.updatedAt}\n`);
286
+ }
287
+ const selected = (await prompt.readUserMessage('Session id: '))?.trim();
288
+ return selected || (0, crypto_1.randomUUID)();
289
+ }
290
+ function parseRememberCommand(message) {
291
+ const payload = commandPayload(message, '/remember');
292
+ if (!payload)
293
+ return undefined;
294
+ const firstSpace = payload.search(/\s/);
295
+ const first = firstSpace === -1 ? payload : payload.slice(0, firstSpace);
296
+ const rest = firstSpace === -1 ? '' : payload.slice(firstSpace + 1).trim();
297
+ switch (first.toLowerCase()) {
298
+ case 'user':
299
+ return rest ? { kind: 'user', text: rest } : undefined;
300
+ case 'pref':
301
+ case 'prefs':
302
+ case 'preference':
303
+ case 'preferences':
304
+ return rest ? { kind: 'preferences', text: rest } : undefined;
305
+ default:
306
+ return { kind: 'auto_short', text: payload };
307
+ }
308
+ }
309
+ function readFileForChat(filePath) {
310
+ const resolved = path.resolve((0, core_1.expandHome)(filePath));
311
+ let content;
312
+ try {
313
+ content = fs.readFileSync(resolved, 'utf-8');
314
+ }
315
+ catch (error) {
316
+ process.stderr.write(`Could not read ${resolved}: ${error instanceof Error ? error.message : String(error)}\n`);
317
+ return undefined;
318
+ }
319
+ const truncated = content.length > READ_FILE_CHAR_LIMIT;
320
+ const body = truncated ? `${content.slice(0, READ_FILE_CHAR_LIMIT)}\n[truncated at ${READ_FILE_CHAR_LIMIT} characters]` : content;
321
+ return {
322
+ path: resolved,
323
+ chars: content.length,
324
+ block: `## File: ${resolved}\n\n${body}`,
325
+ };
326
+ }
327
+ function commandPayload(message, command) {
328
+ if (message === command)
329
+ return '';
330
+ return message.startsWith(`${command} `) ? message.slice(command.length + 1).trim() : '';
331
+ }
332
+ function isCommand(message, command) {
333
+ return message === command || message.startsWith(`${command} `);
334
+ }
335
+ function memoryKindLabel(kind) {
336
+ switch (kind) {
337
+ case 'user':
338
+ return 'user';
339
+ case 'preferences':
340
+ return 'preference';
341
+ case 'auto_short':
342
+ return 'short-term';
343
+ default:
344
+ return 'profile';
345
+ }
346
+ }
347
+ function formatMutationResult(verb, count) {
348
+ if (count === 0)
349
+ return 'No matching memory records found.\n\n';
350
+ return `${verb} ${count} memory record${count === 1 ? '' : 's'}.\n\n`;
351
+ }
352
+ //# sourceMappingURL=chat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat.js","sourceRoot":"","sources":["../../src/commands/chat.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import { Command } from 'commander';
2
+ import { MarifoldWebSearchConfig } from '@marifold/core';
3
+ import { ConsolePrinter } from '../output/ConsolePrinter';
4
+ import { InteractivePrompt } from '../input/InteractivePrompt';
5
+ import { TerminalStyle } from '../output/TerminalStyle';
6
+ export declare function registerConfigCommand(program: Command, printer: ConsolePrinter): void;
7
+ interface ConfigSearchOptions {
8
+ provider?: string;
9
+ apiKeyEnv?: string;
10
+ scrape?: boolean;
11
+ enable?: boolean;
12
+ disable?: boolean;
13
+ }
14
+ /** Build the [web_search] changes from flags (non-interactive) or prompts. */
15
+ export declare function resolveSearchUpdate(options: ConfigSearchOptions, getPrompt: () => InteractivePrompt, style: TerminalStyle): Promise<Partial<MarifoldWebSearchConfig>>;
16
+ export declare function searchUpdateFromFlags(options: ConfigSearchOptions): Partial<MarifoldWebSearchConfig>;
17
+ export {};
18
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAKL,uBAAuB,EAExB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAI/D,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAWxD,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,cAAc,GAAG,IAAI,CAwHrF;AAED,UAAU,mBAAmB;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,8EAA8E;AAC9E,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,mBAAmB,EAC5B,SAAS,EAAE,MAAM,iBAAiB,EAClC,KAAK,EAAE,aAAa,GACnB,OAAO,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC,CAI3C;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAgBpG"}