@asermax/tachikoma 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +64 -0
- package/dist/agent/adapter.d.ts +8 -0
- package/dist/agent/adapter.js +86 -0
- package/dist/agent/adapter.js.map +1 -0
- package/dist/agent/manager.d.ts +35 -0
- package/dist/agent/manager.js +76 -0
- package/dist/agent/manager.js.map +1 -0
- package/dist/agent/models.d.ts +46 -0
- package/dist/agent/models.js +96 -0
- package/dist/agent/models.js.map +1 -0
- package/dist/agent/side-run.d.ts +42 -0
- package/dist/agent/side-run.js +83 -0
- package/dist/agent/side-run.js.map +1 -0
- package/dist/app.d.ts +5 -0
- package/dist/app.js +79 -0
- package/dist/app.js.map +1 -0
- package/dist/channels/types.d.ts +37 -0
- package/dist/channels/types.js +5 -0
- package/dist/channels/types.js.map +1 -0
- package/dist/config/default-template.d.ts +1 -0
- package/dist/config/default-template.js +49 -0
- package/dist/config/default-template.js.map +1 -0
- package/dist/config/load.d.ts +8 -0
- package/dist/config/load.js +28 -0
- package/dist/config/load.js.map +1 -0
- package/dist/config/parse.d.ts +5 -0
- package/dist/config/parse.js +18 -0
- package/dist/config/parse.js.map +1 -0
- package/dist/config/schema.d.ts +29 -0
- package/dist/config/schema.js +35 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/coordinator.d.ts +54 -0
- package/dist/coordinator.js +344 -0
- package/dist/coordinator.js.map +1 -0
- package/dist/db/core-schema.d.ts +250 -0
- package/dist/db/core-schema.js +19 -0
- package/dist/db/core-schema.js.map +1 -0
- package/dist/db/index.d.ts +8 -0
- package/dist/db/index.js +16 -0
- package/dist/db/index.js.map +1 -0
- package/dist/db/schema.d.ts +4 -0
- package/dist/db/schema.js +7 -0
- package/dist/db/schema.js.map +1 -0
- package/dist/db/state.d.ts +10 -0
- package/dist/db/state.js +36 -0
- package/dist/db/state.js.map +1 -0
- package/dist/domain/agent-events.d.ts +26 -0
- package/dist/domain/agent-events.js +2 -0
- package/dist/domain/agent-events.js.map +1 -0
- package/dist/domain/message.d.ts +25 -0
- package/dist/domain/message.js +17 -0
- package/dist/domain/message.js.map +1 -0
- package/dist/events.d.ts +9 -0
- package/dist/events.js +27 -0
- package/dist/events.js.map +1 -0
- package/dist/extensions/api.d.ts +118 -0
- package/dist/extensions/api.js +7 -0
- package/dist/extensions/api.js.map +1 -0
- package/dist/extensions/boundary/detector.d.ts +20 -0
- package/dist/extensions/boundary/detector.js +57 -0
- package/dist/extensions/boundary/detector.js.map +1 -0
- package/dist/extensions/boundary/idle.d.ts +10 -0
- package/dist/extensions/boundary/idle.js +28 -0
- package/dist/extensions/boundary/idle.js.map +1 -0
- package/dist/extensions/boundary/index.d.ts +12 -0
- package/dist/extensions/boundary/index.js +65 -0
- package/dist/extensions/boundary/index.js.map +1 -0
- package/dist/extensions/boundary/summary.d.ts +5 -0
- package/dist/extensions/boundary/summary.js +33 -0
- package/dist/extensions/boundary/summary.js.map +1 -0
- package/dist/extensions/commands/index.d.ts +7 -0
- package/dist/extensions/commands/index.js +21 -0
- package/dist/extensions/commands/index.js.map +1 -0
- package/dist/extensions/context/index.d.ts +7 -0
- package/dist/extensions/context/index.js +65 -0
- package/dist/extensions/context/index.js.map +1 -0
- package/dist/extensions/context/processor.d.ts +27 -0
- package/dist/extensions/context/processor.js +228 -0
- package/dist/extensions/context/processor.js.map +1 -0
- package/dist/extensions/detached-processes/index.d.ts +12 -0
- package/dist/extensions/detached-processes/index.js +51 -0
- package/dist/extensions/detached-processes/index.js.map +1 -0
- package/dist/extensions/detached-processes/limits.d.ts +27 -0
- package/dist/extensions/detached-processes/limits.js +55 -0
- package/dist/extensions/detached-processes/limits.js.map +1 -0
- package/dist/extensions/detached-processes/output.d.ts +2 -0
- package/dist/extensions/detached-processes/output.js +26 -0
- package/dist/extensions/detached-processes/output.js.map +1 -0
- package/dist/extensions/detached-processes/reconcile.d.ts +31 -0
- package/dist/extensions/detached-processes/reconcile.js +71 -0
- package/dist/extensions/detached-processes/reconcile.js.map +1 -0
- package/dist/extensions/detached-processes/repository.d.ts +33 -0
- package/dist/extensions/detached-processes/repository.js +62 -0
- package/dist/extensions/detached-processes/repository.js.map +1 -0
- package/dist/extensions/detached-processes/schema.d.ts +252 -0
- package/dist/extensions/detached-processes/schema.js +23 -0
- package/dist/extensions/detached-processes/schema.js.map +1 -0
- package/dist/extensions/detached-processes/spawn.d.ts +40 -0
- package/dist/extensions/detached-processes/spawn.js +137 -0
- package/dist/extensions/detached-processes/spawn.js.map +1 -0
- package/dist/extensions/detached-processes/tools.d.ts +41 -0
- package/dist/extensions/detached-processes/tools.js +243 -0
- package/dist/extensions/detached-processes/tools.js.map +1 -0
- package/dist/extensions/detached-processes/watcher.d.ts +7 -0
- package/dist/extensions/detached-processes/watcher.js +19 -0
- package/dist/extensions/detached-processes/watcher.js.map +1 -0
- package/dist/extensions/external/index.d.ts +11 -0
- package/dist/extensions/external/index.js +40 -0
- package/dist/extensions/external/index.js.map +1 -0
- package/dist/extensions/external/installs.d.ts +39 -0
- package/dist/extensions/external/installs.js +98 -0
- package/dist/extensions/external/installs.js.map +1 -0
- package/dist/extensions/external/loader.d.ts +19 -0
- package/dist/extensions/external/loader.js +70 -0
- package/dist/extensions/external/loader.js.map +1 -0
- package/dist/extensions/external/tools.d.ts +17 -0
- package/dist/extensions/external/tools.js +112 -0
- package/dist/extensions/external/tools.js.map +1 -0
- package/dist/extensions/git/commit.d.ts +19 -0
- package/dist/extensions/git/commit.js +44 -0
- package/dist/extensions/git/commit.js.map +1 -0
- package/dist/extensions/git/git.d.ts +11 -0
- package/dist/extensions/git/git.js +29 -0
- package/dist/extensions/git/git.js.map +1 -0
- package/dist/extensions/git/hooks.d.ts +10 -0
- package/dist/extensions/git/hooks.js +88 -0
- package/dist/extensions/git/hooks.js.map +1 -0
- package/dist/extensions/git/index.d.ts +11 -0
- package/dist/extensions/git/index.js +28 -0
- package/dist/extensions/git/index.js.map +1 -0
- package/dist/extensions/git/processor.d.ts +13 -0
- package/dist/extensions/git/processor.js +52 -0
- package/dist/extensions/git/processor.js.map +1 -0
- package/dist/extensions/git/sync.d.ts +44 -0
- package/dist/extensions/git/sync.js +189 -0
- package/dist/extensions/git/sync.js.map +1 -0
- package/dist/extensions/git/tools.d.ts +21 -0
- package/dist/extensions/git/tools.js +101 -0
- package/dist/extensions/git/tools.js.map +1 -0
- package/dist/extensions/host.d.ts +31 -0
- package/dist/extensions/host.js +75 -0
- package/dist/extensions/host.js.map +1 -0
- package/dist/extensions/index.d.ts +3 -0
- package/dist/extensions/index.js +32 -0
- package/dist/extensions/index.js.map +1 -0
- package/dist/extensions/memory/archive.d.ts +8 -0
- package/dist/extensions/memory/archive.js +46 -0
- package/dist/extensions/memory/archive.js.map +1 -0
- package/dist/extensions/memory/dates.d.ts +2 -0
- package/dist/extensions/memory/dates.js +7 -0
- package/dist/extensions/memory/dates.js.map +1 -0
- package/dist/extensions/memory/extraction.d.ts +17 -0
- package/dist/extensions/memory/extraction.js +218 -0
- package/dist/extensions/memory/extraction.js.map +1 -0
- package/dist/extensions/memory/index.d.ts +20 -0
- package/dist/extensions/memory/index.js +67 -0
- package/dist/extensions/memory/index.js.map +1 -0
- package/dist/extensions/memory/indexes.d.ts +14 -0
- package/dist/extensions/memory/indexes.js +64 -0
- package/dist/extensions/memory/indexes.js.map +1 -0
- package/dist/extensions/memory/layout.d.ts +20 -0
- package/dist/extensions/memory/layout.js +79 -0
- package/dist/extensions/memory/layout.js.map +1 -0
- package/dist/extensions/memory/maintenance.d.ts +21 -0
- package/dist/extensions/memory/maintenance.js +357 -0
- package/dist/extensions/memory/maintenance.js.map +1 -0
- package/dist/extensions/memory/prompts.d.ts +8 -0
- package/dist/extensions/memory/prompts.js +125 -0
- package/dist/extensions/memory/prompts.js.map +1 -0
- package/dist/extensions/memory/transcript.d.ts +18 -0
- package/dist/extensions/memory/transcript.js +79 -0
- package/dist/extensions/memory/transcript.js.map +1 -0
- package/dist/extensions/notifications/format.d.ts +5 -0
- package/dist/extensions/notifications/format.js +17 -0
- package/dist/extensions/notifications/format.js.map +1 -0
- package/dist/extensions/notifications/index.d.ts +13 -0
- package/dist/extensions/notifications/index.js +29 -0
- package/dist/extensions/notifications/index.js.map +1 -0
- package/dist/extensions/notifications/payload.d.ts +22 -0
- package/dist/extensions/notifications/payload.js +29 -0
- package/dist/extensions/notifications/payload.js.map +1 -0
- package/dist/extensions/notifications/router.d.ts +29 -0
- package/dist/extensions/notifications/router.js +55 -0
- package/dist/extensions/notifications/router.js.map +1 -0
- package/dist/extensions/notifications/tools.d.ts +12 -0
- package/dist/extensions/notifications/tools.js +41 -0
- package/dist/extensions/notifications/tools.js.map +1 -0
- package/dist/extensions/projects/context-provider.d.ts +9 -0
- package/dist/extensions/projects/context-provider.js +37 -0
- package/dist/extensions/projects/context-provider.js.map +1 -0
- package/dist/extensions/projects/git.d.ts +28 -0
- package/dist/extensions/projects/git.js +91 -0
- package/dist/extensions/projects/git.js.map +1 -0
- package/dist/extensions/projects/hooks.d.ts +7 -0
- package/dist/extensions/projects/hooks.js +42 -0
- package/dist/extensions/projects/hooks.js.map +1 -0
- package/dist/extensions/projects/index.d.ts +11 -0
- package/dist/extensions/projects/index.js +30 -0
- package/dist/extensions/projects/index.js.map +1 -0
- package/dist/extensions/projects/processor.d.ts +13 -0
- package/dist/extensions/projects/processor.js +63 -0
- package/dist/extensions/projects/processor.js.map +1 -0
- package/dist/extensions/projects/tools.d.ts +21 -0
- package/dist/extensions/projects/tools.js +118 -0
- package/dist/extensions/projects/tools.js.map +1 -0
- package/dist/extensions/registrations.d.ts +21 -0
- package/dist/extensions/registrations.js +12 -0
- package/dist/extensions/registrations.js.map +1 -0
- package/dist/extensions/repl/index.d.ts +2 -0
- package/dist/extensions/repl/index.js +85 -0
- package/dist/extensions/repl/index.js.map +1 -0
- package/dist/extensions/skills/agents.d.ts +17 -0
- package/dist/extensions/skills/agents.js +77 -0
- package/dist/extensions/skills/agents.js.map +1 -0
- package/dist/extensions/skills/delegate.d.ts +22 -0
- package/dist/extensions/skills/delegate.js +54 -0
- package/dist/extensions/skills/delegate.js.map +1 -0
- package/dist/extensions/skills/index.d.ts +11 -0
- package/dist/extensions/skills/index.js +43 -0
- package/dist/extensions/skills/index.js.map +1 -0
- package/dist/extensions/skills/reload.d.ts +8 -0
- package/dist/extensions/skills/reload.js +38 -0
- package/dist/extensions/skills/reload.js.map +1 -0
- package/dist/extensions/tasks/executor.d.ts +43 -0
- package/dist/extensions/tasks/executor.js +179 -0
- package/dist/extensions/tasks/executor.js.map +1 -0
- package/dist/extensions/tasks/expiration.d.ts +12 -0
- package/dist/extensions/tasks/expiration.js +17 -0
- package/dist/extensions/tasks/expiration.js.map +1 -0
- package/dist/extensions/tasks/generation.d.ts +14 -0
- package/dist/extensions/tasks/generation.js +70 -0
- package/dist/extensions/tasks/generation.js.map +1 -0
- package/dist/extensions/tasks/index.d.ts +14 -0
- package/dist/extensions/tasks/index.js +75 -0
- package/dist/extensions/tasks/index.js.map +1 -0
- package/dist/extensions/tasks/repository.d.ts +53 -0
- package/dist/extensions/tasks/repository.js +147 -0
- package/dist/extensions/tasks/repository.js.map +1 -0
- package/dist/extensions/tasks/schedule.d.ts +13 -0
- package/dist/extensions/tasks/schedule.js +32 -0
- package/dist/extensions/tasks/schedule.js.map +1 -0
- package/dist/extensions/tasks/schema.d.ts +423 -0
- package/dist/extensions/tasks/schema.js +45 -0
- package/dist/extensions/tasks/schema.js.map +1 -0
- package/dist/extensions/tasks/session-delivery.d.ts +18 -0
- package/dist/extensions/tasks/session-delivery.js +39 -0
- package/dist/extensions/tasks/session-delivery.js.map +1 -0
- package/dist/extensions/tasks/tools.d.ts +38 -0
- package/dist/extensions/tasks/tools.js +181 -0
- package/dist/extensions/tasks/tools.js.map +1 -0
- package/dist/extensions/telegram/buttons.d.ts +14 -0
- package/dist/extensions/telegram/buttons.js +49 -0
- package/dist/extensions/telegram/buttons.js.map +1 -0
- package/dist/extensions/telegram/channel.d.ts +39 -0
- package/dist/extensions/telegram/channel.js +201 -0
- package/dist/extensions/telegram/channel.js.map +1 -0
- package/dist/extensions/telegram/chunking.d.ts +7 -0
- package/dist/extensions/telegram/chunking.js +67 -0
- package/dist/extensions/telegram/chunking.js.map +1 -0
- package/dist/extensions/telegram/inbound.d.ts +7 -0
- package/dist/extensions/telegram/inbound.js +29 -0
- package/dist/extensions/telegram/inbound.js.map +1 -0
- package/dist/extensions/telegram/index.d.ts +13 -0
- package/dist/extensions/telegram/index.js +67 -0
- package/dist/extensions/telegram/index.js.map +1 -0
- package/dist/extensions/telegram/media.d.ts +39 -0
- package/dist/extensions/telegram/media.js +223 -0
- package/dist/extensions/telegram/media.js.map +1 -0
- package/dist/extensions/telegram/mutex.d.ts +9 -0
- package/dist/extensions/telegram/mutex.js +14 -0
- package/dist/extensions/telegram/mutex.js.map +1 -0
- package/dist/extensions/telegram/sending.d.ts +48 -0
- package/dist/extensions/telegram/sending.js +119 -0
- package/dist/extensions/telegram/sending.js.map +1 -0
- package/dist/extensions/telegram/streaming.d.ts +46 -0
- package/dist/extensions/telegram/streaming.js +140 -0
- package/dist/extensions/telegram/streaming.js.map +1 -0
- package/dist/extensions/telegram/tools.d.ts +80 -0
- package/dist/extensions/telegram/tools.js +232 -0
- package/dist/extensions/telegram/tools.js.map +1 -0
- package/dist/extensions/workflows/cleanup.d.ts +10 -0
- package/dist/extensions/workflows/cleanup.js +38 -0
- package/dist/extensions/workflows/cleanup.js.map +1 -0
- package/dist/extensions/workflows/index.d.ts +11 -0
- package/dist/extensions/workflows/index.js +42 -0
- package/dist/extensions/workflows/index.js.map +1 -0
- package/dist/extensions/workflows/loader.d.ts +27 -0
- package/dist/extensions/workflows/loader.js +90 -0
- package/dist/extensions/workflows/loader.js.map +1 -0
- package/dist/extensions/workflows/model.d.ts +19 -0
- package/dist/extensions/workflows/model.js +7 -0
- package/dist/extensions/workflows/model.js.map +1 -0
- package/dist/extensions/workflows/repository.d.ts +24 -0
- package/dist/extensions/workflows/repository.js +61 -0
- package/dist/extensions/workflows/repository.js.map +1 -0
- package/dist/extensions/workflows/schema.d.ts +193 -0
- package/dist/extensions/workflows/schema.js +20 -0
- package/dist/extensions/workflows/schema.js.map +1 -0
- package/dist/extensions/workflows/tools.d.ts +27 -0
- package/dist/extensions/workflows/tools.js +285 -0
- package/dist/extensions/workflows/tools.js.map +1 -0
- package/dist/log.d.ts +8 -0
- package/dist/log.js +15 -0
- package/dist/log.js.map +1 -0
- package/dist/main.d.ts +2 -0
- package/dist/main.js +27 -0
- package/dist/main.js.map +1 -0
- package/dist/migration/ask.d.ts +8 -0
- package/dist/migration/ask.js +24 -0
- package/dist/migration/ask.js.map +1 -0
- package/dist/migration/config.d.ts +10 -0
- package/dist/migration/config.js +122 -0
- package/dist/migration/config.js.map +1 -0
- package/dist/migration/context.d.ts +3 -0
- package/dist/migration/context.js +24 -0
- package/dist/migration/context.js.map +1 -0
- package/dist/migration/database.d.ts +8 -0
- package/dist/migration/database.js +51 -0
- package/dist/migration/database.js.map +1 -0
- package/dist/migration/fs.d.ts +1 -0
- package/dist/migration/fs.js +11 -0
- package/dist/migration/fs.js.map +1 -0
- package/dist/migration/index.d.ts +11 -0
- package/dist/migration/index.js +28 -0
- package/dist/migration/index.js.map +1 -0
- package/dist/migration/skills.d.ts +19 -0
- package/dist/migration/skills.js +77 -0
- package/dist/migration/skills.js.map +1 -0
- package/dist/scheduler.d.ts +17 -0
- package/dist/scheduler.js +53 -0
- package/dist/scheduler.js.map +1 -0
- package/dist/sessions/registry.d.ts +15 -0
- package/dist/sessions/registry.js +42 -0
- package/dist/sessions/registry.js.map +1 -0
- package/dist/workspace.d.ts +13 -0
- package/dist/workspace.js +32 -0
- package/dist/workspace.js.map +1 -0
- package/drizzle/0000_init.sql +19 -0
- package/drizzle/0001_extensions.sql +63 -0
- package/drizzle/meta/0000_snapshot.json +134 -0
- package/drizzle/meta/0001_snapshot.json +526 -0
- package/drizzle/meta/_journal.json +20 -0
- package/package.json +63 -0
- package/skills/skill-authoring/SKILL.md +168 -0
- package/skills/workflow-authoring/SKILL.md +251 -0
package/dist/app.js
ADDED
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { AgentManager } from "./agent/manager.js";
|
|
2
|
+
import { loadConfig } from "./config/load.js";
|
|
3
|
+
import { Coordinator } from "./coordinator.js";
|
|
4
|
+
import { createDatabase, runMigrations } from "./db/index.js";
|
|
5
|
+
import { EventBus } from "./events.js";
|
|
6
|
+
import { ExtensionHost } from "./extensions/host.js";
|
|
7
|
+
import { firstPartyExtensions } from "./extensions/index.js";
|
|
8
|
+
import { createRegistrations } from "./extensions/registrations.js";
|
|
9
|
+
import { componentLogger, createRootLogger } from "./log.js";
|
|
10
|
+
import { adaptConfig, adaptWorkspace } from "./migration/index.js";
|
|
11
|
+
import { Scheduler } from "./scheduler.js";
|
|
12
|
+
import { SessionRegistry } from "./sessions/registry.js";
|
|
13
|
+
import { Workspace } from "./workspace.js";
|
|
14
|
+
export const runApp = async (options = {}) => {
|
|
15
|
+
const { config, path: configPath, created } = await loadConfig(options.configPath);
|
|
16
|
+
const log = createRootLogger(config.logging);
|
|
17
|
+
if (created)
|
|
18
|
+
log.info({ configPath }, "generated default configuration");
|
|
19
|
+
const workspace = new Workspace(config.workspace.path);
|
|
20
|
+
await workspace.ensure();
|
|
21
|
+
const migrationLog = componentLogger(log, "migration");
|
|
22
|
+
const adapted = await adaptConfig(configPath, migrationLog);
|
|
23
|
+
// config is shared by reference with everything constructed below; assign in
|
|
24
|
+
// place so the translated values flow through without re-wiring runApp.
|
|
25
|
+
if (adapted != null)
|
|
26
|
+
Object.assign(config, adapted);
|
|
27
|
+
await adaptWorkspace(workspace, migrationLog);
|
|
28
|
+
const db = createDatabase(workspace.databaseFile);
|
|
29
|
+
runMigrations(db);
|
|
30
|
+
const events = new EventBus(componentLogger(log, "events"));
|
|
31
|
+
const scheduler = new Scheduler(componentLogger(log, "scheduler"), config.scheduler.timezone);
|
|
32
|
+
const regs = createRegistrations();
|
|
33
|
+
const agent = new AgentManager(workspace, config, regs, componentLogger(log, "agent"));
|
|
34
|
+
const registry = new SessionRegistry(db);
|
|
35
|
+
const coordinator = new Coordinator(config, registry, agent, regs, events, componentLogger(log, "coordinator"));
|
|
36
|
+
regs.piFactories.push(coordinator.hostFactory());
|
|
37
|
+
const host = new ExtensionHost({
|
|
38
|
+
config,
|
|
39
|
+
workspace,
|
|
40
|
+
log,
|
|
41
|
+
db,
|
|
42
|
+
events,
|
|
43
|
+
scheduler,
|
|
44
|
+
agent,
|
|
45
|
+
registry,
|
|
46
|
+
coordinator,
|
|
47
|
+
regs,
|
|
48
|
+
});
|
|
49
|
+
await host.load(firstPartyExtensions);
|
|
50
|
+
await host.bootstrap();
|
|
51
|
+
await coordinator.recoverDanglingSessions();
|
|
52
|
+
const channelName = options.channel ?? config.channels.default;
|
|
53
|
+
const channel = regs.channels.get(channelName);
|
|
54
|
+
if (channel == null) {
|
|
55
|
+
const available = [...regs.channels.keys()].join(", ");
|
|
56
|
+
throw new Error(`Unknown channel "${channelName}" — available: ${available}`);
|
|
57
|
+
}
|
|
58
|
+
coordinator.attachChannel(channel);
|
|
59
|
+
const abort = new AbortController();
|
|
60
|
+
const shutdown = (signal) => {
|
|
61
|
+
log.info({ signal }, "shutting down");
|
|
62
|
+
abort.abort();
|
|
63
|
+
};
|
|
64
|
+
process.once("SIGINT", () => shutdown("SIGINT"));
|
|
65
|
+
process.once("SIGTERM", () => shutdown("SIGTERM"));
|
|
66
|
+
await channel.start({
|
|
67
|
+
log: componentLogger(log, channelName),
|
|
68
|
+
submit: (message) => coordinator.submit(message),
|
|
69
|
+
});
|
|
70
|
+
log.info({ channel: channelName, workspace: workspace.root }, "tachikoma ready");
|
|
71
|
+
try {
|
|
72
|
+
await coordinator.run(abort.signal);
|
|
73
|
+
}
|
|
74
|
+
finally {
|
|
75
|
+
await channel.stop();
|
|
76
|
+
scheduler.stopAll();
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
//# sourceMappingURL=app.js.map
|
package/dist/app.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { AgentEvent } from "../domain/agent-events.ts";
|
|
2
|
+
import type { InboundMessage } from "../domain/message.ts";
|
|
3
|
+
import type { Logger } from "../log.ts";
|
|
4
|
+
export interface ChannelRuntime {
|
|
5
|
+
log: Logger;
|
|
6
|
+
submit(message: InboundMessage): void;
|
|
7
|
+
}
|
|
8
|
+
export interface Exchange {
|
|
9
|
+
message: InboundMessage;
|
|
10
|
+
events: AsyncIterable<AgentEvent>;
|
|
11
|
+
}
|
|
12
|
+
export declare const DELIVERY_GATES: {
|
|
13
|
+
readonly idle: "idle";
|
|
14
|
+
readonly immediate: "immediate";
|
|
15
|
+
};
|
|
16
|
+
export type DeliveryGate = keyof typeof DELIVERY_GATES;
|
|
17
|
+
export interface Delivery {
|
|
18
|
+
text: string;
|
|
19
|
+
gate?: DeliveryGate;
|
|
20
|
+
/** "user" renders through the channel; "agent" injects a prompt into the session. */
|
|
21
|
+
target?: "user" | "agent";
|
|
22
|
+
/** Higher delivers first when several held items flush together. Default 0. */
|
|
23
|
+
priority?: number;
|
|
24
|
+
maxHoldSeconds?: number;
|
|
25
|
+
metadata?: Record<string, unknown>;
|
|
26
|
+
}
|
|
27
|
+
export interface Channel {
|
|
28
|
+
readonly name: string;
|
|
29
|
+
start(runtime: ChannelRuntime): Promise<void>;
|
|
30
|
+
/** Render one full agent exchange (consume the event stream to completion). */
|
|
31
|
+
respond(exchange: Exchange): Promise<void>;
|
|
32
|
+
/** Render a background-originated item (task results, notifications). */
|
|
33
|
+
deliver(delivery: Delivery): Promise<void>;
|
|
34
|
+
/** Render a transient pipeline status line ("Gathering context…"). Optional. */
|
|
35
|
+
status?(text: string): void;
|
|
36
|
+
stop(): Promise<void>;
|
|
37
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/channels/types.ts"],"names":[],"mappings":"AAcA,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,IAAI,EAAE,MAAM;IACZ,SAAS,EAAE,WAAW;CACd,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const DEFAULT_CONFIG_TEMPLATE = "# Tachikoma configuration\n# Generated with defaults on first run \u2014 every value below matches the built-in default.\n\n[workspace]\n# Root of the agent's persistent workspace (memories, context files, git repo).\npath = \"~/tachikoma\"\n\n[agent]\n# Per-role model selection, \"provider/model-id[:thinkingLevel]\" as known to pi's\n# model registry. Roles left unset fall back along classifier -> processor -> main\n# (searcher -> main); a fully unset chain uses pi's own resolution (settings\n# defaultModel, else the first model with credentials).\n#\n# Everything else about the agent \u2014 default model, thinking budgets, compaction,\n# retry, custom providers \u2014 is configured in pi's own files under\n# {workspace}/.tachikoma/pi/ (settings.json, models.json, auth.json).\n#\n# main = \"anthropic/claude-opus-4-5:medium\"\n# searcher = \"anthropic/claude-opus-4-5\"\n# processor = \"anthropic/claude-haiku-4-5\" # extraction / mechanical work\n# classifier = \"anthropic/claude-haiku-4-5\" # discrete classification\n\n[logging]\nlevel = \"info\"\npretty = true\n\n[channels]\n# Channel started by default: \"repl\" or \"telegram\".\ndefault = \"repl\"\n\n[sessions]\n# How far back closed sessions are considered for topic resumption.\nresumeWindowSeconds = 86400\n\n[scheduler]\n# IANA timezone for cron schedules; defaults to the system timezone when unset.\n# timezone = \"America/Argentina/Buenos_Aires\"\n\n# Per-extension settings live under [extensions.<name>], for example:\n#\n# [extensions.boundary]\n# # Seconds of conversation silence before the active session closes (0 disables).\n# idleCloseSeconds = 900\n#\n# [extensions.telegram]\n# botToken = \"...\"\n# chatId = 0\n";
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
export const DEFAULT_CONFIG_TEMPLATE = `# Tachikoma configuration
|
|
2
|
+
# Generated with defaults on first run — every value below matches the built-in default.
|
|
3
|
+
|
|
4
|
+
[workspace]
|
|
5
|
+
# Root of the agent's persistent workspace (memories, context files, git repo).
|
|
6
|
+
path = "~/tachikoma"
|
|
7
|
+
|
|
8
|
+
[agent]
|
|
9
|
+
# Per-role model selection, "provider/model-id[:thinkingLevel]" as known to pi's
|
|
10
|
+
# model registry. Roles left unset fall back along classifier -> processor -> main
|
|
11
|
+
# (searcher -> main); a fully unset chain uses pi's own resolution (settings
|
|
12
|
+
# defaultModel, else the first model with credentials).
|
|
13
|
+
#
|
|
14
|
+
# Everything else about the agent — default model, thinking budgets, compaction,
|
|
15
|
+
# retry, custom providers — is configured in pi's own files under
|
|
16
|
+
# {workspace}/.tachikoma/pi/ (settings.json, models.json, auth.json).
|
|
17
|
+
#
|
|
18
|
+
# main = "anthropic/claude-opus-4-5:medium"
|
|
19
|
+
# searcher = "anthropic/claude-opus-4-5"
|
|
20
|
+
# processor = "anthropic/claude-haiku-4-5" # extraction / mechanical work
|
|
21
|
+
# classifier = "anthropic/claude-haiku-4-5" # discrete classification
|
|
22
|
+
|
|
23
|
+
[logging]
|
|
24
|
+
level = "info"
|
|
25
|
+
pretty = true
|
|
26
|
+
|
|
27
|
+
[channels]
|
|
28
|
+
# Channel started by default: "repl" or "telegram".
|
|
29
|
+
default = "repl"
|
|
30
|
+
|
|
31
|
+
[sessions]
|
|
32
|
+
# How far back closed sessions are considered for topic resumption.
|
|
33
|
+
resumeWindowSeconds = 86400
|
|
34
|
+
|
|
35
|
+
[scheduler]
|
|
36
|
+
# IANA timezone for cron schedules; defaults to the system timezone when unset.
|
|
37
|
+
# timezone = "America/Argentina/Buenos_Aires"
|
|
38
|
+
|
|
39
|
+
# Per-extension settings live under [extensions.<name>], for example:
|
|
40
|
+
#
|
|
41
|
+
# [extensions.boundary]
|
|
42
|
+
# # Seconds of conversation silence before the active session closes (0 disables).
|
|
43
|
+
# idleCloseSeconds = 900
|
|
44
|
+
#
|
|
45
|
+
# [extensions.telegram]
|
|
46
|
+
# botToken = "..."
|
|
47
|
+
# chatId = 0
|
|
48
|
+
`;
|
|
49
|
+
//# sourceMappingURL=default-template.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"default-template.js","sourceRoot":"","sources":["../../src/config/default-template.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,uBAAuB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+CtC,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type Config } from "./schema.ts";
|
|
2
|
+
export declare const defaultConfigPath: () => string;
|
|
3
|
+
export interface LoadedConfig {
|
|
4
|
+
config: Config;
|
|
5
|
+
path: string;
|
|
6
|
+
created: boolean;
|
|
7
|
+
}
|
|
8
|
+
export declare const loadConfig: (path?: string) => Promise<LoadedConfig>;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { mkdir, readFile, writeFile } from "node:fs/promises";
|
|
2
|
+
import { homedir } from "node:os";
|
|
3
|
+
import { dirname, join } from "node:path";
|
|
4
|
+
import { parse as parseToml } from "smol-toml";
|
|
5
|
+
import { expandHome } from "../workspace.js";
|
|
6
|
+
import { DEFAULT_CONFIG_TEMPLATE } from "./default-template.js";
|
|
7
|
+
import { parseWithSchema } from "./parse.js";
|
|
8
|
+
import { ConfigSchema } from "./schema.js";
|
|
9
|
+
export const defaultConfigPath = () => join(process.env.XDG_CONFIG_HOME ?? join(homedir(), ".config"), "tachikoma", "config.toml");
|
|
10
|
+
export const loadConfig = async (path) => {
|
|
11
|
+
const configPath = expandHome(path ?? defaultConfigPath());
|
|
12
|
+
let raw;
|
|
13
|
+
let created = false;
|
|
14
|
+
try {
|
|
15
|
+
raw = await readFile(configPath, "utf8");
|
|
16
|
+
}
|
|
17
|
+
catch (error) {
|
|
18
|
+
if (error.code !== "ENOENT")
|
|
19
|
+
throw error;
|
|
20
|
+
await mkdir(dirname(configPath), { recursive: true });
|
|
21
|
+
await writeFile(configPath, DEFAULT_CONFIG_TEMPLATE, "utf8");
|
|
22
|
+
raw = DEFAULT_CONFIG_TEMPLATE;
|
|
23
|
+
created = true;
|
|
24
|
+
}
|
|
25
|
+
const config = parseWithSchema(ConfigSchema, parseToml(raw), `config at ${configPath}`);
|
|
26
|
+
return { config, path: configPath, created };
|
|
27
|
+
};
|
|
28
|
+
//# sourceMappingURL=load.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"load.js","sourceRoot":"","sources":["../../src/config/load.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,WAAW,CAAC;AAE/C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAe,YAAY,EAAE,MAAM,aAAa,CAAC;AAExD,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAW,EAAE,CAC5C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC;AAQ9F,MAAM,CAAC,MAAM,UAAU,GAAG,KAAK,EAAE,IAAa,EAAyB,EAAE;IACvE,MAAM,UAAU,GAAG,UAAU,CAAC,IAAI,IAAI,iBAAiB,EAAE,CAAC,CAAC;IAE3D,IAAI,GAAW,CAAC;IAChB,IAAI,OAAO,GAAG,KAAK,CAAC;IAEpB,IAAI,CAAC;QACH,GAAG,GAAG,MAAM,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAC3C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;YAAE,MAAM,KAAK,CAAC;QAEpE,MAAM,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACtD,MAAM,SAAS,CAAC,UAAU,EAAE,uBAAuB,EAAE,MAAM,CAAC,CAAC;QAC7D,GAAG,GAAG,uBAAuB,CAAC;QAC9B,OAAO,GAAG,IAAI,CAAC;IACjB,CAAC;IAED,MAAM,MAAM,GAAG,eAAe,CAAC,YAAY,EAAE,SAAS,CAAC,GAAG,CAAC,EAAE,aAAa,UAAU,EAAE,CAAC,CAAC;IAExF,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC;AAC/C,CAAC,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { Static, TSchema } from "typebox";
|
|
2
|
+
export declare class ConfigError extends Error {
|
|
3
|
+
}
|
|
4
|
+
/** Apply schema defaults, coerce compatible primitives, then assert. */
|
|
5
|
+
export declare const parseWithSchema: <S extends TSchema>(schema: S, value: unknown, label: string) => Static<S>;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Assert, Clone, Convert, Default, Errors } from "typebox/value";
|
|
2
|
+
export class ConfigError extends Error {
|
|
3
|
+
}
|
|
4
|
+
/** Apply schema defaults, coerce compatible primitives, then assert. */
|
|
5
|
+
export const parseWithSchema = (schema, value, label) => {
|
|
6
|
+
const prepared = Convert(schema, Default(schema, Clone(value)));
|
|
7
|
+
try {
|
|
8
|
+
Assert(schema, prepared);
|
|
9
|
+
}
|
|
10
|
+
catch {
|
|
11
|
+
const details = [...Errors(schema, prepared)]
|
|
12
|
+
.map((issue) => ` ${issue.instancePath || "/"}: ${issue.message}`)
|
|
13
|
+
.join("\n");
|
|
14
|
+
throw new ConfigError(`Invalid ${label}:\n${details}`);
|
|
15
|
+
}
|
|
16
|
+
return prepared;
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=parse.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse.js","sourceRoot":"","sources":["../../src/config/parse.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAExE,MAAM,OAAO,WAAY,SAAQ,KAAK;CAAG;AAEzC,wEAAwE;AACxE,MAAM,CAAC,MAAM,eAAe,GAAG,CAC7B,MAAS,EACT,KAAc,EACd,KAAa,EACF,EAAE;IACb,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAEhE,IAAI,CAAC;QACH,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,OAAO,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;aAC1C,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,CAAC,YAAY,IAAI,GAAG,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC;aAClE,IAAI,CAAC,IAAI,CAAC,CAAC;QAEd,MAAM,IAAI,WAAW,CAAC,WAAW,KAAK,MAAM,OAAO,EAAE,CAAC,CAAC;IACzD,CAAC;IAED,OAAO,QAAqB,CAAC;AAC/B,CAAC,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { type Static, Type } from "typebox";
|
|
2
|
+
export declare const ThinkingLevelSchema: Type.TUnsafe<"off" | "minimal" | "low" | "medium" | "high" | "xhigh">;
|
|
3
|
+
export declare const ConfigSchema: Type.TObject<{
|
|
4
|
+
workspace: Type.TObject<{
|
|
5
|
+
path: Type.TString;
|
|
6
|
+
}>;
|
|
7
|
+
agent: Type.TObject<{
|
|
8
|
+
main: Type.TOptional<Type.TString>;
|
|
9
|
+
searcher: Type.TOptional<Type.TString>;
|
|
10
|
+
processor: Type.TOptional<Type.TString>;
|
|
11
|
+
classifier: Type.TOptional<Type.TString>;
|
|
12
|
+
}>;
|
|
13
|
+
logging: Type.TObject<{
|
|
14
|
+
level: Type.TString;
|
|
15
|
+
pretty: Type.TBoolean;
|
|
16
|
+
}>;
|
|
17
|
+
channels: Type.TObject<{
|
|
18
|
+
default: Type.TString;
|
|
19
|
+
}>;
|
|
20
|
+
sessions: Type.TObject<{
|
|
21
|
+
resumeWindowSeconds: Type.TNumber;
|
|
22
|
+
}>;
|
|
23
|
+
scheduler: Type.TObject<{
|
|
24
|
+
timezone: Type.TOptional<Type.TString>;
|
|
25
|
+
}>;
|
|
26
|
+
extensions: Type.TRecord<"^.*$", Type.TUnknown>;
|
|
27
|
+
}>;
|
|
28
|
+
export type Config = Static<typeof ConfigSchema>;
|
|
29
|
+
export type ThinkingLevel = Static<typeof ThinkingLevelSchema>;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { StringEnum } from "@earendil-works/pi-ai";
|
|
2
|
+
import { Type } from "typebox";
|
|
3
|
+
export const ThinkingLevelSchema = StringEnum(["off", "minimal", "low", "medium", "high", "xhigh"], { default: "medium" });
|
|
4
|
+
export const ConfigSchema = Type.Object({
|
|
5
|
+
workspace: Type.Object({
|
|
6
|
+
path: Type.String({ default: "~/tachikoma" }),
|
|
7
|
+
}, { default: {} }),
|
|
8
|
+
// Per-role model selection only — everything else about the agent (default model,
|
|
9
|
+
// thinking budgets, compaction, retry, custom providers) belongs to pi's own
|
|
10
|
+
// settings.json/models.json under {workspace}/.tachikoma/pi/.
|
|
11
|
+
agent: Type.Object({
|
|
12
|
+
// "provider/model-id[:thinkingLevel]". Unset roles fall back along
|
|
13
|
+
// classifier → processor → main (searcher → main), then to pi's resolution.
|
|
14
|
+
main: Type.Optional(Type.String()),
|
|
15
|
+
searcher: Type.Optional(Type.String()),
|
|
16
|
+
processor: Type.Optional(Type.String()),
|
|
17
|
+
classifier: Type.Optional(Type.String()),
|
|
18
|
+
}, { default: {} }),
|
|
19
|
+
logging: Type.Object({
|
|
20
|
+
level: Type.String({ default: "info" }),
|
|
21
|
+
pretty: Type.Boolean({ default: true }),
|
|
22
|
+
}, { default: {} }),
|
|
23
|
+
channels: Type.Object({
|
|
24
|
+
default: Type.String({ default: "repl" }),
|
|
25
|
+
}, { default: {} }),
|
|
26
|
+
sessions: Type.Object({
|
|
27
|
+
resumeWindowSeconds: Type.Number({ default: 86400 }),
|
|
28
|
+
}, { default: {} }),
|
|
29
|
+
scheduler: Type.Object({
|
|
30
|
+
timezone: Type.Optional(Type.String()),
|
|
31
|
+
}, { default: {} }),
|
|
32
|
+
// Per-extension sections, validated by each extension's own configSchema.
|
|
33
|
+
extensions: Type.Record(Type.String(), Type.Unknown(), { default: {} }),
|
|
34
|
+
});
|
|
35
|
+
//# sourceMappingURL=schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAe,IAAI,EAAE,MAAM,SAAS,CAAC;AAE5C,MAAM,CAAC,MAAM,mBAAmB,GAAG,UAAU,CAC3C,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAU,EAC7D,EAAE,OAAO,EAAE,QAAQ,EAAE,CACtB,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC;IACtC,SAAS,EAAE,IAAI,CAAC,MAAM,CACpB;QACE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC;KAC9C,EACD,EAAE,OAAO,EAAE,EAAE,EAAE,CAChB;IAED,kFAAkF;IAClF,6EAA6E;IAC7E,8DAA8D;IAC9D,KAAK,EAAE,IAAI,CAAC,MAAM,CAChB;QACE,mEAAmE;QACnE,4EAA4E;QAC5E,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QAClC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QACtC,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QACvC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;KACzC,EACD,EAAE,OAAO,EAAE,EAAE,EAAE,CAChB;IAED,OAAO,EAAE,IAAI,CAAC,MAAM,CAClB;QACE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;QACvC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;KACxC,EACD,EAAE,OAAO,EAAE,EAAE,EAAE,CAChB;IAED,QAAQ,EAAE,IAAI,CAAC,MAAM,CACnB;QACE,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;KAC1C,EACD,EAAE,OAAO,EAAE,EAAE,EAAE,CAChB;IAED,QAAQ,EAAE,IAAI,CAAC,MAAM,CACnB;QACE,mBAAmB,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;KACrD,EACD,EAAE,OAAO,EAAE,EAAE,EAAE,CAChB;IAED,SAAS,EAAE,IAAI,CAAC,MAAM,CACpB;QACE,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;KACvC,EACD,EAAE,OAAO,EAAE,EAAE,EAAE,CAChB;IAED,0EAA0E;IAC1E,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;CACxE,CAAC,CAAC"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import type { ExtensionFactory } from "@earendil-works/pi-coding-agent";
|
|
2
|
+
import type { AgentManager } from "./agent/manager.ts";
|
|
3
|
+
import type { Channel, Delivery } from "./channels/types.ts";
|
|
4
|
+
import type { Config } from "./config/schema.ts";
|
|
5
|
+
import type { SessionRecord } from "./db/core-schema.ts";
|
|
6
|
+
import type { InboundMessage } from "./domain/message.ts";
|
|
7
|
+
import type { EventBus } from "./events.ts";
|
|
8
|
+
import type { Registrations } from "./extensions/registrations.ts";
|
|
9
|
+
import type { Logger } from "./log.ts";
|
|
10
|
+
import type { SessionRegistry } from "./sessions/registry.ts";
|
|
11
|
+
export declare class Coordinator {
|
|
12
|
+
private readonly inbox;
|
|
13
|
+
private wake;
|
|
14
|
+
private active;
|
|
15
|
+
private pendingContext;
|
|
16
|
+
private readonly heldDeliveries;
|
|
17
|
+
private exchanging;
|
|
18
|
+
private channel;
|
|
19
|
+
private readonly config;
|
|
20
|
+
private readonly registry;
|
|
21
|
+
private readonly agent;
|
|
22
|
+
private readonly regs;
|
|
23
|
+
private readonly events;
|
|
24
|
+
private readonly log;
|
|
25
|
+
constructor(config: Config, registry: SessionRegistry, agent: AgentManager, regs: Registrations, events: EventBus, log: Logger);
|
|
26
|
+
attachChannel(channel: Channel): void;
|
|
27
|
+
submit(message: InboundMessage): void;
|
|
28
|
+
/** Abort the in-flight agent run, if any (user-initiated stop). */
|
|
29
|
+
abortExchange(): Promise<void>;
|
|
30
|
+
status(text: string): void;
|
|
31
|
+
deliver(delivery: Delivery): void;
|
|
32
|
+
/** Host-owned pi extension: injects gathered context blocks before each agent run. */
|
|
33
|
+
hostFactory(): ExtensionFactory;
|
|
34
|
+
run(signal: AbortSignal): Promise<void>;
|
|
35
|
+
current(): SessionRecord | null;
|
|
36
|
+
/**
|
|
37
|
+
* Close the active session only when no exchange is in flight. This is the
|
|
38
|
+
* safe primitive for time-based policies (extensions cannot see the loop's
|
|
39
|
+
* busy state); an in-flight exchange means the session is not idle anyway.
|
|
40
|
+
*/
|
|
41
|
+
closeActiveSessionIfIdle(): Promise<boolean>;
|
|
42
|
+
closeActiveSession(): Promise<void>;
|
|
43
|
+
/** Close sessions left open by a previous run so their post-processing still happens. */
|
|
44
|
+
recoverDanglingSessions(): Promise<void>;
|
|
45
|
+
resumeSession(record: SessionRecord): Promise<void>;
|
|
46
|
+
private handle;
|
|
47
|
+
private ensureSession;
|
|
48
|
+
private runInboundMiddleware;
|
|
49
|
+
private collectContext;
|
|
50
|
+
private runExchangeProcessors;
|
|
51
|
+
private runPostProcessing;
|
|
52
|
+
private flushDeliveries;
|
|
53
|
+
private sendDelivery;
|
|
54
|
+
}
|