@shuyhere/takotako 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CONTRIBUTING.md +84 -0
- package/LICENSE +21 -0
- package/README.md +171 -0
- package/dist/agents/communication.d.ts +48 -0
- package/dist/agents/communication.d.ts.map +1 -0
- package/dist/agents/communication.js +123 -0
- package/dist/agents/communication.js.map +1 -0
- package/dist/agents/config.d.ts +52 -0
- package/dist/agents/config.d.ts.map +1 -0
- package/dist/agents/config.js +65 -0
- package/dist/agents/config.js.map +1 -0
- package/dist/agents/model-catalog.d.ts +49 -0
- package/dist/agents/model-catalog.d.ts.map +1 -0
- package/dist/agents/model-catalog.js +79 -0
- package/dist/agents/model-catalog.js.map +1 -0
- package/dist/agents/registry.d.ts +71 -0
- package/dist/agents/registry.d.ts.map +1 -0
- package/dist/agents/registry.js +297 -0
- package/dist/agents/registry.js.map +1 -0
- package/dist/agents/roles.d.ts +79 -0
- package/dist/agents/roles.d.ts.map +1 -0
- package/dist/agents/roles.js +174 -0
- package/dist/agents/roles.js.map +1 -0
- package/dist/agents/subagent.d.ts +124 -0
- package/dist/agents/subagent.d.ts.map +1 -0
- package/dist/agents/subagent.js +352 -0
- package/dist/agents/subagent.js.map +1 -0
- package/dist/agents/templates.d.ts +18 -0
- package/dist/agents/templates.d.ts.map +1 -0
- package/dist/agents/templates.js +341 -0
- package/dist/agents/templates.js.map +1 -0
- package/dist/agents/thread-binding.d.ts +77 -0
- package/dist/agents/thread-binding.d.ts.map +1 -0
- package/dist/agents/thread-binding.js +167 -0
- package/dist/agents/thread-binding.js.map +1 -0
- package/dist/auth/agent-profiles.d.ts +46 -0
- package/dist/auth/agent-profiles.d.ts.map +1 -0
- package/dist/auth/agent-profiles.js +97 -0
- package/dist/auth/agent-profiles.js.map +1 -0
- package/dist/auth/allow-from.d.ts +27 -0
- package/dist/auth/allow-from.d.ts.map +1 -0
- package/dist/auth/allow-from.js +118 -0
- package/dist/auth/allow-from.js.map +1 -0
- package/dist/auth/oauth.d.ts +66 -0
- package/dist/auth/oauth.d.ts.map +1 -0
- package/dist/auth/oauth.js +253 -0
- package/dist/auth/oauth.js.map +1 -0
- package/dist/auth/storage.d.ts +69 -0
- package/dist/auth/storage.d.ts.map +1 -0
- package/dist/auth/storage.js +157 -0
- package/dist/auth/storage.js.map +1 -0
- package/dist/cache/file-cache.d.ts +68 -0
- package/dist/cache/file-cache.d.ts.map +1 -0
- package/dist/cache/file-cache.js +176 -0
- package/dist/cache/file-cache.js.map +1 -0
- package/dist/cache/manager.d.ts +69 -0
- package/dist/cache/manager.d.ts.map +1 -0
- package/dist/cache/manager.js +117 -0
- package/dist/cache/manager.js.map +1 -0
- package/dist/cache/symbol-index.d.ts +75 -0
- package/dist/cache/symbol-index.d.ts.map +1 -0
- package/dist/cache/symbol-index.js +267 -0
- package/dist/cache/symbol-index.js.map +1 -0
- package/dist/cache/tool-cache.d.ts +75 -0
- package/dist/cache/tool-cache.d.ts.map +1 -0
- package/dist/cache/tool-cache.js +173 -0
- package/dist/cache/tool-cache.js.map +1 -0
- package/dist/channels/channel.d.ts +156 -0
- package/dist/channels/channel.d.ts.map +1 -0
- package/dist/channels/channel.js +25 -0
- package/dist/channels/channel.js.map +1 -0
- package/dist/channels/cli.d.ts +35 -0
- package/dist/channels/cli.d.ts.map +1 -0
- package/dist/channels/cli.js +94 -0
- package/dist/channels/cli.js.map +1 -0
- package/dist/channels/delivery-queue.d.ts +31 -0
- package/dist/channels/delivery-queue.d.ts.map +1 -0
- package/dist/channels/delivery-queue.js +127 -0
- package/dist/channels/delivery-queue.js.map +1 -0
- package/dist/channels/discord.d.ts +124 -0
- package/dist/channels/discord.d.ts.map +1 -0
- package/dist/channels/discord.js +664 -0
- package/dist/channels/discord.js.map +1 -0
- package/dist/channels/retry.d.ts +31 -0
- package/dist/channels/retry.d.ts.map +1 -0
- package/dist/channels/retry.js +94 -0
- package/dist/channels/retry.js.map +1 -0
- package/dist/channels/telegram.d.ts +69 -0
- package/dist/channels/telegram.d.ts.map +1 -0
- package/dist/channels/telegram.js +499 -0
- package/dist/channels/telegram.js.map +1 -0
- package/dist/channels/tui.d.ts +42 -0
- package/dist/channels/tui.d.ts.map +1 -0
- package/dist/channels/tui.js +126 -0
- package/dist/channels/tui.js.map +1 -0
- package/dist/cli/acp.d.ts +10 -0
- package/dist/cli/acp.d.ts.map +1 -0
- package/dist/cli/acp.js +69 -0
- package/dist/cli/acp.js.map +1 -0
- package/dist/cli/audit.d.ts +11 -0
- package/dist/cli/audit.d.ts.map +1 -0
- package/dist/cli/audit.js +55 -0
- package/dist/cli/audit.js.map +1 -0
- package/dist/cli/cache.d.ts +10 -0
- package/dist/cli/cache.d.ts.map +1 -0
- package/dist/cli/cache.js +77 -0
- package/dist/cli/cache.js.map +1 -0
- package/dist/cli/config.d.ts +5 -0
- package/dist/cli/config.d.ts.map +1 -0
- package/dist/cli/config.js +168 -0
- package/dist/cli/config.js.map +1 -0
- package/dist/cli/cron.d.ts +5 -0
- package/dist/cli/cron.d.ts.map +1 -0
- package/dist/cli/cron.js +192 -0
- package/dist/cli/cron.js.map +1 -0
- package/dist/cli/extensions.d.ts +5 -0
- package/dist/cli/extensions.d.ts.map +1 -0
- package/dist/cli/extensions.js +53 -0
- package/dist/cli/extensions.js.map +1 -0
- package/dist/cli/logs.d.ts +5 -0
- package/dist/cli/logs.d.ts.map +1 -0
- package/dist/cli/logs.js +49 -0
- package/dist/cli/logs.js.map +1 -0
- package/dist/cli/memory.d.ts +5 -0
- package/dist/cli/memory.d.ts.map +1 -0
- package/dist/cli/memory.js +78 -0
- package/dist/cli/memory.js.map +1 -0
- package/dist/cli/message.d.ts +5 -0
- package/dist/cli/message.d.ts.map +1 -0
- package/dist/cli/message.js +69 -0
- package/dist/cli/message.js.map +1 -0
- package/dist/cli/service.d.ts +14 -0
- package/dist/cli/service.d.ts.map +1 -0
- package/dist/cli/service.js +181 -0
- package/dist/cli/service.js.map +1 -0
- package/dist/cli/symphony.d.ts +5 -0
- package/dist/cli/symphony.d.ts.map +1 -0
- package/dist/cli/symphony.js +114 -0
- package/dist/cli/symphony.js.map +1 -0
- package/dist/cli/update.d.ts +5 -0
- package/dist/cli/update.d.ts.map +1 -0
- package/dist/cli/update.js +48 -0
- package/dist/cli/update.js.map +1 -0
- package/dist/commands/channel-setup.d.ts +31 -0
- package/dist/commands/channel-setup.d.ts.map +1 -0
- package/dist/commands/channel-setup.js +138 -0
- package/dist/commands/channel-setup.js.map +1 -0
- package/dist/commands/dispatch.d.ts +48 -0
- package/dist/commands/dispatch.d.ts.map +1 -0
- package/dist/commands/dispatch.js +68 -0
- package/dist/commands/dispatch.js.map +1 -0
- package/dist/commands/model-picker.d.ts +16 -0
- package/dist/commands/model-picker.d.ts.map +1 -0
- package/dist/commands/model-picker.js +120 -0
- package/dist/commands/model-picker.js.map +1 -0
- package/dist/commands/parser.d.ts +32 -0
- package/dist/commands/parser.d.ts.map +1 -0
- package/dist/commands/parser.js +39 -0
- package/dist/commands/parser.js.map +1 -0
- package/dist/commands/registry.d.ts +76 -0
- package/dist/commands/registry.d.ts.map +1 -0
- package/dist/commands/registry.js +351 -0
- package/dist/commands/registry.js.map +1 -0
- package/dist/commands/skill-commands.d.ts +35 -0
- package/dist/commands/skill-commands.d.ts.map +1 -0
- package/dist/commands/skill-commands.js +61 -0
- package/dist/commands/skill-commands.js.map +1 -0
- package/dist/config/resolve.d.ts +25 -0
- package/dist/config/resolve.d.ts.map +1 -0
- package/dist/config/resolve.js +289 -0
- package/dist/config/resolve.js.map +1 -0
- package/dist/config/schema.d.ts +520 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +123 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/core/agent-loop.d.ts +137 -0
- package/dist/core/agent-loop.d.ts.map +1 -0
- package/dist/core/agent-loop.js +700 -0
- package/dist/core/agent-loop.js.map +1 -0
- package/dist/core/audit.d.ts +87 -0
- package/dist/core/audit.d.ts.map +1 -0
- package/dist/core/audit.js +224 -0
- package/dist/core/audit.js.map +1 -0
- package/dist/core/bootstrap.d.ts +23 -0
- package/dist/core/bootstrap.d.ts.map +1 -0
- package/dist/core/bootstrap.js +162 -0
- package/dist/core/bootstrap.js.map +1 -0
- package/dist/core/context.d.ts +44 -0
- package/dist/core/context.d.ts.map +1 -0
- package/dist/core/context.js +65 -0
- package/dist/core/context.js.map +1 -0
- package/dist/core/cron.d.ts +111 -0
- package/dist/core/cron.d.ts.map +1 -0
- package/dist/core/cron.js +284 -0
- package/dist/core/cron.js.map +1 -0
- package/dist/core/exec-approvals.d.ts +50 -0
- package/dist/core/exec-approvals.d.ts.map +1 -0
- package/dist/core/exec-approvals.js +187 -0
- package/dist/core/exec-approvals.js.map +1 -0
- package/dist/core/heartbeat.d.ts +71 -0
- package/dist/core/heartbeat.d.ts.map +1 -0
- package/dist/core/heartbeat.js +214 -0
- package/dist/core/heartbeat.js.map +1 -0
- package/dist/core/message-queue.d.ts +60 -0
- package/dist/core/message-queue.d.ts.map +1 -0
- package/dist/core/message-queue.js +182 -0
- package/dist/core/message-queue.js.map +1 -0
- package/dist/core/network-policy.d.ts +39 -0
- package/dist/core/network-policy.d.ts.map +1 -0
- package/dist/core/network-policy.js +121 -0
- package/dist/core/network-policy.js.map +1 -0
- package/dist/core/progress.d.ts +48 -0
- package/dist/core/progress.d.ts.map +1 -0
- package/dist/core/progress.js +81 -0
- package/dist/core/progress.js.map +1 -0
- package/dist/core/prompt.d.ts +105 -0
- package/dist/core/prompt.d.ts.map +1 -0
- package/dist/core/prompt.js +411 -0
- package/dist/core/prompt.js.map +1 -0
- package/dist/core/pruning.d.ts +40 -0
- package/dist/core/pruning.d.ts.map +1 -0
- package/dist/core/pruning.js +165 -0
- package/dist/core/pruning.js.map +1 -0
- package/dist/core/rate-limiter.d.ts +64 -0
- package/dist/core/rate-limiter.d.ts.map +1 -0
- package/dist/core/rate-limiter.js +142 -0
- package/dist/core/rate-limiter.js.map +1 -0
- package/dist/core/reactions.d.ts +31 -0
- package/dist/core/reactions.d.ts.map +1 -0
- package/dist/core/reactions.js +67 -0
- package/dist/core/reactions.js.map +1 -0
- package/dist/core/retry-queue.d.ts +56 -0
- package/dist/core/retry-queue.d.ts.map +1 -0
- package/dist/core/retry-queue.js +106 -0
- package/dist/core/retry-queue.js.map +1 -0
- package/dist/core/sanitizer.d.ts +38 -0
- package/dist/core/sanitizer.d.ts.map +1 -0
- package/dist/core/sanitizer.js +181 -0
- package/dist/core/sanitizer.js.map +1 -0
- package/dist/core/secret-scanner.d.ts +39 -0
- package/dist/core/secret-scanner.d.ts.map +1 -0
- package/dist/core/secret-scanner.js +96 -0
- package/dist/core/secret-scanner.js.map +1 -0
- package/dist/core/secrets.d.ts +38 -0
- package/dist/core/secrets.d.ts.map +1 -0
- package/dist/core/secrets.js +137 -0
- package/dist/core/secrets.js.map +1 -0
- package/dist/core/security.d.ts +58 -0
- package/dist/core/security.d.ts.map +1 -0
- package/dist/core/security.js +120 -0
- package/dist/core/security.js.map +1 -0
- package/dist/core/self-awareness.d.ts +19 -0
- package/dist/core/self-awareness.d.ts.map +1 -0
- package/dist/core/self-awareness.js +124 -0
- package/dist/core/self-awareness.js.map +1 -0
- package/dist/core/session-init.d.ts +34 -0
- package/dist/core/session-init.d.ts.map +1 -0
- package/dist/core/session-init.js +68 -0
- package/dist/core/session-init.js.map +1 -0
- package/dist/core/streaming.d.ts +82 -0
- package/dist/core/streaming.d.ts.map +1 -0
- package/dist/core/streaming.js +264 -0
- package/dist/core/streaming.js.map +1 -0
- package/dist/core/symphony/orchestrator.d.ts +61 -0
- package/dist/core/symphony/orchestrator.d.ts.map +1 -0
- package/dist/core/symphony/orchestrator.js +476 -0
- package/dist/core/symphony/orchestrator.js.map +1 -0
- package/dist/core/symphony/status.d.ts +11 -0
- package/dist/core/symphony/status.d.ts.map +1 -0
- package/dist/core/symphony/status.js +133 -0
- package/dist/core/symphony/status.js.map +1 -0
- package/dist/core/symphony/types.d.ts +84 -0
- package/dist/core/symphony/types.d.ts.map +1 -0
- package/dist/core/symphony/types.js +5 -0
- package/dist/core/symphony/types.js.map +1 -0
- package/dist/core/symphony/workflow.d.ts +18 -0
- package/dist/core/symphony/workflow.d.ts.map +1 -0
- package/dist/core/symphony/workflow.js +149 -0
- package/dist/core/symphony/workflow.js.map +1 -0
- package/dist/core/symphony/workspace.d.ts +24 -0
- package/dist/core/symphony/workspace.d.ts.map +1 -0
- package/dist/core/symphony/workspace.js +94 -0
- package/dist/core/symphony/workspace.js.map +1 -0
- package/dist/core/thinking.d.ts +27 -0
- package/dist/core/thinking.d.ts.map +1 -0
- package/dist/core/thinking.js +83 -0
- package/dist/core/thinking.js.map +1 -0
- package/dist/core/thread-bindings.d.ts +47 -0
- package/dist/core/thread-bindings.d.ts.map +1 -0
- package/dist/core/thread-bindings.js +94 -0
- package/dist/core/thread-bindings.js.map +1 -0
- package/dist/core/timezone.d.ts +28 -0
- package/dist/core/timezone.d.ts.map +1 -0
- package/dist/core/timezone.js +72 -0
- package/dist/core/timezone.js.map +1 -0
- package/dist/core/tool-loop-detector.d.ts +41 -0
- package/dist/core/tool-loop-detector.d.ts.map +1 -0
- package/dist/core/tool-loop-detector.js +83 -0
- package/dist/core/tool-loop-detector.js.map +1 -0
- package/dist/core/tool-validator.d.ts +44 -0
- package/dist/core/tool-validator.d.ts.map +1 -0
- package/dist/core/tool-validator.js +175 -0
- package/dist/core/tool-validator.js.map +1 -0
- package/dist/core/typing.d.ts +25 -0
- package/dist/core/typing.d.ts.map +1 -0
- package/dist/core/typing.js +48 -0
- package/dist/core/typing.js.map +1 -0
- package/dist/core/usage-tracker.d.ts +66 -0
- package/dist/core/usage-tracker.d.ts.map +1 -0
- package/dist/core/usage-tracker.js +163 -0
- package/dist/core/usage-tracker.js.map +1 -0
- package/dist/daemon/commands.d.ts +16 -0
- package/dist/daemon/commands.d.ts.map +1 -0
- package/dist/daemon/commands.js +445 -0
- package/dist/daemon/commands.js.map +1 -0
- package/dist/daemon/pid.d.ts +30 -0
- package/dist/daemon/pid.d.ts.map +1 -0
- package/dist/daemon/pid.js +62 -0
- package/dist/daemon/pid.js.map +1 -0
- package/dist/doctor/checks/browser.d.ts +9 -0
- package/dist/doctor/checks/browser.d.ts.map +1 -0
- package/dist/doctor/checks/browser.js +54 -0
- package/dist/doctor/checks/browser.js.map +1 -0
- package/dist/doctor/checks/channels.d.ts +9 -0
- package/dist/doctor/checks/channels.d.ts.map +1 -0
- package/dist/doctor/checks/channels.js +90 -0
- package/dist/doctor/checks/channels.js.map +1 -0
- package/dist/doctor/checks/config.d.ts +10 -0
- package/dist/doctor/checks/config.d.ts.map +1 -0
- package/dist/doctor/checks/config.js +89 -0
- package/dist/doctor/checks/config.js.map +1 -0
- package/dist/doctor/checks/memory.d.ts +10 -0
- package/dist/doctor/checks/memory.d.ts.map +1 -0
- package/dist/doctor/checks/memory.js +82 -0
- package/dist/doctor/checks/memory.js.map +1 -0
- package/dist/doctor/checks/permissions.d.ts +9 -0
- package/dist/doctor/checks/permissions.d.ts.map +1 -0
- package/dist/doctor/checks/permissions.js +53 -0
- package/dist/doctor/checks/permissions.js.map +1 -0
- package/dist/doctor/checks/providers.d.ts +10 -0
- package/dist/doctor/checks/providers.d.ts.map +1 -0
- package/dist/doctor/checks/providers.js +93 -0
- package/dist/doctor/checks/providers.js.map +1 -0
- package/dist/doctor/checks/sessions.d.ts +10 -0
- package/dist/doctor/checks/sessions.d.ts.map +1 -0
- package/dist/doctor/checks/sessions.js +86 -0
- package/dist/doctor/checks/sessions.js.map +1 -0
- package/dist/doctor/doctor.d.ts +35 -0
- package/dist/doctor/doctor.d.ts.map +1 -0
- package/dist/doctor/doctor.js +51 -0
- package/dist/doctor/doctor.js.map +1 -0
- package/dist/doctor/repairs.d.ts +14 -0
- package/dist/doctor/repairs.d.ts.map +1 -0
- package/dist/doctor/repairs.js +34 -0
- package/dist/doctor/repairs.js.map +1 -0
- package/dist/gateway/compaction.d.ts +63 -0
- package/dist/gateway/compaction.d.ts.map +1 -0
- package/dist/gateway/compaction.js +235 -0
- package/dist/gateway/compaction.js.map +1 -0
- package/dist/gateway/gateway.d.ts +94 -0
- package/dist/gateway/gateway.d.ts.map +1 -0
- package/dist/gateway/gateway.js +466 -0
- package/dist/gateway/gateway.js.map +1 -0
- package/dist/gateway/lock.d.ts +24 -0
- package/dist/gateway/lock.d.ts.map +1 -0
- package/dist/gateway/lock.js +88 -0
- package/dist/gateway/lock.js.map +1 -0
- package/dist/gateway/protocol.d.ts +117 -0
- package/dist/gateway/protocol.d.ts.map +1 -0
- package/dist/gateway/protocol.js +5 -0
- package/dist/gateway/protocol.js.map +1 -0
- package/dist/gateway/session.d.ts +123 -0
- package/dist/gateway/session.d.ts.map +1 -0
- package/dist/gateway/session.js +573 -0
- package/dist/gateway/session.js.map +1 -0
- package/dist/hooks/hooks.d.ts +18 -0
- package/dist/hooks/hooks.d.ts.map +1 -0
- package/dist/hooks/hooks.js +45 -0
- package/dist/hooks/hooks.js.map +1 -0
- package/dist/hooks/types.d.ts +112 -0
- package/dist/hooks/types.d.ts.map +1 -0
- package/dist/hooks/types.js +23 -0
- package/dist/hooks/types.js.map +1 -0
- package/dist/index.d.ts +27 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2900 -0
- package/dist/index.js.map +1 -0
- package/dist/media/storage.d.ts +25 -0
- package/dist/media/storage.d.ts.map +1 -0
- package/dist/media/storage.js +97 -0
- package/dist/media/storage.js.map +1 -0
- package/dist/memory/embeddings.d.ts +46 -0
- package/dist/memory/embeddings.d.ts.map +1 -0
- package/dist/memory/embeddings.js +118 -0
- package/dist/memory/embeddings.js.map +1 -0
- package/dist/memory/hybrid.d.ts +35 -0
- package/dist/memory/hybrid.d.ts.map +1 -0
- package/dist/memory/hybrid.js +156 -0
- package/dist/memory/hybrid.js.map +1 -0
- package/dist/memory/markdown.d.ts +48 -0
- package/dist/memory/markdown.d.ts.map +1 -0
- package/dist/memory/markdown.js +228 -0
- package/dist/memory/markdown.js.map +1 -0
- package/dist/memory/store.d.ts +88 -0
- package/dist/memory/store.d.ts.map +1 -0
- package/dist/memory/store.js +21 -0
- package/dist/memory/store.js.map +1 -0
- package/dist/memory/vector.d.ts +24 -0
- package/dist/memory/vector.d.ts.map +1 -0
- package/dist/memory/vector.js +63 -0
- package/dist/memory/vector.js.map +1 -0
- package/dist/mods/mod.d.ts +100 -0
- package/dist/mods/mod.d.ts.map +1 -0
- package/dist/mods/mod.js +242 -0
- package/dist/mods/mod.js.map +1 -0
- package/dist/onboard/channels.d.ts +12 -0
- package/dist/onboard/channels.d.ts.map +1 -0
- package/dist/onboard/channels.js +283 -0
- package/dist/onboard/channels.js.map +1 -0
- package/dist/onboard/models.d.ts +13 -0
- package/dist/onboard/models.d.ts.map +1 -0
- package/dist/onboard/models.js +491 -0
- package/dist/onboard/models.js.map +1 -0
- package/dist/onboard/onboard.d.ts +12 -0
- package/dist/onboard/onboard.d.ts.map +1 -0
- package/dist/onboard/onboard.js +1137 -0
- package/dist/onboard/onboard.js.map +1 -0
- package/dist/providers/anthropic.d.ts +83 -0
- package/dist/providers/anthropic.d.ts.map +1 -0
- package/dist/providers/anthropic.js +583 -0
- package/dist/providers/anthropic.js.map +1 -0
- package/dist/providers/failover.d.ts +46 -0
- package/dist/providers/failover.d.ts.map +1 -0
- package/dist/providers/failover.js +149 -0
- package/dist/providers/failover.js.map +1 -0
- package/dist/providers/litellm.d.ts +38 -0
- package/dist/providers/litellm.d.ts.map +1 -0
- package/dist/providers/litellm.js +349 -0
- package/dist/providers/litellm.js.map +1 -0
- package/dist/providers/openai.d.ts +28 -0
- package/dist/providers/openai.d.ts.map +1 -0
- package/dist/providers/openai.js +321 -0
- package/dist/providers/openai.js.map +1 -0
- package/dist/providers/prompt-cache.d.ts +50 -0
- package/dist/providers/prompt-cache.d.ts.map +1 -0
- package/dist/providers/prompt-cache.js +96 -0
- package/dist/providers/prompt-cache.js.map +1 -0
- package/dist/providers/provider.d.ts +173 -0
- package/dist/providers/provider.d.ts.map +1 -0
- package/dist/providers/provider.js +22 -0
- package/dist/providers/provider.js.map +1 -0
- package/dist/sandbox/config.d.ts +42 -0
- package/dist/sandbox/config.d.ts.map +1 -0
- package/dist/sandbox/config.js +20 -0
- package/dist/sandbox/config.js.map +1 -0
- package/dist/sandbox/container.d.ts +71 -0
- package/dist/sandbox/container.d.ts.map +1 -0
- package/dist/sandbox/container.js +193 -0
- package/dist/sandbox/container.js.map +1 -0
- package/dist/sandbox/sandbox.d.ts +82 -0
- package/dist/sandbox/sandbox.d.ts.map +1 -0
- package/dist/sandbox/sandbox.js +176 -0
- package/dist/sandbox/sandbox.js.map +1 -0
- package/dist/skills/channel-loader.d.ts +18 -0
- package/dist/skills/channel-loader.d.ts.map +1 -0
- package/dist/skills/channel-loader.js +35 -0
- package/dist/skills/channel-loader.js.map +1 -0
- package/dist/skills/extension-loader.d.ts +15 -0
- package/dist/skills/extension-loader.d.ts.map +1 -0
- package/dist/skills/extension-loader.js +63 -0
- package/dist/skills/extension-loader.js.map +1 -0
- package/dist/skills/extension-registry.d.ts +32 -0
- package/dist/skills/extension-registry.d.ts.map +1 -0
- package/dist/skills/extension-registry.js +57 -0
- package/dist/skills/extension-registry.js.map +1 -0
- package/dist/skills/extensions.d.ts +91 -0
- package/dist/skills/extensions.d.ts.map +1 -0
- package/dist/skills/extensions.js +14 -0
- package/dist/skills/extensions.js.map +1 -0
- package/dist/skills/loader.d.ts +64 -0
- package/dist/skills/loader.d.ts.map +1 -0
- package/dist/skills/loader.js +382 -0
- package/dist/skills/loader.js.map +1 -0
- package/dist/skills/marketplace.d.ts +56 -0
- package/dist/skills/marketplace.d.ts.map +1 -0
- package/dist/skills/marketplace.js +183 -0
- package/dist/skills/marketplace.js.map +1 -0
- package/dist/skills/types.d.ts +94 -0
- package/dist/skills/types.d.ts.map +1 -0
- package/dist/skills/types.js +9 -0
- package/dist/skills/types.js.map +1 -0
- package/dist/tools/acp-sessions.d.ts +89 -0
- package/dist/tools/acp-sessions.d.ts.map +1 -0
- package/dist/tools/acp-sessions.js +391 -0
- package/dist/tools/acp-sessions.js.map +1 -0
- package/dist/tools/acp.d.ts +18 -0
- package/dist/tools/acp.d.ts.map +1 -0
- package/dist/tools/acp.js +102 -0
- package/dist/tools/acp.js.map +1 -0
- package/dist/tools/agent-tools.d.ts +24 -0
- package/dist/tools/agent-tools.d.ts.map +1 -0
- package/dist/tools/agent-tools.js +611 -0
- package/dist/tools/agent-tools.js.map +1 -0
- package/dist/tools/browser.d.ts +26 -0
- package/dist/tools/browser.d.ts.map +1 -0
- package/dist/tools/browser.js +242 -0
- package/dist/tools/browser.js.map +1 -0
- package/dist/tools/comms.d.ts +8 -0
- package/dist/tools/comms.d.ts.map +1 -0
- package/dist/tools/comms.js +39 -0
- package/dist/tools/comms.js.map +1 -0
- package/dist/tools/cron-tools.d.ts +9 -0
- package/dist/tools/cron-tools.d.ts.map +1 -0
- package/dist/tools/cron-tools.js +117 -0
- package/dist/tools/cron-tools.js.map +1 -0
- package/dist/tools/exec-safety.d.ts +71 -0
- package/dist/tools/exec-safety.d.ts.map +1 -0
- package/dist/tools/exec-safety.js +141 -0
- package/dist/tools/exec-safety.js.map +1 -0
- package/dist/tools/exec.d.ts +24 -0
- package/dist/tools/exec.d.ts.map +1 -0
- package/dist/tools/exec.js +191 -0
- package/dist/tools/exec.js.map +1 -0
- package/dist/tools/fs.d.ts +15 -0
- package/dist/tools/fs.d.ts.map +1 -0
- package/dist/tools/fs.js +249 -0
- package/dist/tools/fs.js.map +1 -0
- package/dist/tools/git.d.ts +9 -0
- package/dist/tools/git.d.ts.map +1 -0
- package/dist/tools/git.js +56 -0
- package/dist/tools/git.js.map +1 -0
- package/dist/tools/image.d.ts +15 -0
- package/dist/tools/image.d.ts.map +1 -0
- package/dist/tools/image.js +106 -0
- package/dist/tools/image.js.map +1 -0
- package/dist/tools/introspect.d.ts +22 -0
- package/dist/tools/introspect.d.ts.map +1 -0
- package/dist/tools/introspect.js +223 -0
- package/dist/tools/introspect.js.map +1 -0
- package/dist/tools/memory.d.ts +11 -0
- package/dist/tools/memory.d.ts.map +1 -0
- package/dist/tools/memory.js +101 -0
- package/dist/tools/memory.js.map +1 -0
- package/dist/tools/message.d.ts +24 -0
- package/dist/tools/message.d.ts.map +1 -0
- package/dist/tools/message.js +205 -0
- package/dist/tools/message.js.map +1 -0
- package/dist/tools/model.d.ts +14 -0
- package/dist/tools/model.d.ts.map +1 -0
- package/dist/tools/model.js +62 -0
- package/dist/tools/model.js.map +1 -0
- package/dist/tools/policy.d.ts +101 -0
- package/dist/tools/policy.d.ts.map +1 -0
- package/dist/tools/policy.js +168 -0
- package/dist/tools/policy.js.map +1 -0
- package/dist/tools/registry.d.ts +52 -0
- package/dist/tools/registry.d.ts.map +1 -0
- package/dist/tools/registry.js +154 -0
- package/dist/tools/registry.js.map +1 -0
- package/dist/tools/search.d.ts +10 -0
- package/dist/tools/search.d.ts.map +1 -0
- package/dist/tools/search.js +78 -0
- package/dist/tools/search.js.map +1 -0
- package/dist/tools/session.d.ts +13 -0
- package/dist/tools/session.d.ts.map +1 -0
- package/dist/tools/session.js +142 -0
- package/dist/tools/session.js.map +1 -0
- package/dist/tools/spawn.d.ts +10 -0
- package/dist/tools/spawn.d.ts.map +1 -0
- package/dist/tools/spawn.js +72 -0
- package/dist/tools/spawn.js.map +1 -0
- package/dist/tools/symphony.d.ts +12 -0
- package/dist/tools/symphony.d.ts.map +1 -0
- package/dist/tools/symphony.js +142 -0
- package/dist/tools/symphony.js.map +1 -0
- package/dist/tools/system-tools.d.ts +11 -0
- package/dist/tools/system-tools.d.ts.map +1 -0
- package/dist/tools/system-tools.js +39 -0
- package/dist/tools/system-tools.js.map +1 -0
- package/dist/tools/tool.d.ts +119 -0
- package/dist/tools/tool.d.ts.map +1 -0
- package/dist/tools/tool.js +29 -0
- package/dist/tools/tool.js.map +1 -0
- package/dist/tools/web.d.ts +10 -0
- package/dist/tools/web.d.ts.map +1 -0
- package/dist/tools/web.js +105 -0
- package/dist/tools/web.js.map +1 -0
- package/dist/tui/App.d.ts +43 -0
- package/dist/tui/App.d.ts.map +1 -0
- package/dist/tui/App.js +265 -0
- package/dist/tui/App.js.map +1 -0
- package/dist/tui/bridge.d.ts +40 -0
- package/dist/tui/bridge.d.ts.map +1 -0
- package/dist/tui/bridge.js +29 -0
- package/dist/tui/bridge.js.map +1 -0
- package/dist/tui/components/Header.d.ts +14 -0
- package/dist/tui/components/Header.d.ts.map +1 -0
- package/dist/tui/components/Header.js +7 -0
- package/dist/tui/components/Header.js.map +1 -0
- package/dist/tui/components/InputBar.d.ts +10 -0
- package/dist/tui/components/InputBar.d.ts.map +1 -0
- package/dist/tui/components/InputBar.js +121 -0
- package/dist/tui/components/InputBar.js.map +1 -0
- package/dist/tui/components/MessageList.d.ts +18 -0
- package/dist/tui/components/MessageList.d.ts.map +1 -0
- package/dist/tui/components/MessageList.js +34 -0
- package/dist/tui/components/MessageList.js.map +1 -0
- package/dist/tui/components/Spinner.d.ts +9 -0
- package/dist/tui/components/Spinner.d.ts.map +1 -0
- package/dist/tui/components/Spinner.js +18 -0
- package/dist/tui/components/Spinner.js.map +1 -0
- package/dist/tui/components/StatusBar.d.ts +16 -0
- package/dist/tui/components/StatusBar.d.ts.map +1 -0
- package/dist/tui/components/StatusBar.js +15 -0
- package/dist/tui/components/StatusBar.js.map +1 -0
- package/dist/tui/components/ToolCallBox.d.ts +12 -0
- package/dist/tui/components/ToolCallBox.d.ts.map +1 -0
- package/dist/tui/components/ToolCallBox.js +12 -0
- package/dist/tui/components/ToolCallBox.js.map +1 -0
- package/dist/tui/theme.d.ts +58 -0
- package/dist/tui/theme.d.ts.map +1 -0
- package/dist/tui/theme.js +80 -0
- package/dist/tui/theme.js.map +1 -0
- package/dist/utils/logger.d.ts +16 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +70 -0
- package/dist/utils/logger.js.map +1 -0
- package/docs/DEVELOPMENT.md +74 -0
- package/docs/INSTALL.md +161 -0
- package/docs/USAGE.md +94 -0
- package/docs/architecture.md +128 -0
- package/docs/channels.md +140 -0
- package/docs/configuration.md +209 -0
- package/docs/io-system.md +430 -0
- package/docs/providers.md +99 -0
- package/docs/skill-channels.md +113 -0
- package/docs/skills.md +246 -0
- package/package.json +89 -0
- package/skills/acp-router/SKILL.md +41 -0
- package/skills/acp-router/tools/acp-router.mjs +239 -0
- package/skills/find-skills/SKILL.md +133 -0
- package/skills/security-audit/SKILL.md +181 -0
- package/skills/security-audit/audit.sh +67 -0
- package/skills/skill-creator/SKILL.md +479 -0
- package/skills/skill-security-audit/.clawhub/origin.json +7 -0
- package/skills/skill-security-audit/SKILL.md +196 -0
- package/skills/skill-security-audit/_meta.json +6 -0
- package/skills/skill-security-audit/references/prompt-injection-patterns.md +276 -0
- package/skills/skill-security-audit/references/vulnerability-patterns.md +348 -0
- package/skills/symphony/README.md +53 -0
- package/skills/symphony/SKILL.md +75 -0
- package/skills/symphony/tools/symphony-orchestrator.ts +8 -0
- package/tako.example.json +33 -0
package/docs/skills.md
ADDED
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
# Skill Arms
|
|
2
|
+
|
|
3
|
+
Skills are Tako's extensibility mechanism — pluggable capabilities loaded from the filesystem at runtime.
|
|
4
|
+
|
|
5
|
+
## What is a Skill?
|
|
6
|
+
|
|
7
|
+
A skill is a directory containing a `SKILL.md` file. The file has YAML frontmatter for metadata and a Markdown body with instructions that get injected into the agent's system prompt.
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
my-skill/
|
|
11
|
+
├── SKILL.md # Required: metadata + instructions
|
|
12
|
+
├── tools/ # Optional: tool implementations (.js/.mjs)
|
|
13
|
+
├── scripts/ # Optional: helper scripts
|
|
14
|
+
├── references/ # Optional: reference docs loaded on-demand
|
|
15
|
+
└── assets/ # Optional: templates, icons, etc.
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## SKILL.md Format
|
|
19
|
+
|
|
20
|
+
```markdown
|
|
21
|
+
---
|
|
22
|
+
name: my-skill
|
|
23
|
+
description: What the skill does and when to use it
|
|
24
|
+
version: 1.0.0
|
|
25
|
+
author: Your Name
|
|
26
|
+
triggers: keyword1, keyword2
|
|
27
|
+
user-invocable: true
|
|
28
|
+
disable-model-invocation: false
|
|
29
|
+
requires: {"bins": ["node"], "env": ["API_KEY"], "os": ["linux", "darwin"]}
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
# My Skill
|
|
33
|
+
|
|
34
|
+
Instructions for the agent on when and how to use this skill.
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
### Frontmatter Fields
|
|
38
|
+
|
|
39
|
+
| Field | Required | Description |
|
|
40
|
+
|-------|----------|-------------|
|
|
41
|
+
| `name` | Yes | Unique skill identifier |
|
|
42
|
+
| `description` | Yes | What the skill does — also used for trigger matching |
|
|
43
|
+
| `version` | No | Semantic version (default: `0.1.0`) |
|
|
44
|
+
| `author` | No | Author name |
|
|
45
|
+
| `triggers` | No | When to activate (see below) |
|
|
46
|
+
| `tools` | No | Tool names this skill provides |
|
|
47
|
+
| `hooks` | No | Hook events this skill listens to |
|
|
48
|
+
| `user-invocable` | No | Whether exposed as slash command (default: `true`) |
|
|
49
|
+
| `disable-model-invocation` | No | Exclude from automatic prompt injection (default: `false`) |
|
|
50
|
+
| `requires` | No | JSON object with platform requirements |
|
|
51
|
+
|
|
52
|
+
### Trigger Types
|
|
53
|
+
|
|
54
|
+
Triggers determine when a skill's instructions are injected into the system prompt.
|
|
55
|
+
|
|
56
|
+
**Keyword triggers** (comma-separated):
|
|
57
|
+
```yaml
|
|
58
|
+
triggers: deploy, ship it, release
|
|
59
|
+
```
|
|
60
|
+
Matches if any keyword appears in the user's message (case-insensitive).
|
|
61
|
+
|
|
62
|
+
**Pattern trigger** (regex):
|
|
63
|
+
```yaml
|
|
64
|
+
triggers: [{"type":"pattern","value":"\\b(deploy|ship)\\b"}]
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
**Always active:**
|
|
68
|
+
```yaml
|
|
69
|
+
triggers: always
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
**Manual only** (slash command only, never auto-injected):
|
|
73
|
+
```yaml
|
|
74
|
+
triggers: manual
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
**No triggers defined**: skill is always active (same as `always`).
|
|
78
|
+
|
|
79
|
+
### Requirements
|
|
80
|
+
|
|
81
|
+
Skills can declare platform requirements that are checked at load time:
|
|
82
|
+
|
|
83
|
+
```yaml
|
|
84
|
+
requires: {"bins": ["docker"], "env": ["DOCKER_HOST"], "os": ["linux"]}
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
- `bins`: Required binaries on PATH
|
|
88
|
+
- `anyBins`: At least one must exist
|
|
89
|
+
- `env`: Required environment variables
|
|
90
|
+
- `os`: Required OS platforms (`linux`, `darwin`, `win32`)
|
|
91
|
+
|
|
92
|
+
Skills that don't meet requirements are silently skipped.
|
|
93
|
+
|
|
94
|
+
## Providing Tools
|
|
95
|
+
|
|
96
|
+
Skills can provide additional tools by placing JavaScript modules in a `tools/` directory:
|
|
97
|
+
|
|
98
|
+
```javascript
|
|
99
|
+
// my-skill/tools/my-tool.js
|
|
100
|
+
export default {
|
|
101
|
+
name: 'my_tool',
|
|
102
|
+
description: 'Does something useful',
|
|
103
|
+
parameters: {
|
|
104
|
+
type: 'object',
|
|
105
|
+
properties: {
|
|
106
|
+
input: { type: 'string', description: 'The input' }
|
|
107
|
+
},
|
|
108
|
+
required: ['input']
|
|
109
|
+
},
|
|
110
|
+
async execute(params, ctx) {
|
|
111
|
+
return { output: `Result: ${params.input}`, success: true };
|
|
112
|
+
}
|
|
113
|
+
};
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
Tool modules can export:
|
|
117
|
+
- A single tool as `default`
|
|
118
|
+
- An array of tools as `default`
|
|
119
|
+
- A named `tools` array
|
|
120
|
+
|
|
121
|
+
Skill tools are registered with the tool registry when the skill loads. They are ungrouped, meaning they're always active regardless of the tool profile.
|
|
122
|
+
|
|
123
|
+
## CLI Commands
|
|
124
|
+
|
|
125
|
+
```bash
|
|
126
|
+
# List all discovered skills
|
|
127
|
+
tako skills list
|
|
128
|
+
|
|
129
|
+
# Show details about a specific skill
|
|
130
|
+
tako skills info find-skills
|
|
131
|
+
|
|
132
|
+
# Install a skill from the ecosystem
|
|
133
|
+
tako skills install vercel-labs/agent-skills@find-skills
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
## Hot Reload
|
|
137
|
+
|
|
138
|
+
Tako watches skill directories for changes. When a `SKILL.md` or tool file is modified:
|
|
139
|
+
|
|
140
|
+
1. All skills are re-discovered and re-loaded
|
|
141
|
+
2. Tool registrations are updated
|
|
142
|
+
3. Hook bindings are refreshed
|
|
143
|
+
4. No restart required
|
|
144
|
+
|
|
145
|
+
The reload is debounced (250ms) to handle rapid file changes.
|
|
146
|
+
|
|
147
|
+
## Built-in Skills
|
|
148
|
+
|
|
149
|
+
Tako ships with four built-in skills:
|
|
150
|
+
|
|
151
|
+
### find-skills
|
|
152
|
+
Discovers and installs skills from the ecosystem. Triggers when users ask about finding capabilities or extending the agent.
|
|
153
|
+
|
|
154
|
+
### skill-creator
|
|
155
|
+
Creates new skills from scratch with an iterative draft → test → review → improve workflow. Includes evaluation tooling for measuring skill performance.
|
|
156
|
+
|
|
157
|
+
### security-audit
|
|
158
|
+
Security scanning and analysis capabilities.
|
|
159
|
+
|
|
160
|
+
### skill-security-audit
|
|
161
|
+
Security audit for skill arms (from ClawHub). Validates skill safety before installation.
|
|
162
|
+
|
|
163
|
+
## Creating a Skill
|
|
164
|
+
|
|
165
|
+
1. Create a directory in `./skills/`:
|
|
166
|
+
```bash
|
|
167
|
+
mkdir -p skills/my-skill
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
2. Write a `SKILL.md` with frontmatter and instructions:
|
|
171
|
+
```markdown
|
|
172
|
+
---
|
|
173
|
+
name: my-skill
|
|
174
|
+
description: Helps with X when the user asks about Y
|
|
175
|
+
version: 0.1.0
|
|
176
|
+
triggers: x, y, z
|
|
177
|
+
---
|
|
178
|
+
|
|
179
|
+
# My Skill
|
|
180
|
+
|
|
181
|
+
When the user asks about X, follow these steps...
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
3. The skill loads automatically (hot reload) or on next `tako start`.
|
|
185
|
+
|
|
186
|
+
4. Verify: `tako skills list`
|
|
187
|
+
|
|
188
|
+
## Providing Extensions
|
|
189
|
+
|
|
190
|
+
Skills can provide entire subsystem implementations by including extension subdirectories. The loader auto-detects these during skill loading.
|
|
191
|
+
|
|
192
|
+
### Supported Extension Types
|
|
193
|
+
|
|
194
|
+
- **channel/** — Messaging adapter (implements `Channel`)
|
|
195
|
+
- **provider/** — LLM inference backend (implements `Provider`)
|
|
196
|
+
- **memory/** — Persistence + recall backend (implements `MemoryStore`)
|
|
197
|
+
- **network/** — Tunnel/exposure adapter (implements `NetworkAdapter`)
|
|
198
|
+
- **sandbox/** — Code execution sandbox (implements `SandboxProvider`)
|
|
199
|
+
- **auth/** — Authentication provider (implements `AuthProvider`)
|
|
200
|
+
|
|
201
|
+
### Extension Module Convention
|
|
202
|
+
|
|
203
|
+
Each extension subdirectory must contain an entry point (`index.ts`, `index.js`, `<type>.ts`, or `<type>.js`) that exports a factory function:
|
|
204
|
+
|
|
205
|
+
```typescript
|
|
206
|
+
// skills/my-provider/provider/index.ts
|
|
207
|
+
import type { Provider } from 'tako/providers/provider.js';
|
|
208
|
+
|
|
209
|
+
export function createProvider(config: Record<string, unknown>): Provider {
|
|
210
|
+
return {
|
|
211
|
+
id: 'my-provider',
|
|
212
|
+
async *chat(req) { /* ... */ yield { done: true }; },
|
|
213
|
+
models() { return []; },
|
|
214
|
+
supports(cap) { return false; },
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
The loader tries these patterns in order:
|
|
220
|
+
1. Named factory: `createChannel`, `createProvider`, `createMemory`, etc.
|
|
221
|
+
2. Generic factory: `create(config)`
|
|
222
|
+
3. Default export as constructor: `new mod.default(config)`
|
|
223
|
+
|
|
224
|
+
### Extension Configuration
|
|
225
|
+
|
|
226
|
+
Configure extensions in `tako.json` under `skillExtensions`:
|
|
227
|
+
|
|
228
|
+
```json
|
|
229
|
+
{
|
|
230
|
+
"skillExtensions": {
|
|
231
|
+
"ollama": {
|
|
232
|
+
"provider": { "baseUrl": "http://localhost:11434" }
|
|
233
|
+
},
|
|
234
|
+
"qdrant-memory": {
|
|
235
|
+
"memory": { "url": "http://localhost:6333", "collection": "tako" }
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
### CLI
|
|
242
|
+
|
|
243
|
+
```bash
|
|
244
|
+
tako extensions list # List all detected skill extensions
|
|
245
|
+
tako extensions status # Show runtime status (when running)
|
|
246
|
+
```
|
package/package.json
ADDED
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@shuyhere/takotako",
|
|
3
|
+
"version": "0.0.1",
|
|
4
|
+
"description": "Agent-as-CPU OS: minimal core + pluggable skill arms",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"types": "dist/index.d.ts",
|
|
8
|
+
"bin": {
|
|
9
|
+
"tako": "./dist/index.js"
|
|
10
|
+
},
|
|
11
|
+
"scripts": {
|
|
12
|
+
"build": "bun run tsc",
|
|
13
|
+
"dev": "bun run tsc --watch",
|
|
14
|
+
"start": "bun run src/index.ts",
|
|
15
|
+
"start:node": "node dist/index.js",
|
|
16
|
+
"doctor": "bun run src/index.ts doctor",
|
|
17
|
+
"typecheck": "tsc --noEmit",
|
|
18
|
+
"test": "bun test",
|
|
19
|
+
"test:node": "node --test --import tsx tests/*.test.ts",
|
|
20
|
+
"lint": "tsc --noEmit",
|
|
21
|
+
"check": "bun run build && bun run typecheck && bun test",
|
|
22
|
+
"prepack": "npm run build"
|
|
23
|
+
},
|
|
24
|
+
"keywords": [
|
|
25
|
+
"agent",
|
|
26
|
+
"llm",
|
|
27
|
+
"ai",
|
|
28
|
+
"os",
|
|
29
|
+
"pluggable",
|
|
30
|
+
"skills",
|
|
31
|
+
"anthropic",
|
|
32
|
+
"discord",
|
|
33
|
+
"telegram",
|
|
34
|
+
"cli",
|
|
35
|
+
"tools",
|
|
36
|
+
"memory",
|
|
37
|
+
"streaming",
|
|
38
|
+
"websocket"
|
|
39
|
+
],
|
|
40
|
+
"author": "shuyhere",
|
|
41
|
+
"license": "MIT",
|
|
42
|
+
"repository": {
|
|
43
|
+
"type": "git",
|
|
44
|
+
"url": "https://github.com/shuyhere/tako"
|
|
45
|
+
},
|
|
46
|
+
"homepage": "https://github.com/shuyhere/tako#readme",
|
|
47
|
+
"bugs": {
|
|
48
|
+
"url": "https://github.com/shuyhere/tako/issues"
|
|
49
|
+
},
|
|
50
|
+
"files": [
|
|
51
|
+
"dist",
|
|
52
|
+
"skills",
|
|
53
|
+
"docs",
|
|
54
|
+
"tako.example.json",
|
|
55
|
+
"README.md",
|
|
56
|
+
"CONTRIBUTING.md",
|
|
57
|
+
"LICENSE"
|
|
58
|
+
],
|
|
59
|
+
"engines": {
|
|
60
|
+
"node": ">=20.0.0",
|
|
61
|
+
"bun": ">=1.0.0"
|
|
62
|
+
},
|
|
63
|
+
"dependencies": {
|
|
64
|
+
"@anthropic-ai/sdk": "^0.30.0",
|
|
65
|
+
"@clack/prompts": "^1.1.0",
|
|
66
|
+
"@mariozechner/pi-coding-agent": "^0.56.1",
|
|
67
|
+
"discord.js": "^14.25.1",
|
|
68
|
+
"grammy": "^1.41.1",
|
|
69
|
+
"ink": "^6.8.0",
|
|
70
|
+
"ink-big-text": "^2.0.0",
|
|
71
|
+
"ink-gradient": "^4.0.0",
|
|
72
|
+
"ink-spinner": "^5.0.0",
|
|
73
|
+
"ink-text-input": "^6.0.0",
|
|
74
|
+
"open": "^11.0.0",
|
|
75
|
+
"openai": "^4.70.0",
|
|
76
|
+
"react": "^19.2.4",
|
|
77
|
+
"ws": "^8.18.0"
|
|
78
|
+
},
|
|
79
|
+
"optionalDependencies": {
|
|
80
|
+
"playwright-core": "^1.58.2"
|
|
81
|
+
},
|
|
82
|
+
"devDependencies": {
|
|
83
|
+
"@types/node": "^22.0.0",
|
|
84
|
+
"@types/react": "^19.2.14",
|
|
85
|
+
"@types/ws": "^8.5.0",
|
|
86
|
+
"tsx": "^4.21.0",
|
|
87
|
+
"typescript": "^5.6.0"
|
|
88
|
+
}
|
|
89
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: acp
|
|
3
|
+
description: ACP harness router (acpx-backed) for Codex/Claude/Pi/OpenCode/Gemini/Kimi sessions
|
|
4
|
+
version: 0.1.0
|
|
5
|
+
author: Tako
|
|
6
|
+
user-invocable: true
|
|
7
|
+
command-dispatch: tool
|
|
8
|
+
command-tool: acp_router
|
|
9
|
+
command-arg-mode: raw
|
|
10
|
+
triggers:
|
|
11
|
+
- type: keyword
|
|
12
|
+
value: acp
|
|
13
|
+
- type: keyword
|
|
14
|
+
value: codex
|
|
15
|
+
- type: keyword
|
|
16
|
+
value: claude code
|
|
17
|
+
- type: keyword
|
|
18
|
+
value: gemini cli
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
# ACP Router (acpx)
|
|
22
|
+
|
|
23
|
+
Use `/acp` to route work into ACP harness agents.
|
|
24
|
+
|
|
25
|
+
## Usage
|
|
26
|
+
|
|
27
|
+
- `/acp <agent> <prompt>` — send prompt to a persistent ACP session (auto-created)
|
|
28
|
+
- `/acp exec <agent> <prompt>` — one-shot (no persistent session)
|
|
29
|
+
- `/acp list` — list known ACP session bindings in Tako
|
|
30
|
+
- `/acp reset <agent>` — close and forget the bound session for this chat session
|
|
31
|
+
- `/acp help` — show help
|
|
32
|
+
|
|
33
|
+
## Agents
|
|
34
|
+
|
|
35
|
+
Supported aliases: `pi`, `claude`, `codex`, `opencode`, `gemini`, `kimi`.
|
|
36
|
+
|
|
37
|
+
## Notes
|
|
38
|
+
|
|
39
|
+
- Prefers plugin-local `extensions/acpx/node_modules/.bin/acpx` when available.
|
|
40
|
+
- Falls back to `acpx` from PATH.
|
|
41
|
+
- Persistent session names are deterministic per Tako chat session + agent.
|
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
import { spawn } from 'node:child_process';
|
|
2
|
+
import { existsSync } from 'node:fs';
|
|
3
|
+
import { mkdir, readFile, writeFile } from 'node:fs/promises';
|
|
4
|
+
import { homedir } from 'node:os';
|
|
5
|
+
import { join } from 'node:path';
|
|
6
|
+
|
|
7
|
+
const STORE_DIR = join(homedir(), '.tako', 'acp');
|
|
8
|
+
const STORE_FILE = join(STORE_DIR, 'router-sessions.json');
|
|
9
|
+
|
|
10
|
+
const AGENT_ALIASES = new Set(['pi', 'claude', 'codex', 'opencode', 'gemini', 'kimi']);
|
|
11
|
+
|
|
12
|
+
function detectAcpx() {
|
|
13
|
+
const envCmd = process.env.ACPX_CMD;
|
|
14
|
+
if (envCmd) return envCmd;
|
|
15
|
+
|
|
16
|
+
const local = join(process.cwd(), 'extensions', 'acpx', 'node_modules', '.bin', 'acpx');
|
|
17
|
+
if (existsSync(local)) return local;
|
|
18
|
+
|
|
19
|
+
return 'acpx';
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
async function loadStore() {
|
|
23
|
+
try {
|
|
24
|
+
const raw = await readFile(STORE_FILE, 'utf-8');
|
|
25
|
+
const parsed = JSON.parse(raw);
|
|
26
|
+
return parsed && typeof parsed === 'object' ? parsed : {};
|
|
27
|
+
} catch {
|
|
28
|
+
return {};
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
async function saveStore(store) {
|
|
33
|
+
await mkdir(STORE_DIR, { recursive: true });
|
|
34
|
+
await writeFile(STORE_FILE, JSON.stringify(store, null, 2), 'utf-8');
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
function shlex(input) {
|
|
38
|
+
const tokens = [];
|
|
39
|
+
let current = '';
|
|
40
|
+
let quote = null;
|
|
41
|
+
let esc = false;
|
|
42
|
+
|
|
43
|
+
for (const ch of input) {
|
|
44
|
+
if (esc) {
|
|
45
|
+
current += ch;
|
|
46
|
+
esc = false;
|
|
47
|
+
continue;
|
|
48
|
+
}
|
|
49
|
+
if (ch === '\\') {
|
|
50
|
+
esc = true;
|
|
51
|
+
continue;
|
|
52
|
+
}
|
|
53
|
+
if (quote) {
|
|
54
|
+
if (ch === quote) quote = null;
|
|
55
|
+
else current += ch;
|
|
56
|
+
continue;
|
|
57
|
+
}
|
|
58
|
+
if (ch === '"' || ch === "'") {
|
|
59
|
+
quote = ch;
|
|
60
|
+
continue;
|
|
61
|
+
}
|
|
62
|
+
if (/\s/.test(ch)) {
|
|
63
|
+
if (current) {
|
|
64
|
+
tokens.push(current);
|
|
65
|
+
current = '';
|
|
66
|
+
}
|
|
67
|
+
continue;
|
|
68
|
+
}
|
|
69
|
+
current += ch;
|
|
70
|
+
}
|
|
71
|
+
if (current) tokens.push(current);
|
|
72
|
+
return tokens;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
function run(cmd, args, cwd, timeoutMs = 20 * 60 * 1000) {
|
|
76
|
+
return new Promise((resolve) => {
|
|
77
|
+
const child = spawn(cmd, args, {
|
|
78
|
+
cwd,
|
|
79
|
+
env: process.env,
|
|
80
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
81
|
+
});
|
|
82
|
+
|
|
83
|
+
let out = '';
|
|
84
|
+
let err = '';
|
|
85
|
+
|
|
86
|
+
child.stdout?.on('data', (d) => { out += String(d); });
|
|
87
|
+
child.stderr?.on('data', (d) => { err += String(d); });
|
|
88
|
+
|
|
89
|
+
const timer = setTimeout(() => {
|
|
90
|
+
child.kill('SIGKILL');
|
|
91
|
+
resolve({ ok: false, code: -1, stdout: out, stderr: `${err}\nTimed out after ${timeoutMs}ms` });
|
|
92
|
+
}, timeoutMs);
|
|
93
|
+
|
|
94
|
+
child.on('error', (e) => {
|
|
95
|
+
clearTimeout(timer);
|
|
96
|
+
resolve({ ok: false, code: -1, stdout: out, stderr: `${err}\n${e.message}` });
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
child.on('close', (code) => {
|
|
100
|
+
clearTimeout(timer);
|
|
101
|
+
resolve({ ok: code === 0, code: code ?? -1, stdout: out, stderr: err });
|
|
102
|
+
});
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
function sessionKey(ctx, agent) {
|
|
107
|
+
return `${ctx.sessionId}:${agent}`;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
function defaultSessionName(ctx, agent) {
|
|
111
|
+
const sid = String(ctx.sessionId || 'session').replace(/[^a-zA-Z0-9_-]/g, '_').slice(0, 24);
|
|
112
|
+
return `tako-${agent}-${sid}`;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
function helpText() {
|
|
116
|
+
return [
|
|
117
|
+
'ACP Router',
|
|
118
|
+
'',
|
|
119
|
+
'Usage:',
|
|
120
|
+
' /acp <agent> <prompt> Send prompt to persistent ACP session',
|
|
121
|
+
' /acp exec <agent> <prompt> One-shot ACP execution',
|
|
122
|
+
' /acp list List ACP bindings for this Tako instance',
|
|
123
|
+
' /acp reset <agent> Close + forget bound ACP session',
|
|
124
|
+
' /acp help Show this help',
|
|
125
|
+
'',
|
|
126
|
+
'Agents: pi, claude, codex, opencode, gemini, kimi',
|
|
127
|
+
].join('\n');
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
const acpRouterTool = {
|
|
131
|
+
name: 'acp_router',
|
|
132
|
+
description: 'Route ACP harness commands to acpx (persistent or one-shot).',
|
|
133
|
+
parameters: {
|
|
134
|
+
type: 'object',
|
|
135
|
+
properties: {
|
|
136
|
+
input: { type: 'string', description: 'Raw /acp command args' },
|
|
137
|
+
},
|
|
138
|
+
required: ['input'],
|
|
139
|
+
},
|
|
140
|
+
async execute(params, ctx) {
|
|
141
|
+
const input = String(params?.input || '').trim();
|
|
142
|
+
if (!input || input === 'help') {
|
|
143
|
+
return { success: true, output: helpText() };
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
const acpx = detectAcpx();
|
|
147
|
+
const cwd = ctx.workDir || process.cwd();
|
|
148
|
+
const store = await loadStore();
|
|
149
|
+
const tokens = shlex(input);
|
|
150
|
+
|
|
151
|
+
const versionCheck = await run(acpx, ['--version'], cwd, 15000);
|
|
152
|
+
if (!versionCheck.ok) {
|
|
153
|
+
return {
|
|
154
|
+
success: false,
|
|
155
|
+
error: [
|
|
156
|
+
`acpx is not available (${acpx}).`,
|
|
157
|
+
'Install it with: npm i -g acpx',
|
|
158
|
+
'Or set ACPX_CMD to a valid binary path.',
|
|
159
|
+
].join(' '),
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
const first = (tokens[0] || '').toLowerCase();
|
|
164
|
+
|
|
165
|
+
if (first === 'list') {
|
|
166
|
+
const entries = Object.entries(store);
|
|
167
|
+
if (entries.length === 0) return { success: true, output: 'No ACP session bindings yet.' };
|
|
168
|
+
const lines = entries.map(([k, v]) => `${k} -> ${v.agent}:${v.sessionName}`);
|
|
169
|
+
return { success: true, output: `ACP bindings:\n${lines.join('\n')}` };
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
if (first === 'reset') {
|
|
173
|
+
const agent = (tokens[1] || '').toLowerCase();
|
|
174
|
+
if (!AGENT_ALIASES.has(agent)) {
|
|
175
|
+
return { success: false, error: `Invalid agent "${agent}". Use: pi|claude|codex|opencode|gemini|kimi` };
|
|
176
|
+
}
|
|
177
|
+
const key = sessionKey(ctx, agent);
|
|
178
|
+
const bound = store[key];
|
|
179
|
+
if (!bound?.sessionName) {
|
|
180
|
+
return { success: true, output: `No bound session for ${agent} in this chat session.` };
|
|
181
|
+
}
|
|
182
|
+
const closeRes = await run(acpx, [agent, 'sessions', 'close', bound.sessionName], cwd, 120000);
|
|
183
|
+
delete store[key];
|
|
184
|
+
await saveStore(store);
|
|
185
|
+
if (closeRes.ok) return { success: true, output: `Closed ACP session ${bound.sessionName} (${agent}).` };
|
|
186
|
+
return { success: true, output: `Unbound ${bound.sessionName} (${agent}).\n(close returned non-zero: ${closeRes.stderr || closeRes.stdout || 'unknown'})` };
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
if (first === 'exec') {
|
|
190
|
+
const agent = (tokens[1] || '').toLowerCase();
|
|
191
|
+
const prompt = tokens.slice(2).join(' ').trim();
|
|
192
|
+
if (!AGENT_ALIASES.has(agent)) {
|
|
193
|
+
return { success: false, error: `Invalid agent "${agent}". Use: pi|claude|codex|opencode|gemini|kimi` };
|
|
194
|
+
}
|
|
195
|
+
if (!prompt) return { success: false, error: 'Missing prompt. Usage: /acp exec <agent> <prompt>' };
|
|
196
|
+
|
|
197
|
+
const res = await run(acpx, [agent, 'exec', '--cwd', cwd, '--format', 'quiet', prompt], cwd);
|
|
198
|
+
if (!res.ok) {
|
|
199
|
+
return { success: false, error: `acpx exec failed: ${res.stderr || res.stdout || 'unknown error'}` };
|
|
200
|
+
}
|
|
201
|
+
return { success: true, output: res.stdout || '(no output)' };
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
// Default mode: /acp <agent> <prompt>
|
|
205
|
+
const agent = first;
|
|
206
|
+
const prompt = tokens.slice(1).join(' ').trim();
|
|
207
|
+
|
|
208
|
+
if (!AGENT_ALIASES.has(agent)) {
|
|
209
|
+
return { success: false, error: `Invalid subcommand/agent "${agent}". Try /acp help` };
|
|
210
|
+
}
|
|
211
|
+
if (!prompt) {
|
|
212
|
+
return { success: false, error: 'Missing prompt. Usage: /acp <agent> <prompt>' };
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
const key = sessionKey(ctx, agent);
|
|
216
|
+
const existing = store[key];
|
|
217
|
+
const sessionName = existing?.sessionName || defaultSessionName(ctx, agent);
|
|
218
|
+
|
|
219
|
+
// Ensure session exists (best-effort create)
|
|
220
|
+
await run(acpx, [agent, 'sessions', 'new', '--name', sessionName], cwd, 120000);
|
|
221
|
+
|
|
222
|
+
const sendRes = await run(acpx, [agent, '-s', sessionName, '--cwd', cwd, '--format', 'quiet', prompt], cwd);
|
|
223
|
+
if (!sendRes.ok) {
|
|
224
|
+
return { success: false, error: `acpx session send failed: ${sendRes.stderr || sendRes.stdout || 'unknown error'}` };
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
store[key] = { agent, sessionName, updatedAt: Date.now() };
|
|
228
|
+
await saveStore(store);
|
|
229
|
+
|
|
230
|
+
return {
|
|
231
|
+
success: true,
|
|
232
|
+
output: sendRes.stdout || '(no output)',
|
|
233
|
+
data: { agent, sessionName },
|
|
234
|
+
};
|
|
235
|
+
},
|
|
236
|
+
};
|
|
237
|
+
|
|
238
|
+
export const tools = [acpRouterTool];
|
|
239
|
+
export default tools;
|