@deriest/ai-engineering-company 1.15.2
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/CHANGELOG.md +807 -0
- package/LICENSE +8 -0
- package/README.md +291 -0
- package/assets/knowledge/.gitkeep +0 -0
- package/assets/offices/architecture/README.md +32 -0
- package/assets/offices/engineering/README.md +53 -0
- package/assets/offices/governance/README.md +30 -0
- package/assets/offices/product/README.md +37 -0
- package/assets/organization/organization.json +260 -0
- package/assets/organization/validation.md +107 -0
- package/assets/prompts/.gitkeep +0 -0
- package/assets/templates/.gitkeep +0 -0
- package/assets/workers/architect/AGENTS.md +49 -0
- package/assets/workers/architect/SOUL.md +21 -0
- package/assets/workers/architect/config.json +7 -0
- package/assets/workers/backend-engineer/AGENTS.md +67 -0
- package/assets/workers/backend-engineer/HEARTBEAT.md +5 -0
- package/assets/workers/backend-engineer/IDENTITY.md +27 -0
- package/assets/workers/backend-engineer/SOUL.md +24 -0
- package/assets/workers/backend-engineer/TOOLS.md +44 -0
- package/assets/workers/backend-engineer/USER.md +21 -0
- package/assets/workers/backend-engineer/company/scripts/wp3/harness-spec.md +31 -0
- package/assets/workers/backend-engineer/company/scripts/wp3/lib/semver-range.js +81 -0
- package/assets/workers/backend-engineer/company/scripts/wp3/lib/test-mr4.js +6 -0
- package/assets/workers/backend-engineer/config.json +7 -0
- package/assets/workers/backend-engineer/openclaw-workspace-state.json +4 -0
- package/assets/workers/designer/AGENTS.md +49 -0
- package/assets/workers/designer/SOUL.md +20 -0
- package/assets/workers/designer/config.json +7 -0
- package/assets/workers/dispatcher/AGENTS.md +158 -0
- package/assets/workers/dispatcher/HEARTBEAT.md +5 -0
- package/assets/workers/dispatcher/IDENTITY.md +6 -0
- package/assets/workers/dispatcher/ROUTING.md +136 -0
- package/assets/workers/dispatcher/SOUL.md +18 -0
- package/assets/workers/dispatcher/TOOLS.md +32 -0
- package/assets/workers/dispatcher/USER.md +15 -0
- package/assets/workers/dispatcher/config.json +7 -0
- package/assets/workers/dispatcher/openclaw-workspace-state.json +4 -0
- package/assets/workers/frontend-engineer/AGENTS.md +53 -0
- package/assets/workers/frontend-engineer/SOUL.md +23 -0
- package/assets/workers/frontend-engineer/config.json +7 -0
- package/assets/workers/governor/AGENTS.md +57 -0
- package/assets/workers/governor/SOUL.md +20 -0
- package/assets/workers/governor/config.json +7 -0
- package/assets/workers/infrastructure-engineer/AGENTS.md +51 -0
- package/assets/workers/infrastructure-engineer/SOUL.md +21 -0
- package/assets/workers/infrastructure-engineer/config.json +7 -0
- package/assets/workers/product-manager/AGENTS.md +52 -0
- package/assets/workers/product-manager/HEARTBEAT.md +5 -0
- package/assets/workers/product-manager/IDENTITY.md +27 -0
- package/assets/workers/product-manager/SOUL.md +20 -0
- package/assets/workers/product-manager/TOOLS.md +44 -0
- package/assets/workers/product-manager/USER.md +21 -0
- package/assets/workers/product-manager/config.json +7 -0
- package/assets/workers/product-manager/openclaw-workspace-state.json +4 -0
- package/assets/workers/qa-engineer/AGENTS.md +50 -0
- package/assets/workers/qa-engineer/HEARTBEAT.md +5 -0
- package/assets/workers/qa-engineer/IDENTITY.md +27 -0
- package/assets/workers/qa-engineer/SOUL.md +22 -0
- package/assets/workers/qa-engineer/TOOLS.md +44 -0
- package/assets/workers/qa-engineer/USER.md +21 -0
- package/assets/workers/qa-engineer/config.json +7 -0
- package/assets/workers/qa-engineer/openclaw-workspace-state.json +4 -0
- package/assets/workers/researcher/AGENTS.md +50 -0
- package/assets/workers/researcher/HEARTBEAT.md +5 -0
- package/assets/workers/researcher/IDENTITY.md +27 -0
- package/assets/workers/researcher/SOUL.md +20 -0
- package/assets/workers/researcher/TOOLS.md +44 -0
- package/assets/workers/researcher/USER.md +21 -0
- package/assets/workers/researcher/config.json +7 -0
- package/assets/workers/researcher/openclaw-workspace-state.json +4 -0
- package/config/offices.json +19 -0
- package/config/policies.json +10 -0
- package/config/workflows.json +9 -0
- package/dist/audit-logger.d.ts +49 -0
- package/dist/audit-logger.d.ts.map +1 -0
- package/dist/audit-logger.js +131 -0
- package/dist/audit-logger.js.map +1 -0
- package/dist/cli.d.ts +17 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +218 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/aicompany.d.ts +12 -0
- package/dist/commands/aicompany.d.ts.map +1 -0
- package/dist/commands/aicompany.js +101 -0
- package/dist/commands/aicompany.js.map +1 -0
- package/dist/decision-queue.d.ts +31 -0
- package/dist/decision-queue.d.ts.map +1 -0
- package/dist/decision-queue.js +86 -0
- package/dist/decision-queue.js.map +1 -0
- package/dist/dispatch-service.d.ts +43 -0
- package/dist/dispatch-service.d.ts.map +1 -0
- package/dist/dispatch-service.js +569 -0
- package/dist/dispatch-service.js.map +1 -0
- package/dist/dispatcher.d.ts +24 -0
- package/dist/dispatcher.d.ts.map +1 -0
- package/dist/dispatcher.js +84 -0
- package/dist/dispatcher.js.map +1 -0
- package/dist/file-queue-backend.d.ts +16 -0
- package/dist/file-queue-backend.d.ts.map +1 -0
- package/dist/file-queue-backend.js +93 -0
- package/dist/file-queue-backend.js.map +1 -0
- package/dist/gateway.d.ts +14 -0
- package/dist/gateway.d.ts.map +1 -0
- package/dist/gateway.js +138 -0
- package/dist/gateway.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +277 -0
- package/dist/index.js.map +1 -0
- package/dist/lease-provider.d.ts +31 -0
- package/dist/lease-provider.d.ts.map +1 -0
- package/dist/lease-provider.js +4 -0
- package/dist/lease-provider.js.map +1 -0
- package/dist/memory-lease-provider.d.ts +10 -0
- package/dist/memory-lease-provider.d.ts.map +1 -0
- package/dist/memory-lease-provider.js +54 -0
- package/dist/memory-lease-provider.js.map +1 -0
- package/dist/memory-queue-backend.d.ts +16 -0
- package/dist/memory-queue-backend.d.ts.map +1 -0
- package/dist/memory-queue-backend.js +93 -0
- package/dist/memory-queue-backend.js.map +1 -0
- package/dist/metrics-registry.d.ts +58 -0
- package/dist/metrics-registry.d.ts.map +1 -0
- package/dist/metrics-registry.js +195 -0
- package/dist/metrics-registry.js.map +1 -0
- package/dist/openclaw.plugin.json +29 -0
- package/dist/org-engine.d.ts +134 -0
- package/dist/org-engine.d.ts.map +1 -0
- package/dist/org-engine.js +129 -0
- package/dist/org-engine.js.map +1 -0
- package/dist/pipeline-checkpoint.d.ts +44 -0
- package/dist/pipeline-checkpoint.d.ts.map +1 -0
- package/dist/pipeline-checkpoint.js +90 -0
- package/dist/pipeline-checkpoint.js.map +1 -0
- package/dist/pipeline-engine.d.ts +53 -0
- package/dist/pipeline-engine.d.ts.map +1 -0
- package/dist/pipeline-engine.js +47 -0
- package/dist/pipeline-engine.js.map +1 -0
- package/dist/prompt-assembler.d.ts +13 -0
- package/dist/prompt-assembler.d.ts.map +1 -0
- package/dist/prompt-assembler.js +84 -0
- package/dist/prompt-assembler.js.map +1 -0
- package/dist/queue-backend.d.ts +44 -0
- package/dist/queue-backend.d.ts.map +1 -0
- package/dist/queue-backend.js +4 -0
- package/dist/queue-backend.js.map +1 -0
- package/dist/redis-lease-provider.d.ts +16 -0
- package/dist/redis-lease-provider.d.ts.map +1 -0
- package/dist/redis-lease-provider.js +96 -0
- package/dist/redis-lease-provider.js.map +1 -0
- package/dist/redis-queue-backend.d.ts +23 -0
- package/dist/redis-queue-backend.d.ts.map +1 -0
- package/dist/redis-queue-backend.js +131 -0
- package/dist/redis-queue-backend.js.map +1 -0
- package/dist/src/cli.d.ts +11 -0
- package/dist/src/cli.d.ts.map +1 -0
- package/dist/src/cli.js +100 -0
- package/dist/src/cli.js.map +1 -0
- package/dist/src/dispatch-service.d.ts +25 -0
- package/dist/src/dispatch-service.d.ts.map +1 -0
- package/dist/src/dispatch-service.js +201 -0
- package/dist/src/dispatch-service.js.map +1 -0
- package/dist/src/dispatcher.d.ts +23 -0
- package/dist/src/dispatcher.d.ts.map +1 -0
- package/dist/src/dispatcher.js +66 -0
- package/dist/src/dispatcher.js.map +1 -0
- package/dist/src/gateway.d.ts +10 -0
- package/dist/src/gateway.d.ts.map +1 -0
- package/dist/src/gateway.js +66 -0
- package/dist/src/gateway.js.map +1 -0
- package/dist/src/index.d.ts +8 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +85 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/org-engine.d.ts +134 -0
- package/dist/src/org-engine.d.ts.map +1 -0
- package/dist/src/org-engine.js +129 -0
- package/dist/src/org-engine.js.map +1 -0
- package/dist/src/pipeline-engine.d.ts +53 -0
- package/dist/src/pipeline-engine.d.ts.map +1 -0
- package/dist/src/pipeline-engine.js +47 -0
- package/dist/src/pipeline-engine.js.map +1 -0
- package/dist/src/prompt-assembler.d.ts +13 -0
- package/dist/src/prompt-assembler.d.ts.map +1 -0
- package/dist/src/prompt-assembler.js +84 -0
- package/dist/src/prompt-assembler.js.map +1 -0
- package/dist/src/task-state.d.ts +27 -0
- package/dist/src/task-state.d.ts.map +1 -0
- package/dist/src/task-state.js +49 -0
- package/dist/src/task-state.js.map +1 -0
- package/dist/src/tools.d.ts +9 -0
- package/dist/src/tools.d.ts.map +1 -0
- package/dist/src/tools.js +107 -0
- package/dist/src/tools.js.map +1 -0
- package/dist/src/types.d.ts +99 -0
- package/dist/src/types.d.ts.map +1 -0
- package/dist/src/types.js +4 -0
- package/dist/src/types.js.map +1 -0
- package/dist/src/validation.d.ts +11 -0
- package/dist/src/validation.d.ts.map +1 -0
- package/dist/src/validation.js +69 -0
- package/dist/src/validation.js.map +1 -0
- package/dist/src/workboard-gateway.d.ts +82 -0
- package/dist/src/workboard-gateway.d.ts.map +1 -0
- package/dist/src/workboard-gateway.js +76 -0
- package/dist/src/workboard-gateway.js.map +1 -0
- package/dist/src/worker-engine.d.ts +38 -0
- package/dist/src/worker-engine.d.ts.map +1 -0
- package/dist/src/worker-engine.js +73 -0
- package/dist/src/worker-engine.js.map +1 -0
- package/dist/task-state.d.ts +27 -0
- package/dist/task-state.d.ts.map +1 -0
- package/dist/task-state.js +62 -0
- package/dist/task-state.js.map +1 -0
- package/dist/tools.d.ts +11 -0
- package/dist/tools.d.ts.map +1 -0
- package/dist/tools.js +183 -0
- package/dist/tools.js.map +1 -0
- package/dist/types.d.ts +99 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +4 -0
- package/dist/types.js.map +1 -0
- package/dist/validation.d.ts +11 -0
- package/dist/validation.d.ts.map +1 -0
- package/dist/validation.js +69 -0
- package/dist/validation.js.map +1 -0
- package/dist/workboard-gateway.d.ts +82 -0
- package/dist/workboard-gateway.d.ts.map +1 -0
- package/dist/workboard-gateway.js +76 -0
- package/dist/workboard-gateway.js.map +1 -0
- package/dist/worker-engine.d.ts +38 -0
- package/dist/worker-engine.d.ts.map +1 -0
- package/dist/worker-engine.js +73 -0
- package/dist/worker-engine.js.map +1 -0
- package/openclaw.plugin.json +42 -0
- package/package.json +50 -0
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# IDENTITY.md - Who Am I?
|
|
2
|
+
|
|
3
|
+
_Fill this in during your first conversation. Make it yours._
|
|
4
|
+
|
|
5
|
+
- **Name:**
|
|
6
|
+
_(pick something you like)_
|
|
7
|
+
- **Creature:**
|
|
8
|
+
_(AI? robot? familiar? ghost in the machine? something weirder?)_
|
|
9
|
+
- **Vibe:**
|
|
10
|
+
_(how do you come across? sharp? warm? chaotic? calm?)_
|
|
11
|
+
- **Emoji:**
|
|
12
|
+
_(your signature — pick one that feels right)_
|
|
13
|
+
- **Avatar:**
|
|
14
|
+
_(workspace-relative path, http(s) URL, or data URI)_
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
This isn't just metadata. It's the start of figuring out who you are.
|
|
19
|
+
|
|
20
|
+
Notes:
|
|
21
|
+
|
|
22
|
+
- Save this file at the workspace root as `IDENTITY.md`.
|
|
23
|
+
- For avatars, use a workspace-relative path like `avatars/openclaw.png`.
|
|
24
|
+
|
|
25
|
+
## Related
|
|
26
|
+
|
|
27
|
+
- [Agent workspace](/concepts/agent-workspace)
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# SOUL — Researcher
|
|
2
|
+
|
|
3
|
+
I am the evidence engine — I find facts, validate assumptions, and provide the data every other worker depends on.
|
|
4
|
+
|
|
5
|
+
**Communication:** Evidence-based, thorough, analytical. I show my reasoning and cite my sources. I clearly separate what I know from what I infer.
|
|
6
|
+
|
|
7
|
+
**Values:**
|
|
8
|
+
- Accuracy — a confident wrong answer is worse than no answer. I report confidence levels.
|
|
9
|
+
- Reproducibility — another researcher should be able to follow my steps and reach the same conclusion.
|
|
10
|
+
- Scope honesty — I answer the question asked. I do not expand scope unless the PM approves.
|
|
11
|
+
|
|
12
|
+
**Boundaries:**
|
|
13
|
+
- I do not make product decisions. I provide data; the PM decides.
|
|
14
|
+
- I do not design or implement solutions. My output is findings, not specifications.
|
|
15
|
+
- I do not cite a source I have not read or cannot verify.
|
|
16
|
+
- I do not assign or reassign tasks. The Dispatcher manages task ownership.
|
|
17
|
+
|
|
18
|
+
**Collaboration:** I collaborate directly with PM (for investigation requests and evidence delivery), Architect (for technical findings), and Backend Engineer (for implementation analysis). I do not route these through the Dispatcher.
|
|
19
|
+
|
|
20
|
+
**Uncertainty:** If the evidence is inconclusive, I report the gap explicitly and offer options for further investigation rather than fabricating an answer.
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# TOOLS.md - Local Notes
|
|
2
|
+
|
|
3
|
+
Skills define _how_ tools work. This file is for _your_ specifics — the stuff that's unique to your setup.
|
|
4
|
+
|
|
5
|
+
## What Goes Here
|
|
6
|
+
|
|
7
|
+
Things like:
|
|
8
|
+
|
|
9
|
+
- Camera names and locations
|
|
10
|
+
- SSH hosts and aliases
|
|
11
|
+
- Preferred voices for TTS
|
|
12
|
+
- Speaker/room names
|
|
13
|
+
- Device nicknames
|
|
14
|
+
- Anything environment-specific
|
|
15
|
+
|
|
16
|
+
## Examples
|
|
17
|
+
|
|
18
|
+
```markdown
|
|
19
|
+
### Cameras
|
|
20
|
+
|
|
21
|
+
- living-room → Main area, 180° wide angle
|
|
22
|
+
- front-door → Entrance, motion-triggered
|
|
23
|
+
|
|
24
|
+
### SSH
|
|
25
|
+
|
|
26
|
+
- home-server → 192.168.1.100, user: admin
|
|
27
|
+
|
|
28
|
+
### TTS
|
|
29
|
+
|
|
30
|
+
- Preferred voice: "Nova" (warm, slightly British)
|
|
31
|
+
- Default speaker: Kitchen HomePod
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Why Separate?
|
|
35
|
+
|
|
36
|
+
Skills are shared. Your setup is yours. Keeping them apart means you can update skills without losing your notes, and share skills without leaking your infrastructure.
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
Add whatever helps you do your job. This is your cheat sheet.
|
|
41
|
+
|
|
42
|
+
## Related
|
|
43
|
+
|
|
44
|
+
- [Agent workspace](/concepts/agent-workspace)
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# USER.md - About Your Human
|
|
2
|
+
|
|
3
|
+
_Learn about the person you're helping. Update this as you go._
|
|
4
|
+
|
|
5
|
+
- **Name:**
|
|
6
|
+
- **What to call them:**
|
|
7
|
+
- **Pronouns:** _(optional)_
|
|
8
|
+
- **Timezone:**
|
|
9
|
+
- **Notes:**
|
|
10
|
+
|
|
11
|
+
## Context
|
|
12
|
+
|
|
13
|
+
_(What do they care about? What projects are they working on? What annoys them? What makes them laugh? Build this over time.)_
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
The more you know, the better you can help. But remember — you're learning about a person, not building a dossier. Respect the difference.
|
|
18
|
+
|
|
19
|
+
## Related
|
|
20
|
+
|
|
21
|
+
- [Agent workspace](/concepts/agent-workspace)
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"offices": [
|
|
3
|
+
{
|
|
4
|
+
"id": "product",
|
|
5
|
+
"name": "Product Office",
|
|
6
|
+
"description": "Handles PRDs and product requirements."
|
|
7
|
+
},
|
|
8
|
+
{
|
|
9
|
+
"id": "engineering",
|
|
10
|
+
"name": "Engineering Office",
|
|
11
|
+
"description": "Handles architecture, implementation, and QA."
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"id": "governance",
|
|
15
|
+
"name": "Governance Office",
|
|
16
|
+
"description": "Handles budget tracking and safety policy enforcement."
|
|
17
|
+
}
|
|
18
|
+
]
|
|
19
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import type { MetricsRegistry } from "./metrics-registry.js";
|
|
2
|
+
export declare const AUDIT_EVENT_TYPES: readonly ["dispatch_requested", "plan_created", "task_created", "pipeline_started", "stage_started", "approval_requested", "approved", "rejected", "stage_completed", "stage_failed", "pipeline_completed", "pipeline_failed", "dispatch_completed", "lease_acquire_failed", "lease_release_failed"];
|
|
3
|
+
export type AuditEventType = typeof AUDIT_EVENT_TYPES[number];
|
|
4
|
+
export type DispatchSource = "gateway" | "cli" | "tool" | "command";
|
|
5
|
+
export interface AuditEvent {
|
|
6
|
+
ts: string;
|
|
7
|
+
sessionKey: string;
|
|
8
|
+
event: AuditEventType;
|
|
9
|
+
source?: DispatchSource;
|
|
10
|
+
messagePreview?: string;
|
|
11
|
+
category?: string;
|
|
12
|
+
workflowId?: string;
|
|
13
|
+
stageCount?: number;
|
|
14
|
+
worker?: string;
|
|
15
|
+
stage?: string;
|
|
16
|
+
decisionStatus?: "pending" | "approved" | "rejected";
|
|
17
|
+
reason?: string;
|
|
18
|
+
operator?: string;
|
|
19
|
+
status?: "submitted" | "completed" | "timeout" | "error" | "failed";
|
|
20
|
+
durationMs?: number;
|
|
21
|
+
error?: string;
|
|
22
|
+
messageCount?: number;
|
|
23
|
+
runId?: string;
|
|
24
|
+
}
|
|
25
|
+
export interface AuditQueryFilter {
|
|
26
|
+
sessionKey?: string;
|
|
27
|
+
event?: AuditEventType;
|
|
28
|
+
source?: DispatchSource;
|
|
29
|
+
from?: string;
|
|
30
|
+
to?: string;
|
|
31
|
+
}
|
|
32
|
+
export declare class AuditLogger {
|
|
33
|
+
private readonly logDir;
|
|
34
|
+
private readonly metrics?;
|
|
35
|
+
constructor(logDir: string, metrics?: MetricsRegistry);
|
|
36
|
+
write(event: AuditEvent): void;
|
|
37
|
+
/**
|
|
38
|
+
* Remove JSONL files older than maxAgeDays. Housekeeping only.
|
|
39
|
+
* Returns count of deleted files. Silent on I/O failure.
|
|
40
|
+
*/
|
|
41
|
+
cleanup(maxAgeDays: number): number;
|
|
42
|
+
/**
|
|
43
|
+
* Query audit events with optional filters. Reads all matching JSONL files.
|
|
44
|
+
* Skips malformed lines. CLI-only — no Gateway RPC.
|
|
45
|
+
*/
|
|
46
|
+
query(filter: AuditQueryFilter): AuditEvent[];
|
|
47
|
+
private getFilePath;
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=audit-logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit-logger.d.ts","sourceRoot":"","sources":["../src/audit-logger.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAI7D,eAAO,MAAM,iBAAiB,sSAMpB,CAAC;AAEX,MAAM,MAAM,cAAc,GAAG,OAAO,iBAAiB,CAAC,MAAM,CAAC,CAAC;AAE9D,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,KAAK,GAAG,MAAM,GAAG,SAAS,CAAC;AAEpE,MAAM,WAAW,UAAU;IAEzB,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,cAAc,CAAC;IAGtB,MAAM,CAAC,EAAE,cAAc,CAAC;IAGxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IAGpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IAGf,cAAc,CAAC,EAAE,SAAS,GAAG,UAAU,GAAG,UAAU,CAAC;IACrD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAGlB,MAAM,CAAC,EAAE,WAAW,GAAG,WAAW,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAC;IACpE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IAGf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAID,MAAM,WAAW,gBAAgB;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAID,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAkB;gBAE/B,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,eAAe;IAUrD,KAAK,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAW9B;;;OAGG;IACH,OAAO,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM;IAyBnC;;;OAGG;IACH,KAAK,CAAC,MAAM,EAAE,gBAAgB,GAAG,UAAU,EAAE;IA4C7C,OAAO,CAAC,WAAW;CAIpB"}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
// Centralized audit logging for AI Company operations.
|
|
2
|
+
// Append-only JSONL writer with silent I/O failure handling.
|
|
3
|
+
import * as fs from "node:fs";
|
|
4
|
+
import * as path from "node:path";
|
|
5
|
+
// --- Event types ---
|
|
6
|
+
export const AUDIT_EVENT_TYPES = [
|
|
7
|
+
"dispatch_requested", "plan_created", "task_created",
|
|
8
|
+
"pipeline_started", "stage_started", "approval_requested",
|
|
9
|
+
"approved", "rejected", "stage_completed", "stage_failed",
|
|
10
|
+
"pipeline_completed", "pipeline_failed", "dispatch_completed",
|
|
11
|
+
"lease_acquire_failed", "lease_release_failed",
|
|
12
|
+
];
|
|
13
|
+
// --- AuditLogger ---
|
|
14
|
+
export class AuditLogger {
|
|
15
|
+
logDir;
|
|
16
|
+
metrics;
|
|
17
|
+
constructor(logDir, metrics) {
|
|
18
|
+
this.logDir = logDir;
|
|
19
|
+
this.metrics = metrics;
|
|
20
|
+
try {
|
|
21
|
+
fs.mkdirSync(logDir, { recursive: true });
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
// Directory creation failure — writes will silently fail
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
write(event) {
|
|
28
|
+
try {
|
|
29
|
+
const filePath = this.getFilePath();
|
|
30
|
+
fs.appendFileSync(filePath, JSON.stringify(event) + "\n", "utf-8");
|
|
31
|
+
this.metrics?.increment("audit_events_total");
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
// Silent failure — audit logging must not disrupt operations
|
|
35
|
+
this.metrics?.increment("audit_write_errors_total");
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Remove JSONL files older than maxAgeDays. Housekeeping only.
|
|
40
|
+
* Returns count of deleted files. Silent on I/O failure.
|
|
41
|
+
*/
|
|
42
|
+
cleanup(maxAgeDays) {
|
|
43
|
+
try {
|
|
44
|
+
const cutoff = Date.now() - maxAgeDays * 24 * 60 * 60 * 1000;
|
|
45
|
+
const files = fs.readdirSync(this.logDir).filter((f) => f.startsWith("audit-") && f.endsWith(".jsonl"));
|
|
46
|
+
let removed = 0;
|
|
47
|
+
for (const file of files) {
|
|
48
|
+
// Extract date from audit-YYYY-MM-DD.jsonl
|
|
49
|
+
const match = file.match(/^audit-(\d{4}-\d{2}-\d{2})\.jsonl$/);
|
|
50
|
+
if (!match)
|
|
51
|
+
continue;
|
|
52
|
+
const fileDate = new Date(match[1] + "T00:00:00Z").getTime();
|
|
53
|
+
if (fileDate < cutoff) {
|
|
54
|
+
try {
|
|
55
|
+
fs.unlinkSync(path.join(this.logDir, file));
|
|
56
|
+
removed++;
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
// Silent — file may be locked or already deleted
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return removed;
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
return 0;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Query audit events with optional filters. Reads all matching JSONL files.
|
|
71
|
+
* Skips malformed lines. CLI-only — no Gateway RPC.
|
|
72
|
+
*/
|
|
73
|
+
query(filter) {
|
|
74
|
+
try {
|
|
75
|
+
const files = fs.readdirSync(this.logDir)
|
|
76
|
+
.filter((f) => f.startsWith("audit-") && f.endsWith(".jsonl"))
|
|
77
|
+
.sort();
|
|
78
|
+
const filteredFiles = files.filter((f) => {
|
|
79
|
+
const match = f.match(/^audit-(\d{4}-\d{2}-\d{2})\.jsonl$/);
|
|
80
|
+
if (!match)
|
|
81
|
+
return false;
|
|
82
|
+
const dateStr = match[1];
|
|
83
|
+
if (filter.from && dateStr < filter.from.slice(0, 10))
|
|
84
|
+
return false;
|
|
85
|
+
if (filter.to && dateStr > filter.to.slice(0, 10))
|
|
86
|
+
return false;
|
|
87
|
+
return true;
|
|
88
|
+
});
|
|
89
|
+
const results = [];
|
|
90
|
+
for (const file of filteredFiles) {
|
|
91
|
+
try {
|
|
92
|
+
const content = fs.readFileSync(path.join(this.logDir, file), "utf-8");
|
|
93
|
+
const lines = content.split("\n");
|
|
94
|
+
for (const line of lines) {
|
|
95
|
+
if (!line.trim())
|
|
96
|
+
continue;
|
|
97
|
+
try {
|
|
98
|
+
const event = JSON.parse(line);
|
|
99
|
+
if (filter.sessionKey && event.sessionKey !== filter.sessionKey)
|
|
100
|
+
continue;
|
|
101
|
+
if (filter.event && event.event !== filter.event)
|
|
102
|
+
continue;
|
|
103
|
+
if (filter.source && event.source !== filter.source)
|
|
104
|
+
continue;
|
|
105
|
+
if (filter.from && event.ts < filter.from)
|
|
106
|
+
continue;
|
|
107
|
+
if (filter.to && event.ts > filter.to)
|
|
108
|
+
continue;
|
|
109
|
+
results.push(event);
|
|
110
|
+
}
|
|
111
|
+
catch {
|
|
112
|
+
// Skip malformed JSONL lines
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
catch {
|
|
117
|
+
// Skip unreadable files
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
return results;
|
|
121
|
+
}
|
|
122
|
+
catch {
|
|
123
|
+
return [];
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
getFilePath() {
|
|
127
|
+
const date = new Date().toISOString().slice(0, 10);
|
|
128
|
+
return path.join(this.logDir, `audit-${date}.jsonl`);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
//# sourceMappingURL=audit-logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit-logger.js","sourceRoot":"","sources":["../src/audit-logger.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { Command } from "commander";
|
|
2
|
+
import type { AuditLogger } from "./audit-logger.js";
|
|
3
|
+
import type { DecisionQueue } from "./decision-queue.js";
|
|
4
|
+
import type { DispatchService } from "./dispatch-service.js";
|
|
5
|
+
import type { PipelineCheckpoint } from "./pipeline-checkpoint.js";
|
|
6
|
+
import type { SessionApi } from "./types.js";
|
|
7
|
+
export interface AiCompanyCliDeps {
|
|
8
|
+
program: Command;
|
|
9
|
+
dispatchService: Pick<DispatchService, "dispatch" | "status" | "result" | "resumePipeline">;
|
|
10
|
+
session: SessionApi;
|
|
11
|
+
log: (msg: string) => void;
|
|
12
|
+
decisionQueue?: DecisionQueue;
|
|
13
|
+
auditLogger?: AuditLogger;
|
|
14
|
+
pipelineCheckpoint?: PipelineCheckpoint;
|
|
15
|
+
}
|
|
16
|
+
export declare function registerAiCompanyCli(deps: AiCompanyCliDeps): void;
|
|
17
|
+
//# sourceMappingURL=cli.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAkC,MAAM,mBAAmB,CAAC;AACrF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAG7C,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE,UAAU,GAAG,QAAQ,GAAG,QAAQ,GAAG,gBAAgB,CAAC,CAAC;IAC5F,OAAO,EAAE,UAAU,CAAC;IACpB,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3B,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;CACzC;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,gBAAgB,GAAG,IAAI,CA+MjE"}
|
package/dist/cli.js
ADDED
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
import { validateSessionKeyRequired } from "./validation.js";
|
|
2
|
+
export function registerAiCompanyCli(deps) {
|
|
3
|
+
const { program, dispatchService, session, log, decisionQueue, auditLogger, pipelineCheckpoint } = deps;
|
|
4
|
+
const group = program
|
|
5
|
+
.command("ai-company")
|
|
6
|
+
.description("AI Engineering Company operator commands");
|
|
7
|
+
// Approval commands
|
|
8
|
+
group
|
|
9
|
+
.command("approvals")
|
|
10
|
+
.description("List pending approval requests")
|
|
11
|
+
.action(async () => {
|
|
12
|
+
const pending = await decisionQueue?.list("pending") ?? [];
|
|
13
|
+
writeJson({ task: "approvals", count: pending.length, entries: pending });
|
|
14
|
+
});
|
|
15
|
+
group
|
|
16
|
+
.command("approve")
|
|
17
|
+
.description("Approve a pending task")
|
|
18
|
+
.argument("<sessionKey>", "Session key of the task to approve")
|
|
19
|
+
.option("--reason <reason>", "Reason for approval")
|
|
20
|
+
.option("--operator <operator>", "Operator performing the approval")
|
|
21
|
+
.action((sessionKey, opts) => {
|
|
22
|
+
try {
|
|
23
|
+
const validatedKey = validateSessionKeyRequired(sessionKey);
|
|
24
|
+
const entry = decisionQueue?.approve(validatedKey, opts.operator, opts.reason);
|
|
25
|
+
if (!entry) {
|
|
26
|
+
writeJson({ task: "approve", status: "not_found", sessionKey: validatedKey });
|
|
27
|
+
process.exitCode = 1;
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
writeJson({ task: "approve", status: "approved", sessionKey: validatedKey, entry });
|
|
31
|
+
}
|
|
32
|
+
catch (err) {
|
|
33
|
+
writeJson({ task: "approve", status: "error", error: messageOf(err) });
|
|
34
|
+
process.exitCode = 1;
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
group
|
|
38
|
+
.command("reject")
|
|
39
|
+
.description("Reject a pending task")
|
|
40
|
+
.argument("<sessionKey>", "Session key of the task to reject")
|
|
41
|
+
.option("--reason <reason>", "Reason for rejection")
|
|
42
|
+
.option("--operator <operator>", "Operator performing the rejection")
|
|
43
|
+
.action((sessionKey, opts) => {
|
|
44
|
+
try {
|
|
45
|
+
const validatedKey = validateSessionKeyRequired(sessionKey);
|
|
46
|
+
const entry = decisionQueue?.reject(validatedKey, opts.operator, opts.reason);
|
|
47
|
+
if (!entry) {
|
|
48
|
+
writeJson({ task: "reject", status: "not_found", sessionKey: validatedKey });
|
|
49
|
+
process.exitCode = 1;
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
writeJson({ task: "reject", status: "rejected", sessionKey: validatedKey, entry });
|
|
53
|
+
}
|
|
54
|
+
catch (err) {
|
|
55
|
+
writeJson({ task: "reject", status: "error", error: messageOf(err) });
|
|
56
|
+
process.exitCode = 1;
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
group
|
|
60
|
+
.command("dispatch")
|
|
61
|
+
.description("Submit a task to the Dispatcher agent")
|
|
62
|
+
.argument("<message>", "Task description for the Dispatcher")
|
|
63
|
+
.option("--timeout <ms>", "Maximum wait time in milliseconds", "900000")
|
|
64
|
+
.option("--no-wait", "Return immediately without waiting for completion")
|
|
65
|
+
.action(async (message, opts) => {
|
|
66
|
+
log(`Dispatching task...`);
|
|
67
|
+
try {
|
|
68
|
+
const result = await dispatchService.dispatch(message, {
|
|
69
|
+
wait: opts.wait,
|
|
70
|
+
timeout: Number(opts.timeout),
|
|
71
|
+
}, "cli");
|
|
72
|
+
writeJson({ task: "dispatch", ...result });
|
|
73
|
+
}
|
|
74
|
+
catch (err) {
|
|
75
|
+
if (isValidationError(err)) {
|
|
76
|
+
writeJson({ task: "dispatch", status: "error", error: err.message, code: err.code });
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
writeJson({ task: "dispatch", status: "error", error: messageOf(err) });
|
|
80
|
+
}
|
|
81
|
+
process.exitCode = 1;
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
group
|
|
85
|
+
.command("status")
|
|
86
|
+
.description("Query status of a dispatched task")
|
|
87
|
+
.argument("[sessionKey]", "Session key to query (omit to list recent dispatches)")
|
|
88
|
+
.action(async (sessionKey) => {
|
|
89
|
+
try {
|
|
90
|
+
if (sessionKey) {
|
|
91
|
+
const validatedKey = validateSessionKeyRequired(sessionKey);
|
|
92
|
+
const entry = dispatchService.status(validatedKey);
|
|
93
|
+
if (!entry) {
|
|
94
|
+
writeJson({ task: "status", status: "not_found", sessionKey: validatedKey });
|
|
95
|
+
process.exitCode = 1;
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
writeJson({ task: "status", status: "found", sessionKey: validatedKey, entry });
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
const all = session.listSessionEntries();
|
|
102
|
+
const dispatches = all.filter((e) => e.key?.startsWith("ai-company:dispatch:"));
|
|
103
|
+
writeJson({
|
|
104
|
+
task: "status",
|
|
105
|
+
status: "list",
|
|
106
|
+
count: dispatches.length,
|
|
107
|
+
entries: dispatches,
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
catch (err) {
|
|
112
|
+
writeJson({ task: "status", status: "error", error: messageOf(err) });
|
|
113
|
+
process.exitCode = 1;
|
|
114
|
+
}
|
|
115
|
+
});
|
|
116
|
+
group
|
|
117
|
+
.command("result")
|
|
118
|
+
.description("Retrieve the result of a completed task")
|
|
119
|
+
.argument("<sessionKey>", "Session key of the completed task")
|
|
120
|
+
.option("--limit <n>", "Maximum messages to retrieve", "50")
|
|
121
|
+
.action(async (sessionKey, opts) => {
|
|
122
|
+
try {
|
|
123
|
+
const validatedKey = validateSessionKeyRequired(sessionKey);
|
|
124
|
+
const result = await dispatchService.result(validatedKey, Number(opts.limit));
|
|
125
|
+
if (result.status === "empty") {
|
|
126
|
+
writeJson({ task: "result", status: "empty", sessionKey: validatedKey });
|
|
127
|
+
process.exitCode = 1;
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
writeJson({ task: "result", ...result });
|
|
131
|
+
}
|
|
132
|
+
catch (err) {
|
|
133
|
+
if (isValidationError(err)) {
|
|
134
|
+
writeJson({ task: "result", status: "error", error: err.message, code: err.code });
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
writeJson({ task: "result", status: "error", sessionKey, error: messageOf(err) });
|
|
138
|
+
}
|
|
139
|
+
process.exitCode = 1;
|
|
140
|
+
}
|
|
141
|
+
});
|
|
142
|
+
group
|
|
143
|
+
.command("audit")
|
|
144
|
+
.description("Query audit log entries")
|
|
145
|
+
.option("--session <sessionKey>", "Filter by session key")
|
|
146
|
+
.option("--event <eventType>", "Filter by event type")
|
|
147
|
+
.option("--source <dispatchSource>", "Filter by dispatch source")
|
|
148
|
+
.option("--from <datetime>", "Filter from ISO datetime (inclusive)")
|
|
149
|
+
.option("--to <datetime>", "Filter to ISO datetime (inclusive)")
|
|
150
|
+
.action((opts) => {
|
|
151
|
+
if (!auditLogger) {
|
|
152
|
+
writeJson({ task: "audit", status: "error", error: "Audit logger not available" });
|
|
153
|
+
process.exitCode = 1;
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
156
|
+
try {
|
|
157
|
+
const events = auditLogger.query({
|
|
158
|
+
sessionKey: opts.session,
|
|
159
|
+
event: opts.event,
|
|
160
|
+
source: opts.source,
|
|
161
|
+
from: opts.from,
|
|
162
|
+
to: opts.to,
|
|
163
|
+
});
|
|
164
|
+
writeJson({ task: "audit", count: events.length, events });
|
|
165
|
+
}
|
|
166
|
+
catch (err) {
|
|
167
|
+
writeJson({ task: "audit", status: "error", error: messageOf(err) });
|
|
168
|
+
process.exitCode = 1;
|
|
169
|
+
}
|
|
170
|
+
});
|
|
171
|
+
group
|
|
172
|
+
.command("recover")
|
|
173
|
+
.description("Show interrupted pipelines detected during startup")
|
|
174
|
+
.option("--resume <sessionKey>", "Resume an interrupted pipeline")
|
|
175
|
+
.action(async (opts) => {
|
|
176
|
+
if (!pipelineCheckpoint) {
|
|
177
|
+
writeJson({ task: "recover", status: "error", error: "Pipeline checkpoint not available" });
|
|
178
|
+
process.exitCode = 1;
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
if (opts.resume) {
|
|
182
|
+
const checkpoint = pipelineCheckpoint.get(opts.resume);
|
|
183
|
+
if (!checkpoint) {
|
|
184
|
+
writeJson({ task: "recover", status: "error", error: `No checkpoint found for session: ${opts.resume}` });
|
|
185
|
+
process.exitCode = 1;
|
|
186
|
+
return;
|
|
187
|
+
}
|
|
188
|
+
const result = await dispatchService.resumePipeline(checkpoint);
|
|
189
|
+
writeJson({ task: "recover", action: "resume", ...result });
|
|
190
|
+
return;
|
|
191
|
+
}
|
|
192
|
+
const interrupted = pipelineCheckpoint.list("running").concat(pipelineCheckpoint.list("awaiting_approval"));
|
|
193
|
+
writeJson({
|
|
194
|
+
task: "recover",
|
|
195
|
+
count: interrupted.length,
|
|
196
|
+
entries: interrupted.map((c) => ({
|
|
197
|
+
sessionKey: c.sessionKey,
|
|
198
|
+
objective: c.objective.slice(0, 128),
|
|
199
|
+
category: c.category,
|
|
200
|
+
currentStageIndex: c.currentStageIndex,
|
|
201
|
+
stageCount: c.stageCount,
|
|
202
|
+
status: c.status,
|
|
203
|
+
startedAt: new Date(c.startedAt).toISOString(),
|
|
204
|
+
updatedAt: new Date(c.updatedAt).toISOString(),
|
|
205
|
+
})),
|
|
206
|
+
});
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
function writeJson(value) {
|
|
210
|
+
process.stdout.write(JSON.stringify(value, null, 2) + "\n");
|
|
211
|
+
}
|
|
212
|
+
function messageOf(err) {
|
|
213
|
+
return err instanceof Error ? err.message : String(err);
|
|
214
|
+
}
|
|
215
|
+
function isValidationError(err) {
|
|
216
|
+
return err instanceof Error && err.name === "DispatchValidationError";
|
|
217
|
+
}
|
|
218
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Dispatcher } from "../dispatcher.js";
|
|
2
|
+
import type { DispatchService } from "../dispatch-service.js";
|
|
3
|
+
export interface AiCompanyCommandDeps {
|
|
4
|
+
dispatchService: Pick<DispatchService, "dispatch">;
|
|
5
|
+
dispatcher?: Dispatcher;
|
|
6
|
+
}
|
|
7
|
+
export declare function handleAiCompanyCommand(deps: AiCompanyCommandDeps): (ctx: {
|
|
8
|
+
args?: string;
|
|
9
|
+
}) => Promise<{
|
|
10
|
+
text: string;
|
|
11
|
+
}>;
|
|
12
|
+
//# sourceMappingURL=aicompany.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aicompany.d.ts","sourceRoot":"","sources":["../../src/commands/aicompany.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAG9D,MAAM,WAAW,oBAAoB;IACnC,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC;IACnD,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,oBAAoB,IACjD,KAAK;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE;;GAgBrC"}
|