@amistio/cli 0.1.0 → 0.1.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/dist/index.d.ts +0 -1
- package/dist/index.js +2451 -642
- package/dist/index.js.map +7 -1
- package/package.json +9 -6
- package/dist/api-client.d.ts +0 -175
- package/dist/api-client.d.ts.map +0 -1
- package/dist/api-client.js +0 -116
- package/dist/api-client.js.map +0 -1
- package/dist/bootstrap.d.ts +0 -11
- package/dist/bootstrap.d.ts.map +0 -1
- package/dist/bootstrap.js +0 -66
- package/dist/bootstrap.js.map +0 -1
- package/dist/control-plane.d.ts +0 -11
- package/dist/control-plane.d.ts.map +0 -1
- package/dist/control-plane.js +0 -91
- package/dist/control-plane.js.map +0 -1
- package/dist/credential-store.d.ts +0 -9
- package/dist/credential-store.d.ts.map +0 -1
- package/dist/credential-store.js +0 -32
- package/dist/credential-store.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/local-tool-runner.d.ts +0 -93
- package/dist/local-tool-runner.d.ts.map +0 -1
- package/dist/local-tool-runner.js +0 -472
- package/dist/local-tool-runner.js.map +0 -1
- package/dist/orchestrator.d.ts +0 -7
- package/dist/orchestrator.d.ts.map +0 -1
- package/dist/orchestrator.js +0 -61
- package/dist/orchestrator.js.map +0 -1
- package/dist/session-policy.d.ts +0 -20
- package/dist/session-policy.d.ts.map +0 -1
- package/dist/session-policy.js +0 -125
- package/dist/session-policy.js.map +0 -1
- package/dist/sync.d.ts +0 -33
- package/dist/sync.d.ts.map +0 -1
- package/dist/sync.js +0 -279
- package/dist/sync.js.map +0 -1
- package/dist/tool-session-store.d.ts +0 -8
- package/dist/tool-session-store.d.ts.map +0 -1
- package/dist/tool-session-store.js +0 -38
- package/dist/tool-session-store.js.map +0 -1
- package/dist/work-runner.d.ts +0 -4
- package/dist/work-runner.d.ts.map +0 -1
- package/dist/work-runner.js +0 -100
- package/dist/work-runner.js.map +0 -1
package/dist/orchestrator.js
DELETED
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
import { mkdir, writeFile } from "node:fs/promises";
|
|
2
|
-
import path from "node:path";
|
|
3
|
-
import { inspectControlPlane } from "./control-plane.js";
|
|
4
|
-
export async function createOrchestrationPrompt(options) {
|
|
5
|
-
const controlPlane = await inspectControlPlane(options.rootDir);
|
|
6
|
-
return [
|
|
7
|
-
"# Amistio Orchestration Task",
|
|
8
|
-
"",
|
|
9
|
-
"You are running locally through the Amistio CLI inside the user's repository.",
|
|
10
|
-
"Your job is to keep future agents on the same track by updating the Amistio control plane, not by rewriting the project from scratch.",
|
|
11
|
-
"",
|
|
12
|
-
"## Goal",
|
|
13
|
-
"",
|
|
14
|
-
options.goal,
|
|
15
|
-
"",
|
|
16
|
-
"## Orchestrator Principle",
|
|
17
|
-
"",
|
|
18
|
-
"The root control-plane files are the project brain. They exist so agentic coding sessions can continue from established context, decisions, memory, plans, workflows, and prompts instead of drifting into a fresh interpretation each time.",
|
|
19
|
-
"",
|
|
20
|
-
"## Repository Rules",
|
|
21
|
-
"",
|
|
22
|
-
"- Read AGENTS.md first when it exists.",
|
|
23
|
-
"- Read existing architecture, context, decisions, features, memory, plans, prompts, and workflows before proposing changes.",
|
|
24
|
-
"- Preserve existing intent. Add the next useful orchestration layer instead of replacing old content wholesale.",
|
|
25
|
-
"- Prefer small additive edits, dated notes, explicit decisions, focused plans, and executable prompts.",
|
|
26
|
-
"- Do not modify product source code unless the user's goal explicitly asks for implementation.",
|
|
27
|
-
"- Do not create a repo-local .amistio folder.",
|
|
28
|
-
"- Do not write access tokens, API keys, refresh tokens, local filesystem secrets, or machine-specific credentials into the repository.",
|
|
29
|
-
"- Do not commit changes.",
|
|
30
|
-
"",
|
|
31
|
-
"## Control-Plane Areas",
|
|
32
|
-
"",
|
|
33
|
-
"- AGENTS.md for agent operating rules.",
|
|
34
|
-
"- architecture/**/*.md for system shape and boundaries.",
|
|
35
|
-
"- context/**/*.md for product, stack, and implementation context.",
|
|
36
|
-
"- decisions/**/*.md for ADRs and durable choices.",
|
|
37
|
-
"- features/**/*.md for behavior specs and acceptance criteria.",
|
|
38
|
-
"- memory/**/*.md for lessons, patterns, and known pitfalls.",
|
|
39
|
-
"- plans/**/*.md for near-term execution plans.",
|
|
40
|
-
"- prompts/**/*.md for model-agnostic implementation prompts.",
|
|
41
|
-
"- workflows/**/*.md for repeatable procedures.",
|
|
42
|
-
"",
|
|
43
|
-
"## Current Control-Plane Folder Status",
|
|
44
|
-
"",
|
|
45
|
-
`Present: ${controlPlane.present.length ? controlPlane.present.join(", ") : "none"}`,
|
|
46
|
-
`Missing: ${controlPlane.missing.length ? controlPlane.missing.join(", ") : "none"}`,
|
|
47
|
-
"",
|
|
48
|
-
"## Expected Result",
|
|
49
|
-
"",
|
|
50
|
-
"- Update the smallest useful set of control-plane files needed to orient the next coding agent.",
|
|
51
|
-
"- Record any new decision, plan, prompt, workflow, memory, or context that prevents future drift.",
|
|
52
|
-
"- Keep old decisions visible. If something is superseded, say so explicitly instead of silently deleting it.",
|
|
53
|
-
"- Summarize changed files, why they changed, and the recommended next agent action."
|
|
54
|
-
].join("\n");
|
|
55
|
-
}
|
|
56
|
-
export async function writePromptFile(filePath, prompt) {
|
|
57
|
-
await mkdir(path.dirname(filePath), { recursive: true });
|
|
58
|
-
await writeFile(filePath, prompt, "utf8");
|
|
59
|
-
return filePath;
|
|
60
|
-
}
|
|
61
|
-
//# sourceMappingURL=orchestrator.js.map
|
package/dist/orchestrator.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../src/orchestrator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAOzD,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAAC,OAAmC;IAC/E,MAAM,YAAY,GAAG,MAAM,mBAAmB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAChE,OAAO;QACH,8BAA8B;QAC9B,EAAE;QACF,+EAA+E;QAC/E,uIAAuI;QACvI,EAAE;QACF,SAAS;QACT,EAAE;QACF,OAAO,CAAC,IAAI;QACZ,EAAE;QACF,2BAA2B;QAC3B,EAAE;QACF,8OAA8O;QAC9O,EAAE;QACF,qBAAqB;QACrB,EAAE;QACF,wCAAwC;QACxC,6HAA6H;QAC7H,iHAAiH;QACjH,wGAAwG;QACxG,gGAAgG;QAChG,+CAA+C;QAC/C,wIAAwI;QACxI,0BAA0B;QAC1B,EAAE;QACF,wBAAwB;QACxB,EAAE;QACF,wCAAwC;QACxC,yDAAyD;QACzD,mEAAmE;QACnE,mDAAmD;QACnD,gEAAgE;QAChE,6DAA6D;QAC7D,gDAAgD;QAChD,8DAA8D;QAC9D,gDAAgD;QAChD,EAAE;QACF,wCAAwC;QACxC,EAAE;QACF,YAAY,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE;QACpF,YAAY,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE;QACpF,EAAE;QACF,oBAAoB;QACpB,EAAE;QACF,iGAAiG;QACjG,mGAAmG;QACnG,8GAA8G;QAC9G,qFAAqF;KACxF,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,QAAgB,EAAE,MAAc;IAClE,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzD,MAAM,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1C,OAAO,QAAQ,CAAC;AACpB,CAAC"}
|
package/dist/session-policy.d.ts
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import type { SessionDecision, SessionPolicy, ToolSessionItem, WorkItem } from "@amistio/shared";
|
|
2
|
-
export interface SessionSelectionInput {
|
|
3
|
-
policy: SessionPolicy;
|
|
4
|
-
workItem: WorkItem;
|
|
5
|
-
sessions: ToolSessionItem[];
|
|
6
|
-
toolName: string;
|
|
7
|
-
runnerId: string;
|
|
8
|
-
repositoryLinkId: string;
|
|
9
|
-
supportsSessionReuse: boolean;
|
|
10
|
-
now?: Date;
|
|
11
|
-
}
|
|
12
|
-
export interface SessionSelection {
|
|
13
|
-
policy: SessionPolicy;
|
|
14
|
-
decision: SessionDecision;
|
|
15
|
-
reason: string;
|
|
16
|
-
toolSession?: ToolSessionItem;
|
|
17
|
-
}
|
|
18
|
-
export declare function normalizeSessionPolicy(value: string | undefined): SessionPolicy;
|
|
19
|
-
export declare function selectToolSession(input: SessionSelectionInput): SessionSelection;
|
|
20
|
-
//# sourceMappingURL=session-policy.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"session-policy.d.ts","sourceRoot":"","sources":["../src/session-policy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AASjG,MAAM,WAAW,qBAAqB;IAClC,MAAM,EAAE,aAAa,CAAC;IACtB,QAAQ,EAAE,QAAQ,CAAC;IACnB,QAAQ,EAAE,eAAe,EAAE,CAAC;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;IACzB,oBAAoB,EAAE,OAAO,CAAC;IAC9B,GAAG,CAAC,EAAE,IAAI,CAAC;CACd;AAED,MAAM,WAAW,gBAAgB;IAC7B,MAAM,EAAE,aAAa,CAAC;IACtB,QAAQ,EAAE,eAAe,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,eAAe,CAAC;CACjC;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,aAAa,CAU/E;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,qBAAqB,GAAG,gBAAgB,CAqDhF"}
|
package/dist/session-policy.js
DELETED
|
@@ -1,125 +0,0 @@
|
|
|
1
|
-
const maxIdleMs = 24 * 60 * 60 * 1000;
|
|
2
|
-
const maxTotalMs = 7 * 24 * 60 * 60 * 1000;
|
|
3
|
-
const maxMessageCount = 80;
|
|
4
|
-
const maxEstimatedTokens = 120_000;
|
|
5
|
-
const maxCostUsd = 25;
|
|
6
|
-
const relatednessThreshold = 20;
|
|
7
|
-
export function normalizeSessionPolicy(value) {
|
|
8
|
-
if (!value || value === "auto" || value === "new" || value === "none") {
|
|
9
|
-
return (value ?? "auto");
|
|
10
|
-
}
|
|
11
|
-
if (/^continue:[A-Za-z0-9_.:-]+$/.test(value)) {
|
|
12
|
-
return value;
|
|
13
|
-
}
|
|
14
|
-
throw new Error(`Unsupported session policy: ${value}. Use auto, new, continue:<toolSessionId>, or none.`);
|
|
15
|
-
}
|
|
16
|
-
export function selectToolSession(input) {
|
|
17
|
-
if (input.policy === "none") {
|
|
18
|
-
return { policy: input.policy, decision: "skipped", reason: "Session reuse was disabled for this run." };
|
|
19
|
-
}
|
|
20
|
-
if (!input.supportsSessionReuse) {
|
|
21
|
-
return {
|
|
22
|
-
policy: input.policy,
|
|
23
|
-
decision: "notSupported",
|
|
24
|
-
reason: `${input.toolName} does not expose reusable provider sessions; Amistio will record this as a one-shot tool session.`
|
|
25
|
-
};
|
|
26
|
-
}
|
|
27
|
-
if (input.policy === "new") {
|
|
28
|
-
return { policy: input.policy, decision: "forcedNew", reason: "The user requested a fresh tool session." };
|
|
29
|
-
}
|
|
30
|
-
const forcedSessionId = forcedContinueSessionId(input.policy);
|
|
31
|
-
if (forcedSessionId) {
|
|
32
|
-
const forced = input.sessions.find((session) => session.toolSessionId === forcedSessionId);
|
|
33
|
-
if (!forced) {
|
|
34
|
-
return { policy: input.policy, decision: "forcedNew", reason: `Requested session ${forcedSessionId} was not found; creating a fresh session.` };
|
|
35
|
-
}
|
|
36
|
-
const ineligibleReason = sessionIneligibleReason(forced, input, input.now ?? new Date());
|
|
37
|
-
if (ineligibleReason) {
|
|
38
|
-
return { policy: input.policy, decision: "forcedNew", reason: `Requested session ${forcedSessionId} cannot be resumed: ${ineligibleReason}` };
|
|
39
|
-
}
|
|
40
|
-
return { policy: input.policy, decision: "forcedContinue", reason: `The user requested session ${forcedSessionId}.`, toolSession: forced };
|
|
41
|
-
}
|
|
42
|
-
const now = input.now ?? new Date();
|
|
43
|
-
const candidates = input.sessions
|
|
44
|
-
.map((session) => ({ session, ineligibleReason: sessionIneligibleReason(session, input, now), score: relatednessScore(session, input.workItem) }))
|
|
45
|
-
.filter((candidate) => !candidate.ineligibleReason)
|
|
46
|
-
.sort((a, b) => b.score - a.score || Date.parse(b.session.lastActivityAt) - Date.parse(a.session.lastActivityAt));
|
|
47
|
-
const best = candidates[0];
|
|
48
|
-
if (!best || best.score < relatednessThreshold) {
|
|
49
|
-
return {
|
|
50
|
-
policy: input.policy,
|
|
51
|
-
decision: "created",
|
|
52
|
-
reason: best ? `Best related session score ${best.score} was below ${relatednessThreshold}; creating a fresh session.` : "No eligible related session was found."
|
|
53
|
-
};
|
|
54
|
-
}
|
|
55
|
-
return {
|
|
56
|
-
policy: input.policy,
|
|
57
|
-
decision: "continued",
|
|
58
|
-
reason: `Reusing ${best.session.toolSessionId}; relatedness score ${best.score}.`,
|
|
59
|
-
toolSession: best.session
|
|
60
|
-
};
|
|
61
|
-
}
|
|
62
|
-
function forcedContinueSessionId(policy) {
|
|
63
|
-
return typeof policy === "string" && policy.startsWith("continue:") ? policy.slice("continue:".length) : undefined;
|
|
64
|
-
}
|
|
65
|
-
function sessionIneligibleReason(session, input, now) {
|
|
66
|
-
if (session.tool !== input.toolName) {
|
|
67
|
-
return `tool mismatch (${session.tool} != ${input.toolName})`;
|
|
68
|
-
}
|
|
69
|
-
if (session.repositoryLinkId && session.repositoryLinkId !== input.repositoryLinkId) {
|
|
70
|
-
return "repository link mismatch";
|
|
71
|
-
}
|
|
72
|
-
if (session.resumabilityScope === "localMachine" && session.runnerId && session.runnerId !== input.runnerId) {
|
|
73
|
-
return "session is scoped to another runner machine";
|
|
74
|
-
}
|
|
75
|
-
if (session.status === "closed" || session.status === "archived" || session.status === "blocked" || session.status === "unavailable") {
|
|
76
|
-
return `session is ${session.status}`;
|
|
77
|
-
}
|
|
78
|
-
if (Date.parse(session.lastActivityAt) + maxIdleMs < now.getTime()) {
|
|
79
|
-
return "session is idle past the reuse window";
|
|
80
|
-
}
|
|
81
|
-
if (Date.parse(session.createdAt) + maxTotalMs < now.getTime()) {
|
|
82
|
-
return "session is older than the reuse window";
|
|
83
|
-
}
|
|
84
|
-
if ((session.messageCount ?? 0) >= maxMessageCount) {
|
|
85
|
-
return "session message count is too high";
|
|
86
|
-
}
|
|
87
|
-
if ((session.estimatedInputTokens ?? 0) + (session.estimatedOutputTokens ?? 0) >= maxEstimatedTokens) {
|
|
88
|
-
return "session token estimate is too high";
|
|
89
|
-
}
|
|
90
|
-
if ((session.costUsd ?? 0) >= maxCostUsd) {
|
|
91
|
-
return "session cost is too high";
|
|
92
|
-
}
|
|
93
|
-
return undefined;
|
|
94
|
-
}
|
|
95
|
-
function relatednessScore(session, workItem) {
|
|
96
|
-
let score = 0;
|
|
97
|
-
if (session.sessionGroupKey && workItem.sessionGroupKey && session.sessionGroupKey === workItem.sessionGroupKey) {
|
|
98
|
-
score += 60;
|
|
99
|
-
}
|
|
100
|
-
if (session.lastWorkItemId && session.lastWorkItemId === workItem.workItemId) {
|
|
101
|
-
score += 40;
|
|
102
|
-
}
|
|
103
|
-
const titleOverlap = tokenOverlap(session.title, workItem.title);
|
|
104
|
-
score += titleOverlap * 8;
|
|
105
|
-
if (session.summary) {
|
|
106
|
-
score += tokenOverlap(session.summary, workItem.title) * 4;
|
|
107
|
-
}
|
|
108
|
-
for (const tag of session.tags) {
|
|
109
|
-
if (workItem.title.toLowerCase().includes(tag.toLowerCase())) {
|
|
110
|
-
score += 10;
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
return score;
|
|
114
|
-
}
|
|
115
|
-
function tokenOverlap(firstValue, secondValue) {
|
|
116
|
-
const firstTokens = new Set(tokens(firstValue));
|
|
117
|
-
return tokens(secondValue).filter((token) => firstTokens.has(token)).length;
|
|
118
|
-
}
|
|
119
|
-
function tokens(value) {
|
|
120
|
-
return value
|
|
121
|
-
.toLowerCase()
|
|
122
|
-
.split(/[^a-z0-9]+/)
|
|
123
|
-
.filter((token) => token.length >= 4);
|
|
124
|
-
}
|
|
125
|
-
//# sourceMappingURL=session-policy.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"session-policy.js","sourceRoot":"","sources":["../src/session-policy.ts"],"names":[],"mappings":"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"}
|
package/dist/sync.d.ts
DELETED
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import { type BrainDocumentItem, type RepoLinkMetadata, type SyncedDocumentFrontmatter } from "@amistio/shared";
|
|
2
|
-
export type SyncStatus = "clean" | "pending" | "dirty" | "conflicted";
|
|
3
|
-
export interface LocalSyncedDocument {
|
|
4
|
-
fullPath: string;
|
|
5
|
-
repoPath: string;
|
|
6
|
-
frontmatter: SyncedDocumentFrontmatter;
|
|
7
|
-
content: string;
|
|
8
|
-
contentHash: string;
|
|
9
|
-
}
|
|
10
|
-
export interface SyncStatusItem {
|
|
11
|
-
repoPath: string;
|
|
12
|
-
documentId?: string;
|
|
13
|
-
status: SyncStatus;
|
|
14
|
-
reason: string;
|
|
15
|
-
}
|
|
16
|
-
export interface SyncStatusReport {
|
|
17
|
-
status: SyncStatus;
|
|
18
|
-
items: SyncStatusItem[];
|
|
19
|
-
counts: Record<SyncStatus, number>;
|
|
20
|
-
}
|
|
21
|
-
export interface MaterializeResult {
|
|
22
|
-
written: string[];
|
|
23
|
-
skipped: string[];
|
|
24
|
-
conflicts: string[];
|
|
25
|
-
}
|
|
26
|
-
export declare function collectSyncStatus(rootDir: string, webDocuments?: BrainDocumentItem[]): Promise<SyncStatusReport>;
|
|
27
|
-
export declare function readLocalSyncedDocuments(rootDir: string): Promise<LocalSyncedDocument[]>;
|
|
28
|
-
export declare function materializeBrainDocuments(rootDir: string, documents: BrainDocumentItem[], options?: {
|
|
29
|
-
allowDirtyOverwrite?: boolean;
|
|
30
|
-
}): Promise<MaterializeResult>;
|
|
31
|
-
export declare function collectDirtyDocumentsForPush(rootDir: string, metadata: RepoLinkMetadata): Promise<BrainDocumentItem[]>;
|
|
32
|
-
export declare function createSyncedDocumentMarkdown(document: BrainDocumentItem): string;
|
|
33
|
-
//# sourceMappingURL=sync.d.ts.map
|
package/dist/sync.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../src/sync.ts"],"names":[],"mappings":"AAEA,OAAO,EAMH,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,yBAAyB,EACjC,MAAM,iBAAiB,CAAC;AAKzB,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,SAAS,GAAG,OAAO,GAAG,YAAY,CAAC;AAEtE,MAAM,WAAW,mBAAmB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,yBAAyB,CAAC;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,cAAc;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,UAAU,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC7B,MAAM,EAAE,UAAU,CAAC;IACnB,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;CACtC;AAED,MAAM,WAAW,iBAAiB;IAC9B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,GAAE,iBAAiB,EAAO,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA0E1H;AAED,wBAAsB,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAoB9F;AAED,wBAAsB,yBAAyB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,iBAAiB,EAAE,EAAE,OAAO,GAAE;IAAE,mBAAmB,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAkC5K;AAED,wBAAsB,4BAA4B,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC,CA4B5H;AAED,wBAAgB,4BAA4B,CAAC,QAAQ,EAAE,iBAAiB,GAAG,MAAM,CAYhF"}
|
package/dist/sync.js
DELETED
|
@@ -1,279 +0,0 @@
|
|
|
1
|
-
import { mkdir, readdir, readFile, stat, writeFile } from "node:fs/promises";
|
|
2
|
-
import path from "node:path";
|
|
3
|
-
import { brainDocumentItemSchema, decideSyncState, documentTypeSchema, sha256ContentHash, syncedDocumentFrontmatterSchema } from "@amistio/shared";
|
|
4
|
-
import { parseFrontmatter } from "./control-plane.js";
|
|
5
|
-
const syncRoots = ["architecture", "context", "decisions", "features", "memory", "plans", "prompts", "workflows"];
|
|
6
|
-
export async function collectSyncStatus(rootDir, webDocuments = []) {
|
|
7
|
-
const localDocuments = await readLocalSyncedDocuments(rootDir);
|
|
8
|
-
const webByDocumentId = new Map(webDocuments.map((document) => [document.documentId, document]));
|
|
9
|
-
const pullableWebDocuments = webDocuments.filter((document) => document.status === "approved" || document.syncState === "approved" || document.syncState === "synced");
|
|
10
|
-
const localByDocumentId = new Map(localDocuments.map((document) => [document.frontmatter.amistioDocumentId, document]));
|
|
11
|
-
const items = [];
|
|
12
|
-
for (const localDocument of localDocuments) {
|
|
13
|
-
const webDocument = webByDocumentId.get(localDocument.frontmatter.amistioDocumentId);
|
|
14
|
-
const localDirty = localDocument.contentHash !== localDocument.frontmatter.amistioContentHash;
|
|
15
|
-
const webHash = webDocument?.contentHash;
|
|
16
|
-
const decision = decideSyncState({
|
|
17
|
-
lastSyncedHash: localDocument.frontmatter.amistioContentHash,
|
|
18
|
-
repoHash: localDocument.contentHash,
|
|
19
|
-
...(webHash ? { webHash } : {})
|
|
20
|
-
});
|
|
21
|
-
if (decision === "conflict") {
|
|
22
|
-
items.push({
|
|
23
|
-
repoPath: localDocument.repoPath,
|
|
24
|
-
documentId: localDocument.frontmatter.amistioDocumentId,
|
|
25
|
-
status: "conflicted",
|
|
26
|
-
reason: "web and repository revisions both changed"
|
|
27
|
-
});
|
|
28
|
-
}
|
|
29
|
-
else if (localDirty || decision === "pushRepo") {
|
|
30
|
-
items.push({
|
|
31
|
-
repoPath: localDocument.repoPath,
|
|
32
|
-
documentId: localDocument.frontmatter.amistioDocumentId,
|
|
33
|
-
status: "dirty",
|
|
34
|
-
reason: "repository content changed since last synced hash"
|
|
35
|
-
});
|
|
36
|
-
}
|
|
37
|
-
else if (decision === "pullWeb") {
|
|
38
|
-
items.push({
|
|
39
|
-
repoPath: localDocument.repoPath,
|
|
40
|
-
documentId: localDocument.frontmatter.amistioDocumentId,
|
|
41
|
-
status: "pending",
|
|
42
|
-
reason: "approved web revision is newer"
|
|
43
|
-
});
|
|
44
|
-
}
|
|
45
|
-
else if (localDocument.frontmatter.status && !["approved", "synced"].includes(localDocument.frontmatter.status)) {
|
|
46
|
-
items.push({
|
|
47
|
-
repoPath: localDocument.repoPath,
|
|
48
|
-
documentId: localDocument.frontmatter.amistioDocumentId,
|
|
49
|
-
status: "pending",
|
|
50
|
-
reason: `local document is ${localDocument.frontmatter.status}`
|
|
51
|
-
});
|
|
52
|
-
}
|
|
53
|
-
else {
|
|
54
|
-
items.push({
|
|
55
|
-
repoPath: localDocument.repoPath,
|
|
56
|
-
documentId: localDocument.frontmatter.amistioDocumentId,
|
|
57
|
-
status: "clean",
|
|
58
|
-
reason: "repository and web hashes match"
|
|
59
|
-
});
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
for (const webDocument of pullableWebDocuments) {
|
|
63
|
-
if (!localByDocumentId.has(webDocument.documentId)) {
|
|
64
|
-
items.push({
|
|
65
|
-
repoPath: webDocument.repoPath,
|
|
66
|
-
documentId: webDocument.documentId,
|
|
67
|
-
status: "pending",
|
|
68
|
-
reason: "approved web document has not been pulled"
|
|
69
|
-
});
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
const counts = {
|
|
73
|
-
clean: items.filter((item) => item.status === "clean").length,
|
|
74
|
-
pending: items.filter((item) => item.status === "pending").length,
|
|
75
|
-
dirty: items.filter((item) => item.status === "dirty").length,
|
|
76
|
-
conflicted: items.filter((item) => item.status === "conflicted").length
|
|
77
|
-
};
|
|
78
|
-
const status = counts.conflicted ? "conflicted" : counts.dirty ? "dirty" : counts.pending ? "pending" : "clean";
|
|
79
|
-
return { status, items, counts };
|
|
80
|
-
}
|
|
81
|
-
export async function readLocalSyncedDocuments(rootDir) {
|
|
82
|
-
const markdownFiles = await findMarkdownFiles(rootDir);
|
|
83
|
-
const documents = [];
|
|
84
|
-
for (const fullPath of markdownFiles) {
|
|
85
|
-
const raw = await readFile(fullPath, "utf8");
|
|
86
|
-
const parsed = parseSyncedMarkdown(raw);
|
|
87
|
-
if (!parsed) {
|
|
88
|
-
continue;
|
|
89
|
-
}
|
|
90
|
-
documents.push({
|
|
91
|
-
fullPath,
|
|
92
|
-
repoPath: toRepoPath(rootDir, fullPath),
|
|
93
|
-
frontmatter: parsed.frontmatter,
|
|
94
|
-
content: parsed.content,
|
|
95
|
-
contentHash: sha256ContentHash(parsed.content)
|
|
96
|
-
});
|
|
97
|
-
}
|
|
98
|
-
return documents;
|
|
99
|
-
}
|
|
100
|
-
export async function materializeBrainDocuments(rootDir, documents, options = {}) {
|
|
101
|
-
const result = { written: [], skipped: [], conflicts: [] };
|
|
102
|
-
for (const inputDocument of documents) {
|
|
103
|
-
const document = brainDocumentItemSchema.parse(inputDocument);
|
|
104
|
-
const fullPath = safeRepoPath(rootDir, document.repoPath);
|
|
105
|
-
if (!isControlPlanePath(document.repoPath)) {
|
|
106
|
-
result.conflicts.push(`${document.repoPath}: refusing to write outside root control-plane folders`);
|
|
107
|
-
continue;
|
|
108
|
-
}
|
|
109
|
-
const existing = await readExistingSyncedDocument(fullPath);
|
|
110
|
-
if (existing.exists && !existing.document) {
|
|
111
|
-
result.conflicts.push(`${document.repoPath}: file exists without Amistio document metadata`);
|
|
112
|
-
continue;
|
|
113
|
-
}
|
|
114
|
-
if (existing.document && existing.document.frontmatter.amistioDocumentId !== document.documentId) {
|
|
115
|
-
result.conflicts.push(`${document.repoPath}: file belongs to ${existing.document.frontmatter.amistioDocumentId}`);
|
|
116
|
-
continue;
|
|
117
|
-
}
|
|
118
|
-
if (existing.document && existing.document.contentHash !== existing.document.frontmatter.amistioContentHash && !options.allowDirtyOverwrite) {
|
|
119
|
-
result.conflicts.push(`${document.repoPath}: local edits would be overwritten`);
|
|
120
|
-
continue;
|
|
121
|
-
}
|
|
122
|
-
if (existing.document && existing.document.frontmatter.amistioRevision >= document.revision && existing.document.contentHash === document.contentHash) {
|
|
123
|
-
result.skipped.push(document.repoPath);
|
|
124
|
-
continue;
|
|
125
|
-
}
|
|
126
|
-
await mkdir(path.dirname(fullPath), { recursive: true });
|
|
127
|
-
await writeFile(fullPath, createSyncedDocumentMarkdown(document), "utf8");
|
|
128
|
-
result.written.push(document.repoPath);
|
|
129
|
-
}
|
|
130
|
-
return result;
|
|
131
|
-
}
|
|
132
|
-
export async function collectDirtyDocumentsForPush(rootDir, metadata) {
|
|
133
|
-
const localDocuments = await readLocalSyncedDocuments(rootDir);
|
|
134
|
-
const now = new Date().toISOString();
|
|
135
|
-
return localDocuments
|
|
136
|
-
.filter((document) => document.contentHash !== document.frontmatter.amistioContentHash)
|
|
137
|
-
.map((document) => {
|
|
138
|
-
const documentType = documentTypeSchema.parse(document.frontmatter.amistioDocumentType);
|
|
139
|
-
return brainDocumentItemSchema.parse({
|
|
140
|
-
id: document.frontmatter.amistioDocumentId,
|
|
141
|
-
type: "brainDocument",
|
|
142
|
-
schemaVersion: 1,
|
|
143
|
-
accountId: metadata.amistioAccountId,
|
|
144
|
-
projectId: metadata.amistioProjectId,
|
|
145
|
-
documentId: document.frontmatter.amistioDocumentId,
|
|
146
|
-
documentType,
|
|
147
|
-
title: inferTitle(document.content, document.repoPath),
|
|
148
|
-
status: "reviewing",
|
|
149
|
-
repoPath: document.repoPath,
|
|
150
|
-
content: document.content,
|
|
151
|
-
contentHash: document.contentHash,
|
|
152
|
-
frontmatter: parseFrontmatterFromSyncedDocument(document.frontmatter),
|
|
153
|
-
revision: document.frontmatter.amistioRevision + 1,
|
|
154
|
-
source: "repo",
|
|
155
|
-
syncState: "dirtyInRepo",
|
|
156
|
-
createdAt: now,
|
|
157
|
-
updatedAt: now
|
|
158
|
-
});
|
|
159
|
-
});
|
|
160
|
-
}
|
|
161
|
-
export function createSyncedDocumentMarkdown(document) {
|
|
162
|
-
return [
|
|
163
|
-
"---",
|
|
164
|
-
`amistioDocumentId: ${document.documentId}`,
|
|
165
|
-
`amistioDocumentType: ${document.documentType}`,
|
|
166
|
-
`amistioRevision: ${document.revision}`,
|
|
167
|
-
`amistioContentHash: ${document.contentHash}`,
|
|
168
|
-
`status: ${document.status}`,
|
|
169
|
-
"---",
|
|
170
|
-
document.content,
|
|
171
|
-
""
|
|
172
|
-
].join("\n");
|
|
173
|
-
}
|
|
174
|
-
function parseSyncedMarkdown(content) {
|
|
175
|
-
const rawFrontmatter = parseFrontmatter(content);
|
|
176
|
-
const frontmatter = syncedDocumentFrontmatterSchema.safeParse(rawFrontmatter);
|
|
177
|
-
if (!frontmatter.success) {
|
|
178
|
-
return undefined;
|
|
179
|
-
}
|
|
180
|
-
const closingMarker = content.indexOf("\n---", 4);
|
|
181
|
-
if (closingMarker === -1) {
|
|
182
|
-
return undefined;
|
|
183
|
-
}
|
|
184
|
-
const closingLineEnd = content.indexOf("\n", closingMarker + 4);
|
|
185
|
-
const bodyStart = closingLineEnd === -1 ? content.length : closingLineEnd + 1;
|
|
186
|
-
return { frontmatter: frontmatter.data, content: content.slice(bodyStart).replace(/\n$/, "") };
|
|
187
|
-
}
|
|
188
|
-
async function readExistingSyncedDocument(fullPath) {
|
|
189
|
-
try {
|
|
190
|
-
const raw = await readFile(fullPath, "utf8");
|
|
191
|
-
const parsed = parseSyncedMarkdown(raw);
|
|
192
|
-
if (!parsed) {
|
|
193
|
-
return { exists: true };
|
|
194
|
-
}
|
|
195
|
-
return {
|
|
196
|
-
exists: true,
|
|
197
|
-
document: {
|
|
198
|
-
fullPath,
|
|
199
|
-
repoPath: fullPath,
|
|
200
|
-
frontmatter: parsed.frontmatter,
|
|
201
|
-
content: parsed.content,
|
|
202
|
-
contentHash: sha256ContentHash(parsed.content)
|
|
203
|
-
}
|
|
204
|
-
};
|
|
205
|
-
}
|
|
206
|
-
catch (error) {
|
|
207
|
-
if (error.code === "ENOENT") {
|
|
208
|
-
return { exists: false };
|
|
209
|
-
}
|
|
210
|
-
throw error;
|
|
211
|
-
}
|
|
212
|
-
}
|
|
213
|
-
async function findMarkdownFiles(rootDir) {
|
|
214
|
-
const files = [];
|
|
215
|
-
for (const syncRoot of syncRoots) {
|
|
216
|
-
const fullRoot = path.join(rootDir, syncRoot);
|
|
217
|
-
if (!(await exists(fullRoot))) {
|
|
218
|
-
continue;
|
|
219
|
-
}
|
|
220
|
-
await walkMarkdownFiles(fullRoot, files);
|
|
221
|
-
}
|
|
222
|
-
return files;
|
|
223
|
-
}
|
|
224
|
-
async function walkMarkdownFiles(directory, files) {
|
|
225
|
-
for (const entry of await readdir(directory, { withFileTypes: true })) {
|
|
226
|
-
const fullPath = path.join(directory, entry.name);
|
|
227
|
-
if (entry.isDirectory()) {
|
|
228
|
-
await walkMarkdownFiles(fullPath, files);
|
|
229
|
-
}
|
|
230
|
-
else if (entry.isFile() && entry.name.endsWith(".md")) {
|
|
231
|
-
files.push(fullPath);
|
|
232
|
-
}
|
|
233
|
-
}
|
|
234
|
-
}
|
|
235
|
-
function safeRepoPath(rootDir, repoPath) {
|
|
236
|
-
if (path.isAbsolute(repoPath)) {
|
|
237
|
-
throw new Error(`Refusing to use absolute repo path: ${repoPath}`);
|
|
238
|
-
}
|
|
239
|
-
const normalized = path.normalize(repoPath);
|
|
240
|
-
if (normalized === ".." || normalized.startsWith(`..${path.sep}`)) {
|
|
241
|
-
throw new Error(`Refusing to use path outside the repository: ${repoPath}`);
|
|
242
|
-
}
|
|
243
|
-
const root = path.resolve(rootDir);
|
|
244
|
-
const fullPath = path.resolve(root, normalized);
|
|
245
|
-
if (!fullPath.startsWith(`${root}${path.sep}`)) {
|
|
246
|
-
throw new Error(`Refusing to use path outside the repository: ${repoPath}`);
|
|
247
|
-
}
|
|
248
|
-
return fullPath;
|
|
249
|
-
}
|
|
250
|
-
function isControlPlanePath(repoPath) {
|
|
251
|
-
const normalized = path.normalize(repoPath);
|
|
252
|
-
return syncRoots.some((syncRoot) => normalized === syncRoot || normalized.startsWith(`${syncRoot}${path.sep}`));
|
|
253
|
-
}
|
|
254
|
-
function toRepoPath(rootDir, fullPath) {
|
|
255
|
-
return path.relative(rootDir, fullPath).split(path.sep).join("/");
|
|
256
|
-
}
|
|
257
|
-
function inferTitle(content, repoPath) {
|
|
258
|
-
const heading = content.split("\n").find((line) => line.startsWith("# "))?.replace(/^#\s+/, "").trim();
|
|
259
|
-
return heading || path.basename(repoPath, path.extname(repoPath));
|
|
260
|
-
}
|
|
261
|
-
function parseFrontmatterFromSyncedDocument(frontmatter) {
|
|
262
|
-
return {
|
|
263
|
-
amistioDocumentId: frontmatter.amistioDocumentId,
|
|
264
|
-
amistioDocumentType: frontmatter.amistioDocumentType,
|
|
265
|
-
amistioRevision: frontmatter.amistioRevision,
|
|
266
|
-
amistioContentHash: frontmatter.amistioContentHash,
|
|
267
|
-
...(frontmatter.status ? { status: frontmatter.status } : {})
|
|
268
|
-
};
|
|
269
|
-
}
|
|
270
|
-
async function exists(filePath) {
|
|
271
|
-
try {
|
|
272
|
-
await stat(filePath);
|
|
273
|
-
return true;
|
|
274
|
-
}
|
|
275
|
-
catch {
|
|
276
|
-
return false;
|
|
277
|
-
}
|
|
278
|
-
}
|
|
279
|
-
//# sourceMappingURL=sync.js.map
|
package/dist/sync.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../src/sync.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
export declare class LocalToolSessionStore {
|
|
2
|
-
private readonly filePath;
|
|
3
|
-
constructor(filePath?: string);
|
|
4
|
-
getProviderSessionId(toolSessionId: string, toolName: string): Promise<string | undefined>;
|
|
5
|
-
setProviderSessionId(toolSessionId: string, toolName: string, providerSessionId: string): Promise<void>;
|
|
6
|
-
private read;
|
|
7
|
-
}
|
|
8
|
-
//# sourceMappingURL=tool-session-store.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tool-session-store.d.ts","sourceRoot":"","sources":["../src/tool-session-store.ts"],"names":[],"mappings":"AAYA,qBAAa,qBAAqB;IAClB,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBAAR,QAAQ,SAA4B;IAE3D,oBAAoB,CAAC,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAM1F,oBAAoB,CAAC,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YAO/F,IAAI;CAOrB"}
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import { mkdir, readFile, writeFile } from "node:fs/promises";
|
|
2
|
-
import os from "node:os";
|
|
3
|
-
import path from "node:path";
|
|
4
|
-
export class LocalToolSessionStore {
|
|
5
|
-
filePath;
|
|
6
|
-
constructor(filePath = defaultSessionStorePath()) {
|
|
7
|
-
this.filePath = filePath;
|
|
8
|
-
}
|
|
9
|
-
async getProviderSessionId(toolSessionId, toolName) {
|
|
10
|
-
const data = await this.read();
|
|
11
|
-
const record = data[toolSessionId];
|
|
12
|
-
return record?.toolName === toolName ? record.providerSessionId : undefined;
|
|
13
|
-
}
|
|
14
|
-
async setProviderSessionId(toolSessionId, toolName, providerSessionId) {
|
|
15
|
-
const data = await this.read();
|
|
16
|
-
data[toolSessionId] = { toolName, providerSessionId, updatedAt: new Date().toISOString() };
|
|
17
|
-
await mkdir(path.dirname(this.filePath), { recursive: true });
|
|
18
|
-
await writeFile(this.filePath, JSON.stringify(data, null, 2), "utf8");
|
|
19
|
-
}
|
|
20
|
-
async read() {
|
|
21
|
-
try {
|
|
22
|
-
return JSON.parse(await readFile(this.filePath, "utf8"));
|
|
23
|
-
}
|
|
24
|
-
catch {
|
|
25
|
-
return {};
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
function defaultSessionStorePath() {
|
|
30
|
-
if (process.platform === "darwin") {
|
|
31
|
-
return path.join(os.homedir(), "Library", "Application Support", "Amistio", "tool-sessions.json");
|
|
32
|
-
}
|
|
33
|
-
if (process.platform === "win32") {
|
|
34
|
-
return path.join(process.env.APPDATA ?? os.homedir(), "Amistio", "tool-sessions.json");
|
|
35
|
-
}
|
|
36
|
-
return path.join(process.env.XDG_STATE_HOME ?? path.join(os.homedir(), ".local", "state"), "amistio", "tool-sessions.json");
|
|
37
|
-
}
|
|
38
|
-
//# sourceMappingURL=tool-session-store.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tool-session-store.js","sourceRoot":"","sources":["../src/tool-session-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAU7B,MAAM,OAAO,qBAAqB;IACD;IAA7B,YAA6B,WAAW,uBAAuB,EAAE;QAApC,aAAQ,GAAR,QAAQ,CAA4B;IAAI,CAAC;IAEtE,KAAK,CAAC,oBAAoB,CAAC,aAAqB,EAAE,QAAgB;QAC9D,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;QACnC,OAAO,MAAM,EAAE,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,SAAS,CAAC;IAChF,CAAC;IAED,KAAK,CAAC,oBAAoB,CAAC,aAAqB,EAAE,QAAgB,EAAE,iBAAyB;QACzF,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAC/B,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,QAAQ,EAAE,iBAAiB,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC;QAC3F,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9D,MAAM,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IAC1E,CAAC;IAEO,KAAK,CAAC,IAAI;QACd,IAAI,CAAC;YACD,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAwB,CAAC;QACpF,CAAC;QAAC,MAAM,CAAC;YACL,OAAO,EAAE,CAAC;QACd,CAAC;IACL,CAAC;CACJ;AAED,SAAS,uBAAuB;IAC5B,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAChC,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,qBAAqB,EAAE,SAAS,EAAE,oBAAoB,CAAC,CAAC;IACtG,CAAC;IACD,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QAC/B,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,oBAAoB,CAAC,CAAC;IAC3F,CAAC;IACD,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,SAAS,EAAE,oBAAoB,CAAC,CAAC;AAChI,CAAC"}
|
package/dist/work-runner.d.ts
DELETED
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import { type GeneratedBrainArtifact, type WorkItem } from "@amistio/shared";
|
|
2
|
-
export declare function createWorkExecutionPrompt(workItem: WorkItem): string;
|
|
3
|
-
export declare function parseBrainGenerationArtifacts(output: string): GeneratedBrainArtifact[];
|
|
4
|
-
//# sourceMappingURL=work-runner.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"work-runner.d.ts","sourceRoot":"","sources":["../src/work-runner.ts"],"names":[],"mappings":"AAAA,OAAO,EAA+B,KAAK,sBAAsB,EAAE,KAAK,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAK1G,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,CA4BpE;AAED,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,MAAM,GAAG,sBAAsB,EAAE,CAUtF"}
|