@jungjaehoon/mama-os 0.78.0 → 0.79.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +341 -0
- package/README.md +38 -24
- package/db/migrations/002-model-runs-parent-index.sql +11 -0
- package/db/migrations/003-upkeep-settled.sql +15 -0
- package/dist/api/google-read-actions.d.ts +30 -0
- package/dist/api/google-read-actions.d.ts.map +1 -0
- package/dist/api/google-read-actions.js +256 -0
- package/dist/api/google-read-actions.js.map +1 -0
- package/dist/api/record-actions.d.ts.map +1 -1
- package/dist/api/record-actions.js +23 -5
- package/dist/api/record-actions.js.map +1 -1
- package/dist/api/report-handler.d.ts +0 -6
- package/dist/api/report-handler.d.ts.map +1 -1
- package/dist/api/report-handler.js +0 -54
- package/dist/api/report-handler.js.map +1 -1
- package/dist/api/security-events.d.ts +1 -1
- package/dist/api/security-events.d.ts.map +1 -1
- package/dist/api/security-events.js.map +1 -1
- package/dist/api/source-actions.d.ts +9 -0
- package/dist/api/source-actions.d.ts.map +1 -1
- package/dist/api/source-actions.js +49 -0
- package/dist/api/source-actions.js.map +1 -1
- package/dist/api/viewer-request-security.d.ts +14 -1
- package/dist/api/viewer-request-security.d.ts.map +1 -1
- package/dist/api/viewer-request-security.js +26 -3
- package/dist/api/viewer-request-security.js.map +1 -1
- package/dist/api/viewer-server.d.ts +7 -0
- package/dist/api/viewer-server.d.ts.map +1 -1
- package/dist/api/viewer-server.js +32 -0
- package/dist/api/viewer-server.js.map +1 -1
- package/dist/api/work-actions.d.ts +19 -2
- package/dist/api/work-actions.d.ts.map +1 -1
- package/dist/api/work-actions.js +15 -0
- package/dist/api/work-actions.js.map +1 -1
- package/dist/cli/commands/backup.d.ts +7 -6
- package/dist/cli/commands/backup.d.ts.map +1 -1
- package/dist/cli/commands/backup.js +44 -7
- package/dist/cli/commands/backup.js.map +1 -1
- package/dist/cli/commands/control.d.ts +22 -4
- package/dist/cli/commands/control.d.ts.map +1 -1
- package/dist/cli/commands/control.js +172 -11
- package/dist/cli/commands/control.js.map +1 -1
- package/dist/cli/commands/daemon.d.ts +13 -2
- package/dist/cli/commands/daemon.d.ts.map +1 -1
- package/dist/cli/commands/daemon.js +211 -5
- package/dist/cli/commands/daemon.js.map +1 -1
- package/dist/cli/commands/init-questions.d.ts +110 -0
- package/dist/cli/commands/init-questions.d.ts.map +1 -0
- package/dist/cli/commands/init-questions.js +445 -0
- package/dist/cli/commands/init-questions.js.map +1 -0
- package/dist/cli/commands/init-section.d.ts +13 -0
- package/dist/cli/commands/init-section.d.ts.map +1 -0
- package/dist/cli/commands/init-section.js +439 -0
- package/dist/cli/commands/init-section.js.map +1 -0
- package/dist/cli/commands/init.d.ts +56 -2
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +562 -351
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/node-move.d.ts +20 -0
- package/dist/cli/commands/node-move.d.ts.map +1 -0
- package/dist/cli/commands/node-move.js +289 -0
- package/dist/cli/commands/node-move.js.map +1 -0
- package/dist/cli/commands/register-owner.d.ts +3 -0
- package/dist/cli/commands/register-owner.d.ts.map +1 -1
- package/dist/cli/commands/register-owner.js +2 -0
- package/dist/cli/commands/register-owner.js.map +1 -1
- package/dist/cli/commands/restore.d.ts +2 -0
- package/dist/cli/commands/restore.d.ts.map +1 -1
- package/dist/cli/commands/restore.js +7 -0
- package/dist/cli/commands/restore.js.map +1 -1
- package/dist/cli/commands/service.d.ts +16 -0
- package/dist/cli/commands/service.d.ts.map +1 -1
- package/dist/cli/commands/service.js +36 -8
- package/dist/cli/commands/service.js.map +1 -1
- package/dist/cli/commands/tools.d.ts +1 -1
- package/dist/cli/commands/tools.d.ts.map +1 -1
- package/dist/cli/commands/tools.js +8 -3
- package/dist/cli/commands/tools.js.map +1 -1
- package/dist/cli/commands/uninstall.d.ts.map +1 -1
- package/dist/cli/commands/uninstall.js +123 -15
- package/dist/cli/commands/uninstall.js.map +1 -1
- package/dist/cli/commands/update.d.ts +59 -0
- package/dist/cli/commands/update.d.ts.map +1 -0
- package/dist/cli/commands/update.js +948 -0
- package/dist/cli/commands/update.js.map +1 -0
- package/dist/cli/index.js +8 -4
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/launch-files.d.ts +36 -0
- package/dist/cli/launch-files.d.ts.map +1 -1
- package/dist/cli/launch-files.js +94 -1
- package/dist/cli/launch-files.js.map +1 -1
- package/dist/cli/prompt.d.ts +2 -1
- package/dist/cli/prompt.d.ts.map +1 -1
- package/dist/cli/prompt.js +5 -2
- package/dist/cli/prompt.js.map +1 -1
- package/dist/cli/runtime/backup.d.ts +17 -1
- package/dist/cli/runtime/backup.d.ts.map +1 -1
- package/dist/cli/runtime/backup.js +32 -4
- package/dist/cli/runtime/backup.js.map +1 -1
- package/dist/cli/runtime/daemon-control.d.ts +92 -7
- package/dist/cli/runtime/daemon-control.d.ts.map +1 -1
- package/dist/cli/runtime/daemon-control.js +183 -8
- package/dist/cli/runtime/daemon-control.js.map +1 -1
- package/dist/cli/runtime/default-roots.d.ts +27 -0
- package/dist/cli/runtime/default-roots.d.ts.map +1 -0
- package/dist/cli/runtime/default-roots.js +61 -0
- package/dist/cli/runtime/default-roots.js.map +1 -0
- package/dist/cli/runtime/diagnostics.d.ts +25 -0
- package/dist/cli/runtime/diagnostics.d.ts.map +1 -1
- package/dist/cli/runtime/diagnostics.js +250 -63
- package/dist/cli/runtime/diagnostics.js.map +1 -1
- package/dist/cli/runtime/init-state.d.ts +20 -0
- package/dist/cli/runtime/init-state.d.ts.map +1 -0
- package/dist/cli/runtime/init-state.js +51 -0
- package/dist/cli/runtime/init-state.js.map +1 -0
- package/dist/cli/runtime/install-kind.d.ts +54 -0
- package/dist/cli/runtime/install-kind.d.ts.map +1 -0
- package/dist/cli/runtime/install-kind.js +164 -0
- package/dist/cli/runtime/install-kind.js.map +1 -0
- package/dist/cli/runtime/node-move-journal.d.ts +44 -0
- package/dist/cli/runtime/node-move-journal.d.ts.map +1 -0
- package/dist/cli/runtime/node-move-journal.js +48 -0
- package/dist/cli/runtime/node-move-journal.js.map +1 -0
- package/dist/cli/runtime/release-check.d.ts +94 -0
- package/dist/cli/runtime/release-check.d.ts.map +1 -0
- package/dist/cli/runtime/release-check.js +316 -0
- package/dist/cli/runtime/release-check.js.map +1 -0
- package/dist/cli/runtime/setup-page.d.ts +57 -0
- package/dist/cli/runtime/setup-page.d.ts.map +1 -0
- package/dist/cli/runtime/setup-page.js +266 -0
- package/dist/cli/runtime/setup-page.js.map +1 -0
- package/dist/cli/runtime/source-tools.d.ts +60 -0
- package/dist/cli/runtime/source-tools.d.ts.map +1 -0
- package/dist/cli/runtime/source-tools.js +170 -0
- package/dist/cli/runtime/source-tools.js.map +1 -0
- package/dist/cli/runtime/telegram-pairing.d.ts +73 -0
- package/dist/cli/runtime/telegram-pairing.d.ts.map +1 -0
- package/dist/cli/runtime/telegram-pairing.js +184 -0
- package/dist/cli/runtime/telegram-pairing.js.map +1 -0
- package/dist/cli/runtime/update-journal.d.ts +135 -0
- package/dist/cli/runtime/update-journal.d.ts.map +1 -0
- package/dist/cli/runtime/update-journal.js +144 -0
- package/dist/cli/runtime/update-journal.js.map +1 -0
- package/dist/cli/runtime/update-progress.d.ts +95 -0
- package/dist/cli/runtime/update-progress.d.ts.map +1 -0
- package/dist/cli/runtime/update-progress.js +154 -0
- package/dist/cli/runtime/update-progress.js.map +1 -0
- package/dist/cli/runtime/update-request.d.ts +58 -0
- package/dist/cli/runtime/update-request.d.ts.map +1 -0
- package/dist/cli/runtime/update-request.js +172 -0
- package/dist/cli/runtime/update-request.js.map +1 -0
- package/dist/connectors/calendar/index.d.ts +5 -1
- package/dist/connectors/calendar/index.d.ts.map +1 -1
- package/dist/connectors/calendar/index.js +19 -28
- package/dist/connectors/calendar/index.js.map +1 -1
- package/dist/connectors/chatwork/index.d.ts.map +1 -1
- package/dist/connectors/chatwork/index.js +7 -3
- package/dist/connectors/chatwork/index.js.map +1 -1
- package/dist/connectors/config-loader.d.ts +5 -0
- package/dist/connectors/config-loader.d.ts.map +1 -1
- package/dist/connectors/config-loader.js +8 -0
- package/dist/connectors/config-loader.js.map +1 -1
- package/dist/connectors/discord/index.d.ts.map +1 -1
- package/dist/connectors/discord/index.js +4 -3
- package/dist/connectors/discord/index.js.map +1 -1
- package/dist/connectors/drive/index.d.ts.map +1 -1
- package/dist/connectors/drive/index.js +15 -13
- package/dist/connectors/drive/index.js.map +1 -1
- package/dist/connectors/framework/gws-utils.d.ts +62 -0
- package/dist/connectors/framework/gws-utils.d.ts.map +1 -1
- package/dist/connectors/framework/gws-utils.js +133 -3
- package/dist/connectors/framework/gws-utils.js.map +1 -1
- package/dist/connectors/framework/types.d.ts +24 -0
- package/dist/connectors/framework/types.d.ts.map +1 -1
- package/dist/connectors/framework/types.js +9 -0
- package/dist/connectors/framework/types.js.map +1 -1
- package/dist/connectors/gmail/index.d.ts.map +1 -1
- package/dist/connectors/gmail/index.js +14 -13
- package/dist/connectors/gmail/index.js.map +1 -1
- package/dist/connectors/index.d.ts +4 -4
- package/dist/connectors/index.d.ts.map +1 -1
- package/dist/connectors/index.js +4 -10
- package/dist/connectors/index.js.map +1 -1
- package/dist/connectors/notion/index.d.ts.map +1 -1
- package/dist/connectors/notion/index.js +5 -3
- package/dist/connectors/notion/index.js.map +1 -1
- package/dist/connectors/sheets/index.d.ts.map +1 -1
- package/dist/connectors/sheets/index.js +17 -12
- package/dist/connectors/sheets/index.js.map +1 -1
- package/dist/connectors/slack/index.d.ts.map +1 -1
- package/dist/connectors/slack/index.js +9 -3
- package/dist/connectors/slack/index.js.map +1 -1
- package/dist/connectors/telegram/index.d.ts.map +1 -1
- package/dist/connectors/telegram/index.js +4 -3
- package/dist/connectors/telegram/index.js.map +1 -1
- package/dist/connectors/trello/index.d.ts +1 -1
- package/dist/connectors/trello/index.d.ts.map +1 -1
- package/dist/connectors/trello/index.js +10 -5
- package/dist/connectors/trello/index.js.map +1 -1
- package/dist/gateways/discord.d.ts +6 -0
- package/dist/gateways/discord.d.ts.map +1 -1
- package/dist/gateways/discord.js +38 -27
- package/dist/gateways/discord.js.map +1 -1
- package/dist/gateways/slack.d.ts +6 -0
- package/dist/gateways/slack.d.ts.map +1 -1
- package/dist/gateways/slack.js +38 -27
- package/dist/gateways/slack.js.map +1 -1
- package/dist/gateways/telegram-commands.d.ts +124 -0
- package/dist/gateways/telegram-commands.d.ts.map +1 -0
- package/dist/gateways/telegram-commands.js +131 -0
- package/dist/gateways/telegram-commands.js.map +1 -0
- package/dist/gateways/telegram.d.ts +20 -0
- package/dist/gateways/telegram.d.ts.map +1 -1
- package/dist/gateways/telegram.js +138 -34
- package/dist/gateways/telegram.js.map +1 -1
- package/dist/gateways/turn-contract.d.ts +11 -0
- package/dist/gateways/turn-contract.d.ts.map +1 -1
- package/dist/runtime/action-surface.d.ts +1 -1
- package/dist/runtime/action-surface.d.ts.map +1 -1
- package/dist/runtime/action-surface.js +10 -0
- package/dist/runtime/action-surface.js.map +1 -1
- package/dist/runtime/backend-security.d.ts +23 -2
- package/dist/runtime/backend-security.d.ts.map +1 -1
- package/dist/runtime/backend-security.js +50 -5
- package/dist/runtime/backend-security.js.map +1 -1
- package/dist/runtime/member-paths.d.ts +15 -7
- package/dist/runtime/member-paths.d.ts.map +1 -1
- package/dist/runtime/member-paths.js +64 -12
- package/dist/runtime/member-paths.js.map +1 -1
- package/dist/runtime/member-session.d.ts +4 -0
- package/dist/runtime/member-session.d.ts.map +1 -1
- package/dist/runtime/member-session.js +23 -2
- package/dist/runtime/member-session.js.map +1 -1
- package/dist/runtime/native-session.d.ts +2 -0
- package/dist/runtime/native-session.d.ts.map +1 -1
- package/dist/runtime/native-session.js +1 -0
- package/dist/runtime/native-session.js.map +1 -1
- package/dist/runtime/owner-runtime.d.ts +63 -1
- package/dist/runtime/owner-runtime.d.ts.map +1 -1
- package/dist/runtime/owner-runtime.js +180 -3
- package/dist/runtime/owner-runtime.js.map +1 -1
- package/dist/runtime/owner-system-prompt.d.ts.map +1 -1
- package/dist/runtime/owner-system-prompt.js +0 -1
- package/dist/runtime/owner-system-prompt.js.map +1 -1
- package/dist/runtime/principal-access.d.ts +2 -0
- package/dist/runtime/principal-access.d.ts.map +1 -1
- package/dist/runtime/principal-access.js +7 -0
- package/dist/runtime/principal-access.js.map +1 -1
- package/dist/runtime/principal-sessions.d.ts.map +1 -1
- package/dist/runtime/principal-sessions.js +8 -1
- package/dist/runtime/principal-sessions.js.map +1 -1
- package/dist/runtime/record-orders.d.ts.map +1 -1
- package/dist/runtime/record-orders.js +3 -29
- package/dist/runtime/record-orders.js.map +1 -1
- package/dist/runtime/report-scheduler.d.ts +9 -2
- package/dist/runtime/report-scheduler.d.ts.map +1 -1
- package/dist/runtime/report-scheduler.js +37 -10
- package/dist/runtime/report-scheduler.js.map +1 -1
- package/dist/runtime/stimulus-delivery.d.ts +3 -0
- package/dist/runtime/stimulus-delivery.d.ts.map +1 -1
- package/dist/runtime/stimulus-delivery.js +19 -3
- package/dist/runtime/stimulus-delivery.js.map +1 -1
- package/dist/runtime/tools-paths.d.ts +7 -0
- package/dist/runtime/tools-paths.d.ts.map +1 -1
- package/dist/runtime/tools-paths.js +11 -5
- package/dist/runtime/tools-paths.js.map +1 -1
- package/dist/runtime/upkeep-close.d.ts +17 -0
- package/dist/runtime/upkeep-close.d.ts.map +1 -0
- package/dist/runtime/upkeep-close.js +127 -0
- package/dist/runtime/upkeep-close.js.map +1 -0
- package/dist/runtime/upkeep-orders.d.ts +124 -0
- package/dist/runtime/upkeep-orders.d.ts.map +1 -0
- package/dist/runtime/upkeep-orders.js +310 -0
- package/dist/runtime/upkeep-orders.js.map +1 -0
- package/dist/runtime/upkeep-reconcile.d.ts +25 -0
- package/dist/runtime/upkeep-reconcile.d.ts.map +1 -0
- package/dist/runtime/upkeep-reconcile.js +231 -0
- package/dist/runtime/upkeep-reconcile.js.map +1 -0
- package/dist/runtime/upkeep-writeback.d.ts +22 -0
- package/dist/runtime/upkeep-writeback.d.ts.map +1 -0
- package/dist/runtime/upkeep-writeback.js +203 -0
- package/dist/runtime/upkeep-writeback.js.map +1 -0
- package/dist/utils/untrusted-content.d.ts.map +1 -1
- package/dist/utils/untrusted-content.js +8 -1
- package/dist/utils/untrusted-content.js.map +1 -1
- package/install/install.sh +457 -0
- package/install/node.json +9 -0
- package/package.json +3 -4
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { type AuthRequirement, type ConnectorsConfig, type IConnector } from '../../connectors/framework/types.js';
|
|
2
|
+
import type { MessengerName, W1Config } from '../../runtime/config.js';
|
|
3
|
+
import { planConnectors } from '../../runtime/connectors.js';
|
|
4
|
+
import { type PromptAdapter } from '../prompt.js';
|
|
5
|
+
import { type SecretName } from '../secrets.js';
|
|
6
|
+
import { type ProbeRun } from '../runtime/backend-probe.js';
|
|
7
|
+
import { telegramCheck } from '../runtime/diagnostics.js';
|
|
8
|
+
import { type ServiceSight, type SourceToolReport } from '../runtime/source-tools.js';
|
|
9
|
+
import { type ServiceOptions } from './service.js';
|
|
10
|
+
/**
|
|
11
|
+
* The secrets auth.env gives a value (boot and doctor read a blank one as missing), and what else
|
|
12
|
+
* reads each name besides the part being set up. The Slack and Discord sources read their
|
|
13
|
+
* messenger's bot token, so a token entered for one is the other's too (#552).
|
|
14
|
+
*/
|
|
15
|
+
export interface StoredSecrets {
|
|
16
|
+
readonly names: ReadonlySet<string>;
|
|
17
|
+
/** The sources and messengers on that also read `name`, as a phrase; '' when none is. */
|
|
18
|
+
readers(name: string): string;
|
|
19
|
+
}
|
|
20
|
+
/** What reads each auth.env name among `sources` and `messengers`, the ones that are on. */
|
|
21
|
+
export declare function secretReaders(sources: Iterable<string>, messengers: Iterable<MessengerName>): (name: string) => string;
|
|
22
|
+
export declare function yes(prompt: PromptAdapter, label: string): Promise<boolean>;
|
|
23
|
+
export declare function text(prompt: PromptAdapter, label: string): Promise<string>;
|
|
24
|
+
export declare function collectConnectors(prompt: PromptAdapter, secrets: Partial<Record<SecretName, string>>, stored: StoredSecrets): Promise<ConnectorsConfig>;
|
|
25
|
+
/** A source as boot builds it from connectors.json, with what it needs. */
|
|
26
|
+
export interface BuiltSource {
|
|
27
|
+
readonly name: string;
|
|
28
|
+
readonly source: IConnector;
|
|
29
|
+
readonly needs: AuthRequirement[];
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Each enabled source in `plan`, built as boot builds it, with its own requirements: a source
|
|
33
|
+
* names its tool there, since connectors.json's `auth` is not what the source runs. A source that
|
|
34
|
+
* cannot be built comes back with its error; boot would stop at the connectors stage.
|
|
35
|
+
*/
|
|
36
|
+
export declare function buildSources(plan: ReturnType<typeof planConnectors>, config: W1Config, configPath: string): Promise<Array<BuiltSource | {
|
|
37
|
+
readonly name: string;
|
|
38
|
+
readonly error: Error;
|
|
39
|
+
}>>;
|
|
40
|
+
/**
|
|
41
|
+
* For `sources`, each tool they run as the service would find it (install.md, PR 3), with how to
|
|
42
|
+
* install it and its login, and the service's PATH it was looked for on; `enabled` is every
|
|
43
|
+
* source that will run. start.sh is read only when a source runs a tool: null when none does.
|
|
44
|
+
*/
|
|
45
|
+
export declare function sourceToolReports(sources: readonly BuiltSource[], enabled: readonly BuiltSource[], install: {
|
|
46
|
+
root: string;
|
|
47
|
+
home: string;
|
|
48
|
+
platform: NodeJS.Platform;
|
|
49
|
+
}, config: W1Config, options: Pick<ServiceOptions, 'findExecutable' | 'nodePath' | 'cliPath' | 'toolDirectoryExists'>): {
|
|
50
|
+
service: ServiceSight;
|
|
51
|
+
reports: SourceToolReport[];
|
|
52
|
+
} | null;
|
|
53
|
+
/**
|
|
54
|
+
* For the enabled sources in connectors.json, each tool they run that the service cannot find,
|
|
55
|
+
* with how to install it, and each one's login: what `mama init` says when it continues a setup
|
|
56
|
+
* that stopped (often at the boot wait, when a source's tool is missing). connectors.json is read
|
|
57
|
+
* as boot and doctor read it (planConnectors). It reports; what boot refuses doctor names in full.
|
|
58
|
+
*/
|
|
59
|
+
export declare function writeSourceTools(install: {
|
|
60
|
+
root: string;
|
|
61
|
+
home: string;
|
|
62
|
+
platform: NodeJS.Platform;
|
|
63
|
+
configPath: string;
|
|
64
|
+
}, config: W1Config, options: Pick<ServiceOptions, 'findExecutable' | 'nodePath' | 'cliPath' | 'toolDirectoryExists'>, write: (line: string) => void,
|
|
65
|
+
/** What to do once a missing tool is installed. */
|
|
66
|
+
next: string): Promise<void>;
|
|
67
|
+
export type TelegramCall = Parameters<typeof telegramCheck>[2];
|
|
68
|
+
export declare function validTimezone(timezone: string): string;
|
|
69
|
+
/**
|
|
70
|
+
* Run a backend's own sign-in attached to the terminal, for `mama init --section model`: it names
|
|
71
|
+
* the command and runs it for the person, then reads the login again. Its exit status. The whole
|
|
72
|
+
* setup only names the login, for the person's agent to run (owner-setup.md).
|
|
73
|
+
*/
|
|
74
|
+
export type BackendSignIn = (command: string, args: string[], env: NodeJS.ProcessEnv) => number;
|
|
75
|
+
export declare const terminalSignIn: BackendSignIn;
|
|
76
|
+
/**
|
|
77
|
+
* The backend this install will run must be installed, at least the version a release was
|
|
78
|
+
* verified on, and signed in, before anything is written: the daemon would otherwise fail its
|
|
79
|
+
* first turn. Codex is asked about the managed home MAMA gives it. With `signIn` (a terminal,
|
|
80
|
+
* `--section model`), a signed-out backend's login runs here, and the login is read again;
|
|
81
|
+
* without it, the login is named with the backend's full path, for the person's agent to run.
|
|
82
|
+
* `next` is the caller's next step after a fix.
|
|
83
|
+
*/
|
|
84
|
+
export declare function checkBackend(backend: 'claude' | 'codex', codexHome: string, locate: (name: string) => string | undefined, run: ProbeRun | undefined, next: string, signIn?: {
|
|
85
|
+
run: BackendSignIn;
|
|
86
|
+
write: (line: string) => void;
|
|
87
|
+
}): void;
|
|
88
|
+
/** Telegram must accept the token; anything about the group is reported and doctor checks again. */
|
|
89
|
+
export declare function checkTelegram(token: string, chatId: string | undefined, call: TelegramCall, write: (line: string) => void, options: {
|
|
90
|
+
groupRequired?: boolean;
|
|
91
|
+
next: string;
|
|
92
|
+
}): Promise<void>;
|
|
93
|
+
export declare function report(check: Awaited<ReturnType<typeof telegramCheck>>, write: (line: string) => void): void;
|
|
94
|
+
/** Discord owner messages: off, or one owner channel and the owner's user id. */
|
|
95
|
+
export declare function askDiscord(prompt: PromptAdapter, secrets: Partial<Record<SecretName, string>>, stored: StoredSecrets): Promise<Record<string, unknown>>;
|
|
96
|
+
/** Slack owner messages: off, or one owner channel and the owner's user id. */
|
|
97
|
+
export declare function askSlack(prompt: PromptAdapter, secrets: Partial<Record<SecretName, string>>, stored: StoredSecrets): Promise<Record<string, unknown>>;
|
|
98
|
+
/** Jev (TypeSafe) is the owner's choice: the agent's judge tool, off unless chosen here. */
|
|
99
|
+
export declare function askJev(prompt: PromptAdapter, keyFile: string): Promise<{
|
|
100
|
+
enabled: boolean;
|
|
101
|
+
key: string | undefined;
|
|
102
|
+
}>;
|
|
103
|
+
/** The only backend on PATH is the answer Enter keeps; with both or neither, one is typed. */
|
|
104
|
+
export declare function askBackend(prompt: PromptAdapter, check: (name: 'claude' | 'codex') => void, locate: (name: string) => string | undefined): Promise<{
|
|
105
|
+
backend: 'claude' | 'codex';
|
|
106
|
+
model: string;
|
|
107
|
+
}>;
|
|
108
|
+
/** Enter keeps the timezone shown: the current setting, or else this machine's. */
|
|
109
|
+
export declare function askTimezone(prompt: PromptAdapter, current?: string): Promise<string>;
|
|
110
|
+
//# sourceMappingURL=init-questions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init-questions.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init-questions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,445 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.terminalSignIn = void 0;
|
|
4
|
+
exports.secretReaders = secretReaders;
|
|
5
|
+
exports.yes = yes;
|
|
6
|
+
exports.text = text;
|
|
7
|
+
exports.collectConnectors = collectConnectors;
|
|
8
|
+
exports.buildSources = buildSources;
|
|
9
|
+
exports.sourceToolReports = sourceToolReports;
|
|
10
|
+
exports.writeSourceTools = writeSourceTools;
|
|
11
|
+
exports.validTimezone = validTimezone;
|
|
12
|
+
exports.checkBackend = checkBackend;
|
|
13
|
+
exports.checkTelegram = checkTelegram;
|
|
14
|
+
exports.report = report;
|
|
15
|
+
exports.askDiscord = askDiscord;
|
|
16
|
+
exports.askSlack = askSlack;
|
|
17
|
+
exports.askJev = askJev;
|
|
18
|
+
exports.askBackend = askBackend;
|
|
19
|
+
exports.askTimezone = askTimezone;
|
|
20
|
+
const node_child_process_1 = require("node:child_process");
|
|
21
|
+
const node_fs_1 = require("node:fs");
|
|
22
|
+
const node_path_1 = require("node:path");
|
|
23
|
+
const types_js_1 = require("../../connectors/framework/types.js");
|
|
24
|
+
const index_js_1 = require("../../connectors/index.js");
|
|
25
|
+
const connectors_js_1 = require("../../runtime/connectors.js");
|
|
26
|
+
const timezone_js_1 = require("../../runtime/timezone.js");
|
|
27
|
+
const gws_utils_js_1 = require("../../connectors/framework/gws-utils.js");
|
|
28
|
+
const backend_security_js_1 = require("../../runtime/backend-security.js");
|
|
29
|
+
const prompt_js_1 = require("../prompt.js");
|
|
30
|
+
const secrets_js_1 = require("../secrets.js");
|
|
31
|
+
const backend_probe_js_1 = require("../runtime/backend-probe.js");
|
|
32
|
+
const diagnostics_js_1 = require("../runtime/diagnostics.js");
|
|
33
|
+
const source_tools_js_1 = require("../runtime/source-tools.js");
|
|
34
|
+
const launch_files_js_1 = require("../launch-files.js");
|
|
35
|
+
const daemon_js_1 = require("./daemon.js");
|
|
36
|
+
const service_js_1 = require("./service.js");
|
|
37
|
+
/** The questions `mama init --section` asks, and the checks it shares with the whole setup. */
|
|
38
|
+
const connectorNames = [
|
|
39
|
+
'slack',
|
|
40
|
+
'chatwork',
|
|
41
|
+
'trello',
|
|
42
|
+
'calendar',
|
|
43
|
+
'gmail',
|
|
44
|
+
'drive',
|
|
45
|
+
'sheets',
|
|
46
|
+
'notion',
|
|
47
|
+
'obsidian',
|
|
48
|
+
'discord',
|
|
49
|
+
'telegram',
|
|
50
|
+
'imessage',
|
|
51
|
+
'claude-code',
|
|
52
|
+
];
|
|
53
|
+
const connectorSecrets = {
|
|
54
|
+
slack: ['MAMA_SLACK_TOKEN'],
|
|
55
|
+
chatwork: ['MAMA_CHATWORK_TOKEN'],
|
|
56
|
+
trello: ['MAMA_TRELLO_KEY', 'MAMA_TRELLO_TOKEN'],
|
|
57
|
+
calendar: [],
|
|
58
|
+
gmail: [],
|
|
59
|
+
drive: [],
|
|
60
|
+
sheets: [],
|
|
61
|
+
notion: ['MAMA_NOTION_TOKEN'],
|
|
62
|
+
obsidian: [],
|
|
63
|
+
discord: ['MAMA_DISCORD_TOKEN'],
|
|
64
|
+
telegram: ['MAMA_TELEGRAM_SOURCE_TOKEN'],
|
|
65
|
+
imessage: [],
|
|
66
|
+
'claude-code': [],
|
|
67
|
+
};
|
|
68
|
+
const noSecretConnectorNames = new Set(['obsidian', 'imessage', 'claude-code']);
|
|
69
|
+
/** What reads each auth.env name among `sources` and `messengers`, the ones that are on. */
|
|
70
|
+
function secretReaders(sources, messengers) {
|
|
71
|
+
const on = [
|
|
72
|
+
...[...sources].map((source) => [`the ${source} source`, connectorSecrets[source] ?? []]),
|
|
73
|
+
...[...messengers].map((messenger) => [
|
|
74
|
+
`the ${messenger} messenger`,
|
|
75
|
+
daemon_js_1.MESSENGER_SECRETS[messenger],
|
|
76
|
+
]),
|
|
77
|
+
];
|
|
78
|
+
return (name) => on
|
|
79
|
+
.filter(([, names]) => names.includes(name))
|
|
80
|
+
.map(([reader]) => reader)
|
|
81
|
+
.join(' and ');
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* A secret for `secrets`, asked at the terminal. One auth.env already holds is kept unless the
|
|
85
|
+
* person chooses to replace it, told what else reads it (#552).
|
|
86
|
+
*/
|
|
87
|
+
async function askSecret(prompt, secrets, stored, name, label) {
|
|
88
|
+
if (stored.names.has(name)) {
|
|
89
|
+
const readers = stored.readers(name);
|
|
90
|
+
if (!(await yes(prompt, `${name} is in auth.env already${readers ? `, read by ${readers}` : ''}. Replace it`)))
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
secrets[name] = (0, prompt_js_1.nonblankLine)(await prompt.secret(label));
|
|
94
|
+
}
|
|
95
|
+
async function yes(prompt, label) {
|
|
96
|
+
const value = (await prompt.text(`${label} [y/N]`)).trim().toLowerCase();
|
|
97
|
+
if (['', 'n', 'no'].includes(value))
|
|
98
|
+
return false;
|
|
99
|
+
if (['y', 'yes'].includes(value))
|
|
100
|
+
return true;
|
|
101
|
+
throw new prompt_js_1.CliInputError('Answer yes or no.');
|
|
102
|
+
}
|
|
103
|
+
async function text(prompt, label) {
|
|
104
|
+
return (0, prompt_js_1.nonblankLine)(await prompt.text(label)).trim();
|
|
105
|
+
}
|
|
106
|
+
async function optionalText(prompt, label) {
|
|
107
|
+
const value = (await prompt.text(label)).trim();
|
|
108
|
+
return value === '' ? undefined : (0, prompt_js_1.nonblankLine)(value).trim();
|
|
109
|
+
}
|
|
110
|
+
async function collectConnectors(prompt, secrets, stored) {
|
|
111
|
+
const selected = (await prompt.text(`Connectors to enable (${connectorNames.join(', ')}; comma-separated, blank for none)`)).trim();
|
|
112
|
+
const names = selected === '' ? [] : [...new Set(selected.split(',').map((name) => name.trim()))];
|
|
113
|
+
if (names.some((name) => !connectorNames.includes(name))) {
|
|
114
|
+
throw new prompt_js_1.CliInputError(`Choose connectors from: ${connectorNames.join(', ')}`);
|
|
115
|
+
}
|
|
116
|
+
const config = {};
|
|
117
|
+
for (const name of names) {
|
|
118
|
+
for (const tokenName of connectorSecrets[name])
|
|
119
|
+
await askSecret(prompt, secrets, stored, tokenName, tokenName);
|
|
120
|
+
if (name === 'calendar')
|
|
121
|
+
prompt.write('Calendar currently reads the primary calendar only; its source channel id is calendar.');
|
|
122
|
+
if (name === 'gmail') {
|
|
123
|
+
config.gmail = {
|
|
124
|
+
enabled: true,
|
|
125
|
+
pollIntervalMinutes: 5,
|
|
126
|
+
channels: { inbox: { role: 'hub' } },
|
|
127
|
+
auth: (0, types_js_1.cliAuth)(gws_utils_js_1.gwsTool),
|
|
128
|
+
};
|
|
129
|
+
continue;
|
|
130
|
+
}
|
|
131
|
+
if (name === 'notion') {
|
|
132
|
+
config.notion = {
|
|
133
|
+
enabled: true,
|
|
134
|
+
pollIntervalMinutes: 5,
|
|
135
|
+
channels: { workspace: { role: 'hub', name: 'Notion workspace' } },
|
|
136
|
+
auth: { type: 'token', tokenName: 'MAMA_NOTION_TOKEN' },
|
|
137
|
+
};
|
|
138
|
+
continue;
|
|
139
|
+
}
|
|
140
|
+
if (name === 'obsidian') {
|
|
141
|
+
const vaultPath = await text(prompt, 'Obsidian vault path');
|
|
142
|
+
config.obsidian = {
|
|
143
|
+
enabled: true,
|
|
144
|
+
pollIntervalMinutes: 5,
|
|
145
|
+
channels: { vault: { role: 'hub', name: 'Vault', vaultPath } },
|
|
146
|
+
auth: { type: 'none' },
|
|
147
|
+
};
|
|
148
|
+
continue;
|
|
149
|
+
}
|
|
150
|
+
if (name === 'claude-code') {
|
|
151
|
+
const selectedProjects = (await text(prompt, 'Claude Code project directory names (comma-separated)'))
|
|
152
|
+
.split(',')
|
|
153
|
+
.map((project) => project.trim());
|
|
154
|
+
if (selectedProjects.some((project) => !project || /[/\\\s]/.test(project))) {
|
|
155
|
+
throw new prompt_js_1.CliInputError('Enter Claude Code project directory names without paths or spaces.');
|
|
156
|
+
}
|
|
157
|
+
const channels = {};
|
|
158
|
+
for (const project of selectedProjects) {
|
|
159
|
+
const alias = await text(prompt, `Display alias for ${project}`);
|
|
160
|
+
channels[project] = { role: 'hub', name: alias };
|
|
161
|
+
}
|
|
162
|
+
config['claude-code'] = {
|
|
163
|
+
enabled: true,
|
|
164
|
+
pollIntervalMinutes: 5,
|
|
165
|
+
channels,
|
|
166
|
+
auth: { type: 'none' },
|
|
167
|
+
};
|
|
168
|
+
continue;
|
|
169
|
+
}
|
|
170
|
+
if (name === 'drive') {
|
|
171
|
+
const folderIds = (await text(prompt, 'Drive folder ids (comma-separated)'))
|
|
172
|
+
.split(',')
|
|
173
|
+
.map((id) => id.trim());
|
|
174
|
+
if (folderIds.some((id) => !id || /\s/.test(id)))
|
|
175
|
+
throw new prompt_js_1.CliInputError('Enter Drive folder ids separated by commas without spaces.');
|
|
176
|
+
config.drive = {
|
|
177
|
+
enabled: true,
|
|
178
|
+
pollIntervalMinutes: 5,
|
|
179
|
+
channels: Object.fromEntries(folderIds.map((folderId) => [folderId, { role: 'hub', folderId }])),
|
|
180
|
+
auth: (0, types_js_1.cliAuth)(gws_utils_js_1.gwsTool),
|
|
181
|
+
};
|
|
182
|
+
continue;
|
|
183
|
+
}
|
|
184
|
+
if (name === 'sheets') {
|
|
185
|
+
const spreadsheetId = await text(prompt, 'Google Sheets spreadsheet id');
|
|
186
|
+
const sheetRange = await text(prompt, 'Google Sheets header-and-data range');
|
|
187
|
+
const dataRange = await optionalText(prompt, 'Separate data range (blank to use the full range)');
|
|
188
|
+
config.sheets = {
|
|
189
|
+
enabled: true,
|
|
190
|
+
pollIntervalMinutes: 5,
|
|
191
|
+
channels: {
|
|
192
|
+
spreadsheet: {
|
|
193
|
+
role: 'hub',
|
|
194
|
+
spreadsheetId,
|
|
195
|
+
sheetRange,
|
|
196
|
+
...(dataRange ? { dataRange } : {}),
|
|
197
|
+
},
|
|
198
|
+
},
|
|
199
|
+
auth: (0, types_js_1.cliAuth)(gws_utils_js_1.gwsTool),
|
|
200
|
+
};
|
|
201
|
+
continue;
|
|
202
|
+
}
|
|
203
|
+
const ids = (await text(prompt, `${name} ${name === 'trello' ? 'board' : 'channel'} ids (comma-separated ids only)`))
|
|
204
|
+
.split(',')
|
|
205
|
+
.map((id) => id.trim());
|
|
206
|
+
if (ids.some((id) => !id || /\s/.test(id)))
|
|
207
|
+
throw new prompt_js_1.CliInputError('Enter channel ids separated by commas, without display names.');
|
|
208
|
+
if (name === 'calendar' && (ids.length !== 1 || ids[0] !== 'calendar')) {
|
|
209
|
+
throw new prompt_js_1.CliInputError('Calendar supports only the source channel id calendar (primary calendar).');
|
|
210
|
+
}
|
|
211
|
+
config[name] = {
|
|
212
|
+
enabled: true,
|
|
213
|
+
pollIntervalMinutes: 5,
|
|
214
|
+
channels: Object.fromEntries(ids.map((id) => [id, { role: 'hub', ...(name === 'trello' ? { boardId: id } : {}) }])),
|
|
215
|
+
auth: name === 'calendar'
|
|
216
|
+
? (0, types_js_1.cliAuth)(gws_utils_js_1.gwsTool)
|
|
217
|
+
: noSecretConnectorNames.has(name)
|
|
218
|
+
? { type: 'none' }
|
|
219
|
+
: { type: 'token', tokenName: connectorSecrets[name].at(-1) },
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
return config;
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Each enabled source in `plan`, built as boot builds it, with its own requirements: a source
|
|
226
|
+
* names its tool there, since connectors.json's `auth` is not what the source runs. A source that
|
|
227
|
+
* cannot be built comes back with its error; boot would stop at the connectors stage.
|
|
228
|
+
*/
|
|
229
|
+
async function buildSources(plan, config, configPath) {
|
|
230
|
+
const paths = (0, daemon_js_1.pathsFor)(configPath, config);
|
|
231
|
+
const timeZone = (0, timezone_js_1.createTimeZoneSetting)(config.timezone);
|
|
232
|
+
const built = [];
|
|
233
|
+
for (const name of plan.enabledConnectorNames) {
|
|
234
|
+
try {
|
|
235
|
+
const source = await (0, index_js_1.loadConnector)(name, plan.config.config[name], (0, connectors_js_1.connectorLoadPaths)(name, {
|
|
236
|
+
statePath: paths.connectorsRoot,
|
|
237
|
+
kagemushaDbPath: paths.kagemushaDbPath,
|
|
238
|
+
timeZone,
|
|
239
|
+
}));
|
|
240
|
+
built.push({ name, source, needs: source.getAuthRequirements() });
|
|
241
|
+
}
|
|
242
|
+
catch (error) {
|
|
243
|
+
built.push({ name, error: error });
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
return built;
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* For `sources`, each tool they run as the service would find it (install.md, PR 3), with how to
|
|
250
|
+
* install it and its login, and the service's PATH it was looked for on; `enabled` is every
|
|
251
|
+
* source that will run. start.sh is read only when a source runs a tool: null when none does.
|
|
252
|
+
*/
|
|
253
|
+
function sourceToolReports(sources, enabled, install, config, options) {
|
|
254
|
+
if (!sources.some(({ needs }) => needs.some((need) => need.type === 'cli')))
|
|
255
|
+
return null;
|
|
256
|
+
const { root, home, platform } = install;
|
|
257
|
+
const service = (0, source_tools_js_1.serviceSight)(root, home, platform, () => (0, service_js_1.serviceLaunch)(config.agent.backend, options), options.toolDirectoryExists);
|
|
258
|
+
return {
|
|
259
|
+
service,
|
|
260
|
+
reports: (0, source_tools_js_1.sourceTools)(sources, service, { root, home }, { inDirs: launch_files_js_1.findIn, shell: options.findExecutable ?? launch_files_js_1.findExecutable }, enabled),
|
|
261
|
+
};
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* For the enabled sources in connectors.json, each tool they run that the service cannot find,
|
|
265
|
+
* with how to install it, and each one's login: what `mama init` says when it continues a setup
|
|
266
|
+
* that stopped (often at the boot wait, when a source's tool is missing). connectors.json is read
|
|
267
|
+
* as boot and doctor read it (planConnectors). It reports; what boot refuses doctor names in full.
|
|
268
|
+
*/
|
|
269
|
+
async function writeSourceTools(install, config, options, write,
|
|
270
|
+
/** What to do once a missing tool is installed. */
|
|
271
|
+
next) {
|
|
272
|
+
const { configPath } = install;
|
|
273
|
+
let plan;
|
|
274
|
+
try {
|
|
275
|
+
plan = (0, connectors_js_1.planConnectors)({
|
|
276
|
+
configPath: (0, daemon_js_1.pathsFor)(configPath, config).connectorsConfigPath,
|
|
277
|
+
onIgnored: () => { },
|
|
278
|
+
...(config.wiki?.enabled
|
|
279
|
+
? { wikiRoot: (0, node_path_1.resolve)(config.wiki.vaultPath, config.wiki.wikiDir) }
|
|
280
|
+
: {}),
|
|
281
|
+
});
|
|
282
|
+
}
|
|
283
|
+
catch (error) {
|
|
284
|
+
write(`connectors.json does not load as boot reads it (${error.message}); mama doctor names what to correct.`);
|
|
285
|
+
return;
|
|
286
|
+
}
|
|
287
|
+
const sources = [];
|
|
288
|
+
for (const source of await buildSources(plan, config, configPath)) {
|
|
289
|
+
if ('error' in source)
|
|
290
|
+
write(`${source.name} cannot be built from connectors.json (${source.error.message}); mama doctor names it.`);
|
|
291
|
+
else
|
|
292
|
+
sources.push(source);
|
|
293
|
+
}
|
|
294
|
+
const tools = sourceToolReports(sources, sources, install, config, options);
|
|
295
|
+
for (const line of (0, source_tools_js_1.sourceToolLines)(tools?.reports ?? [], next, (0, launch_files_js_1.mamaCommand)(install.root)))
|
|
296
|
+
write(line);
|
|
297
|
+
}
|
|
298
|
+
function validTimezone(timezone) {
|
|
299
|
+
try {
|
|
300
|
+
new Intl.DateTimeFormat('en', { timeZone: timezone });
|
|
301
|
+
}
|
|
302
|
+
catch {
|
|
303
|
+
throw new prompt_js_1.CliInputError(`Timezone "${timezone}" is not a valid IANA time zone.`);
|
|
304
|
+
}
|
|
305
|
+
return timezone;
|
|
306
|
+
}
|
|
307
|
+
const terminalSignIn = (command, args, env) => {
|
|
308
|
+
const result = (0, node_child_process_1.spawnSync)(command, args, { stdio: 'inherit', env });
|
|
309
|
+
if (result.error)
|
|
310
|
+
throw result.error;
|
|
311
|
+
return result.status ?? 1;
|
|
312
|
+
};
|
|
313
|
+
exports.terminalSignIn = terminalSignIn;
|
|
314
|
+
/**
|
|
315
|
+
* The backend this install will run must be installed, at least the version a release was
|
|
316
|
+
* verified on, and signed in, before anything is written: the daemon would otherwise fail its
|
|
317
|
+
* first turn. Codex is asked about the managed home MAMA gives it. With `signIn` (a terminal,
|
|
318
|
+
* `--section model`), a signed-out backend's login runs here, and the login is read again;
|
|
319
|
+
* without it, the login is named with the backend's full path, for the person's agent to run.
|
|
320
|
+
* `next` is the caller's next step after a fix.
|
|
321
|
+
*/
|
|
322
|
+
function checkBackend(backend, codexHome, locate, run, next, signIn) {
|
|
323
|
+
const executable = locate(backend);
|
|
324
|
+
const command = executable === undefined ? backend : (0, secrets_js_1.shellQuote)(executable);
|
|
325
|
+
const login = backend === 'claude'
|
|
326
|
+
? `${command} auth login`
|
|
327
|
+
: `CODEX_HOME=${(0, secrets_js_1.shellQuote)(codexHome)} ${command} login`;
|
|
328
|
+
if (!executable) {
|
|
329
|
+
throw new prompt_js_1.CliInputError(`${backend} is not on this PATH. Install it, sign in with: ${login}, then ${next}.`);
|
|
330
|
+
}
|
|
331
|
+
// The daemon starts the backend without secret-shaped variables; a login that only this
|
|
332
|
+
// shell's API key gives would pass here and fail every turn.
|
|
333
|
+
const env = (0, backend_security_js_1.backendEnvironment)();
|
|
334
|
+
const read = () => (0, backend_probe_js_1.probeBackend)(backend, executable, {
|
|
335
|
+
env,
|
|
336
|
+
...(backend === 'codex' ? { codexHome } : {}),
|
|
337
|
+
...(run ? { run } : {}),
|
|
338
|
+
});
|
|
339
|
+
let probe = read();
|
|
340
|
+
if (probe.version === null)
|
|
341
|
+
throw new prompt_js_1.CliInputError(`${probe.problem}; check ${executable}`);
|
|
342
|
+
// An old CLI is the more useful answer even when its login could not be read.
|
|
343
|
+
if (!probe.versionOk) {
|
|
344
|
+
throw new prompt_js_1.CliInputError(`${backend} ${probe.version} is older than ${probe.minimum}, the oldest MAMA was verified on; update it, then ${next}.`);
|
|
345
|
+
}
|
|
346
|
+
if (probe.problem)
|
|
347
|
+
throw new prompt_js_1.CliInputError(`${probe.problem}; check ${executable}`);
|
|
348
|
+
// Codex refuses a CODEX_HOME that does not exist; this one is MAMA's own, made here so the login
|
|
349
|
+
// named below, or run on a terminal, works.
|
|
350
|
+
if (!probe.loggedIn && backend === 'codex')
|
|
351
|
+
(0, node_fs_1.mkdirSync)(codexHome, { recursive: true, mode: 0o700 });
|
|
352
|
+
if (!probe.loggedIn && signIn) {
|
|
353
|
+
signIn.write(`${backend} is not signed in; running: ${login}`);
|
|
354
|
+
let status;
|
|
355
|
+
if (backend === 'codex') {
|
|
356
|
+
status = signIn.run(executable, ['login'], { ...env, CODEX_HOME: codexHome });
|
|
357
|
+
}
|
|
358
|
+
else {
|
|
359
|
+
status = signIn.run(executable, ['auth', 'login'], env);
|
|
360
|
+
}
|
|
361
|
+
if (status !== 0) {
|
|
362
|
+
throw new prompt_js_1.CliInputError(`${login} exited ${status}; sign in with it yourself, then ${next}.`);
|
|
363
|
+
}
|
|
364
|
+
probe = read();
|
|
365
|
+
if (probe.problem)
|
|
366
|
+
throw new prompt_js_1.CliInputError(`${probe.problem}; check ${executable}`);
|
|
367
|
+
}
|
|
368
|
+
if (!probe.loggedIn) {
|
|
369
|
+
throw new prompt_js_1.CliInputError(`${backend} is not signed in. Run: ${login}, then ${next}.`);
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
/** Telegram must accept the token; anything about the group is reported and doctor checks again. */
|
|
373
|
+
async function checkTelegram(token, chatId, call, write, options) {
|
|
374
|
+
const check = await (0, diagnostics_js_1.telegramCheck)(token, chatId, call);
|
|
375
|
+
if (check.detail === 'Telegram refused the bot token') {
|
|
376
|
+
throw new prompt_js_1.CliInputError(`Telegram refused the bot token; copy it again from BotFather.`);
|
|
377
|
+
}
|
|
378
|
+
if (check.detail.startsWith('could not reach Telegram')) {
|
|
379
|
+
throw new prompt_js_1.CliInputError(`${check.detail}, so the token is unchecked; check the network, then ${options.next}.`);
|
|
380
|
+
}
|
|
381
|
+
// A new bot the common group cannot be shown to hold, or to read, would leave that channel silent.
|
|
382
|
+
if (options.groupRequired && check.status !== 'ok')
|
|
383
|
+
throw new prompt_js_1.CliInputError(`${check.detail}${check.fix ? `: ${check.fix}` : ''}; the token was not saved. Run this again once that is fixed.`);
|
|
384
|
+
report(check, write);
|
|
385
|
+
}
|
|
386
|
+
function report(check, write) {
|
|
387
|
+
if (check.status !== 'ok')
|
|
388
|
+
write(`telegram: ${check.detail}${check.fix ? ` (${check.fix})` : ''}`);
|
|
389
|
+
}
|
|
390
|
+
/** Discord owner messages: off, or one owner channel and the owner's user id. */
|
|
391
|
+
async function askDiscord(prompt, secrets, stored) {
|
|
392
|
+
if (!(await yes(prompt, 'Enable Discord owner messages')))
|
|
393
|
+
return { enabled: false, allowed_channels: [], owner_user_ids: [] };
|
|
394
|
+
await askSecret(prompt, secrets, stored, 'MAMA_DISCORD_TOKEN', 'Discord bot token');
|
|
395
|
+
const channel = await text(prompt, 'Discord owner channel id');
|
|
396
|
+
const user = await text(prompt, 'Discord owner user id');
|
|
397
|
+
return {
|
|
398
|
+
enabled: true,
|
|
399
|
+
owner_channel_id: channel,
|
|
400
|
+
allowed_channels: [channel],
|
|
401
|
+
owner_user_ids: [user],
|
|
402
|
+
};
|
|
403
|
+
}
|
|
404
|
+
/** Slack owner messages: off, or one owner channel and the owner's user id. */
|
|
405
|
+
async function askSlack(prompt, secrets, stored) {
|
|
406
|
+
if (!(await yes(prompt, 'Enable Slack owner messages')))
|
|
407
|
+
return { enabled: false, allowed_channels: [], owner_user_ids: [] };
|
|
408
|
+
await askSecret(prompt, secrets, stored, 'MAMA_SLACK_TOKEN', 'Slack bot token');
|
|
409
|
+
await askSecret(prompt, secrets, stored, 'MAMA_SLACK_APP_TOKEN', 'Slack Socket Mode app token');
|
|
410
|
+
const channel = await text(prompt, 'Slack owner channel id');
|
|
411
|
+
const user = await text(prompt, 'Slack owner user id');
|
|
412
|
+
return {
|
|
413
|
+
enabled: true,
|
|
414
|
+
owner_channel_id: channel,
|
|
415
|
+
allowed_channels: [channel],
|
|
416
|
+
owner_user_ids: [user],
|
|
417
|
+
};
|
|
418
|
+
}
|
|
419
|
+
/** Jev (TypeSafe) is the owner's choice: the agent's judge tool, off unless chosen here. */
|
|
420
|
+
async function askJev(prompt, keyFile) {
|
|
421
|
+
const enabled = await yes(prompt, 'Use Jev (TypeSafe) so the agent can judge many messages or items without reading them all? Owner text in those calls goes to the Jev service');
|
|
422
|
+
if (!enabled || (0, node_fs_1.existsSync)(keyFile))
|
|
423
|
+
return { enabled, key: undefined };
|
|
424
|
+
prompt.write('Get a Jev API key from TypeSafe: https://docs.typesafe.ai');
|
|
425
|
+
return { enabled, key: (0, prompt_js_1.nonblankLine)(await prompt.secret('Jev API key')) };
|
|
426
|
+
}
|
|
427
|
+
/** The only backend on PATH is the answer Enter keeps; with both or neither, one is typed. */
|
|
428
|
+
async function askBackend(prompt, check, locate) {
|
|
429
|
+
const found = ['claude', 'codex'].filter((name) => locate(name) !== undefined);
|
|
430
|
+
const shown = found.length === 1 ? found[0] : undefined;
|
|
431
|
+
const backend = (await optionalText(prompt, `Backend (claude|codex)${shown ? ` [${shown}]` : ''}`)) ??
|
|
432
|
+
shown ??
|
|
433
|
+
'';
|
|
434
|
+
if (backend !== 'claude' && backend !== 'codex')
|
|
435
|
+
throw new prompt_js_1.CliInputError('Backend must be claude or codex.');
|
|
436
|
+
check(backend);
|
|
437
|
+
return { backend, model: await text(prompt, 'Model') };
|
|
438
|
+
}
|
|
439
|
+
/** Enter keeps the timezone shown: the current setting, or else this machine's. */
|
|
440
|
+
async function askTimezone(prompt, current) {
|
|
441
|
+
const shown = current ?? Intl.DateTimeFormat().resolvedOptions().timeZone;
|
|
442
|
+
const answer = (await prompt.text(`Owner timezone [${shown}]`)).trim();
|
|
443
|
+
return validTimezone(answer || shown);
|
|
444
|
+
}
|
|
445
|
+
//# sourceMappingURL=init-questions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init-questions.js","sourceRoot":"","sources":["../../../src/cli/commands/init-questions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { InitOptions } from './init.js';
|
|
2
|
+
/** The parts of a setup `mama init --section` asks again; the folders stay, member data is there. */
|
|
3
|
+
export declare const initSections: readonly ["telegram", "model", "timezone", "connectors", "discord", "slack", "jev"];
|
|
4
|
+
/**
|
|
5
|
+
* Ask one part of an existing setup again and save it: the answers are checked as `mama init`
|
|
6
|
+
* checks them, the changed config.yaml is parsed as the daemon parses it before it is written,
|
|
7
|
+
* and tokens go only to auth.env. The daemon reads its settings at boot and holds the install
|
|
8
|
+
* lock, so a change waits until it is stopped. `--section connectors --non-interactive` takes the
|
|
9
|
+
* sources from MAMA_INIT_CONNECTORS and their tokens on the setup page; every other part needs a
|
|
10
|
+
* terminal (install.md, W2.4.5e).
|
|
11
|
+
*/
|
|
12
|
+
export declare function runInitSection(section: string, options?: InitOptions, nonInteractive?: boolean): Promise<void>;
|
|
13
|
+
//# sourceMappingURL=init-section.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init-section.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init-section.ts"],"names":[],"mappings":"AA0BA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAmB7C,qGAAqG;AACrG,eAAO,MAAM,YAAY,qFAQf,CAAC;AA4NX;;;;;;;GAOG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,WAAgB,EACzB,cAAc,UAAQ,GACrB,OAAO,CAAC,IAAI,CAAC,CA8Mf"}
|