@xopcai/xopc 0.0.88 → 0.0.90
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/README.md +8 -1
- package/README.zh-CN.md +8 -1
- package/dist/browser-ext/manifest.json +1 -1
- package/dist/extensions/telegram/xopc.extension.json +1 -1
- package/dist/gateway/static/root/assets/agents-cPvvYLXo.js +222 -0
- package/dist/gateway/static/root/assets/apps-page-Bk1_P5FJ.js +1 -0
- package/dist/gateway/static/root/assets/channels-settings-CZoeQwHz.js +1 -0
- package/dist/gateway/static/root/assets/{channels-status-swr-DIsl75Y3.js → channels-status-swr-BrtH2VzC.js} +1 -1
- package/dist/gateway/static/root/assets/circle-check-C23XjkUj.js +1 -0
- package/dist/gateway/static/root/assets/cron-api-CyqbgfHM.js +1 -0
- package/dist/gateway/static/root/assets/cron-dreaming-jobs-Ip703-qM.js +2 -0
- package/dist/gateway/static/root/assets/cron-page-BpLdiQN8.js +1 -0
- package/dist/gateway/static/root/assets/dist-BpAiK86n.js +1 -0
- package/dist/gateway/static/root/assets/{extension-debug-page-BVJohZoZ.js → extension-debug-page-D6Ak0STa.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-page-BT2tmElC.js → extension-page-Q0P3d6DW.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-settings-page-BSS47c2j.js → extension-settings-page-CL55LwU_.js} +1 -1
- package/dist/gateway/static/root/assets/eye-DAfL1U7M.js +1 -0
- package/dist/gateway/static/root/assets/{fetch-BaFNUtkE.js → fetch-Dqa9iTWl.js} +1 -1
- package/dist/gateway/static/root/assets/{field-primitives-QwYEq6Hz.js → field-primitives-HUR6JElP.js} +1 -1
- package/dist/gateway/static/root/assets/{heartbeat-config-api-BVSidEDJ.js → heartbeat-config-api-DusckjUX.js} +1 -1
- package/dist/gateway/static/root/assets/{index-qNrVJp-y.js → index-BYcGfwcE.js} +97 -97
- package/dist/gateway/static/root/assets/index-V7MQ7834.css +1 -0
- package/dist/gateway/static/root/assets/{logs-page-DDonPVLn.js → logs-page-_HcZ2fgK.js} +1 -1
- package/dist/gateway/static/root/assets/sessions-page-iezSMjho.js +1 -0
- package/dist/gateway/static/root/assets/{settings-form-section-B8N3A3Zo.js → settings-form-section-a0qGVOlr.js} +1 -1
- package/dist/gateway/static/root/assets/settings-page-C9_nYQwM.js +3 -0
- package/dist/gateway/static/root/assets/{share-preview-page-Q7KqkO-u.js → share-preview-page-DExl7CJy.js} +1 -1
- package/dist/gateway/static/root/assets/skills-page-BlgGD93t.js +2 -0
- package/dist/gateway/static/root/assets/{theme-store-BbRc5ugR.js → theme-store-C0Ehmdo5.js} +1 -1
- package/dist/gateway/static/root/assets/url-fxyYANfA.js +3 -0
- package/dist/gateway/static/root/assets/{utils-CxDGduqK.js → utils-DRQryzdn.js} +1 -1
- package/dist/gateway/static/root/assets/voice-api-key-field-D0viACE2.js +1 -0
- package/dist/gateway/static/root/assets/workflow-page.utils-DnG8JBhV.js +1 -0
- package/dist/gateway/static/root/assets/workflows-page-BvMobnJP.js +27 -0
- package/dist/gateway/static/root/index.html +7 -6
- package/dist/package.js +1 -1
- package/dist/src/agent/agent-manager.d.ts +2 -0
- package/dist/src/agent/agent-manager.js +1 -0
- package/dist/src/agent/agent-manager.js.map +1 -1
- package/dist/src/agent/service.js +2 -1
- package/dist/src/agent/service.js.map +1 -1
- package/dist/src/agent/service.types.d.ts +3 -1
- package/dist/src/agent/skills/marketplace/adapters/skillhub/adapter.js +20 -18
- package/dist/src/agent/skills/marketplace/adapters/skillhub/adapter.js.map +1 -1
- package/dist/src/agent/tools/cronjob-tool.d.ts +6 -0
- package/dist/src/agent/tools/cronjob-tool.js +76 -10
- package/dist/src/agent/tools/cronjob-tool.js.map +1 -1
- package/dist/src/agent/tools/edit.d.ts +5 -1
- package/dist/src/agent/tools/edit.js +7 -5
- package/dist/src/agent/tools/edit.js.map +1 -1
- package/dist/src/agent/tools/factory.d.ts +3 -0
- package/dist/src/agent/tools/factory.js +4 -25
- package/dist/src/agent/tools/factory.js.map +1 -1
- package/dist/src/agent/tools/workflow-tool.d.ts +6 -28
- package/dist/src/agent/tools/workflow-tool.js +60 -260
- package/dist/src/agent/tools/workflow-tool.js.map +1 -1
- package/dist/src/agent/tools/write.d.ts +5 -1
- package/dist/src/agent/tools/write.js +7 -5
- package/dist/src/agent/tools/write.js.map +1 -1
- package/dist/src/agent/workflow/agent-progress.js +2 -0
- package/dist/src/agent/workflow/agent-progress.js.map +1 -1
- package/dist/src/agent/workflow/builtins/client-proposal.d.ts +12 -0
- package/dist/src/agent/workflow/builtins/client-proposal.js +155 -0
- package/dist/src/agent/workflow/builtins/client-proposal.js.map +1 -0
- package/dist/src/agent/workflow/builtins/competitor-scan.d.ts +12 -0
- package/dist/src/agent/workflow/builtins/competitor-scan.js +150 -0
- package/dist/src/agent/workflow/builtins/competitor-scan.js.map +1 -0
- package/dist/src/agent/workflow/builtins/content-draft.d.ts +13 -0
- package/dist/src/agent/workflow/builtins/content-draft.js +146 -0
- package/dist/src/agent/workflow/builtins/content-draft.js.map +1 -0
- package/dist/src/agent/workflow/builtins/content-repurpose.d.ts +11 -0
- package/dist/src/agent/workflow/builtins/content-repurpose.js +137 -0
- package/dist/src/agent/workflow/builtins/content-repurpose.js.map +1 -0
- package/dist/src/agent/workflow/builtins/decision-compare.d.ts +13 -0
- package/dist/src/agent/workflow/builtins/decision-compare.js +173 -0
- package/dist/src/agent/workflow/builtins/decision-compare.js.map +1 -0
- package/dist/src/agent/workflow/builtins/inbox-triage.d.ts +11 -0
- package/dist/src/agent/workflow/builtins/inbox-triage.js +148 -0
- package/dist/src/agent/workflow/builtins/inbox-triage.js.map +1 -0
- package/dist/src/agent/workflow/builtins/index.d.ts +10 -1
- package/dist/src/agent/workflow/builtins/index.js +46 -1
- package/dist/src/agent/workflow/builtins/index.js.map +1 -1
- package/dist/src/agent/workflow/builtins/meeting-prep.d.ts +12 -0
- package/dist/src/agent/workflow/builtins/meeting-prep.js +144 -0
- package/dist/src/agent/workflow/builtins/meeting-prep.js.map +1 -0
- package/dist/src/agent/workflow/builtins/offer-design.d.ts +12 -0
- package/dist/src/agent/workflow/builtins/offer-design.js +161 -0
- package/dist/src/agent/workflow/builtins/offer-design.js.map +1 -0
- package/dist/src/agent/workflow/builtins/weekly-review.d.ts +12 -0
- package/dist/src/agent/workflow/builtins/weekly-review.js +131 -0
- package/dist/src/agent/workflow/builtins/weekly-review.js.map +1 -0
- package/dist/src/agent/workflow/step-labels.js +2 -2
- package/dist/src/agent/workflow/step-labels.js.map +1 -1
- package/dist/src/agent/workflow/subagent-runner.js +3 -1
- package/dist/src/agent/workflow/subagent-runner.js.map +1 -1
- package/dist/src/agent/workflow/types.d.ts +4 -0
- package/dist/src/agent/workflow/workflow-child-tools.d.ts +4 -0
- package/dist/src/agent/workflow/workflow-child-tools.js +21 -0
- package/dist/src/agent/workflow/workflow-child-tools.js.map +1 -0
- package/dist/src/auth/credentials.d.ts +14 -2
- package/dist/src/auth/credentials.js +38 -13
- package/dist/src/auth/credentials.js.map +1 -1
- package/dist/src/auth/oauth/types.d.ts +16 -0
- package/dist/src/chat-commands/agent-edit.d.ts +4 -0
- package/dist/src/chat-commands/agent-edit.js +136 -0
- package/dist/src/chat-commands/agent-edit.js.map +1 -0
- package/dist/src/chat-commands/index.d.ts +1 -0
- package/dist/src/chat-commands/index.js +3 -1
- package/dist/src/chat-commands/index.js.map +1 -1
- package/dist/src/cli/bin.js +2 -0
- package/dist/src/cli/bin.js.map +1 -1
- package/dist/src/cli/commands/auth.js +6 -0
- package/dist/src/cli/commands/auth.js.map +1 -1
- package/dist/src/cli/commands/cron.js +42 -3
- package/dist/src/cli/commands/cron.js.map +1 -1
- package/dist/src/cli/commands/doctor/checks/session-integrity.js +79 -56
- package/dist/src/cli/commands/doctor/checks/session-integrity.js.map +1 -1
- package/dist/src/cli/commands/onboard/model.js +6 -0
- package/dist/src/cli/commands/onboard/model.js.map +1 -1
- package/dist/src/cli/commands/update.js +86 -79
- package/dist/src/cli/commands/update.js.map +1 -1
- package/dist/src/commands/agents.config.d.ts +3 -2
- package/dist/src/commands/agents.config.js +5 -2
- package/dist/src/commands/agents.config.js.map +1 -1
- package/dist/src/config/agent-typed-models.d.ts +2 -7
- package/dist/src/config/agent-typed-models.js +3 -14
- package/dist/src/config/agent-typed-models.js.map +1 -1
- package/dist/src/config/localized-text.d.ts +6 -0
- package/dist/src/config/localized-text.js +42 -0
- package/dist/src/config/localized-text.js.map +1 -0
- package/dist/src/config/models-json.d.ts +6 -6
- package/dist/src/config/schema.d.ts +6 -21
- package/dist/src/config/schema.js +4 -4
- package/dist/src/config/schema.js.map +1 -1
- package/dist/src/cron/executor.d.ts +4 -0
- package/dist/src/cron/executor.js +169 -5
- package/dist/src/cron/executor.js.map +1 -1
- package/dist/src/cron/job-content.js +2 -1
- package/dist/src/cron/job-content.js.map +1 -1
- package/dist/src/cron/types.d.ts +28 -1
- package/dist/src/cron/validation.d.ts +80 -0
- package/dist/src/cron/validation.js +30 -4
- package/dist/src/cron/validation.js.map +1 -1
- package/dist/src/cron/workflow-run-completion.d.ts +23 -0
- package/dist/src/cron/workflow-run-completion.js +72 -0
- package/dist/src/cron/workflow-run-completion.js.map +1 -0
- package/dist/src/extensions/update.d.ts +51 -0
- package/dist/src/extensions/update.js +260 -0
- package/dist/src/extensions/update.js.map +1 -0
- package/dist/src/gateway/agents-admin.d.ts +15 -8
- package/dist/src/gateway/agents-admin.js +77 -28
- package/dist/src/gateway/agents-admin.js.map +1 -1
- package/dist/src/gateway/gateway-workflow-host.types.d.ts +17 -0
- package/dist/src/gateway/gateway-workflow-host.types.js +1 -0
- package/dist/src/gateway/heartbeat/service.js +1 -1
- package/dist/src/gateway/hono/lib/config-payload.d.ts +5 -0
- package/dist/src/gateway/hono/lib/config-payload.js +2 -1
- package/dist/src/gateway/hono/lib/config-payload.js.map +1 -1
- package/dist/src/gateway/hono/middleware/auth.d.ts +2 -0
- package/dist/src/gateway/hono/middleware/auth.js +12 -7
- package/dist/src/gateway/hono/middleware/auth.js.map +1 -1
- package/dist/src/gateway/hono/oauth-async.js +40 -15
- package/dist/src/gateway/hono/oauth-async.js.map +1 -1
- package/dist/src/gateway/hono/oauth.js +31 -6
- package/dist/src/gateway/hono/oauth.js.map +1 -1
- package/dist/src/gateway/hono/routes/agents.js +55 -12
- package/dist/src/gateway/hono/routes/agents.js.map +1 -1
- package/dist/src/gateway/hono/routes/config-patch/agents.js +1 -1
- package/dist/src/gateway/hono/routes/models.js +11 -5
- package/dist/src/gateway/hono/routes/models.js.map +1 -1
- package/dist/src/gateway/hono/routes/update.js +55 -107
- package/dist/src/gateway/hono/routes/update.js.map +1 -1
- package/dist/src/gateway/hono/routes/workflows.js +72 -191
- package/dist/src/gateway/hono/routes/workflows.js.map +1 -1
- package/dist/src/gateway/server.js +2 -0
- package/dist/src/gateway/server.js.map +1 -1
- package/dist/src/gateway/service.d.ts +5 -0
- package/dist/src/gateway/service.js +24 -3
- package/dist/src/gateway/service.js.map +1 -1
- package/dist/src/heartbeat/index.js +1 -1
- package/dist/src/infra/brew.d.ts +4 -0
- package/dist/src/infra/brew.js +20 -0
- package/dist/src/infra/brew.js.map +1 -0
- package/dist/src/infra/package-json.d.ts +2 -0
- package/dist/src/infra/package-json.js +23 -0
- package/dist/src/infra/package-json.js.map +1 -0
- package/dist/src/infra/package-update-steps.d.ts +35 -0
- package/dist/src/infra/package-update-steps.js +304 -0
- package/dist/src/infra/package-update-steps.js.map +1 -0
- package/dist/src/infra/path-env.d.ts +11 -0
- package/dist/src/infra/path-env.js +90 -0
- package/dist/src/infra/path-env.js.map +1 -0
- package/dist/src/infra/path-prepend.d.ts +7 -0
- package/dist/src/infra/path-prepend.js +44 -0
- package/dist/src/infra/path-prepend.js.map +1 -0
- package/dist/src/infra/stable-node-path.d.ts +2 -0
- package/dist/src/infra/stable-node-path.js +28 -0
- package/dist/src/infra/stable-node-path.js.map +1 -0
- package/dist/src/infra/update-global.d.ts +30 -23
- package/dist/src/infra/update-global.js +113 -64
- package/dist/src/infra/update-global.js.map +1 -1
- package/dist/src/infra/update-log.d.ts +1 -0
- package/dist/src/infra/update-log.js +12 -0
- package/dist/src/infra/update-log.js.map +1 -0
- package/dist/src/infra/update-restart.d.ts +20 -0
- package/dist/src/infra/update-restart.js +165 -0
- package/dist/src/infra/update-restart.js.map +1 -0
- package/dist/src/infra/update-runner.d.ts +89 -1
- package/dist/src/infra/update-runner.js +604 -173
- package/dist/src/infra/update-runner.js.map +1 -1
- package/dist/src/infra/update-startup.d.ts +3 -0
- package/dist/src/infra/update-startup.js +8 -4
- package/dist/src/infra/update-startup.js.map +1 -1
- package/dist/src/providers/index.d.ts +8 -0
- package/dist/src/providers/index.js +51 -12
- package/dist/src/providers/index.js.map +1 -1
- package/dist/src/routing/resolve-route.d.ts +3 -1
- package/dist/src/routing/resolve-route.js.map +1 -1
- package/dist/src/session/store.d.ts +5 -3
- package/dist/src/session/store.js +66 -20
- package/dist/src/session/store.js.map +1 -1
- package/dist/src/share/site-share-config.d.ts +3 -2
- package/dist/src/share/site-share-config.js.map +1 -1
- package/dist/src/utils/logger/stats.d.ts +1 -1
- package/dist/src/workflows/domain/command.d.ts +2 -1
- package/dist/src/workflows/domain/definition-utils.d.ts +14 -0
- package/dist/src/workflows/domain/definition-utils.js +50 -0
- package/dist/src/workflows/domain/definition-utils.js.map +1 -0
- package/dist/src/workflows/domain/event.d.ts +3 -0
- package/dist/src/workflows/domain/index.d.ts +2 -0
- package/dist/src/workflows/domain/index.js +3 -1
- package/dist/src/workflows/domain/run.d.ts +60 -0
- package/dist/src/workflows/domain/run.js.map +1 -1
- package/dist/src/workflows/domain/validation.d.ts +19 -0
- package/dist/src/workflows/domain/validation.js +66 -0
- package/dist/src/workflows/domain/validation.js.map +1 -0
- package/dist/src/workflows/engine/projector.js +17 -0
- package/dist/src/workflows/engine/projector.js.map +1 -1
- package/dist/src/workflows/engine/workflow-engine.d.ts +2 -1
- package/dist/src/workflows/engine/workflow-engine.js +128 -0
- package/dist/src/workflows/engine/workflow-engine.js.map +1 -1
- package/dist/src/workflows/index.d.ts +4 -0
- package/dist/src/workflows/index.js +9 -2
- package/dist/src/workflows/service/run-view-to-snapshot.d.ts +4 -0
- package/dist/src/workflows/service/run-view-to-snapshot.js +63 -0
- package/dist/src/workflows/service/run-view-to-snapshot.js.map +1 -0
- package/dist/src/workflows/service/workflow-run-service.d.ts +37 -0
- package/dist/src/workflows/service/workflow-run-service.js +282 -0
- package/dist/src/workflows/service/workflow-run-service.js.map +1 -0
- package/dist/src/workflows/service/workflow-run-service.types.d.ts +47 -0
- package/dist/src/workflows/service/workflow-run-service.types.js +1 -0
- package/dist/src/workflows/service/workflow-session-bridge.d.ts +29 -0
- package/dist/src/workflows/service/workflow-session-bridge.js +177 -0
- package/dist/src/workflows/service/workflow-session-bridge.js.map +1 -0
- package/dist/src/workflows/service/workflow-session-key.d.ts +3 -0
- package/dist/src/workflows/service/workflow-session-key.js +21 -0
- package/dist/src/workflows/service/workflow-session-key.js.map +1 -0
- package/dist/src/workflows/store/run-store.js +1 -0
- package/dist/src/workflows/store/run-store.js.map +1 -1
- package/package.json +1 -1
- package/dist/gateway/static/root/assets/agents-CRxETUZx.js +0 -222
- package/dist/gateway/static/root/assets/apps-page-wKWf3l57.js +0 -1
- package/dist/gateway/static/root/assets/channels-settings-DDbqVNkx.js +0 -1
- package/dist/gateway/static/root/assets/copy-SxMW6Xpc.js +0 -1
- package/dist/gateway/static/root/assets/cron-api-N9hvuRrn.js +0 -1
- package/dist/gateway/static/root/assets/cron-dreaming-jobs-DueM3rBz.js +0 -2
- package/dist/gateway/static/root/assets/cron-page-tlNGNxhP.js +0 -1
- package/dist/gateway/static/root/assets/dist-CJwfHYvT.js +0 -1
- package/dist/gateway/static/root/assets/index-CqZzHNEg.css +0 -1
- package/dist/gateway/static/root/assets/sessions-page-DKt-Wmib.js +0 -1
- package/dist/gateway/static/root/assets/settings-page-DcJjvvw4.js +0 -3
- package/dist/gateway/static/root/assets/skills-page-DuJ4BTO3.js +0 -2
- package/dist/gateway/static/root/assets/url-D6jvVYIA.js +0 -7
- package/dist/gateway/static/root/assets/voice-api-key-field-CTyHz7L_.js +0 -1
- package/dist/gateway/static/root/assets/workflows-page-GacJ41Fv.js +0 -27
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
//#region src/agent/workflow/builtins/content-repurpose.ts
|
|
2
|
+
/**
|
|
3
|
+
* Built-in workflow: `content_repurpose`
|
|
4
|
+
*
|
|
5
|
+
* Repurpose one source piece into multi-platform formats — threads, LinkedIn,
|
|
6
|
+
* short video script, newsletter blurb. For personal-brand solopreneurs.
|
|
7
|
+
*
|
|
8
|
+
* Args:
|
|
9
|
+
* - source: original article, notes, or talking points
|
|
10
|
+
* - platforms: target platforms (optional)
|
|
11
|
+
*/
|
|
12
|
+
const CONTENT_REPURPOSE_SCRIPT = `export const meta = {
|
|
13
|
+
name: 'content_repurpose',
|
|
14
|
+
description: 'Repurpose one source into platform-specific content (threads, posts, scripts, newsletter).',
|
|
15
|
+
whenToUse: 'User has existing content and wants multi-platform distribution without rewriting from scratch.',
|
|
16
|
+
examplePrompts: [
|
|
17
|
+
{ field: 'source', text: '2000-word blog post on building a one-person AI business' },
|
|
18
|
+
{ field: 'platforms', text: 'X thread, LinkedIn, 60s video script, newsletter teaser' },
|
|
19
|
+
],
|
|
20
|
+
i18n: {
|
|
21
|
+
zh: {
|
|
22
|
+
description: '将一份核心内容改编为多平台格式(推文串、领英帖、短视频脚本、Newsletter 摘要)。',
|
|
23
|
+
whenToUse: '用户已有内容素材,需要一源多用、多平台分发时。',
|
|
24
|
+
examplePrompts: [
|
|
25
|
+
{ field: 'source', text: '一篇 2000 字关于一人 AI 公司的博客' },
|
|
26
|
+
{ field: 'platforms', text: 'X 推文串、LinkedIn、60 秒口播稿、Newsletter 导语' },
|
|
27
|
+
],
|
|
28
|
+
},
|
|
29
|
+
},
|
|
30
|
+
tags: ['writing', 'content'],
|
|
31
|
+
estimatedAgents: { min: 4, max: 6 },
|
|
32
|
+
phases: [
|
|
33
|
+
{ title: 'Extract' },
|
|
34
|
+
{ title: 'Adapt' },
|
|
35
|
+
{ title: 'Package' },
|
|
36
|
+
],
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
const source = args && typeof args === 'object' && args.source
|
|
40
|
+
? String(args.source)
|
|
41
|
+
: 'Infer the source content from the most recent user turn.'
|
|
42
|
+
|
|
43
|
+
const platformsRaw = args && typeof args === 'object' && args.platforms
|
|
44
|
+
? String(args.platforms)
|
|
45
|
+
: ''
|
|
46
|
+
|
|
47
|
+
const DEFAULT_PLATFORMS = [
|
|
48
|
+
{ id: 'x_thread', label: 'X / Twitter thread', format: '5–8 tweets, hook-first, one idea per tweet' },
|
|
49
|
+
{ id: 'linkedin', label: 'LinkedIn post', format: 'Professional post, 150–250 words, clear CTA' },
|
|
50
|
+
{ id: 'short_video', label: 'Short video script', format: '60-second spoken script with hook and CTA' },
|
|
51
|
+
{ id: 'newsletter', label: 'Newsletter teaser', format: 'Subject line + 2–3 sentence teaser + bullet highlights' },
|
|
52
|
+
]
|
|
53
|
+
|
|
54
|
+
phase('Extract')
|
|
55
|
+
const extracted = await agent(
|
|
56
|
+
'Extract reusable content atoms from this source: core thesis, 3–5 key points, best quotes/stats, audience hook, and CTA.\\n\\nSOURCE:\\n' + source,
|
|
57
|
+
{
|
|
58
|
+
label: 'extract',
|
|
59
|
+
schema: {
|
|
60
|
+
type: 'object',
|
|
61
|
+
properties: {
|
|
62
|
+
thesis: { type: 'string' },
|
|
63
|
+
keyPoints: { type: 'array', items: { type: 'string' } },
|
|
64
|
+
hooks: { type: 'array', items: { type: 'string' } },
|
|
65
|
+
quotesOrStats: { type: 'array', items: { type: 'string' } },
|
|
66
|
+
cta: { type: 'string' },
|
|
67
|
+
},
|
|
68
|
+
required: ['thesis', 'keyPoints', 'cta'],
|
|
69
|
+
},
|
|
70
|
+
},
|
|
71
|
+
)
|
|
72
|
+
|
|
73
|
+
const targets = platformsRaw
|
|
74
|
+
? platformsRaw
|
|
75
|
+
.split(/[,,\\n]/)
|
|
76
|
+
.map((s) => s.trim())
|
|
77
|
+
.filter(Boolean)
|
|
78
|
+
.map((label, index) => ({
|
|
79
|
+
id: 'custom_' + index,
|
|
80
|
+
label,
|
|
81
|
+
format: 'Native format and length for ' + label,
|
|
82
|
+
}))
|
|
83
|
+
: DEFAULT_PLATFORMS
|
|
84
|
+
|
|
85
|
+
phase('Adapt')
|
|
86
|
+
const adaptations = await parallel(
|
|
87
|
+
targets.map((p) => () =>
|
|
88
|
+
agent(
|
|
89
|
+
'Adapt the extracted content for this platform. Match native tone and length. Return ready-to-publish copy.\\n\\n' +
|
|
90
|
+
'PLATFORM: ' + p.label + '\\nFORMAT: ' + p.format + '\\n\\n' +
|
|
91
|
+
JSON.stringify(extracted, null, 2),
|
|
92
|
+
{
|
|
93
|
+
label: p.label,
|
|
94
|
+
schema: {
|
|
95
|
+
type: 'object',
|
|
96
|
+
properties: {
|
|
97
|
+
platform: { type: 'string' },
|
|
98
|
+
copy: { type: 'string' },
|
|
99
|
+
notes: { type: 'string' },
|
|
100
|
+
},
|
|
101
|
+
required: ['platform', 'copy'],
|
|
102
|
+
},
|
|
103
|
+
},
|
|
104
|
+
),
|
|
105
|
+
),
|
|
106
|
+
)
|
|
107
|
+
|
|
108
|
+
phase('Package')
|
|
109
|
+
const packaged = await agent(
|
|
110
|
+
'Package all platform adaptations with a publishing checklist: suggested order, cross-links between posts, and one optional bonus format (e.g. carousel outline).\\n\\n' +
|
|
111
|
+
JSON.stringify({ extracted, adaptations: adaptations.filter(Boolean) }, null, 2),
|
|
112
|
+
{
|
|
113
|
+
label: 'package',
|
|
114
|
+
schema: {
|
|
115
|
+
type: 'object',
|
|
116
|
+
properties: {
|
|
117
|
+
publishingOrder: { type: 'array', items: { type: 'string' } },
|
|
118
|
+
crossLinks: { type: 'array', items: { type: 'string' } },
|
|
119
|
+
bonusFormat: { type: 'string' },
|
|
120
|
+
summary: { type: 'string' },
|
|
121
|
+
},
|
|
122
|
+
required: ['publishingOrder', 'summary'],
|
|
123
|
+
},
|
|
124
|
+
},
|
|
125
|
+
)
|
|
126
|
+
|
|
127
|
+
return {
|
|
128
|
+
ok: true,
|
|
129
|
+
extracted,
|
|
130
|
+
adaptations: adaptations.filter(Boolean),
|
|
131
|
+
...(packaged ?? { publishingOrder: [], summary: 'packaging failed' }),
|
|
132
|
+
}
|
|
133
|
+
`;
|
|
134
|
+
//#endregion
|
|
135
|
+
export { CONTENT_REPURPOSE_SCRIPT };
|
|
136
|
+
|
|
137
|
+
//# sourceMappingURL=content-repurpose.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"content-repurpose.js","names":[],"sources":["../../../../../src/agent/workflow/builtins/content-repurpose.ts"],"sourcesContent":["/**\n * Built-in workflow: `content_repurpose`\n *\n * Repurpose one source piece into multi-platform formats — threads, LinkedIn,\n * short video script, newsletter blurb. For personal-brand solopreneurs.\n *\n * Args:\n * - source: original article, notes, or talking points\n * - platforms: target platforms (optional)\n */\n\nexport const CONTENT_REPURPOSE_SCRIPT = `export const meta = {\n name: 'content_repurpose',\n description: 'Repurpose one source into platform-specific content (threads, posts, scripts, newsletter).',\n whenToUse: 'User has existing content and wants multi-platform distribution without rewriting from scratch.',\n examplePrompts: [\n { field: 'source', text: '2000-word blog post on building a one-person AI business' },\n { field: 'platforms', text: 'X thread, LinkedIn, 60s video script, newsletter teaser' },\n ],\n i18n: {\n zh: {\n description: '将一份核心内容改编为多平台格式(推文串、领英帖、短视频脚本、Newsletter 摘要)。',\n whenToUse: '用户已有内容素材,需要一源多用、多平台分发时。',\n examplePrompts: [\n { field: 'source', text: '一篇 2000 字关于一人 AI 公司的博客' },\n { field: 'platforms', text: 'X 推文串、LinkedIn、60 秒口播稿、Newsletter 导语' },\n ],\n },\n },\n tags: ['writing', 'content'],\n estimatedAgents: { min: 4, max: 6 },\n phases: [\n { title: 'Extract' },\n { title: 'Adapt' },\n { title: 'Package' },\n ],\n}\n\nconst source = args && typeof args === 'object' && args.source\n ? String(args.source)\n : 'Infer the source content from the most recent user turn.'\n\nconst platformsRaw = args && typeof args === 'object' && args.platforms\n ? String(args.platforms)\n : ''\n\nconst DEFAULT_PLATFORMS = [\n { id: 'x_thread', label: 'X / Twitter thread', format: '5–8 tweets, hook-first, one idea per tweet' },\n { id: 'linkedin', label: 'LinkedIn post', format: 'Professional post, 150–250 words, clear CTA' },\n { id: 'short_video', label: 'Short video script', format: '60-second spoken script with hook and CTA' },\n { id: 'newsletter', label: 'Newsletter teaser', format: 'Subject line + 2–3 sentence teaser + bullet highlights' },\n]\n\nphase('Extract')\nconst extracted = await agent(\n 'Extract reusable content atoms from this source: core thesis, 3–5 key points, best quotes/stats, audience hook, and CTA.\\\\n\\\\nSOURCE:\\\\n' + source,\n {\n label: 'extract',\n schema: {\n type: 'object',\n properties: {\n thesis: { type: 'string' },\n keyPoints: { type: 'array', items: { type: 'string' } },\n hooks: { type: 'array', items: { type: 'string' } },\n quotesOrStats: { type: 'array', items: { type: 'string' } },\n cta: { type: 'string' },\n },\n required: ['thesis', 'keyPoints', 'cta'],\n },\n },\n)\n\nconst targets = platformsRaw\n ? platformsRaw\n .split(/[,,\\\\n]/)\n .map((s) => s.trim())\n .filter(Boolean)\n .map((label, index) => ({\n id: 'custom_' + index,\n label,\n format: 'Native format and length for ' + label,\n }))\n : DEFAULT_PLATFORMS\n\nphase('Adapt')\nconst adaptations = await parallel(\n targets.map((p) => () =>\n agent(\n 'Adapt the extracted content for this platform. Match native tone and length. Return ready-to-publish copy.\\\\n\\\\n' +\n 'PLATFORM: ' + p.label + '\\\\nFORMAT: ' + p.format + '\\\\n\\\\n' +\n JSON.stringify(extracted, null, 2),\n {\n label: p.label,\n schema: {\n type: 'object',\n properties: {\n platform: { type: 'string' },\n copy: { type: 'string' },\n notes: { type: 'string' },\n },\n required: ['platform', 'copy'],\n },\n },\n ),\n ),\n)\n\nphase('Package')\nconst packaged = await agent(\n 'Package all platform adaptations with a publishing checklist: suggested order, cross-links between posts, and one optional bonus format (e.g. carousel outline).\\\\n\\\\n' +\n JSON.stringify({ extracted, adaptations: adaptations.filter(Boolean) }, null, 2),\n {\n label: 'package',\n schema: {\n type: 'object',\n properties: {\n publishingOrder: { type: 'array', items: { type: 'string' } },\n crossLinks: { type: 'array', items: { type: 'string' } },\n bonusFormat: { type: 'string' },\n summary: { type: 'string' },\n },\n required: ['publishingOrder', 'summary'],\n },\n },\n)\n\nreturn {\n ok: true,\n extracted,\n adaptations: adaptations.filter(Boolean),\n ...(packaged ?? { publishingOrder: [], summary: 'packaging failed' }),\n}\n`\n"],"mappings":";;;;;;;;;;;AAWA,MAAa,2BAA2B"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Built-in workflow: `decision_compare`
|
|
3
|
+
*
|
|
4
|
+
* Structured comparison of options for everyday decisions — vendors, approaches,
|
|
5
|
+
* purchases, policies, or life choices. Independent evaluators score each option,
|
|
6
|
+
* then a synthesizer recommends with trade-offs spelled out.
|
|
7
|
+
*
|
|
8
|
+
* Args:
|
|
9
|
+
* - question: the decision to make
|
|
10
|
+
* - options: optional comma-separated or newline-separated option list
|
|
11
|
+
* - criteria: optional evaluation criteria hint
|
|
12
|
+
*/
|
|
13
|
+
export declare const DECISION_COMPARE_SCRIPT = "export const meta = {\n name: 'decision_compare',\n description: 'Compare options across independent evaluators, then recommend with explicit trade-offs.',\n whenToUse: 'User faces a non-code decision with multiple viable options and wants a structured comparison.',\n examplePrompts: [\n { field: 'question', text: 'Which project management tool fits a 5-person remote team?' },\n { field: 'question', text: 'Should we host the event in-person, hybrid, or fully virtual?' },\n ],\n i18n: {\n zh: {\n description: '\u7531\u591A\u4E2A\u72EC\u7ACB\u8BC4\u5BA1\u7EF4\u5EA6\u5BF9\u6BD4\u9009\u9879\uFF0C\u5E76\u7ED9\u51FA\u542B\u6743\u8861\u7684\u63A8\u8350\u7ED3\u8BBA\u3002',\n whenToUse: '\u7528\u6237\u9762\u4E34\u591A\u4E2A\u53EF\u884C\u65B9\u6848\u7684\u975E\u4EE3\u7801\u51B3\u7B56\uFF0C\u9700\u8981\u7ED3\u6784\u5316\u5BF9\u6BD4\u65F6\u3002',\n examplePrompts: [\n { field: 'question', text: '5 \u4EBA\u8FDC\u7A0B\u56E2\u961F\u9002\u5408\u7528\u54EA\u6B3E\u9879\u76EE\u7BA1\u7406\u5DE5\u5177\uFF1F' },\n { field: 'question', text: '\u6D3B\u52A8\u5E94\u8BE5\u7EBF\u4E0B\u3001\u6DF7\u5408\u8FD8\u662F\u7EAF\u7EBF\u4E0A\u4E3E\u529E\uFF1F' },\n ],\n },\n },\n tags: ['decision-making', 'comparison', 'productivity'],\n estimatedAgents: { min: 4, max: 7 },\n phases: [\n { title: 'Frame' },\n { title: 'Evaluate' },\n { title: 'Recommend' },\n ],\n}\n\nconst question = args && typeof args === 'object' && args.question\n ? String(args.question)\n : 'Infer the decision question from the most recent user turn.'\n\nconst optionsRaw = args && typeof args === 'object' && args.options\n ? String(args.options)\n : ''\n\nconst criteriaHint = args && typeof args === 'object' && args.criteria\n ? String(args.criteria)\n : ''\n\nphase('Frame')\nconst frame = await agent(\n 'Frame this decision. If options are not provided, propose 3\u20134 realistic options. Return evaluation criteria (weighted if helpful), assumptions, and non-goals.\\n\\n' +\n 'QUESTION:\\n' + question + '\\n' +\n (optionsRaw ? 'OPTIONS:\\n' + optionsRaw + '\\n' : '') +\n (criteriaHint ? 'CRITERIA HINT:\\n' + criteriaHint + '\\n' : ''),\n {\n label: 'framing',\n schema: {\n type: 'object',\n properties: {\n options: {\n type: 'array',\n items: {\n type: 'object',\n properties: {\n name: { type: 'string' },\n summary: { type: 'string' },\n },\n required: ['name', 'summary'],\n },\n },\n criteria: {\n type: 'array',\n items: {\n type: 'object',\n properties: {\n name: { type: 'string' },\n weight: { type: 'string', enum: ['low', 'med', 'high'] },\n },\n required: ['name'],\n },\n },\n assumptions: { type: 'array', items: { type: 'string' } },\n },\n required: ['options', 'criteria'],\n },\n },\n)\n\nif (!frame || !frame.options?.length) {\n return { ok: false, reason: 'framing failed', question }\n}\n\nconst options = frame.options.slice(0, 4)\nconst criteria = frame.criteria ?? []\n\nconst LENSES = [\n { name: 'Benefits', focus: 'Upside, value delivered, and who wins.' },\n { name: 'Risks', focus: 'Downside, failure modes, hidden costs, and regrets.' },\n { name: 'Fit', focus: 'Fit for stated constraints, audience, timeline, and resources.' },\n]\n\nphase('Evaluate')\nconst evaluations = await parallel(\n LENSES.map((lens) => () =>\n agent(\n 'Evaluate every option through this lens. Be specific \u2014 avoid generic pros/cons. Score each option low/med/high for this lens with a one-line rationale.\\n\\n' +\n 'LENS: ' + lens.name + ' \u2014 ' + lens.focus + '\\n' +\n 'QUESTION: ' + question + '\\n' +\n 'OPTIONS:\\n' + JSON.stringify(options, null, 2) + '\\n' +\n 'CRITERIA:\\n' + JSON.stringify(criteria, null, 2),\n {\n label: lens.name,\n schema: {\n type: 'object',\n properties: {\n lens: { type: 'string' },\n scores: {\n type: 'array',\n items: {\n type: 'object',\n properties: {\n option: { type: 'string' },\n score: { type: 'string', enum: ['low', 'med', 'high'] },\n rationale: { type: 'string' },\n },\n required: ['option', 'score', 'rationale'],\n },\n },\n },\n required: ['lens', 'scores'],\n },\n },\n ),\n ),\n)\n\nphase('Recommend')\nconst live = evaluations.filter(Boolean)\nconst recommendation = await agent(\n 'Recommend the best option (or a hybrid) from these lens-level evaluations. State trade-offs explicitly, note what would change the recommendation, and give a runner-up.\\n\\n' +\n 'QUESTION:\\n' + question + '\\n\\n' +\n JSON.stringify({ frame, evaluations: live }, null, 2),\n {\n label: 'recommendation',\n schema: {\n type: 'object',\n properties: {\n recommendation: { type: 'string' },\n rationale: { type: 'string' },\n tradeoffs: { type: 'array', items: { type: 'string' } },\n runnerUp: { type: 'string' },\n whatWouldChange: { type: 'array', items: { type: 'string' } },\n },\n required: ['recommendation', 'rationale', 'tradeoffs'],\n },\n },\n)\n\nreturn {\n ok: true,\n question,\n optionCount: options.length,\n ...(recommendation ?? { recommendation: 'recommendation failed', rationale: '', tradeoffs: [] }),\n}\n";
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
//#region src/agent/workflow/builtins/decision-compare.ts
|
|
2
|
+
/**
|
|
3
|
+
* Built-in workflow: `decision_compare`
|
|
4
|
+
*
|
|
5
|
+
* Structured comparison of options for everyday decisions — vendors, approaches,
|
|
6
|
+
* purchases, policies, or life choices. Independent evaluators score each option,
|
|
7
|
+
* then a synthesizer recommends with trade-offs spelled out.
|
|
8
|
+
*
|
|
9
|
+
* Args:
|
|
10
|
+
* - question: the decision to make
|
|
11
|
+
* - options: optional comma-separated or newline-separated option list
|
|
12
|
+
* - criteria: optional evaluation criteria hint
|
|
13
|
+
*/
|
|
14
|
+
const DECISION_COMPARE_SCRIPT = `export const meta = {
|
|
15
|
+
name: 'decision_compare',
|
|
16
|
+
description: 'Compare options across independent evaluators, then recommend with explicit trade-offs.',
|
|
17
|
+
whenToUse: 'User faces a non-code decision with multiple viable options and wants a structured comparison.',
|
|
18
|
+
examplePrompts: [
|
|
19
|
+
{ field: 'question', text: 'Which project management tool fits a 5-person remote team?' },
|
|
20
|
+
{ field: 'question', text: 'Should we host the event in-person, hybrid, or fully virtual?' },
|
|
21
|
+
],
|
|
22
|
+
i18n: {
|
|
23
|
+
zh: {
|
|
24
|
+
description: '由多个独立评审维度对比选项,并给出含权衡的推荐结论。',
|
|
25
|
+
whenToUse: '用户面临多个可行方案的非代码决策,需要结构化对比时。',
|
|
26
|
+
examplePrompts: [
|
|
27
|
+
{ field: 'question', text: '5 人远程团队适合用哪款项目管理工具?' },
|
|
28
|
+
{ field: 'question', text: '活动应该线下、混合还是纯线上举办?' },
|
|
29
|
+
],
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
tags: ['decision-making', 'comparison', 'productivity'],
|
|
33
|
+
estimatedAgents: { min: 4, max: 7 },
|
|
34
|
+
phases: [
|
|
35
|
+
{ title: 'Frame' },
|
|
36
|
+
{ title: 'Evaluate' },
|
|
37
|
+
{ title: 'Recommend' },
|
|
38
|
+
],
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
const question = args && typeof args === 'object' && args.question
|
|
42
|
+
? String(args.question)
|
|
43
|
+
: 'Infer the decision question from the most recent user turn.'
|
|
44
|
+
|
|
45
|
+
const optionsRaw = args && typeof args === 'object' && args.options
|
|
46
|
+
? String(args.options)
|
|
47
|
+
: ''
|
|
48
|
+
|
|
49
|
+
const criteriaHint = args && typeof args === 'object' && args.criteria
|
|
50
|
+
? String(args.criteria)
|
|
51
|
+
: ''
|
|
52
|
+
|
|
53
|
+
phase('Frame')
|
|
54
|
+
const frame = await agent(
|
|
55
|
+
'Frame this decision. If options are not provided, propose 3–4 realistic options. Return evaluation criteria (weighted if helpful), assumptions, and non-goals.\\n\\n' +
|
|
56
|
+
'QUESTION:\\n' + question + '\\n' +
|
|
57
|
+
(optionsRaw ? 'OPTIONS:\\n' + optionsRaw + '\\n' : '') +
|
|
58
|
+
(criteriaHint ? 'CRITERIA HINT:\\n' + criteriaHint + '\\n' : ''),
|
|
59
|
+
{
|
|
60
|
+
label: 'framing',
|
|
61
|
+
schema: {
|
|
62
|
+
type: 'object',
|
|
63
|
+
properties: {
|
|
64
|
+
options: {
|
|
65
|
+
type: 'array',
|
|
66
|
+
items: {
|
|
67
|
+
type: 'object',
|
|
68
|
+
properties: {
|
|
69
|
+
name: { type: 'string' },
|
|
70
|
+
summary: { type: 'string' },
|
|
71
|
+
},
|
|
72
|
+
required: ['name', 'summary'],
|
|
73
|
+
},
|
|
74
|
+
},
|
|
75
|
+
criteria: {
|
|
76
|
+
type: 'array',
|
|
77
|
+
items: {
|
|
78
|
+
type: 'object',
|
|
79
|
+
properties: {
|
|
80
|
+
name: { type: 'string' },
|
|
81
|
+
weight: { type: 'string', enum: ['low', 'med', 'high'] },
|
|
82
|
+
},
|
|
83
|
+
required: ['name'],
|
|
84
|
+
},
|
|
85
|
+
},
|
|
86
|
+
assumptions: { type: 'array', items: { type: 'string' } },
|
|
87
|
+
},
|
|
88
|
+
required: ['options', 'criteria'],
|
|
89
|
+
},
|
|
90
|
+
},
|
|
91
|
+
)
|
|
92
|
+
|
|
93
|
+
if (!frame || !frame.options?.length) {
|
|
94
|
+
return { ok: false, reason: 'framing failed', question }
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
const options = frame.options.slice(0, 4)
|
|
98
|
+
const criteria = frame.criteria ?? []
|
|
99
|
+
|
|
100
|
+
const LENSES = [
|
|
101
|
+
{ name: 'Benefits', focus: 'Upside, value delivered, and who wins.' },
|
|
102
|
+
{ name: 'Risks', focus: 'Downside, failure modes, hidden costs, and regrets.' },
|
|
103
|
+
{ name: 'Fit', focus: 'Fit for stated constraints, audience, timeline, and resources.' },
|
|
104
|
+
]
|
|
105
|
+
|
|
106
|
+
phase('Evaluate')
|
|
107
|
+
const evaluations = await parallel(
|
|
108
|
+
LENSES.map((lens) => () =>
|
|
109
|
+
agent(
|
|
110
|
+
'Evaluate every option through this lens. Be specific — avoid generic pros/cons. Score each option low/med/high for this lens with a one-line rationale.\\n\\n' +
|
|
111
|
+
'LENS: ' + lens.name + ' — ' + lens.focus + '\\n' +
|
|
112
|
+
'QUESTION: ' + question + '\\n' +
|
|
113
|
+
'OPTIONS:\\n' + JSON.stringify(options, null, 2) + '\\n' +
|
|
114
|
+
'CRITERIA:\\n' + JSON.stringify(criteria, null, 2),
|
|
115
|
+
{
|
|
116
|
+
label: lens.name,
|
|
117
|
+
schema: {
|
|
118
|
+
type: 'object',
|
|
119
|
+
properties: {
|
|
120
|
+
lens: { type: 'string' },
|
|
121
|
+
scores: {
|
|
122
|
+
type: 'array',
|
|
123
|
+
items: {
|
|
124
|
+
type: 'object',
|
|
125
|
+
properties: {
|
|
126
|
+
option: { type: 'string' },
|
|
127
|
+
score: { type: 'string', enum: ['low', 'med', 'high'] },
|
|
128
|
+
rationale: { type: 'string' },
|
|
129
|
+
},
|
|
130
|
+
required: ['option', 'score', 'rationale'],
|
|
131
|
+
},
|
|
132
|
+
},
|
|
133
|
+
},
|
|
134
|
+
required: ['lens', 'scores'],
|
|
135
|
+
},
|
|
136
|
+
},
|
|
137
|
+
),
|
|
138
|
+
),
|
|
139
|
+
)
|
|
140
|
+
|
|
141
|
+
phase('Recommend')
|
|
142
|
+
const live = evaluations.filter(Boolean)
|
|
143
|
+
const recommendation = await agent(
|
|
144
|
+
'Recommend the best option (or a hybrid) from these lens-level evaluations. State trade-offs explicitly, note what would change the recommendation, and give a runner-up.\\n\\n' +
|
|
145
|
+
'QUESTION:\\n' + question + '\\n\\n' +
|
|
146
|
+
JSON.stringify({ frame, evaluations: live }, null, 2),
|
|
147
|
+
{
|
|
148
|
+
label: 'recommendation',
|
|
149
|
+
schema: {
|
|
150
|
+
type: 'object',
|
|
151
|
+
properties: {
|
|
152
|
+
recommendation: { type: 'string' },
|
|
153
|
+
rationale: { type: 'string' },
|
|
154
|
+
tradeoffs: { type: 'array', items: { type: 'string' } },
|
|
155
|
+
runnerUp: { type: 'string' },
|
|
156
|
+
whatWouldChange: { type: 'array', items: { type: 'string' } },
|
|
157
|
+
},
|
|
158
|
+
required: ['recommendation', 'rationale', 'tradeoffs'],
|
|
159
|
+
},
|
|
160
|
+
},
|
|
161
|
+
)
|
|
162
|
+
|
|
163
|
+
return {
|
|
164
|
+
ok: true,
|
|
165
|
+
question,
|
|
166
|
+
optionCount: options.length,
|
|
167
|
+
...(recommendation ?? { recommendation: 'recommendation failed', rationale: '', tradeoffs: [] }),
|
|
168
|
+
}
|
|
169
|
+
`;
|
|
170
|
+
//#endregion
|
|
171
|
+
export { DECISION_COMPARE_SCRIPT };
|
|
172
|
+
|
|
173
|
+
//# sourceMappingURL=decision-compare.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decision-compare.js","names":[],"sources":["../../../../../src/agent/workflow/builtins/decision-compare.ts"],"sourcesContent":["/**\n * Built-in workflow: `decision_compare`\n *\n * Structured comparison of options for everyday decisions — vendors, approaches,\n * purchases, policies, or life choices. Independent evaluators score each option,\n * then a synthesizer recommends with trade-offs spelled out.\n *\n * Args:\n * - question: the decision to make\n * - options: optional comma-separated or newline-separated option list\n * - criteria: optional evaluation criteria hint\n */\n\nexport const DECISION_COMPARE_SCRIPT = `export const meta = {\n name: 'decision_compare',\n description: 'Compare options across independent evaluators, then recommend with explicit trade-offs.',\n whenToUse: 'User faces a non-code decision with multiple viable options and wants a structured comparison.',\n examplePrompts: [\n { field: 'question', text: 'Which project management tool fits a 5-person remote team?' },\n { field: 'question', text: 'Should we host the event in-person, hybrid, or fully virtual?' },\n ],\n i18n: {\n zh: {\n description: '由多个独立评审维度对比选项,并给出含权衡的推荐结论。',\n whenToUse: '用户面临多个可行方案的非代码决策,需要结构化对比时。',\n examplePrompts: [\n { field: 'question', text: '5 人远程团队适合用哪款项目管理工具?' },\n { field: 'question', text: '活动应该线下、混合还是纯线上举办?' },\n ],\n },\n },\n tags: ['decision-making', 'comparison', 'productivity'],\n estimatedAgents: { min: 4, max: 7 },\n phases: [\n { title: 'Frame' },\n { title: 'Evaluate' },\n { title: 'Recommend' },\n ],\n}\n\nconst question = args && typeof args === 'object' && args.question\n ? String(args.question)\n : 'Infer the decision question from the most recent user turn.'\n\nconst optionsRaw = args && typeof args === 'object' && args.options\n ? String(args.options)\n : ''\n\nconst criteriaHint = args && typeof args === 'object' && args.criteria\n ? String(args.criteria)\n : ''\n\nphase('Frame')\nconst frame = await agent(\n 'Frame this decision. If options are not provided, propose 3–4 realistic options. Return evaluation criteria (weighted if helpful), assumptions, and non-goals.\\\\n\\\\n' +\n 'QUESTION:\\\\n' + question + '\\\\n' +\n (optionsRaw ? 'OPTIONS:\\\\n' + optionsRaw + '\\\\n' : '') +\n (criteriaHint ? 'CRITERIA HINT:\\\\n' + criteriaHint + '\\\\n' : ''),\n {\n label: 'framing',\n schema: {\n type: 'object',\n properties: {\n options: {\n type: 'array',\n items: {\n type: 'object',\n properties: {\n name: { type: 'string' },\n summary: { type: 'string' },\n },\n required: ['name', 'summary'],\n },\n },\n criteria: {\n type: 'array',\n items: {\n type: 'object',\n properties: {\n name: { type: 'string' },\n weight: { type: 'string', enum: ['low', 'med', 'high'] },\n },\n required: ['name'],\n },\n },\n assumptions: { type: 'array', items: { type: 'string' } },\n },\n required: ['options', 'criteria'],\n },\n },\n)\n\nif (!frame || !frame.options?.length) {\n return { ok: false, reason: 'framing failed', question }\n}\n\nconst options = frame.options.slice(0, 4)\nconst criteria = frame.criteria ?? []\n\nconst LENSES = [\n { name: 'Benefits', focus: 'Upside, value delivered, and who wins.' },\n { name: 'Risks', focus: 'Downside, failure modes, hidden costs, and regrets.' },\n { name: 'Fit', focus: 'Fit for stated constraints, audience, timeline, and resources.' },\n]\n\nphase('Evaluate')\nconst evaluations = await parallel(\n LENSES.map((lens) => () =>\n agent(\n 'Evaluate every option through this lens. Be specific — avoid generic pros/cons. Score each option low/med/high for this lens with a one-line rationale.\\\\n\\\\n' +\n 'LENS: ' + lens.name + ' — ' + lens.focus + '\\\\n' +\n 'QUESTION: ' + question + '\\\\n' +\n 'OPTIONS:\\\\n' + JSON.stringify(options, null, 2) + '\\\\n' +\n 'CRITERIA:\\\\n' + JSON.stringify(criteria, null, 2),\n {\n label: lens.name,\n schema: {\n type: 'object',\n properties: {\n lens: { type: 'string' },\n scores: {\n type: 'array',\n items: {\n type: 'object',\n properties: {\n option: { type: 'string' },\n score: { type: 'string', enum: ['low', 'med', 'high'] },\n rationale: { type: 'string' },\n },\n required: ['option', 'score', 'rationale'],\n },\n },\n },\n required: ['lens', 'scores'],\n },\n },\n ),\n ),\n)\n\nphase('Recommend')\nconst live = evaluations.filter(Boolean)\nconst recommendation = await agent(\n 'Recommend the best option (or a hybrid) from these lens-level evaluations. State trade-offs explicitly, note what would change the recommendation, and give a runner-up.\\\\n\\\\n' +\n 'QUESTION:\\\\n' + question + '\\\\n\\\\n' +\n JSON.stringify({ frame, evaluations: live }, null, 2),\n {\n label: 'recommendation',\n schema: {\n type: 'object',\n properties: {\n recommendation: { type: 'string' },\n rationale: { type: 'string' },\n tradeoffs: { type: 'array', items: { type: 'string' } },\n runnerUp: { type: 'string' },\n whatWouldChange: { type: 'array', items: { type: 'string' } },\n },\n required: ['recommendation', 'rationale', 'tradeoffs'],\n },\n },\n)\n\nreturn {\n ok: true,\n question,\n optionCount: options.length,\n ...(recommendation ?? { recommendation: 'recommendation failed', rationale: '', tradeoffs: [] }),\n}\n`\n"],"mappings":";;;;;;;;;;;;;AAaA,MAAa,0BAA0B"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Built-in workflow: `inbox_triage`
|
|
3
|
+
*
|
|
4
|
+
* Triage messy inbox input — emails, messages, todos, ideas — into prioritized
|
|
5
|
+
* action buckets for a solo operator with limited hours.
|
|
6
|
+
*
|
|
7
|
+
* Args:
|
|
8
|
+
* - inbox: pasted items to triage
|
|
9
|
+
* - priorities: this week's focus (optional)
|
|
10
|
+
*/
|
|
11
|
+
export declare const INBOX_TRIAGE_SCRIPT = "export const meta = {\n name: 'inbox_triage',\n description: 'Sort messy inbox input into today-must-do, delegate/automate, defer, and drop \u2014 with priorities.',\n whenToUse: 'Solo operator starting the day with emails, messages, and todos to sort in limited time.',\n examplePrompts: [\n { field: 'inbox', text: 'Client email re: deadline, newsletter idea, tax reminder, Slack ping, bug report' },\n { field: 'priorities', text: 'Ship v1 landing page and close one sales call this week' },\n ],\n i18n: {\n zh: {\n description: '\u5C06\u90AE\u4EF6\u3001\u6D88\u606F\u3001\u5F85\u529E\u7B49\u6742\u4E71\u8F93\u5165\u5206\u62E3\u4E3A\u4ECA\u65E5\u5FC5\u505A\u3001\u53EF\u59D4\u6D3E/\u81EA\u52A8\u5316\u3001\u5EF6\u540E\u3001\u53EF\u5220\u9664\uFF0C\u5E76\u6392\u5E8F\u3002',\n whenToUse: '\u8D85\u7EA7\u4E2A\u4F53\u5F00\u5DE5\u524D\u9700\u8981\u7406\u6E05\u4FE1\u606F\u3001\u4EFB\u52A1\u4F18\u5148\u7EA7\uFF0C\u4E14\u65F6\u95F4\u6709\u9650\u65F6\u3002',\n examplePrompts: [\n { field: 'inbox', text: '\u5BA2\u6237\u50AC\u8FDB\u5EA6\u90AE\u4EF6\u3001newsletter \u7075\u611F\u3001\u62A5\u7A0E\u63D0\u9192\u3001Slack @\u3001\u4E00\u4E2A bug \u53CD\u9988' },\n { field: 'priorities', text: '\u672C\u5468\u8981\u4E0A\u7EBF v1 \u843D\u5730\u9875\u5E76\u5B8C\u6210\u4E00\u6B21\u9500\u552E\u901A\u8BDD' },\n ],\n },\n },\n tags: ['productivity', 'brainstorm'],\n estimatedAgents: { min: 3, max: 4 },\n phases: [\n { title: 'Classify' },\n { title: 'Prioritize' },\n { title: 'Action list' },\n ],\n}\n\nconst inbox = args && typeof args === 'object' && args.inbox\n ? String(args.inbox)\n : 'Infer inbox items from the most recent user turn.'\n\nconst priorities = args && typeof args === 'object' && args.priorities\n ? String(args.priorities)\n : ''\n\nphase('Classify')\nconst classified = await agent(\n 'Classify each inbox item. Buckets: do_today, schedule_later, delegate_or_automate, drop, idea_parking. Extract implicit tasks and estimated minutes.\\n\\n' +\n 'INBOX:\\n' + inbox + '\\nWEEKLY PRIORITIES:\\n' + (priorities || '(not specified)'),\n {\n label: 'classify',\n schema: {\n type: 'object',\n properties: {\n items: {\n type: 'array',\n items: {\n type: 'object',\n properties: {\n raw: { type: 'string' },\n bucket: {\n type: 'string',\n enum: ['do_today', 'schedule_later', 'delegate_or_automate', 'drop', 'idea_parking'],\n },\n task: { type: 'string' },\n minutes: { type: 'number' },\n },\n required: ['raw', 'bucket', 'task'],\n },\n },\n },\n required: ['items'],\n },\n },\n)\n\nphase('Prioritize')\nconst prioritized = await agent(\n 'Prioritize do_today items for a solo operator with ~4\u20136 focused hours. Rank by impact vs effort. Flag conflicts with weekly priorities. Suggest what to batch.\\n\\n' +\n JSON.stringify({ priorities, classified }, null, 2),\n {\n label: 'prioritize',\n schema: {\n type: 'object',\n properties: {\n rankedToday: {\n type: 'array',\n items: {\n type: 'object',\n properties: {\n task: { type: 'string' },\n rank: { type: 'number' },\n impact: { type: 'string', enum: ['low', 'med', 'high'] },\n reason: { type: 'string' },\n },\n required: ['task', 'rank', 'impact'],\n },\n },\n conflicts: { type: 'array', items: { type: 'string' } },\n batchSuggestions: { type: 'array', items: { type: 'string' } },\n },\n required: ['rankedToday'],\n },\n },\n)\n\nphase('Action list')\nconst actionList = await agent(\n 'Produce a concrete action list: top 3 for today with time blocks, quick wins under 15 min, delegate/automate suggestions, and parking lot for ideas. End with one sentence focus theme for the day.\\n\\n' +\n JSON.stringify({ classified, prioritized }, null, 2),\n {\n label: 'action list',\n schema: {\n type: 'object',\n properties: {\n focusTheme: { type: 'string' },\n topThree: {\n type: 'array',\n items: {\n type: 'object',\n properties: {\n task: { type: 'string' },\n timeBlock: { type: 'string' },\n },\n required: ['task'],\n },\n },\n quickWins: { type: 'array', items: { type: 'string' } },\n delegateOrAutomate: { type: 'array', items: { type: 'string' } },\n parkingLot: { type: 'array', items: { type: 'string' } },\n },\n required: ['focusTheme', 'topThree'],\n },\n },\n)\n\nreturn {\n ok: true,\n classified,\n prioritized,\n ...(actionList ?? { focusTheme: 'triage failed', topThree: [] }),\n}\n";
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
//#region src/agent/workflow/builtins/inbox-triage.ts
|
|
2
|
+
/**
|
|
3
|
+
* Built-in workflow: `inbox_triage`
|
|
4
|
+
*
|
|
5
|
+
* Triage messy inbox input — emails, messages, todos, ideas — into prioritized
|
|
6
|
+
* action buckets for a solo operator with limited hours.
|
|
7
|
+
*
|
|
8
|
+
* Args:
|
|
9
|
+
* - inbox: pasted items to triage
|
|
10
|
+
* - priorities: this week's focus (optional)
|
|
11
|
+
*/
|
|
12
|
+
const INBOX_TRIAGE_SCRIPT = `export const meta = {
|
|
13
|
+
name: 'inbox_triage',
|
|
14
|
+
description: 'Sort messy inbox input into today-must-do, delegate/automate, defer, and drop — with priorities.',
|
|
15
|
+
whenToUse: 'Solo operator starting the day with emails, messages, and todos to sort in limited time.',
|
|
16
|
+
examplePrompts: [
|
|
17
|
+
{ field: 'inbox', text: 'Client email re: deadline, newsletter idea, tax reminder, Slack ping, bug report' },
|
|
18
|
+
{ field: 'priorities', text: 'Ship v1 landing page and close one sales call this week' },
|
|
19
|
+
],
|
|
20
|
+
i18n: {
|
|
21
|
+
zh: {
|
|
22
|
+
description: '将邮件、消息、待办等杂乱输入分拣为今日必做、可委派/自动化、延后、可删除,并排序。',
|
|
23
|
+
whenToUse: '超级个体开工前需要理清信息、任务优先级,且时间有限时。',
|
|
24
|
+
examplePrompts: [
|
|
25
|
+
{ field: 'inbox', text: '客户催进度邮件、newsletter 灵感、报税提醒、Slack @、一个 bug 反馈' },
|
|
26
|
+
{ field: 'priorities', text: '本周要上线 v1 落地页并完成一次销售通话' },
|
|
27
|
+
],
|
|
28
|
+
},
|
|
29
|
+
},
|
|
30
|
+
tags: ['productivity', 'brainstorm'],
|
|
31
|
+
estimatedAgents: { min: 3, max: 4 },
|
|
32
|
+
phases: [
|
|
33
|
+
{ title: 'Classify' },
|
|
34
|
+
{ title: 'Prioritize' },
|
|
35
|
+
{ title: 'Action list' },
|
|
36
|
+
],
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
const inbox = args && typeof args === 'object' && args.inbox
|
|
40
|
+
? String(args.inbox)
|
|
41
|
+
: 'Infer inbox items from the most recent user turn.'
|
|
42
|
+
|
|
43
|
+
const priorities = args && typeof args === 'object' && args.priorities
|
|
44
|
+
? String(args.priorities)
|
|
45
|
+
: ''
|
|
46
|
+
|
|
47
|
+
phase('Classify')
|
|
48
|
+
const classified = await agent(
|
|
49
|
+
'Classify each inbox item. Buckets: do_today, schedule_later, delegate_or_automate, drop, idea_parking. Extract implicit tasks and estimated minutes.\\n\\n' +
|
|
50
|
+
'INBOX:\\n' + inbox + '\\nWEEKLY PRIORITIES:\\n' + (priorities || '(not specified)'),
|
|
51
|
+
{
|
|
52
|
+
label: 'classify',
|
|
53
|
+
schema: {
|
|
54
|
+
type: 'object',
|
|
55
|
+
properties: {
|
|
56
|
+
items: {
|
|
57
|
+
type: 'array',
|
|
58
|
+
items: {
|
|
59
|
+
type: 'object',
|
|
60
|
+
properties: {
|
|
61
|
+
raw: { type: 'string' },
|
|
62
|
+
bucket: {
|
|
63
|
+
type: 'string',
|
|
64
|
+
enum: ['do_today', 'schedule_later', 'delegate_or_automate', 'drop', 'idea_parking'],
|
|
65
|
+
},
|
|
66
|
+
task: { type: 'string' },
|
|
67
|
+
minutes: { type: 'number' },
|
|
68
|
+
},
|
|
69
|
+
required: ['raw', 'bucket', 'task'],
|
|
70
|
+
},
|
|
71
|
+
},
|
|
72
|
+
},
|
|
73
|
+
required: ['items'],
|
|
74
|
+
},
|
|
75
|
+
},
|
|
76
|
+
)
|
|
77
|
+
|
|
78
|
+
phase('Prioritize')
|
|
79
|
+
const prioritized = await agent(
|
|
80
|
+
'Prioritize do_today items for a solo operator with ~4–6 focused hours. Rank by impact vs effort. Flag conflicts with weekly priorities. Suggest what to batch.\\n\\n' +
|
|
81
|
+
JSON.stringify({ priorities, classified }, null, 2),
|
|
82
|
+
{
|
|
83
|
+
label: 'prioritize',
|
|
84
|
+
schema: {
|
|
85
|
+
type: 'object',
|
|
86
|
+
properties: {
|
|
87
|
+
rankedToday: {
|
|
88
|
+
type: 'array',
|
|
89
|
+
items: {
|
|
90
|
+
type: 'object',
|
|
91
|
+
properties: {
|
|
92
|
+
task: { type: 'string' },
|
|
93
|
+
rank: { type: 'number' },
|
|
94
|
+
impact: { type: 'string', enum: ['low', 'med', 'high'] },
|
|
95
|
+
reason: { type: 'string' },
|
|
96
|
+
},
|
|
97
|
+
required: ['task', 'rank', 'impact'],
|
|
98
|
+
},
|
|
99
|
+
},
|
|
100
|
+
conflicts: { type: 'array', items: { type: 'string' } },
|
|
101
|
+
batchSuggestions: { type: 'array', items: { type: 'string' } },
|
|
102
|
+
},
|
|
103
|
+
required: ['rankedToday'],
|
|
104
|
+
},
|
|
105
|
+
},
|
|
106
|
+
)
|
|
107
|
+
|
|
108
|
+
phase('Action list')
|
|
109
|
+
const actionList = await agent(
|
|
110
|
+
'Produce a concrete action list: top 3 for today with time blocks, quick wins under 15 min, delegate/automate suggestions, and parking lot for ideas. End with one sentence focus theme for the day.\\n\\n' +
|
|
111
|
+
JSON.stringify({ classified, prioritized }, null, 2),
|
|
112
|
+
{
|
|
113
|
+
label: 'action list',
|
|
114
|
+
schema: {
|
|
115
|
+
type: 'object',
|
|
116
|
+
properties: {
|
|
117
|
+
focusTheme: { type: 'string' },
|
|
118
|
+
topThree: {
|
|
119
|
+
type: 'array',
|
|
120
|
+
items: {
|
|
121
|
+
type: 'object',
|
|
122
|
+
properties: {
|
|
123
|
+
task: { type: 'string' },
|
|
124
|
+
timeBlock: { type: 'string' },
|
|
125
|
+
},
|
|
126
|
+
required: ['task'],
|
|
127
|
+
},
|
|
128
|
+
},
|
|
129
|
+
quickWins: { type: 'array', items: { type: 'string' } },
|
|
130
|
+
delegateOrAutomate: { type: 'array', items: { type: 'string' } },
|
|
131
|
+
parkingLot: { type: 'array', items: { type: 'string' } },
|
|
132
|
+
},
|
|
133
|
+
required: ['focusTheme', 'topThree'],
|
|
134
|
+
},
|
|
135
|
+
},
|
|
136
|
+
)
|
|
137
|
+
|
|
138
|
+
return {
|
|
139
|
+
ok: true,
|
|
140
|
+
classified,
|
|
141
|
+
prioritized,
|
|
142
|
+
...(actionList ?? { focusTheme: 'triage failed', topThree: [] }),
|
|
143
|
+
}
|
|
144
|
+
`;
|
|
145
|
+
//#endregion
|
|
146
|
+
export { INBOX_TRIAGE_SCRIPT };
|
|
147
|
+
|
|
148
|
+
//# sourceMappingURL=inbox-triage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inbox-triage.js","names":[],"sources":["../../../../../src/agent/workflow/builtins/inbox-triage.ts"],"sourcesContent":["/**\n * Built-in workflow: `inbox_triage`\n *\n * Triage messy inbox input — emails, messages, todos, ideas — into prioritized\n * action buckets for a solo operator with limited hours.\n *\n * Args:\n * - inbox: pasted items to triage\n * - priorities: this week's focus (optional)\n */\n\nexport const INBOX_TRIAGE_SCRIPT = `export const meta = {\n name: 'inbox_triage',\n description: 'Sort messy inbox input into today-must-do, delegate/automate, defer, and drop — with priorities.',\n whenToUse: 'Solo operator starting the day with emails, messages, and todos to sort in limited time.',\n examplePrompts: [\n { field: 'inbox', text: 'Client email re: deadline, newsletter idea, tax reminder, Slack ping, bug report' },\n { field: 'priorities', text: 'Ship v1 landing page and close one sales call this week' },\n ],\n i18n: {\n zh: {\n description: '将邮件、消息、待办等杂乱输入分拣为今日必做、可委派/自动化、延后、可删除,并排序。',\n whenToUse: '超级个体开工前需要理清信息、任务优先级,且时间有限时。',\n examplePrompts: [\n { field: 'inbox', text: '客户催进度邮件、newsletter 灵感、报税提醒、Slack @、一个 bug 反馈' },\n { field: 'priorities', text: '本周要上线 v1 落地页并完成一次销售通话' },\n ],\n },\n },\n tags: ['productivity', 'brainstorm'],\n estimatedAgents: { min: 3, max: 4 },\n phases: [\n { title: 'Classify' },\n { title: 'Prioritize' },\n { title: 'Action list' },\n ],\n}\n\nconst inbox = args && typeof args === 'object' && args.inbox\n ? String(args.inbox)\n : 'Infer inbox items from the most recent user turn.'\n\nconst priorities = args && typeof args === 'object' && args.priorities\n ? String(args.priorities)\n : ''\n\nphase('Classify')\nconst classified = await agent(\n 'Classify each inbox item. Buckets: do_today, schedule_later, delegate_or_automate, drop, idea_parking. Extract implicit tasks and estimated minutes.\\\\n\\\\n' +\n 'INBOX:\\\\n' + inbox + '\\\\nWEEKLY PRIORITIES:\\\\n' + (priorities || '(not specified)'),\n {\n label: 'classify',\n schema: {\n type: 'object',\n properties: {\n items: {\n type: 'array',\n items: {\n type: 'object',\n properties: {\n raw: { type: 'string' },\n bucket: {\n type: 'string',\n enum: ['do_today', 'schedule_later', 'delegate_or_automate', 'drop', 'idea_parking'],\n },\n task: { type: 'string' },\n minutes: { type: 'number' },\n },\n required: ['raw', 'bucket', 'task'],\n },\n },\n },\n required: ['items'],\n },\n },\n)\n\nphase('Prioritize')\nconst prioritized = await agent(\n 'Prioritize do_today items for a solo operator with ~4–6 focused hours. Rank by impact vs effort. Flag conflicts with weekly priorities. Suggest what to batch.\\\\n\\\\n' +\n JSON.stringify({ priorities, classified }, null, 2),\n {\n label: 'prioritize',\n schema: {\n type: 'object',\n properties: {\n rankedToday: {\n type: 'array',\n items: {\n type: 'object',\n properties: {\n task: { type: 'string' },\n rank: { type: 'number' },\n impact: { type: 'string', enum: ['low', 'med', 'high'] },\n reason: { type: 'string' },\n },\n required: ['task', 'rank', 'impact'],\n },\n },\n conflicts: { type: 'array', items: { type: 'string' } },\n batchSuggestions: { type: 'array', items: { type: 'string' } },\n },\n required: ['rankedToday'],\n },\n },\n)\n\nphase('Action list')\nconst actionList = await agent(\n 'Produce a concrete action list: top 3 for today with time blocks, quick wins under 15 min, delegate/automate suggestions, and parking lot for ideas. End with one sentence focus theme for the day.\\\\n\\\\n' +\n JSON.stringify({ classified, prioritized }, null, 2),\n {\n label: 'action list',\n schema: {\n type: 'object',\n properties: {\n focusTheme: { type: 'string' },\n topThree: {\n type: 'array',\n items: {\n type: 'object',\n properties: {\n task: { type: 'string' },\n timeBlock: { type: 'string' },\n },\n required: ['task'],\n },\n },\n quickWins: { type: 'array', items: { type: 'string' } },\n delegateOrAutomate: { type: 'array', items: { type: 'string' } },\n parkingLot: { type: 'array', items: { type: 'string' } },\n },\n required: ['focusTheme', 'topThree'],\n },\n },\n)\n\nreturn {\n ok: true,\n classified,\n prioritized,\n ...(actionList ?? { focusTheme: 'triage failed', topThree: [] }),\n}\n`\n"],"mappings":";;;;;;;;;;;AAWA,MAAa,sBAAsB"}
|
|
@@ -5,15 +5,24 @@
|
|
|
5
5
|
* not authority.
|
|
6
6
|
*/
|
|
7
7
|
import { AUDIT_REPO_SCRIPT } from './audit-repo.js';
|
|
8
|
+
import { CLIENT_PROPOSAL_SCRIPT } from './client-proposal.js';
|
|
9
|
+
import { COMPETITOR_SCAN_SCRIPT } from './competitor-scan.js';
|
|
10
|
+
import { CONTENT_DRAFT_SCRIPT } from './content-draft.js';
|
|
11
|
+
import { CONTENT_REPURPOSE_SCRIPT } from './content-repurpose.js';
|
|
8
12
|
import { DEBUG_INCIDENT_SCRIPT } from './debug-incident.js';
|
|
13
|
+
import { DECISION_COMPARE_SCRIPT } from './decision-compare.js';
|
|
9
14
|
import { IMPLEMENTATION_PLAN_SCRIPT } from './implementation-plan.js';
|
|
15
|
+
import { INBOX_TRIAGE_SCRIPT } from './inbox-triage.js';
|
|
16
|
+
import { MEETING_PREP_SCRIPT } from './meeting-prep.js';
|
|
10
17
|
import { MULTI_PERSPECTIVE_REVIEW_SCRIPT } from './multi-perspective-review.js';
|
|
18
|
+
import { OFFER_DESIGN_SCRIPT } from './offer-design.js';
|
|
11
19
|
import { PR_REVIEW_SCRIPT } from './pr-review.js';
|
|
12
20
|
import { RELEASE_CHECK_SCRIPT } from './release-check.js';
|
|
13
21
|
import { RESEARCH_SCRIPT } from './research.js';
|
|
22
|
+
import { WEEKLY_REVIEW_SCRIPT } from './weekly-review.js';
|
|
14
23
|
export interface BuiltinWorkflow {
|
|
15
24
|
name: string;
|
|
16
25
|
script: string;
|
|
17
26
|
}
|
|
18
27
|
export declare const BUILTIN_WORKFLOWS: readonly BuiltinWorkflow[];
|
|
19
|
-
export { AUDIT_REPO_SCRIPT, DEBUG_INCIDENT_SCRIPT, IMPLEMENTATION_PLAN_SCRIPT, MULTI_PERSPECTIVE_REVIEW_SCRIPT, PR_REVIEW_SCRIPT, RELEASE_CHECK_SCRIPT, RESEARCH_SCRIPT, };
|
|
28
|
+
export { AUDIT_REPO_SCRIPT, CLIENT_PROPOSAL_SCRIPT, COMPETITOR_SCAN_SCRIPT, CONTENT_DRAFT_SCRIPT, CONTENT_REPURPOSE_SCRIPT, DEBUG_INCIDENT_SCRIPT, DECISION_COMPARE_SCRIPT, IMPLEMENTATION_PLAN_SCRIPT, INBOX_TRIAGE_SCRIPT, MEETING_PREP_SCRIPT, MULTI_PERSPECTIVE_REVIEW_SCRIPT, OFFER_DESIGN_SCRIPT, PR_REVIEW_SCRIPT, RELEASE_CHECK_SCRIPT, RESEARCH_SCRIPT, WEEKLY_REVIEW_SCRIPT, };
|