@rubytech/create-realagent-code 0.1.593 → 0.1.594
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/package.json +2 -2
- package/payload/platform/package.json +1 -0
- package/payload/platform/plugins/admin/skills/platform-architecture/SKILL.md +5 -3
- package/payload/platform/plugins/admin/skills/whats-new/SKILL.md +5 -0
- package/payload/platform/plugins/cloudflare/PLUGIN.md +2 -0
- package/payload/platform/plugins/docs/references/internals.md +1 -1
- package/payload/platform/plugins/docs/references/telegram-guide.md +3 -1
- package/payload/platform/scripts/__tests__/agent-identity-reconcile.test.sh +110 -0
- package/payload/platform/scripts/__tests__/check-orphan-dist.test.sh +87 -0
- package/payload/platform/scripts/check-orphan-dist.mjs +143 -0
- package/payload/platform/scripts/lib/agent-identity-reconcile.sh +122 -0
- package/payload/platform/scripts/lib/provision-account-dir.sh +8 -26
- package/payload/platform/scripts/setup-account.sh +15 -0
- package/payload/platform/services/claude-session-manager/dist/index.js +5 -0
- package/payload/platform/services/claude-session-manager/dist/index.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/public-agent-reachability.d.ts +5 -0
- package/payload/platform/services/claude-session-manager/dist/public-agent-reachability.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/public-agent-reachability.js +42 -1
- package/payload/platform/services/claude-session-manager/dist/public-agent-reachability.js.map +1 -1
- package/payload/platform/templates/agents/public/IDENTITY.md +3 -3
- package/payload/platform/lib/anthropic-key/dist/index.d.ts +0 -22
- package/payload/platform/lib/anthropic-key/dist/index.d.ts.map +0 -1
- package/payload/platform/lib/anthropic-key/dist/index.js +0 -232
- package/payload/platform/lib/anthropic-key/dist/index.js.map +0 -1
- package/payload/platform/lib/graph-search/dist/query-expansion.d.ts +0 -37
- package/payload/platform/lib/graph-search/dist/query-expansion.d.ts.map +0 -1
- package/payload/platform/lib/graph-search/dist/query-expansion.js +0 -101
- package/payload/platform/lib/graph-search/dist/query-expansion.js.map +0 -1
- package/payload/platform/lib/oauth-llm/dist/index.d.ts +0 -116
- package/payload/platform/lib/oauth-llm/dist/index.d.ts.map +0 -1
- package/payload/platform/lib/oauth-llm/dist/index.js +0 -386
- package/payload/platform/lib/oauth-llm/dist/index.js.map +0 -1
- package/payload/platform/lib/screening-patterns/dist/index.d.ts +0 -29
- package/payload/platform/lib/screening-patterns/dist/index.d.ts.map +0 -1
- package/payload/platform/lib/screening-patterns/dist/index.js +0 -48
- package/payload/platform/lib/screening-patterns/dist/index.js.map +0 -1
- package/payload/platform/plugins/admin/mcp/dist/__tests__/admin-identity-authenticate.test.d.ts +0 -2
- package/payload/platform/plugins/admin/mcp/dist/__tests__/admin-identity-authenticate.test.d.ts.map +0 -1
- package/payload/platform/plugins/admin/mcp/dist/__tests__/admin-identity-authenticate.test.js +0 -34
- package/payload/platform/plugins/admin/mcp/dist/__tests__/admin-identity-authenticate.test.js.map +0 -1
- package/payload/platform/plugins/admin/mcp/dist/lib/onboarding.d.ts +0 -39
- package/payload/platform/plugins/admin/mcp/dist/lib/onboarding.d.ts.map +0 -1
- package/payload/platform/plugins/admin/mcp/dist/lib/onboarding.js +0 -249
- package/payload/platform/plugins/admin/mcp/dist/lib/onboarding.js.map +0 -1
- package/payload/platform/plugins/admin/mcp/dist/tools/admin-identity-authenticate.d.ts +0 -6
- package/payload/platform/plugins/admin/mcp/dist/tools/admin-identity-authenticate.d.ts.map +0 -1
- package/payload/platform/plugins/admin/mcp/dist/tools/admin-identity-authenticate.js +0 -32
- package/payload/platform/plugins/admin/mcp/dist/tools/admin-identity-authenticate.js.map +0 -1
- package/payload/platform/plugins/cloudflare/mcp/dist/lib/cloudflared.d.ts +0 -283
- package/payload/platform/plugins/cloudflare/mcp/dist/lib/cloudflared.d.ts.map +0 -1
- package/payload/platform/plugins/cloudflare/mcp/dist/lib/cloudflared.js +0 -1155
- package/payload/platform/plugins/cloudflare/mcp/dist/lib/cloudflared.js.map +0 -1
- package/payload/platform/plugins/cloudflare/mcp/dist/lib/setup-orchestrator.d.ts +0 -90
- package/payload/platform/plugins/cloudflare/mcp/dist/lib/setup-orchestrator.d.ts.map +0 -1
- package/payload/platform/plugins/cloudflare/mcp/dist/lib/setup-orchestrator.js +0 -551
- package/payload/platform/plugins/cloudflare/mcp/dist/lib/setup-orchestrator.js.map +0 -1
- package/payload/platform/plugins/email/mcp/dist/lib/claude-bridge.d.ts +0 -17
- package/payload/platform/plugins/email/mcp/dist/lib/claude-bridge.d.ts.map +0 -1
- package/payload/platform/plugins/email/mcp/dist/lib/claude-bridge.js +0 -186
- package/payload/platform/plugins/email/mcp/dist/lib/claude-bridge.js.map +0 -1
- package/payload/platform/plugins/email/mcp/dist/lib/screening.d.ts +0 -29
- package/payload/platform/plugins/email/mcp/dist/lib/screening.d.ts.map +0 -1
- package/payload/platform/plugins/email/mcp/dist/lib/screening.js +0 -105
- package/payload/platform/plugins/email/mcp/dist/lib/screening.js.map +0 -1
- package/payload/platform/plugins/email/mcp/dist/scripts/email-auto-respond.d.ts +0 -38
- package/payload/platform/plugins/email/mcp/dist/scripts/email-auto-respond.d.ts.map +0 -1
- package/payload/platform/plugins/email/mcp/dist/scripts/email-auto-respond.js +0 -817
- package/payload/platform/plugins/email/mcp/dist/scripts/email-auto-respond.js.map +0 -1
- package/payload/platform/plugins/email/mcp/dist/scripts/email-fetch.d.ts +0 -30
- package/payload/platform/plugins/email/mcp/dist/scripts/email-fetch.d.ts.map +0 -1
- package/payload/platform/plugins/email/mcp/dist/scripts/email-fetch.js +0 -215
- package/payload/platform/plugins/email/mcp/dist/scripts/email-fetch.js.map +0 -1
- package/payload/platform/plugins/email/mcp/dist/tools/email-auto-respond-config.d.ts +0 -19
- package/payload/platform/plugins/email/mcp/dist/tools/email-auto-respond-config.d.ts.map +0 -1
- package/payload/platform/plugins/email/mcp/dist/tools/email-auto-respond-config.js +0 -151
- package/payload/platform/plugins/email/mcp/dist/tools/email-auto-respond-config.js.map +0 -1
- package/payload/platform/plugins/email/mcp/dist/tools/email-classify.d.ts +0 -6
- package/payload/platform/plugins/email/mcp/dist/tools/email-classify.d.ts.map +0 -1
- package/payload/platform/plugins/email/mcp/dist/tools/email-classify.js +0 -89
- package/payload/platform/plugins/email/mcp/dist/tools/email-classify.js.map +0 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/compiled-truth-rewriter-operator-hint.test.d.ts +0 -2
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/compiled-truth-rewriter-operator-hint.test.d.ts.map +0 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/compiled-truth-rewriter-operator-hint.test.js +0 -90
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/compiled-truth-rewriter-operator-hint.test.js.map +0 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/llm-classifier.test.d.ts +0 -2
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/llm-classifier.test.d.ts.map +0 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/llm-classifier.test.js +0 -226
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/llm-classifier.test.js.map +0 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/compiled-truth-rewriter.d.ts +0 -60
- package/payload/platform/plugins/memory/mcp/dist/lib/compiled-truth-rewriter.d.ts.map +0 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/compiled-truth-rewriter.js +0 -169
- package/payload/platform/plugins/memory/mcp/dist/lib/compiled-truth-rewriter.js.map +0 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/llm-classifier.d.ts +0 -248
- package/payload/platform/plugins/memory/mcp/dist/lib/llm-classifier.d.ts.map +0 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/llm-classifier.js +0 -824
- package/payload/platform/plugins/memory/mcp/dist/lib/llm-classifier.js.map +0 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/llm-ranker.d.ts +0 -63
- package/payload/platform/plugins/memory/mcp/dist/lib/llm-ranker.d.ts.map +0 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/llm-ranker.js +0 -210
- package/payload/platform/plugins/memory/mcp/dist/lib/llm-ranker.js.map +0 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/typed-edge-pass.d.ts +0 -35
- package/payload/platform/plugins/memory/mcp/dist/lib/typed-edge-pass.d.ts.map +0 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/typed-edge-pass.js +0 -28
- package/payload/platform/plugins/memory/mcp/dist/lib/typed-edge-pass.js.map +0 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/conversation-archive-derive-insights-emit.test.d.ts +0 -2
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/conversation-archive-derive-insights-emit.test.d.ts.map +0 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/conversation-archive-derive-insights-emit.test.js +0 -68
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/conversation-archive-derive-insights-emit.test.js.map +0 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-archive-write-emit.test.d.ts +0 -2
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-archive-write-emit.test.d.ts.map +0 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-archive-write-emit.test.js +0 -88
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-archive-write-emit.test.js.map +0 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-classify-emit.test.d.ts +0 -2
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-classify-emit.test.d.ts.map +0 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-classify-emit.test.js +0 -58
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-classify-emit.test.js.map +0 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-delete-emit.test.d.ts +0 -2
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-delete-emit.test.d.ts.map +0 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-delete-emit.test.js +0 -64
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-delete-emit.test.js.map +0 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-edit-attachment-emit.test.d.ts +0 -2
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-edit-attachment-emit.test.d.ts.map +0 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-edit-attachment-emit.test.js +0 -70
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-edit-attachment-emit.test.js.map +0 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-empty-trash-emit.test.d.ts +0 -2
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-empty-trash-emit.test.d.ts.map +0 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-empty-trash-emit.test.js +0 -48
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-empty-trash-emit.test.js.map +0 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-ingest-emit.test.d.ts +0 -2
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-ingest-emit.test.d.ts.map +0 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-ingest-emit.test.js +0 -74
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-ingest-emit.test.js.map +0 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-ingest-extract-emit.test.d.ts +0 -2
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-ingest-extract-emit.test.d.ts.map +0 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-ingest-extract-emit.test.js +0 -47
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-ingest-extract-emit.test.js.map +0 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-ingest-web-emit.test.d.ts +0 -2
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-ingest-web-emit.test.d.ts.map +0 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-ingest-web-emit.test.js +0 -65
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-ingest-web-emit.test.js.map +0 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-reindex-emit.test.d.ts +0 -2
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-reindex-emit.test.d.ts.map +0 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-reindex-emit.test.js +0 -43
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-reindex-emit.test.js.map +0 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-rename-attachment-emit.test.d.ts +0 -2
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-rename-attachment-emit.test.d.ts.map +0 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-rename-attachment-emit.test.js +0 -65
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-rename-attachment-emit.test.js.map +0 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-restore-emit.test.d.ts +0 -2
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-restore-emit.test.d.ts.map +0 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-restore-emit.test.js +0 -49
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-restore-emit.test.js.map +0 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-update-emit.test.d.ts +0 -2
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-update-emit.test.d.ts.map +0 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-update-emit.test.js +0 -79
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-update-emit.test.js.map +0 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-update-operator-hint.test.d.ts +0 -2
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-update-operator-hint.test.d.ts.map +0 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-update-operator-hint.test.js +0 -329
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-update-operator-hint.test.js.map +0 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-write-emit.test.d.ts +0 -2
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-write-emit.test.d.ts.map +0 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-write-emit.test.js +0 -81
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-write-emit.test.js.map +0 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-classify.d.ts +0 -34
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-classify.d.ts.map +0 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-classify.js +0 -62
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-classify.js.map +0 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-rank.d.ts +0 -61
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-rank.d.ts.map +0 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-rank.js +0 -102
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-rank.js.map +0 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-signals-recent.d.ts +0 -35
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-signals-recent.d.ts.map +0 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-signals-recent.js +0 -73
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-signals-recent.js.map +0 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-typed-edge-pass.d.ts +0 -29
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-typed-edge-pass.d.ts.map +0 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-typed-edge-pass.js +0 -22
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-typed-edge-pass.js.map +0 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/session-retrospective-skip-rate.d.ts +0 -30
- package/payload/platform/plugins/memory/mcp/dist/tools/session-retrospective-skip-rate.d.ts.map +0 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/session-retrospective-skip-rate.js +0 -130
- package/payload/platform/plugins/memory/mcp/dist/tools/session-retrospective-skip-rate.js.map +0 -1
- package/payload/platform/plugins/outlook/mcp/dist/auth/pkce-flow.d.ts +0 -65
- package/payload/platform/plugins/outlook/mcp/dist/auth/pkce-flow.d.ts.map +0 -1
- package/payload/platform/plugins/outlook/mcp/dist/auth/pkce-flow.js +0 -262
- package/payload/platform/plugins/outlook/mcp/dist/auth/pkce-flow.js.map +0 -1
- package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/normalise-start-date.test.d.ts +0 -2
- package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/normalise-start-date.test.d.ts.map +0 -1
- package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/normalise-start-date.test.js +0 -100
- package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/normalise-start-date.test.js.map +0 -1
- package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/scheduled-seat-id.test.d.ts +0 -2
- package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/scheduled-seat-id.test.d.ts.map +0 -1
- package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/scheduled-seat-id.test.js +0 -22
- package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/scheduled-seat-id.test.js.map +0 -1
- package/payload/platform/plugins/scheduling/mcp/dist/lib/scheduled-seat-id.d.ts +0 -11
- package/payload/platform/plugins/scheduling/mcp/dist/lib/scheduled-seat-id.d.ts.map +0 -1
- package/payload/platform/plugins/scheduling/mcp/dist/lib/scheduled-seat-id.js +0 -19
- package/payload/platform/plugins/scheduling/mcp/dist/lib/scheduled-seat-id.js.map +0 -1
- package/payload/platform/plugins/url-get/mcp/dist/lib/summarise.d.ts +0 -8
- package/payload/platform/plugins/url-get/mcp/dist/lib/summarise.d.ts.map +0 -1
- package/payload/platform/plugins/url-get/mcp/dist/lib/summarise.js +0 -83
- package/payload/platform/plugins/url-get/mcp/dist/lib/summarise.js.map +0 -1
- package/payload/platform/plugins/workflows/mcp/dist/lib/llm-call.d.ts +0 -151
- package/payload/platform/plugins/workflows/mcp/dist/lib/llm-call.d.ts.map +0 -1
- package/payload/platform/plugins/workflows/mcp/dist/lib/llm-call.js +0 -299
- package/payload/platform/plugins/workflows/mcp/dist/lib/llm-call.js.map +0 -1
- package/payload/platform/services/claude-session-manager/dist/account-admin-census.d.ts +0 -39
- package/payload/platform/services/claude-session-manager/dist/account-admin-census.d.ts.map +0 -1
- package/payload/platform/services/claude-session-manager/dist/account-admin-census.js +0 -122
- package/payload/platform/services/claude-session-manager/dist/account-admin-census.js.map +0 -1
- package/payload/platform/services/claude-session-manager/dist/admin-identity-audit.d.ts +0 -39
- package/payload/platform/services/claude-session-manager/dist/admin-identity-audit.d.ts.map +0 -1
- package/payload/platform/services/claude-session-manager/dist/admin-identity-audit.js +0 -133
- package/payload/platform/services/claude-session-manager/dist/admin-identity-audit.js.map +0 -1
- package/payload/platform/services/claude-session-manager/dist/input-postcondition.d.ts +0 -22
- package/payload/platform/services/claude-session-manager/dist/input-postcondition.d.ts.map +0 -1
- package/payload/platform/services/claude-session-manager/dist/input-postcondition.js +0 -50
- package/payload/platform/services/claude-session-manager/dist/input-postcondition.js.map +0 -1
- package/payload/platform/services/claude-session-manager/dist/jsonl-observer.d.ts +0 -30
- package/payload/platform/services/claude-session-manager/dist/jsonl-observer.d.ts.map +0 -1
- package/payload/platform/services/claude-session-manager/dist/jsonl-observer.js +0 -204
- package/payload/platform/services/claude-session-manager/dist/jsonl-observer.js.map +0 -1
- package/payload/platform/services/claude-session-manager/dist/rc-script-spawn.d.ts +0 -80
- package/payload/platform/services/claude-session-manager/dist/rc-script-spawn.d.ts.map +0 -1
- package/payload/platform/services/claude-session-manager/dist/rc-script-spawn.js +0 -306
- package/payload/platform/services/claude-session-manager/dist/rc-script-spawn.js.map +0 -1
- package/payload/platform/services/claude-session-manager/dist/session-store.d.ts +0 -49
- package/payload/platform/services/claude-session-manager/dist/session-store.d.ts.map +0 -1
- package/payload/platform/services/claude-session-manager/dist/session-store.js +0 -52
- package/payload/platform/services/claude-session-manager/dist/session-store.js.map +0 -1
- package/payload/platform/services/claude-session-manager/dist/systemd-spawn.d.ts +0 -83
- package/payload/platform/services/claude-session-manager/dist/systemd-spawn.d.ts.map +0 -1
- package/payload/platform/services/claude-session-manager/dist/systemd-spawn.js +0 -345
- package/payload/platform/services/claude-session-manager/dist/systemd-spawn.js.map +0 -1
- package/payload/platform/services/telegram-channel/dist/turn-follow.d.ts +0 -104
- package/payload/platform/services/telegram-channel/dist/turn-follow.d.ts.map +0 -1
- package/payload/platform/services/telegram-channel/dist/turn-follow.js +0 -408
- package/payload/platform/services/telegram-channel/dist/turn-follow.js.map +0 -1
- package/payload/platform/services/whatsapp-channel/dist/turn-follow.d.ts +0 -104
- package/payload/platform/services/whatsapp-channel/dist/turn-follow.d.ts.map +0 -1
- package/payload/platform/services/whatsapp-channel/dist/turn-follow.js +0 -393
- package/payload/platform/services/whatsapp-channel/dist/turn-follow.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scheduled-seat-id.d.ts","sourceRoot":"","sources":["../../src/lib/scheduled-seat-id.ts"],"names":[],"mappings":"AAEA;;;;;;;;0EAQ0E;AAC1E,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAOxH"}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { createHash } from "node:crypto";
|
|
2
|
-
/** Task 1526 — the per-firing scheduled seat id. A recurring agent-bearing
|
|
3
|
-
* :Event that resumed the deterministic adminSessionIdFor(effectiveAccount,
|
|
4
|
-
* destination) seat accreted every firing into one compaction-lossy session.
|
|
5
|
-
* This id salts the seat with the firing's own eventId + dispatchedAt, so each
|
|
6
|
-
* firing is a session id the manager has never seen and spawns FRESH (the
|
|
7
|
-
* manager's resume-vs-fresh decision keys purely on JSONL existence). Same v4
|
|
8
|
-
* shaping as adminSessionIdFor so it satisfies `claude --session-id`, but a
|
|
9
|
-
* distinct hash domain (`:scheduled:`) so it can never collide with a real
|
|
10
|
-
* inbound seat for the same sender. Pure — reproducible and testable. */
|
|
11
|
-
export function scheduledSeatIdFor(accountId, destination, eventId, dispatchedAt) {
|
|
12
|
-
const b = createHash("sha256").update(`${accountId}:scheduled:${destination}:${eventId}:${dispatchedAt}`).digest().subarray(0, 16);
|
|
13
|
-
const v = Buffer.from(b);
|
|
14
|
-
v[6] = (v[6] & 0x0f) | 0x40;
|
|
15
|
-
v[8] = (v[8] & 0x3f) | 0x80;
|
|
16
|
-
const h = v.toString("hex");
|
|
17
|
-
return `${h.slice(0, 8)}-${h.slice(8, 12)}-${h.slice(12, 16)}-${h.slice(16, 20)}-${h.slice(20, 32)}`;
|
|
18
|
-
}
|
|
19
|
-
//# sourceMappingURL=scheduled-seat-id.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scheduled-seat-id.js","sourceRoot":"","sources":["../../src/lib/scheduled-seat-id.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC;;;;;;;;0EAQ0E;AAC1E,MAAM,UAAU,kBAAkB,CAAC,SAAiB,EAAE,WAAmB,EAAE,OAAe,EAAE,YAAoB;IAC9G,MAAM,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GAAG,SAAS,cAAc,WAAW,IAAI,OAAO,IAAI,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACnI,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACzB,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;IAC5B,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;IAC5B,MAAM,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC5B,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AACvG,CAAC"}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { spawn as realSpawn } from "node:child_process";
|
|
2
|
-
type SpawnFn = typeof realSpawn;
|
|
3
|
-
/** Run the summary. Throws on every failure mode (the caller decides whether a
|
|
4
|
-
* summary failure should degrade gracefully — the verbatim file is already on
|
|
5
|
-
* disk by the time this runs). */
|
|
6
|
-
export declare function summarise(url: string, text: string, _spawn?: SpawnFn): Promise<string>;
|
|
7
|
-
export {};
|
|
8
|
-
//# sourceMappingURL=summarise.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"summarise.d.ts","sourceRoot":"","sources":["../../src/lib/summarise.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAQxD,KAAK,OAAO,GAAG,OAAO,SAAS,CAAC;AAchC;;mCAEmC;AACnC,wBAAsB,SAAS,CAC7B,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EACZ,MAAM,GAAE,OAAmB,GAC1B,OAAO,CAAC,MAAM,CAAC,CAkDjB"}
|
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
// Transformative summary of fetched page text via a Claude Code subprocess.
|
|
2
|
-
//
|
|
3
|
-
// VALIDATE TEXT ──▶ SPAWN claude --print --model <haiku> --max-turns 1 ──▶ STDOUT
|
|
4
|
-
// │ │ │
|
|
5
|
-
// ├─ empty → throw ├─ ENOENT (claude not in PATH) → throw │
|
|
6
|
-
// │ ├─ non-zero exit → throw (stderr + stdout) │
|
|
7
|
-
// │ ├─ timeout → SIGTERM → throw │
|
|
8
|
-
// │ └─ empty stdout → throw │
|
|
9
|
-
// └───────────────────────────────────────────────────────────▶ return text
|
|
10
|
-
//
|
|
11
|
-
// Claude Code handles its own OAuth internally — no API key, no SDK. This is
|
|
12
|
-
// the same mechanism the workflows plugin uses for LLM steps. The summary is
|
|
13
|
-
// transformative, so it does not trip WebFetch's copyright refusal; the
|
|
14
|
-
// verbatim path keeps the model out entirely.
|
|
15
|
-
import { spawn as realSpawn } from "node:child_process";
|
|
16
|
-
/** Haiku is the right tier for a one-shot summary (cheap, fast). Overridable
|
|
17
|
-
* via env for forward-compat with model id changes. */
|
|
18
|
-
const SUMMARY_MODEL = process.env.URL_GET_SUMMARY_MODEL ?? "claude-haiku-4-5";
|
|
19
|
-
const SUMMARY_TIMEOUT_MS = 60_000;
|
|
20
|
-
const MAX_STDERR_BYTES = 4096;
|
|
21
|
-
/** Builds the summarisation prompt. A single principled instruction, not a
|
|
22
|
-
* checklist of conditions — per the project's LLM-classification doctrine,
|
|
23
|
-
* a prescriptive rule list turns the model into a brittle pattern matcher. */
|
|
24
|
-
function buildPrompt(url, text) {
|
|
25
|
-
return (`Summarise the page below for a reader deciding whether to open the full text. ` +
|
|
26
|
-
`Capture what the page is, its main claims, and anything that would matter to ` +
|
|
27
|
-
`someone searching for it later. Write only the summary — no preamble.\n\n` +
|
|
28
|
-
`Source: ${url}\n\n---\n${text}`);
|
|
29
|
-
}
|
|
30
|
-
/** Run the summary. Throws on every failure mode (the caller decides whether a
|
|
31
|
-
* summary failure should degrade gracefully — the verbatim file is already on
|
|
32
|
-
* disk by the time this runs). */
|
|
33
|
-
export async function summarise(url, text, _spawn = realSpawn) {
|
|
34
|
-
if (!text.trim()) {
|
|
35
|
-
throw new Error("nothing to summarise — cleaned text is empty");
|
|
36
|
-
}
|
|
37
|
-
const prompt = buildPrompt(url, text);
|
|
38
|
-
const args = [
|
|
39
|
-
"--print",
|
|
40
|
-
"--model",
|
|
41
|
-
SUMMARY_MODEL,
|
|
42
|
-
"--max-turns",
|
|
43
|
-
"1",
|
|
44
|
-
"--permission-mode",
|
|
45
|
-
"dontAsk",
|
|
46
|
-
prompt,
|
|
47
|
-
];
|
|
48
|
-
return new Promise((resolve, reject) => {
|
|
49
|
-
const proc = _spawn("claude", args, { stdio: ["ignore", "pipe", "pipe"] });
|
|
50
|
-
let stdout = "";
|
|
51
|
-
let stderr = "";
|
|
52
|
-
proc.stdout?.on("data", (chunk) => {
|
|
53
|
-
stdout += chunk.toString("utf-8");
|
|
54
|
-
});
|
|
55
|
-
proc.stderr?.on("data", (chunk) => {
|
|
56
|
-
if (stderr.length < MAX_STDERR_BYTES) {
|
|
57
|
-
stderr += chunk.toString("utf-8").slice(0, MAX_STDERR_BYTES - stderr.length);
|
|
58
|
-
}
|
|
59
|
-
});
|
|
60
|
-
const timer = setTimeout(() => {
|
|
61
|
-
proc.kill("SIGTERM");
|
|
62
|
-
reject(new Error(`summary timed out after ${SUMMARY_TIMEOUT_MS}ms`));
|
|
63
|
-
}, SUMMARY_TIMEOUT_MS);
|
|
64
|
-
proc.on("close", (code) => {
|
|
65
|
-
clearTimeout(timer);
|
|
66
|
-
if (code !== 0) {
|
|
67
|
-
const tail = stderr.trim() ? ` stderr: ${stderr.trim()}` : "";
|
|
68
|
-
reject(new Error(`claude exited ${code}${tail}`));
|
|
69
|
-
return;
|
|
70
|
-
}
|
|
71
|
-
if (!stdout.trim()) {
|
|
72
|
-
reject(new Error("claude returned an empty summary"));
|
|
73
|
-
return;
|
|
74
|
-
}
|
|
75
|
-
resolve(stdout.trim());
|
|
76
|
-
});
|
|
77
|
-
proc.on("error", (err) => {
|
|
78
|
-
clearTimeout(timer);
|
|
79
|
-
reject(new Error(`failed to spawn claude: ${err.message}`));
|
|
80
|
-
});
|
|
81
|
-
});
|
|
82
|
-
}
|
|
83
|
-
//# sourceMappingURL=summarise.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"summarise.js","sourceRoot":"","sources":["../../src/lib/summarise.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,151 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* LLM calls for workflow steps via Claude Code subprocess.
|
|
3
|
-
*
|
|
4
|
-
* Spawns `claude --print` as a child process with the resolved prompt.
|
|
5
|
-
* Claude Code handles its own OAuth authentication internally — no
|
|
6
|
-
* credential reading, token refresh, or API endpoint logic needed here.
|
|
7
|
-
* This is the same mechanism the admin chat uses (claude-agent.ts).
|
|
8
|
-
*
|
|
9
|
-
* Two spawn modes:
|
|
10
|
-
*
|
|
11
|
-
* ONE-SHOT (no mcpServers)
|
|
12
|
-
* ────────────────────────
|
|
13
|
-
* VALIDATE PROMPT
|
|
14
|
-
* │
|
|
15
|
-
* ├─ empty → throw (no silent fallback)
|
|
16
|
-
* │
|
|
17
|
-
* v
|
|
18
|
-
* SPAWN claude --print --model <model> --max-turns 1
|
|
19
|
-
* │
|
|
20
|
-
* ├─ ENOENT (not in PATH) → throw
|
|
21
|
-
* ├─ non-zero exit → throw with stderr + stdout
|
|
22
|
-
* ├─ timeout → SIGTERM → throw
|
|
23
|
-
* ├─ empty stdout → throw
|
|
24
|
-
* └─ stdout text → return
|
|
25
|
-
*
|
|
26
|
-
* AGENTIC (mcpServers declared)
|
|
27
|
-
* ─────────────────────────────
|
|
28
|
-
* VALIDATE PROMPT
|
|
29
|
-
* │
|
|
30
|
-
* v
|
|
31
|
-
* WRITE TEMP MCP CONFIG (mkdtemp + writeFile)
|
|
32
|
-
* │
|
|
33
|
-
* ├─ disk error → throw (cleanup skipped — nothing to clean)
|
|
34
|
-
* │
|
|
35
|
-
* v
|
|
36
|
-
* SPAWN claude --print --model <model> --max-turns <N>
|
|
37
|
-
* --mcp-config <tmp/mcp.json> --strict-mcp-config
|
|
38
|
-
* --permission-mode dontAsk
|
|
39
|
-
* │
|
|
40
|
-
* ├─ same error paths as one-shot
|
|
41
|
-
* │
|
|
42
|
-
* v
|
|
43
|
-
* CLEANUP TEMP CONFIG (finally — always runs)
|
|
44
|
-
* │
|
|
45
|
-
* ├─ ENOENT → swallow (already cleaned or never written)
|
|
46
|
-
* └─ other error → log, don't throw (cleanup must not mask spawn error)
|
|
47
|
-
*
|
|
48
|
-
* probeLlmHealth() shares the same spawn path with a trivial "pong"
|
|
49
|
-
* prompt and a shorter timeout. Used as the pre-flight check before
|
|
50
|
-
* executing workflow LLM steps (Task 74 — graceful degradation).
|
|
51
|
-
*/
|
|
52
|
-
import type { McpServerConfig } from "./step-resolver.js";
|
|
53
|
-
interface SpawnedChildLike {
|
|
54
|
-
stdout: {
|
|
55
|
-
on(event: "data", cb: (chunk: Buffer) => void): void;
|
|
56
|
-
};
|
|
57
|
-
stderr: {
|
|
58
|
-
on(event: "data", cb: (chunk: Buffer) => void): void;
|
|
59
|
-
};
|
|
60
|
-
on(event: "close", cb: (code: number | null) => void): void;
|
|
61
|
-
on(event: "error", cb: (err: Error) => void): void;
|
|
62
|
-
kill(signal?: string): void;
|
|
63
|
-
}
|
|
64
|
-
type SpawnFn = (cmd: string, args: string[], opts: unknown) => SpawnedChildLike;
|
|
65
|
-
export interface LlmCallParams {
|
|
66
|
-
prompt: string;
|
|
67
|
-
model: string;
|
|
68
|
-
maxTokens?: number;
|
|
69
|
-
timeoutMs: number;
|
|
70
|
-
/** MCP server bindings for agentic steps. */
|
|
71
|
-
mcpServers?: Record<string, McpServerConfig>;
|
|
72
|
-
/** Max agent turns (default 1, or 10 when mcpServers present). */
|
|
73
|
-
maxTurns?: number;
|
|
74
|
-
/**
|
|
75
|
-
* Optional spawn function override — used only by tests to inject a
|
|
76
|
-
* fake child process. Production callers must omit this.
|
|
77
|
-
*/
|
|
78
|
-
_spawn?: SpawnFn;
|
|
79
|
-
}
|
|
80
|
-
export interface ProbeLlmHealthParams {
|
|
81
|
-
model: string;
|
|
82
|
-
/** Probe timeout — defaults to 10 seconds. */
|
|
83
|
-
timeoutMs?: number;
|
|
84
|
-
/** Test-only spawn injection. */
|
|
85
|
-
_spawn?: SpawnFn;
|
|
86
|
-
}
|
|
87
|
-
export interface ProbeResult {
|
|
88
|
-
ok: boolean;
|
|
89
|
-
latencyMs: number;
|
|
90
|
-
/** Set when ok is false. One-line error summary suitable for logs and
|
|
91
|
-
* substitution into fallback template `{{_error}}`. */
|
|
92
|
-
error?: string;
|
|
93
|
-
}
|
|
94
|
-
/**
|
|
95
|
-
* Why readAdminModel returns a tuple instead of string | null:
|
|
96
|
-
* the caller persists the result into WorkflowRun.error, which the admin
|
|
97
|
-
* agent reads. A silent null collapsed six distinct failure modes (ENOENT,
|
|
98
|
-
* EACCES, parse error, missing field, wrong type, empty string) into a
|
|
99
|
-
* single error string asserting "adminModel both unset" — which was often
|
|
100
|
-
* a lie (the file existed and was correct; something else had failed).
|
|
101
|
-
* The tuple surfaces the exact reason so the persisted error and the
|
|
102
|
-
* stderr log agree, and the admin agent knows whether to inspect the
|
|
103
|
-
* file, the permissions, the path, or a concurrent-write race.
|
|
104
|
-
*/
|
|
105
|
-
export type AdminModelReason = "ok" | "enoent" | "eacces" | "fs_error" | "parse_error" | "field_missing" | "field_wrong_type" | "field_empty";
|
|
106
|
-
export interface AdminModelResolution {
|
|
107
|
-
/** Model ID when reason is "ok"; null for every failure mode. */
|
|
108
|
-
model: string | null;
|
|
109
|
-
reason: AdminModelReason;
|
|
110
|
-
/** Absolute path attempted — included in failure logs so the operator
|
|
111
|
-
* can inspect the exact file that was read. */
|
|
112
|
-
path: string;
|
|
113
|
-
/** Underlying error message for fs_error and parse_error. */
|
|
114
|
-
error?: string;
|
|
115
|
-
}
|
|
116
|
-
/**
|
|
117
|
-
* Read the account's adminModel from account.json.
|
|
118
|
-
* Returns {model, reason, path, error?} — callers branch on .model (null
|
|
119
|
-
* means fail) and may surface .reason/.path into user-visible errors.
|
|
120
|
-
*/
|
|
121
|
-
export declare function readAdminModel(platformRoot: string, accountId: string): AdminModelResolution;
|
|
122
|
-
/**
|
|
123
|
-
* Execute an LLM call by spawning Claude Code.
|
|
124
|
-
*
|
|
125
|
-
* When mcpServers is provided, spawns in agentic mode: writes a temp
|
|
126
|
-
* config file, adds --mcp-config and --strict-mcp-config flags, and
|
|
127
|
-
* uses the step's maxTurns (or default 10) instead of 1.
|
|
128
|
-
*
|
|
129
|
-
* Returns the model's text response. The caller is responsible for
|
|
130
|
-
* parsing the response (JSON or raw text) via parseStepOutput().
|
|
131
|
-
*/
|
|
132
|
-
export declare function executeLlmCall(params: LlmCallParams): Promise<string>;
|
|
133
|
-
/**
|
|
134
|
-
* Lightweight pre-flight probe for LLM availability.
|
|
135
|
-
*
|
|
136
|
-
* Spawns `claude --print` with a trivial prompt ("pong") and a short
|
|
137
|
-
* timeout. Any failure mode that would cause a real LLM step to fail
|
|
138
|
-
* (missing binary, dead OAuth token, Anthropic outage, network partition)
|
|
139
|
-
* also fails this probe — it is the strongest available signal short
|
|
140
|
-
* of running the real workflow.
|
|
141
|
-
*
|
|
142
|
-
* Called at most once per workflow run, only when the workflow contains
|
|
143
|
-
* at least one LLM step. Per-step spawn failures mid-run are handled
|
|
144
|
-
* separately by the workflow-execute convergence arm.
|
|
145
|
-
*
|
|
146
|
-
* SUCCESS → { ok: true, latencyMs }
|
|
147
|
-
* FAILURE → { ok: false, latencyMs, error: one-line summary }
|
|
148
|
-
*/
|
|
149
|
-
export declare function probeLlmHealth(params: ProbeLlmHealthParams): Promise<ProbeResult>;
|
|
150
|
-
export {};
|
|
151
|
-
//# sourceMappingURL=llm-call.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"llm-call.d.ts","sourceRoot":"","sources":["../../src/lib/llm-call.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDG;AAMH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAK1D,UAAU,gBAAgB;IACxB,MAAM,EAAE;QAAE,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI,CAAA;KAAE,CAAC;IACjE,MAAM,EAAE;QAAE,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI,CAAA;KAAE,CAAC;IACjE,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,GAAG,IAAI,CAAC;IAC5D,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,IAAI,GAAG,IAAI,CAAC;IACnD,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,KAAK,OAAO,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,OAAO,KAAK,gBAAgB,CAAC;AAMhF,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,6CAA6C;IAC7C,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAC7C,kEAAkE;IAClE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,8CAA8C;IAC9C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iCAAiC;IACjC,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,OAAO,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB;4DACwD;IACxD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAMD;;;;;;;;;;GAUG;AACH,MAAM,MAAM,gBAAgB,GACxB,IAAI,GACJ,QAAQ,GACR,QAAQ,GACR,UAAU,GACV,aAAa,GACb,eAAe,GACf,kBAAkB,GAClB,aAAa,CAAC;AAElB,MAAM,WAAW,oBAAoB;IACnC,iEAAiE;IACjE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,MAAM,EAAE,gBAAgB,CAAC;IACzB;oDACgD;IAChD,IAAI,EAAE,MAAM,CAAC;IACb,6DAA6D;IAC7D,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,oBAAoB,CAgD5F;AAsED;;;;;;;;;GASG;AACH,wBAAsB,cAAc,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CA6F3E;AAQD;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,oBAAoB,GAC3B,OAAO,CAAC,WAAW,CAAC,CAyBtB"}
|
|
@@ -1,299 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* LLM calls for workflow steps via Claude Code subprocess.
|
|
3
|
-
*
|
|
4
|
-
* Spawns `claude --print` as a child process with the resolved prompt.
|
|
5
|
-
* Claude Code handles its own OAuth authentication internally — no
|
|
6
|
-
* credential reading, token refresh, or API endpoint logic needed here.
|
|
7
|
-
* This is the same mechanism the admin chat uses (claude-agent.ts).
|
|
8
|
-
*
|
|
9
|
-
* Two spawn modes:
|
|
10
|
-
*
|
|
11
|
-
* ONE-SHOT (no mcpServers)
|
|
12
|
-
* ────────────────────────
|
|
13
|
-
* VALIDATE PROMPT
|
|
14
|
-
* │
|
|
15
|
-
* ├─ empty → throw (no silent fallback)
|
|
16
|
-
* │
|
|
17
|
-
* v
|
|
18
|
-
* SPAWN claude --print --model <model> --max-turns 1
|
|
19
|
-
* │
|
|
20
|
-
* ├─ ENOENT (not in PATH) → throw
|
|
21
|
-
* ├─ non-zero exit → throw with stderr + stdout
|
|
22
|
-
* ├─ timeout → SIGTERM → throw
|
|
23
|
-
* ├─ empty stdout → throw
|
|
24
|
-
* └─ stdout text → return
|
|
25
|
-
*
|
|
26
|
-
* AGENTIC (mcpServers declared)
|
|
27
|
-
* ─────────────────────────────
|
|
28
|
-
* VALIDATE PROMPT
|
|
29
|
-
* │
|
|
30
|
-
* v
|
|
31
|
-
* WRITE TEMP MCP CONFIG (mkdtemp + writeFile)
|
|
32
|
-
* │
|
|
33
|
-
* ├─ disk error → throw (cleanup skipped — nothing to clean)
|
|
34
|
-
* │
|
|
35
|
-
* v
|
|
36
|
-
* SPAWN claude --print --model <model> --max-turns <N>
|
|
37
|
-
* --mcp-config <tmp/mcp.json> --strict-mcp-config
|
|
38
|
-
* --permission-mode dontAsk
|
|
39
|
-
* │
|
|
40
|
-
* ├─ same error paths as one-shot
|
|
41
|
-
* │
|
|
42
|
-
* v
|
|
43
|
-
* CLEANUP TEMP CONFIG (finally — always runs)
|
|
44
|
-
* │
|
|
45
|
-
* ├─ ENOENT → swallow (already cleaned or never written)
|
|
46
|
-
* └─ other error → log, don't throw (cleanup must not mask spawn error)
|
|
47
|
-
*
|
|
48
|
-
* probeLlmHealth() shares the same spawn path with a trivial "pong"
|
|
49
|
-
* prompt and a shorter timeout. Used as the pre-flight check before
|
|
50
|
-
* executing workflow LLM steps (Task 74 — graceful degradation).
|
|
51
|
-
*/
|
|
52
|
-
import { spawn as realSpawn } from "node:child_process";
|
|
53
|
-
import { readFileSync, writeFileSync, rmSync, mkdtempSync } from "node:fs";
|
|
54
|
-
import { resolve, join } from "node:path";
|
|
55
|
-
import { tmpdir } from "node:os";
|
|
56
|
-
/**
|
|
57
|
-
* Read the account's adminModel from account.json.
|
|
58
|
-
* Returns {model, reason, path, error?} — callers branch on .model (null
|
|
59
|
-
* means fail) and may surface .reason/.path into user-visible errors.
|
|
60
|
-
*/
|
|
61
|
-
export function readAdminModel(platformRoot, accountId) {
|
|
62
|
-
// Validate accountId — block path traversal
|
|
63
|
-
if (accountId.includes("..") || accountId.includes("/") || accountId.includes("\\")) {
|
|
64
|
-
throw new Error(`Invalid accountId: "${accountId}" — path traversal blocked`);
|
|
65
|
-
}
|
|
66
|
-
const configPath = resolve(platformRoot, "..", "data", "accounts", accountId, "account.json");
|
|
67
|
-
let raw;
|
|
68
|
-
try {
|
|
69
|
-
raw = readFileSync(configPath, "utf-8");
|
|
70
|
-
}
|
|
71
|
-
catch (err) {
|
|
72
|
-
const code = err instanceof Error && "code" in err
|
|
73
|
-
? err.code
|
|
74
|
-
: undefined;
|
|
75
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
76
|
-
const reason = code === "ENOENT" ? "enoent" :
|
|
77
|
-
code === "EACCES" ? "eacces" :
|
|
78
|
-
"fs_error";
|
|
79
|
-
logResolutionFailure(reason, configPath, message);
|
|
80
|
-
return { model: null, reason, path: configPath, error: message };
|
|
81
|
-
}
|
|
82
|
-
let config;
|
|
83
|
-
try {
|
|
84
|
-
config = JSON.parse(raw);
|
|
85
|
-
}
|
|
86
|
-
catch (err) {
|
|
87
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
88
|
-
logResolutionFailure("parse_error", configPath, message);
|
|
89
|
-
return { model: null, reason: "parse_error", path: configPath, error: message };
|
|
90
|
-
}
|
|
91
|
-
const adminModel = config.adminModel;
|
|
92
|
-
if (adminModel === undefined) {
|
|
93
|
-
logResolutionFailure("field_missing", configPath);
|
|
94
|
-
return { model: null, reason: "field_missing", path: configPath };
|
|
95
|
-
}
|
|
96
|
-
if (typeof adminModel !== "string") {
|
|
97
|
-
logResolutionFailure("field_wrong_type", configPath, `adminModel is typeof ${typeof adminModel}`);
|
|
98
|
-
return { model: null, reason: "field_wrong_type", path: configPath };
|
|
99
|
-
}
|
|
100
|
-
if (adminModel === "") {
|
|
101
|
-
logResolutionFailure("field_empty", configPath);
|
|
102
|
-
return { model: null, reason: "field_empty", path: configPath };
|
|
103
|
-
}
|
|
104
|
-
return { model: adminModel, reason: "ok", path: configPath };
|
|
105
|
-
}
|
|
106
|
-
function logResolutionFailure(reason, path, error) {
|
|
107
|
-
const errSegment = error ? ` error=${error}` : "";
|
|
108
|
-
console.error(`[llm-call] adminModel resolution FAILED: reason=${reason} path=${path}${errSegment}`);
|
|
109
|
-
}
|
|
110
|
-
// ─────────────────────────────────────────────────────────────
|
|
111
|
-
// Temp MCP config management
|
|
112
|
-
// ─────────────────────────────────────────────────────────────
|
|
113
|
-
/**
|
|
114
|
-
* Write a temporary MCP config file for agentic steps.
|
|
115
|
-
* Returns the path to the config file.
|
|
116
|
-
*
|
|
117
|
-
* The file is written to a unique temp directory (mkdtempSync)
|
|
118
|
-
* to avoid collisions between concurrent workflow executions.
|
|
119
|
-
* Format matches Claude Code's --mcp-config JSON input:
|
|
120
|
-
* { "mcpServers": { "name": { "command": ..., "args": ..., "env": ... } } }
|
|
121
|
-
*/
|
|
122
|
-
function writeTempMcpConfig(mcpServers) {
|
|
123
|
-
const dir = mkdtempSync(join(tmpdir(), "maxy-mcp-"));
|
|
124
|
-
const configPath = join(dir, "mcp.json");
|
|
125
|
-
const config = { mcpServers };
|
|
126
|
-
try {
|
|
127
|
-
writeFileSync(configPath, JSON.stringify(config), "utf-8");
|
|
128
|
-
console.error(`[llm-call] agentic: wrote MCP config to ${configPath}`);
|
|
129
|
-
return configPath;
|
|
130
|
-
}
|
|
131
|
-
catch (err) {
|
|
132
|
-
// Clean up the empty temp dir on write failure
|
|
133
|
-
try {
|
|
134
|
-
rmSync(dir, { recursive: true });
|
|
135
|
-
}
|
|
136
|
-
catch { /* best-effort */ }
|
|
137
|
-
throw new Error(`Failed to write MCP config for agentic step: ${err instanceof Error ? err.message : String(err)}`);
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
/**
|
|
141
|
-
* Clean up a temporary MCP config file and its parent directory.
|
|
142
|
-
* Never throws — cleanup failures are logged but must not mask
|
|
143
|
-
* the spawn result (success or error).
|
|
144
|
-
*/
|
|
145
|
-
function cleanupTempMcpConfig(configPath) {
|
|
146
|
-
try {
|
|
147
|
-
// configPath is <tmpdir>/maxy-mcp-XXXXXX/mcp.json — remove the parent dir
|
|
148
|
-
const dir = resolve(configPath, "..");
|
|
149
|
-
rmSync(dir, { recursive: true });
|
|
150
|
-
console.error(`[llm-call] agentic: cleanup MCP config ${configPath}`);
|
|
151
|
-
}
|
|
152
|
-
catch (err) {
|
|
153
|
-
// ENOENT is fine (already cleaned or never fully written)
|
|
154
|
-
if (err instanceof Error && "code" in err && err.code === "ENOENT") {
|
|
155
|
-
return;
|
|
156
|
-
}
|
|
157
|
-
console.error(`[llm-call] agentic: cleanup failed for ${configPath}: ${err instanceof Error ? err.message : String(err)}`);
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
// ─────────────────────────────────────────────────────────────
|
|
161
|
-
// LLM call via Claude Code subprocess
|
|
162
|
-
// ─────────────────────────────────────────────────────────────
|
|
163
|
-
/** Max stderr to capture — enough for diagnostics, bounded to prevent OOM. */
|
|
164
|
-
const MAX_STDERR_BYTES = 4096;
|
|
165
|
-
/** Default maxTurns when mcpServers is declared but maxTurns is omitted. */
|
|
166
|
-
const DEFAULT_AGENTIC_MAX_TURNS = 10;
|
|
167
|
-
/**
|
|
168
|
-
* Execute an LLM call by spawning Claude Code.
|
|
169
|
-
*
|
|
170
|
-
* When mcpServers is provided, spawns in agentic mode: writes a temp
|
|
171
|
-
* config file, adds --mcp-config and --strict-mcp-config flags, and
|
|
172
|
-
* uses the step's maxTurns (or default 10) instead of 1.
|
|
173
|
-
*
|
|
174
|
-
* Returns the model's text response. The caller is responsible for
|
|
175
|
-
* parsing the response (JSON or raw text) via parseStepOutput().
|
|
176
|
-
*/
|
|
177
|
-
export async function executeLlmCall(params) {
|
|
178
|
-
const { prompt, model, timeoutMs, mcpServers, maxTurns } = params;
|
|
179
|
-
const spawn = params._spawn ?? realSpawn;
|
|
180
|
-
if (!prompt.trim()) {
|
|
181
|
-
throw new Error("LLM step has an empty prompt — nothing to send to the model.");
|
|
182
|
-
}
|
|
183
|
-
const isAgentic = mcpServers !== undefined && Object.keys(mcpServers).length > 0;
|
|
184
|
-
const effectiveMaxTurns = isAgentic
|
|
185
|
-
? (maxTurns ?? DEFAULT_AGENTIC_MAX_TURNS)
|
|
186
|
-
: (maxTurns ?? 1);
|
|
187
|
-
const serverNames = isAgentic ? Object.keys(mcpServers) : [];
|
|
188
|
-
console.error(`[llm-call] spawning Claude Code: model=${model} maxTurns=${effectiveMaxTurns}` +
|
|
189
|
-
(isAgentic ? ` mcpServers=[${serverNames.join(",")}]` : ""));
|
|
190
|
-
// Write temp MCP config for agentic steps (before building args)
|
|
191
|
-
let tempConfigPath;
|
|
192
|
-
if (isAgentic) {
|
|
193
|
-
tempConfigPath = writeTempMcpConfig(mcpServers);
|
|
194
|
-
}
|
|
195
|
-
const args = [
|
|
196
|
-
"--print",
|
|
197
|
-
"--model", model,
|
|
198
|
-
"--max-turns", String(effectiveMaxTurns),
|
|
199
|
-
"--permission-mode", "dontAsk",
|
|
200
|
-
];
|
|
201
|
-
if (tempConfigPath) {
|
|
202
|
-
args.push("--mcp-config", tempConfigPath, "--strict-mcp-config");
|
|
203
|
-
}
|
|
204
|
-
// Prompt is the last positional argument
|
|
205
|
-
args.push(prompt);
|
|
206
|
-
try {
|
|
207
|
-
return await new Promise((promiseResolve, reject) => {
|
|
208
|
-
const proc = spawn("claude", args, {
|
|
209
|
-
stdio: ["ignore", "pipe", "pipe"],
|
|
210
|
-
});
|
|
211
|
-
let stdout = "";
|
|
212
|
-
let stderr = "";
|
|
213
|
-
proc.stdout.on("data", (chunk) => {
|
|
214
|
-
stdout += chunk.toString("utf-8");
|
|
215
|
-
});
|
|
216
|
-
proc.stderr.on("data", (chunk) => {
|
|
217
|
-
if (stderr.length < MAX_STDERR_BYTES) {
|
|
218
|
-
stderr += chunk.toString("utf-8").slice(0, MAX_STDERR_BYTES - stderr.length);
|
|
219
|
-
}
|
|
220
|
-
});
|
|
221
|
-
const timer = setTimeout(() => {
|
|
222
|
-
proc.kill("SIGTERM");
|
|
223
|
-
reject(new Error(`LLM call timed out after ${timeoutMs}ms`));
|
|
224
|
-
}, timeoutMs);
|
|
225
|
-
proc.on("close", (code) => {
|
|
226
|
-
clearTimeout(timer);
|
|
227
|
-
if (code !== 0) {
|
|
228
|
-
const stderrSnippet = stderr ? `\nstderr: ${stderr.trim()}` : "";
|
|
229
|
-
const stdoutSnippet = stdout
|
|
230
|
-
? `\nstdout: ${stdout.slice(0, MAX_STDERR_BYTES).trim()}`
|
|
231
|
-
: "";
|
|
232
|
-
reject(new Error(`Claude Code exited with code ${code}${stderrSnippet}${stdoutSnippet}`));
|
|
233
|
-
return;
|
|
234
|
-
}
|
|
235
|
-
if (!stdout.trim()) {
|
|
236
|
-
reject(new Error("Claude Code returned an empty response."));
|
|
237
|
-
return;
|
|
238
|
-
}
|
|
239
|
-
console.error(`[llm-call] response: ${stdout.length} chars`);
|
|
240
|
-
promiseResolve(stdout);
|
|
241
|
-
});
|
|
242
|
-
proc.on("error", (err) => {
|
|
243
|
-
clearTimeout(timer);
|
|
244
|
-
reject(new Error(`Failed to spawn Claude Code: ${err.message}`));
|
|
245
|
-
});
|
|
246
|
-
});
|
|
247
|
-
}
|
|
248
|
-
finally {
|
|
249
|
-
if (tempConfigPath) {
|
|
250
|
-
cleanupTempMcpConfig(tempConfigPath);
|
|
251
|
-
}
|
|
252
|
-
}
|
|
253
|
-
}
|
|
254
|
-
// ─────────────────────────────────────────────────────────────
|
|
255
|
-
// Health probe — pre-flight check before running LLM workflow steps
|
|
256
|
-
// ─────────────────────────────────────────────────────────────
|
|
257
|
-
const DEFAULT_PROBE_TIMEOUT_MS = 10_000;
|
|
258
|
-
/**
|
|
259
|
-
* Lightweight pre-flight probe for LLM availability.
|
|
260
|
-
*
|
|
261
|
-
* Spawns `claude --print` with a trivial prompt ("pong") and a short
|
|
262
|
-
* timeout. Any failure mode that would cause a real LLM step to fail
|
|
263
|
-
* (missing binary, dead OAuth token, Anthropic outage, network partition)
|
|
264
|
-
* also fails this probe — it is the strongest available signal short
|
|
265
|
-
* of running the real workflow.
|
|
266
|
-
*
|
|
267
|
-
* Called at most once per workflow run, only when the workflow contains
|
|
268
|
-
* at least one LLM step. Per-step spawn failures mid-run are handled
|
|
269
|
-
* separately by the workflow-execute convergence arm.
|
|
270
|
-
*
|
|
271
|
-
* SUCCESS → { ok: true, latencyMs }
|
|
272
|
-
* FAILURE → { ok: false, latencyMs, error: one-line summary }
|
|
273
|
-
*/
|
|
274
|
-
export async function probeLlmHealth(params) {
|
|
275
|
-
const { model, timeoutMs = DEFAULT_PROBE_TIMEOUT_MS, _spawn } = params;
|
|
276
|
-
const start = Date.now();
|
|
277
|
-
console.error(`[llm-probe] probing: model=${model}`);
|
|
278
|
-
try {
|
|
279
|
-
await executeLlmCall({
|
|
280
|
-
prompt: "pong",
|
|
281
|
-
model,
|
|
282
|
-
maxTokens: 8,
|
|
283
|
-
timeoutMs,
|
|
284
|
-
_spawn,
|
|
285
|
-
});
|
|
286
|
-
const latencyMs = Date.now() - start;
|
|
287
|
-
console.error(`[llm-probe] ok: latencyMs=${latencyMs}`);
|
|
288
|
-
return { ok: true, latencyMs };
|
|
289
|
-
}
|
|
290
|
-
catch (err) {
|
|
291
|
-
const latencyMs = Date.now() - start;
|
|
292
|
-
const error = err instanceof Error ? err.message : String(err);
|
|
293
|
-
// Collapse multi-line errors to a one-liner for log + template substitution
|
|
294
|
-
const oneLine = error.replace(/\s*\n\s*/g, " — ");
|
|
295
|
-
console.error(`[llm-probe] FAILED: ${oneLine} latencyMs=${latencyMs}`);
|
|
296
|
-
return { ok: false, latencyMs, error: oneLine };
|
|
297
|
-
}
|
|
298
|
-
}
|
|
299
|
-
//# sourceMappingURL=llm-call.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"llm-call.js","sourceRoot":"","sources":["../../src/lib/llm-call.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
export interface ClientAdminRow {
|
|
2
|
-
accountId: string;
|
|
3
|
-
/** Empty/undefined ⇒ absent. Set-but-not-live ⇒ dangling. */
|
|
4
|
-
managingAdminUserId?: string;
|
|
5
|
-
}
|
|
6
|
-
export interface AccountAdminCensus {
|
|
7
|
-
total: number;
|
|
8
|
-
assigned: number;
|
|
9
|
-
absent: number;
|
|
10
|
-
dangling: number;
|
|
11
|
-
absentIds: string[];
|
|
12
|
-
danglingIds: string[];
|
|
13
|
-
}
|
|
14
|
-
/** Pure reconcile: classify each client account against the live house admin
|
|
15
|
-
* set. A row with no managingAdminUserId is `absent`; a row whose id is not in
|
|
16
|
-
* `liveHouseAdminUserIds` is `dangling`; otherwise `assigned`. Deterministic
|
|
17
|
-
* and IO-free so the boundaries are unit-testable. */
|
|
18
|
-
export declare function reconcileAccountAdminCensus(clients: ClientAdminRow[], liveHouseAdminUserIds: string[]): AccountAdminCensus;
|
|
19
|
-
/** The census line. Offender ids are logged in full (not truncated) so each
|
|
20
|
-
* correlates directly with an account dir; `-` marks an empty list so every
|
|
21
|
-
* field is present and greppable. Healthy: `absent=0 dangling=0`. */
|
|
22
|
-
export declare function formatCensusLine(c: AccountAdminCensus): string;
|
|
23
|
-
export interface AccountAdminCensusDeps {
|
|
24
|
-
accountsRoot: string;
|
|
25
|
-
logger: (line: string) => void;
|
|
26
|
-
}
|
|
27
|
-
/** Run one census pass and log a single line. Filesystem-only and best-effort:
|
|
28
|
-
* an unreadable accounts root yields `total=0` rather than throwing. */
|
|
29
|
-
export declare function emitAccountAdminCensus(deps: AccountAdminCensusDeps): void;
|
|
30
|
-
export interface AccountAdminCensusAudit {
|
|
31
|
-
start(): void;
|
|
32
|
-
stop(): void;
|
|
33
|
-
}
|
|
34
|
-
/** Standing periodic census. Unref'd interval so it never holds the process
|
|
35
|
-
* open; each tick re-emits best-effort. */
|
|
36
|
-
export declare function createAccountAdminCensus(deps: AccountAdminCensusDeps & {
|
|
37
|
-
intervalMs: number;
|
|
38
|
-
}): AccountAdminCensusAudit;
|
|
39
|
-
//# sourceMappingURL=account-admin-census.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"account-admin-census.d.ts","sourceRoot":"","sources":["../src/account-admin-census.ts"],"names":[],"mappings":"AAiBA,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAA;IACjB,6DAA6D;IAC7D,mBAAmB,CAAC,EAAE,MAAM,CAAA;CAC7B;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,EAAE,CAAA;IACnB,WAAW,EAAE,MAAM,EAAE,CAAA;CACtB;AAED;;;uDAGuD;AACvD,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,cAAc,EAAE,EACzB,qBAAqB,EAAE,MAAM,EAAE,GAC9B,kBAAkB,CAmBpB;AAED;;sEAEsE;AACtE,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,kBAAkB,GAAG,MAAM,CAI9D;AAsDD,MAAM,WAAW,sBAAsB;IACrC,YAAY,EAAE,MAAM,CAAA;IACpB,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;CAC/B;AAED;yEACyE;AACzE,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,sBAAsB,GAAG,IAAI,CAOzE;AAED,MAAM,WAAW,uBAAuB;IACtC,KAAK,IAAI,IAAI,CAAA;IACb,IAAI,IAAI,IAAI,CAAA;CACb;AAED;4CAC4C;AAC5C,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,sBAAsB,GAAG;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,GACpD,uBAAuB,CAiBzB"}
|