@mono-agent/agent-app 0.5.0 → 0.6.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 (111) hide show
  1. package/README.md +5 -0
  2. package/dist/adapter-send-tools.d.ts +7 -7
  3. package/dist/adapter-send-tools.d.ts.map +1 -1
  4. package/dist/adapter-send-tools.js +59 -50
  5. package/dist/adapter-send-tools.js.map +1 -1
  6. package/dist/app.js +8 -8
  7. package/dist/app.js.map +1 -1
  8. package/dist/background.d.ts +4 -0
  9. package/dist/background.d.ts.map +1 -1
  10. package/dist/background.js +8 -3
  11. package/dist/background.js.map +1 -1
  12. package/dist/channel-fact-format.d.ts +12 -0
  13. package/dist/channel-fact-format.d.ts.map +1 -0
  14. package/dist/channel-fact-format.js +24 -0
  15. package/dist/channel-fact-format.js.map +1 -0
  16. package/dist/channels.js +3 -3
  17. package/dist/channels.js.map +1 -1
  18. package/dist/cli.d.ts +14 -10
  19. package/dist/cli.d.ts.map +1 -1
  20. package/dist/cli.js +198 -181
  21. package/dist/cli.js.map +1 -1
  22. package/dist/config-reference.js +4 -4
  23. package/dist/config-reference.js.map +1 -1
  24. package/dist/consumer-contract.d.ts.map +1 -1
  25. package/dist/consumer-contract.js +5 -3
  26. package/dist/consumer-contract.js.map +1 -1
  27. package/dist/doctor.d.ts.map +1 -1
  28. package/dist/doctor.js +126 -5
  29. package/dist/doctor.js.map +1 -1
  30. package/dist/init.d.ts +11 -22
  31. package/dist/init.d.ts.map +1 -1
  32. package/dist/init.js +25 -116
  33. package/dist/init.js.map +1 -1
  34. package/dist/interaction-bridge.d.ts +3 -3
  35. package/dist/interaction-bridge.d.ts.map +1 -1
  36. package/dist/memory-recall.d.ts +2 -2
  37. package/dist/memory-recall.d.ts.map +1 -1
  38. package/dist/memory-recall.js +3 -3
  39. package/dist/memory-recall.js.map +1 -1
  40. package/dist/modules/base.d.ts +25 -0
  41. package/dist/modules/base.d.ts.map +1 -0
  42. package/dist/{recipes → modules}/base.js +16 -11
  43. package/dist/modules/base.js.map +1 -0
  44. package/dist/modules/catalog.d.ts +12 -0
  45. package/dist/modules/catalog.d.ts.map +1 -0
  46. package/dist/modules/catalog.js +412 -0
  47. package/dist/modules/catalog.js.map +1 -0
  48. package/dist/modules/index.d.ts +8 -0
  49. package/dist/modules/index.d.ts.map +1 -0
  50. package/dist/modules/index.js +5 -0
  51. package/dist/modules/index.js.map +1 -0
  52. package/dist/modules/known-tools.d.ts +44 -0
  53. package/dist/modules/known-tools.d.ts.map +1 -0
  54. package/dist/modules/known-tools.js +88 -0
  55. package/dist/modules/known-tools.js.map +1 -0
  56. package/dist/modules/types.d.ts +73 -0
  57. package/dist/modules/types.d.ts.map +1 -0
  58. package/dist/{recipes → modules}/types.js +3 -3
  59. package/dist/{recipes → modules}/types.js.map +1 -1
  60. package/dist/posted-message-index.d.ts +2 -2
  61. package/dist/posted-message-index.js +2 -2
  62. package/dist/wizard/answers.d.ts +85 -0
  63. package/dist/wizard/answers.d.ts.map +1 -0
  64. package/dist/wizard/answers.js +231 -0
  65. package/dist/wizard/answers.js.map +1 -0
  66. package/dist/wizard/from-flags.d.ts +26 -0
  67. package/dist/wizard/from-flags.d.ts.map +1 -0
  68. package/dist/wizard/from-flags.js +44 -0
  69. package/dist/wizard/from-flags.js.map +1 -0
  70. package/dist/wizard/index.d.ts +11 -0
  71. package/dist/wizard/index.d.ts.map +1 -0
  72. package/dist/wizard/index.js +6 -0
  73. package/dist/wizard/index.js.map +1 -0
  74. package/dist/wizard/presets.d.ts +40 -0
  75. package/dist/wizard/presets.d.ts.map +1 -0
  76. package/dist/wizard/presets.js +85 -0
  77. package/dist/wizard/presets.js.map +1 -0
  78. package/dist/wizard/prompts.d.ts +52 -0
  79. package/dist/wizard/prompts.d.ts.map +1 -0
  80. package/dist/wizard/prompts.js +141 -0
  81. package/dist/wizard/prompts.js.map +1 -0
  82. package/dist/wizard/run.d.ts +19 -0
  83. package/dist/wizard/run.d.ts.map +1 -0
  84. package/dist/wizard/run.js +345 -0
  85. package/dist/wizard/run.js.map +1 -0
  86. package/package.json +17 -16
  87. package/schema/mono-agent.config.schema.json +5 -3
  88. package/skills/mono-agent-composer/SKILL.md +7 -7
  89. package/skills/mono-agent-composer/references/config-blueprint.md +7 -7
  90. package/skills/mono-agent-composer/references/discovery-questions.md +8 -6
  91. package/skills/mono-agent-composer/references/feature-coverage.md +10 -8
  92. package/skills/mono-agent-composer/references/package-map.md +5 -5
  93. package/skills/mono-agent-composer/references/playbooks.md +22 -22
  94. package/skills/mono-agent-composer/references/validation.md +3 -3
  95. package/dist/recipes/base.d.ts +0 -15
  96. package/dist/recipes/base.d.ts.map +0 -1
  97. package/dist/recipes/base.js.map +0 -1
  98. package/dist/recipes/catalog.d.ts +0 -4
  99. package/dist/recipes/catalog.d.ts.map +0 -1
  100. package/dist/recipes/catalog.js +0 -525
  101. package/dist/recipes/catalog.js.map +0 -1
  102. package/dist/recipes/index.d.ts +0 -11
  103. package/dist/recipes/index.d.ts.map +0 -1
  104. package/dist/recipes/index.js +0 -14
  105. package/dist/recipes/index.js.map +0 -1
  106. package/dist/recipes/types.d.ts +0 -70
  107. package/dist/recipes/types.d.ts.map +0 -1
  108. package/dist/setup.d.ts +0 -29
  109. package/dist/setup.d.ts.map +0 -1
  110. package/dist/setup.js +0 -97
  111. package/dist/setup.js.map +0 -1
@@ -0,0 +1,44 @@
1
+ import { defaultAnswers } from "./answers.js";
2
+ import { findPreset } from "./presets.js";
3
+ /** Channels `mono-agent init --with <csv>` can switch on, by their short flag name. */
4
+ export const WITH_CHANNELS = ["telegram", "slack", "webhook", "openaiApi", "cron"];
5
+ /** True when `value` is a `--with` channel flag name. */
6
+ export function isWithChannel(value) {
7
+ return WITH_CHANNELS.includes(value);
8
+ }
9
+ /** `--with <channel>` flag → the capability-module id that enables it. */
10
+ const WITH_CHANNEL_MODULE_ID = {
11
+ telegram: "channel:telegram",
12
+ slack: "channel:slack",
13
+ webhook: "channel:webhook",
14
+ openaiApi: "channel:openai-api",
15
+ cron: "channel:cron",
16
+ };
17
+ /**
18
+ * Map the non-interactive `init` flags (and an optional preset) onto full wizard
19
+ * answers, running once through the single {@link defaultAnswers} path so
20
+ * `allowedTools` is recomputed from the final capability selection. A preset seeds
21
+ * the base answers (its partial, so it never pins tools); each explicit flag
22
+ * overrides that; `--with` channels are unioned onto the preset/default channels.
23
+ * The caller resolves an unknown `presetId` and errors before calling this.
24
+ */
25
+ export function answersFromCli(args) {
26
+ const basePartial = args.presetId === undefined
27
+ ? {}
28
+ : findPreset(args.presetId)?.answers ?? {};
29
+ const channels = new Set(basePartial.channels ?? defaultAnswers().channels);
30
+ for (const channel of args.withChannels ?? []) {
31
+ if (isWithChannel(channel)) {
32
+ channels.add(WITH_CHANNEL_MODULE_ID[channel]);
33
+ }
34
+ }
35
+ const memory = args.memory === undefined ? basePartial.memory : `memory:${args.memory}`;
36
+ return defaultAnswers({
37
+ ...basePartial,
38
+ ...(args.model === undefined ? {} : { model: args.model }),
39
+ ...(args.fallbackModels === undefined ? {} : { fallbackModels: args.fallbackModels }),
40
+ channels: [...channels],
41
+ ...(memory === undefined ? {} : { memory }),
42
+ });
43
+ }
44
+ //# sourceMappingURL=from-flags.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"from-flags.js","sourceRoot":"","sources":["../../src/wizard/from-flags.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAsB,MAAM,cAAc,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,uFAAuF;AACvF,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,CAAU,CAAC;AAG5F,yDAAyD;AACzD,MAAM,UAAU,aAAa,CAAC,KAAa;IACzC,OAAQ,aAAmC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC9D,CAAC;AAED,0EAA0E;AAC1E,MAAM,sBAAsB,GAAgC;IAC1D,QAAQ,EAAE,kBAAkB;IAC5B,KAAK,EAAE,eAAe;IACtB,OAAO,EAAE,iBAAiB;IAC1B,SAAS,EAAE,oBAAoB;IAC/B,IAAI,EAAE,cAAc;CACrB,CAAC;AAaF;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc,CAAC,IAAwB;IACrD,MAAM,WAAW,GAA2B,IAAI,CAAC,QAAQ,KAAK,SAAS;QACrE,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,OAAO,IAAI,EAAE,CAAC;IAE7C,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAS,WAAW,CAAC,QAAQ,IAAI,cAAc,EAAE,CAAC,QAAQ,CAAC,CAAC;IACpF,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,YAAY,IAAI,EAAE,EAAE,CAAC;QAC9C,IAAI,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3B,QAAQ,CAAC,GAAG,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,MAAM,EAAE,CAAC;IAExF,OAAO,cAAc,CAAC;QACpB,GAAG,WAAW;QACd,GAAG,CAAC,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;QAC1D,GAAG,CAAC,IAAI,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC;QACrF,QAAQ,EAAE,CAAC,GAAG,QAAQ,CAAC;QACvB,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC;KAC5C,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,11 @@
1
+ export type { ComposeContext, SecretChecklistItem, WizardAnswers, WizardPlan, } from "./answers.js";
2
+ export { alwaysOnTools, composeWizardPlan, defaultAnswers, recommendedToolSelection } from "./answers.js";
3
+ export type { WizardPreset } from "./presets.js";
4
+ export { findPreset, PRESET_CATALOG, presetAnswers, presetIds, RECIPE_TO_PRESET } from "./presets.js";
5
+ export type { AnswersFromCliArgs, WithChannel } from "./from-flags.js";
6
+ export { answersFromCli, isWithChannel, WITH_CHANNELS } from "./from-flags.js";
7
+ export type { WizardSelectOption } from "./prompts.js";
8
+ export { channelSelectOptions, guard, memorySelectOptions, modelSelectOptions, presetSelectOptions, toolMultiselectOptions, WizardCancelled, } from "./prompts.js";
9
+ export type { WizardOutcome } from "./run.js";
10
+ export { runInitWizard } from "./run.js";
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/wizard/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,cAAc,EACd,mBAAmB,EACnB,aAAa,EACb,UAAU,GACX,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,cAAc,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AAE1G,YAAY,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,aAAa,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEtG,YAAY,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAE/E,YAAY,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EACL,oBAAoB,EACpB,KAAK,EACL,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,EACnB,sBAAsB,EACtB,eAAe,GAChB,MAAM,cAAc,CAAC;AAEtB,YAAY,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC"}
@@ -0,0 +1,6 @@
1
+ export { alwaysOnTools, composeWizardPlan, defaultAnswers, recommendedToolSelection } from "./answers.js";
2
+ export { findPreset, PRESET_CATALOG, presetAnswers, presetIds, RECIPE_TO_PRESET } from "./presets.js";
3
+ export { answersFromCli, isWithChannel, WITH_CHANNELS } from "./from-flags.js";
4
+ export { channelSelectOptions, guard, memorySelectOptions, modelSelectOptions, presetSelectOptions, toolMultiselectOptions, WizardCancelled, } from "./prompts.js";
5
+ export { runInitWizard } from "./run.js";
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/wizard/index.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,cAAc,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AAG1G,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,aAAa,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAGtG,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAG/E,OAAO,EACL,oBAAoB,EACpB,KAAK,EACL,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,EACnB,sBAAsB,EACtB,eAAe,GAChB,MAAM,cAAc,CAAC;AAGtB,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC"}
@@ -0,0 +1,40 @@
1
+ import { type WizardAnswers } from "./answers.js";
2
+ /**
3
+ * A saved answer-set the wizard can start from: the opinionated blueprints that
4
+ * replace the old recipes. A preset is only a `Partial<WizardAnswers>` — the
5
+ * composer's {@link defaultAnswers} fills the rest and recomputes `allowedTools`,
6
+ * so there is still exactly one config-generation path.
7
+ */
8
+ export interface WizardPreset {
9
+ readonly id: string;
10
+ readonly title: string;
11
+ readonly description: string;
12
+ readonly riskLevel: "low" | "medium" | "high";
13
+ /**
14
+ * The `docs/playbooks/<file>` this preset mirrors. Parity-checked by
15
+ * `src/__tests__/presets-docs-parity.test.ts`, which asserts the file exists.
16
+ */
17
+ readonly playbook?: string;
18
+ readonly answers: Partial<WizardAnswers>;
19
+ /** The recipe ids this preset supersedes, for the Task 4 cutover audit. */
20
+ readonly replacesRecipes?: readonly string[];
21
+ }
22
+ /**
23
+ * The six starter presets, in wizard-presentation order. Each maps to an existing
24
+ * playbook and records the recipes it replaces so the Task 4 cutover stays honest.
25
+ */
26
+ export declare const PRESET_CATALOG: readonly WizardPreset[];
27
+ /** Look up a preset by id, or `undefined` when unknown. */
28
+ export declare function findPreset(id: string): WizardPreset | undefined;
29
+ /** Every preset id, in catalog order. */
30
+ export declare function presetIds(): readonly string[];
31
+ /** Resolve a preset to full wizard answers via the single {@link defaultAnswers} path. */
32
+ export declare function presetAnswers(preset: WizardPreset): WizardAnswers;
33
+ /**
34
+ * Former recipe id → the preset that now supersedes it, built from each preset's
35
+ * `replacesRecipes`. Powers the deprecated `--recipe <id>` alias on `init`/`validate`:
36
+ * a mapped id resolves to its preset (with a deprecation notice); an unmapped id is
37
+ * treated as a retired recipe.
38
+ */
39
+ export declare const RECIPE_TO_PRESET: ReadonlyMap<string, WizardPreset>;
40
+ //# sourceMappingURL=presets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"presets.d.ts","sourceRoot":"","sources":["../../src/wizard/presets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AAElE;;;;;GAKG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC9C;;;OAGG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IACzC,2EAA2E;IAC3E,QAAQ,CAAC,eAAe,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC9C;AAED;;;GAGG;AACH,eAAO,MAAM,cAAc,EAAE,SAAS,YAAY,EA4DjD,CAAC;AAEF,2DAA2D;AAC3D,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAE/D;AAED,yCAAyC;AACzC,wBAAgB,SAAS,IAAI,SAAS,MAAM,EAAE,CAE7C;AAED,0FAA0F;AAC1F,wBAAgB,aAAa,CAAC,MAAM,EAAE,YAAY,GAAG,aAAa,CAEjE;AAED;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,EAAE,WAAW,CAAC,MAAM,EAAE,YAAY,CAI9D,CAAC"}
@@ -0,0 +1,85 @@
1
+ import { defaultAnswers } from "./answers.js";
2
+ /**
3
+ * The six starter presets, in wizard-presentation order. Each maps to an existing
4
+ * playbook and records the recipes it replaces so the Task 4 cutover stays honest.
5
+ */
6
+ export const PRESET_CATALOG = [
7
+ {
8
+ id: "starter",
9
+ title: "Starter (webhook smoke agent)",
10
+ description: "Webhook loopback, no credentials, no memory — the lowest-friction smoke agent.",
11
+ riskLevel: "low",
12
+ playbook: "webhook-automation-sync-async.md",
13
+ answers: {},
14
+ replacesRecipes: ["minimal-webhook"],
15
+ },
16
+ {
17
+ id: "telegram-assistant",
18
+ title: "Telegram assistant (BuJo memory)",
19
+ description: "A Telegram bot with daily-log capture + semantic recall.",
20
+ riskLevel: "medium",
21
+ playbook: "telegram-personal-assistant-bujo.md",
22
+ answers: { channels: ["channel:telegram"], memory: "memory:bujo" },
23
+ replacesRecipes: ["personal-telegram-bujo"],
24
+ },
25
+ {
26
+ id: "telegram-supermemory",
27
+ title: "Telegram assistant (Supermemory)",
28
+ description: "A Telegram bot backed by an external Supermemory server.",
29
+ riskLevel: "medium",
30
+ playbook: "telegram-supermemory-memory.md",
31
+ answers: { channels: ["channel:telegram"], memory: "memory:supermemory" },
32
+ replacesRecipes: ["personal-telegram-supermemory"],
33
+ },
34
+ {
35
+ id: "slack-bot",
36
+ title: "Slack team bot",
37
+ description: "A Socket-Mode Slack bot scoped to a channel allowlist, with the send tool.",
38
+ riskLevel: "medium",
39
+ playbook: "slack-team-bot-mcp-tools.md",
40
+ answers: { channels: ["channel:slack"] },
41
+ replacesRecipes: ["slack-team-bot"],
42
+ },
43
+ {
44
+ id: "local-private",
45
+ title: "Local private agent (Ollama)",
46
+ description: "Runs entirely on a local Ollama provider with journal memory — no remote calls. Light 8B default for a fast first turn.",
47
+ riskLevel: "low",
48
+ playbook: "local-only-ollama-agent.md",
49
+ answers: {
50
+ model: "pi:ollama:llama3.1:8b",
51
+ channels: ["channel:webhook"],
52
+ memory: "memory:journal",
53
+ },
54
+ replacesRecipes: ["local-ollama-private"],
55
+ },
56
+ {
57
+ id: "code-sandbox",
58
+ title: "Sandboxed code agent",
59
+ description: "Native srt sandbox with workspace-only FS and code tools; fails closed without srt.",
60
+ riskLevel: "medium",
61
+ playbook: "sandboxed-code-agent.md",
62
+ answers: { channels: ["channel:webhook"], sandbox: true },
63
+ replacesRecipes: ["sandboxed-code-agent"],
64
+ },
65
+ ];
66
+ /** Look up a preset by id, or `undefined` when unknown. */
67
+ export function findPreset(id) {
68
+ return PRESET_CATALOG.find((preset) => preset.id === id);
69
+ }
70
+ /** Every preset id, in catalog order. */
71
+ export function presetIds() {
72
+ return PRESET_CATALOG.map((preset) => preset.id);
73
+ }
74
+ /** Resolve a preset to full wizard answers via the single {@link defaultAnswers} path. */
75
+ export function presetAnswers(preset) {
76
+ return defaultAnswers(preset.answers);
77
+ }
78
+ /**
79
+ * Former recipe id → the preset that now supersedes it, built from each preset's
80
+ * `replacesRecipes`. Powers the deprecated `--recipe <id>` alias on `init`/`validate`:
81
+ * a mapped id resolves to its preset (with a deprecation notice); an unmapped id is
82
+ * treated as a retired recipe.
83
+ */
84
+ export const RECIPE_TO_PRESET = new Map(PRESET_CATALOG.flatMap((preset) => (preset.replacesRecipes ?? []).map((recipeId) => [recipeId, preset])));
85
+ //# sourceMappingURL=presets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"presets.js","sourceRoot":"","sources":["../../src/wizard/presets.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * One `@clack/prompts` `select`/`multiselect` option. `value` is the machine key
3
+ * the wizard maps back onto {@link WizardAnswers}; `label`/`hint` are display-only.
4
+ */
5
+ export interface WizardSelectOption {
6
+ readonly value: string;
7
+ readonly label: string;
8
+ readonly hint?: string;
9
+ }
10
+ /**
11
+ * Thrown when a clack prompt returns its cancel symbol (Ctrl-C / Esc). The wizard
12
+ * catches it once at the top and turns it into a clean `p.cancel` — nothing is
13
+ * ever written, because {@link runInitWizard} only collects answers.
14
+ */
15
+ export declare class WizardCancelled extends Error {
16
+ constructor();
17
+ }
18
+ /**
19
+ * Unwrap a clack prompt result: return the value, or throw {@link WizardCancelled}
20
+ * when the user cancelled (clack signals cancel with a sentinel symbol). Every
21
+ * prompt result must pass through here so a single top-level catch handles cancel.
22
+ */
23
+ export declare function guard<T>(value: T | symbol): T;
24
+ /**
25
+ * Channel options for the "how will you talk to this agent?" multiselect: every
26
+ * channel module in catalog order (webhook first), value = module id.
27
+ */
28
+ export declare function channelSelectOptions(): WizardSelectOption[];
29
+ /**
30
+ * Memory options: a leading "None (stateless)" whose empty-string value maps to
31
+ * `memory: undefined`, then every memory module in catalog order.
32
+ */
33
+ export declare function memorySelectOptions(): WizardSelectOption[];
34
+ /**
35
+ * A short curated model menu plus an `__other__` escape hatch that prompts for a
36
+ * free-form `provider:model` reference.
37
+ */
38
+ export declare function modelSelectOptions(): WizardSelectOption[];
39
+ /**
40
+ * The "choose specific" tools multiselect: all eight built-ins first (with per-tool
41
+ * hints), then the adapter send tools contributed by the selected channels (deduped,
42
+ * in channel order, each hint naming its channel + action), then the channel-agnostic
43
+ * `AskUser`. Value = tool name — the exact `tools.allowedTools` entry. The always-on
44
+ * tools (`MemoryRecall`/`ReadSkill`/MCP) are auto-provisioned and never listed here.
45
+ */
46
+ export declare function toolMultiselectOptions(selectedChannelIds: readonly string[]): WizardSelectOption[];
47
+ /**
48
+ * The "start from…" menu: every preset (labelled with its risk + description),
49
+ * ending with a "Custom" escape hatch that walks the full step-by-step flow.
50
+ */
51
+ export declare function presetSelectOptions(): WizardSelectOption[];
52
+ //# sourceMappingURL=prompts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../src/wizard/prompts.ts"],"names":[],"mappings":"AAMA;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;GAIG;AACH,qBAAa,eAAgB,SAAQ,KAAK;;CAKzC;AAED;;;;GAIG;AACH,wBAAgB,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,MAAM,GAAG,CAAC,CAK7C;AAqCD;;;GAGG;AACH,wBAAgB,oBAAoB,IAAI,kBAAkB,EAAE,CAM3D;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,kBAAkB,EAAE,CAS1D;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,kBAAkB,EAAE,CAOzD;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,kBAAkB,EAAE,SAAS,MAAM,EAAE,GAAG,kBAAkB,EAAE,CA0BlG;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,kBAAkB,EAAE,CAS1D"}
@@ -0,0 +1,141 @@
1
+ import * as p from "@clack/prompts";
2
+ import { findModule, modulesByKind } from "../modules/catalog.js";
3
+ import { ADAPTER_SEND_TOOL_NAMES, BUILTIN_TOOL_NAMES } from "../modules/known-tools.js";
4
+ import { PRESET_CATALOG } from "./presets.js";
5
+ /**
6
+ * Thrown when a clack prompt returns its cancel symbol (Ctrl-C / Esc). The wizard
7
+ * catches it once at the top and turns it into a clean `p.cancel` — nothing is
8
+ * ever written, because {@link runInitWizard} only collects answers.
9
+ */
10
+ export class WizardCancelled extends Error {
11
+ constructor() {
12
+ super("Wizard cancelled.");
13
+ this.name = "WizardCancelled";
14
+ }
15
+ }
16
+ /**
17
+ * Unwrap a clack prompt result: return the value, or throw {@link WizardCancelled}
18
+ * when the user cancelled (clack signals cancel with a sentinel symbol). Every
19
+ * prompt result must pass through here so a single top-level catch handles cancel.
20
+ */
21
+ export function guard(value) {
22
+ if (p.isCancel(value)) {
23
+ throw new WizardCancelled();
24
+ }
25
+ return value;
26
+ }
27
+ /** Human hints for the built-in tools, shown beside each tool in the multiselect. */
28
+ const BUILTIN_TOOL_HINTS = {
29
+ Read: "read files",
30
+ Write: "create/overwrite files",
31
+ Edit: "edit files",
32
+ Glob: "find files by pattern",
33
+ Grep: "search file contents",
34
+ Bash: "run shell commands (pair with the sandbox)",
35
+ WebFetch: "fetch a URL",
36
+ WebSearch: "search the web",
37
+ };
38
+ const ADAPTER_SEND_TOOL_SET = new Set(ADAPTER_SEND_TOOL_NAMES);
39
+ /**
40
+ * The action each adapter send tool performs; the owning channel's title is appended
41
+ * so the hint reads e.g. `proactive send (Telegram)`. Keyed by PascalCase tool name.
42
+ */
43
+ const ADAPTER_SEND_TOOL_ACTIONS = {
44
+ SlackSendMessage: "proactive send",
45
+ TelegramSendMessage: "proactive send",
46
+ TelegramAskButtons: "ask via tappable buttons, non-blocking",
47
+ TelegramSendFile: "send a document or photo",
48
+ };
49
+ /**
50
+ * The channel-agnostic interaction tool. Always offered (even for a restricted agent)
51
+ * because it asks the human through whichever channel is live and waits for the reply.
52
+ */
53
+ const ASK_USER_OPTION = {
54
+ value: "AskUser",
55
+ label: "AskUser",
56
+ hint: "ask the human and wait for a typed reply (any channel)",
57
+ };
58
+ /**
59
+ * Channel options for the "how will you talk to this agent?" multiselect: every
60
+ * channel module in catalog order (webhook first), value = module id.
61
+ */
62
+ export function channelSelectOptions() {
63
+ return modulesByKind("channel").map((module) => ({
64
+ value: module.id,
65
+ label: module.title,
66
+ hint: module.summary,
67
+ }));
68
+ }
69
+ /**
70
+ * Memory options: a leading "None (stateless)" whose empty-string value maps to
71
+ * `memory: undefined`, then every memory module in catalog order.
72
+ */
73
+ export function memorySelectOptions() {
74
+ return [
75
+ { value: "", label: "None (stateless)", hint: "no cross-conversation memory" },
76
+ ...modulesByKind("memory").map((module) => ({
77
+ value: module.id,
78
+ label: module.title,
79
+ hint: module.summary,
80
+ })),
81
+ ];
82
+ }
83
+ /**
84
+ * A short curated model menu plus an `__other__` escape hatch that prompts for a
85
+ * free-form `provider:model` reference.
86
+ */
87
+ export function modelSelectOptions() {
88
+ return [
89
+ { value: "claude:claude-sonnet-4-6", label: "Claude Sonnet 4.6", hint: "default" },
90
+ { value: "codex:gpt-5.5", label: "Codex GPT-5.5" },
91
+ { value: "pi:ollama:llama3.1:8b", label: "Ollama llama3.1:8b", hint: "fully local" },
92
+ { value: "__other__", label: "Other…", hint: "type a provider:model reference" },
93
+ ];
94
+ }
95
+ /**
96
+ * The "choose specific" tools multiselect: all eight built-ins first (with per-tool
97
+ * hints), then the adapter send tools contributed by the selected channels (deduped,
98
+ * in channel order, each hint naming its channel + action), then the channel-agnostic
99
+ * `AskUser`. Value = tool name — the exact `tools.allowedTools` entry. The always-on
100
+ * tools (`MemoryRecall`/`ReadSkill`/MCP) are auto-provisioned and never listed here.
101
+ */
102
+ export function toolMultiselectOptions(selectedChannelIds) {
103
+ const options = BUILTIN_TOOL_NAMES.map((name) => ({
104
+ value: name,
105
+ label: name,
106
+ ...(BUILTIN_TOOL_HINTS[name] === undefined ? {} : { hint: BUILTIN_TOOL_HINTS[name] }),
107
+ }));
108
+ const seen = new Set(BUILTIN_TOOL_NAMES);
109
+ for (const channelId of selectedChannelIds) {
110
+ const module = findModule(channelId);
111
+ if (module === undefined) {
112
+ continue;
113
+ }
114
+ for (const tool of module.recommendedTools ?? []) {
115
+ // `AskUser` is channel-agnostic and appended once at the end, not per channel.
116
+ if (!ADAPTER_SEND_TOOL_SET.has(tool) || seen.has(tool) || tool === "AskUser") {
117
+ continue;
118
+ }
119
+ seen.add(tool);
120
+ const action = ADAPTER_SEND_TOOL_ACTIONS[tool] ?? "channel action";
121
+ options.push({ value: tool, label: tool, hint: `${action} (${module.title})` });
122
+ }
123
+ }
124
+ options.push(ASK_USER_OPTION);
125
+ return options;
126
+ }
127
+ /**
128
+ * The "start from…" menu: every preset (labelled with its risk + description),
129
+ * ending with a "Custom" escape hatch that walks the full step-by-step flow.
130
+ */
131
+ export function presetSelectOptions() {
132
+ return [
133
+ ...PRESET_CATALOG.map((preset) => ({
134
+ value: preset.id,
135
+ label: preset.title,
136
+ hint: `${preset.riskLevel} · ${preset.description}`,
137
+ })),
138
+ { value: "__custom__", label: "Custom — pick capabilities yourself" },
139
+ ];
140
+ }
141
+ //# sourceMappingURL=prompts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/wizard/prompts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import { type WizardAnswers } from "./answers.js";
2
+ /** The outcome of a wizard run: collected answers, or a clean cancellation. */
3
+ export type WizardOutcome = {
4
+ readonly status: "answers";
5
+ readonly answers: WizardAnswers;
6
+ } | {
7
+ readonly status: "cancelled";
8
+ };
9
+ /**
10
+ * The interactive `init` wizard: a colourful, step-by-step flow that COLLECTS a
11
+ * {@link WizardAnswers} and hands it back — it never writes anything. The caller
12
+ * (`runInit`) does the scaffold/validate/print. Ctrl-C at any prompt unwinds
13
+ * through {@link WizardCancelled} to a single clean `p.cancel`, so a cancelled
14
+ * wizard leaves the folder untouched.
15
+ */
16
+ export declare function runInitWizard(ctx: {
17
+ cwd: string;
18
+ }): Promise<WizardOutcome>;
19
+ //# sourceMappingURL=run.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/wizard/run.ts"],"names":[],"mappings":"AAOA,OAAO,EAKL,KAAK,aAAa,EACnB,MAAM,cAAc,CAAC;AAYtB,+EAA+E;AAC/E,MAAM,MAAM,aAAa,GACrB;IAAE,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAA;CAAE,GAC/D;IAAE,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAA;CAAE,CAAC;AAqBrC;;;;;;GAMG;AACH,wBAAsB,aAAa,CAAC,GAAG,EAAE;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,aAAa,CAAC,CAWhF"}