@nexalab/agent-sdk 0.1.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/LICENSE +15 -0
- package/README.md +518 -0
- package/bin/nexa.mjs +33 -0
- package/dist/advanced-memory.d.ts +32 -0
- package/dist/advanced-memory.d.ts.map +1 -0
- package/dist/advanced-memory.js +54 -0
- package/dist/advanced-memory.js.map +1 -0
- package/dist/agent-builder.d.ts +60 -0
- package/dist/agent-builder.d.ts.map +1 -0
- package/dist/agent-builder.js +141 -0
- package/dist/agent-builder.js.map +1 -0
- package/dist/approvals.d.ts +34 -0
- package/dist/approvals.d.ts.map +1 -0
- package/dist/approvals.js +54 -0
- package/dist/approvals.js.map +1 -0
- package/dist/artifacts.d.ts +13 -0
- package/dist/artifacts.d.ts.map +1 -0
- package/dist/artifacts.js +13 -0
- package/dist/artifacts.js.map +1 -0
- package/dist/cache.d.ts +17 -0
- package/dist/cache.d.ts.map +1 -0
- package/dist/cache.js +29 -0
- package/dist/cache.js.map +1 -0
- package/dist/completion-gate.d.ts +5 -0
- package/dist/completion-gate.d.ts.map +1 -0
- package/dist/completion-gate.js +20 -0
- package/dist/completion-gate.js.map +1 -0
- package/dist/console-chat.d.ts +110 -0
- package/dist/console-chat.d.ts.map +1 -0
- package/dist/console-chat.js +284 -0
- package/dist/console-chat.js.map +1 -0
- package/dist/context.d.ts +45 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +92 -0
- package/dist/context.js.map +1 -0
- package/dist/evals.d.ts +38 -0
- package/dist/evals.d.ts.map +1 -0
- package/dist/evals.js +37 -0
- package/dist/evals.js.map +1 -0
- package/dist/event-bus.d.ts +28 -0
- package/dist/event-bus.d.ts.map +1 -0
- package/dist/event-bus.js +28 -0
- package/dist/event-bus.js.map +1 -0
- package/dist/file-storage.d.ts +25 -0
- package/dist/file-storage.d.ts.map +1 -0
- package/dist/file-storage.js +100 -0
- package/dist/file-storage.js.map +1 -0
- package/dist/guardrails.d.ts +44 -0
- package/dist/guardrails.d.ts.map +1 -0
- package/dist/guardrails.js +37 -0
- package/dist/guardrails.js.map +1 -0
- package/dist/harness.d.ts +26 -0
- package/dist/harness.d.ts.map +1 -0
- package/dist/harness.js +49 -0
- package/dist/harness.js.map +1 -0
- package/dist/hooks.d.ts +58 -0
- package/dist/hooks.d.ts.map +1 -0
- package/dist/hooks.js +16 -0
- package/dist/hooks.js.map +1 -0
- package/dist/http-adapter.d.ts +13 -0
- package/dist/http-adapter.d.ts.map +1 -0
- package/dist/http-adapter.js +33 -0
- package/dist/http-adapter.js.map +1 -0
- package/dist/index.d.ts +58 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +58 -0
- package/dist/index.js.map +1 -0
- package/dist/kernel.d.ts +90 -0
- package/dist/kernel.d.ts.map +1 -0
- package/dist/kernel.js +251 -0
- package/dist/kernel.js.map +1 -0
- package/dist/knowledge.d.ts +35 -0
- package/dist/knowledge.d.ts.map +1 -0
- package/dist/knowledge.js +89 -0
- package/dist/knowledge.js.map +1 -0
- package/dist/local-tool-executor.d.ts +26 -0
- package/dist/local-tool-executor.d.ts.map +1 -0
- package/dist/local-tool-executor.js +30 -0
- package/dist/local-tool-executor.js.map +1 -0
- package/dist/loop-guard.d.ts +15 -0
- package/dist/loop-guard.d.ts.map +1 -0
- package/dist/loop-guard.js +12 -0
- package/dist/loop-guard.js.map +1 -0
- package/dist/manifest.d.ts +43 -0
- package/dist/manifest.d.ts.map +1 -0
- package/dist/manifest.js +31 -0
- package/dist/manifest.js.map +1 -0
- package/dist/mcp.d.ts +55 -0
- package/dist/mcp.d.ts.map +1 -0
- package/dist/mcp.js +175 -0
- package/dist/mcp.js.map +1 -0
- package/dist/memory.d.ts +32 -0
- package/dist/memory.d.ts.map +1 -0
- package/dist/memory.js +40 -0
- package/dist/memory.js.map +1 -0
- package/dist/mission-runtime.d.ts +106 -0
- package/dist/mission-runtime.d.ts.map +1 -0
- package/dist/mission-runtime.js +196 -0
- package/dist/mission-runtime.js.map +1 -0
- package/dist/model-harness.d.ts +23 -0
- package/dist/model-harness.d.ts.map +1 -0
- package/dist/model-harness.js +7 -0
- package/dist/model-harness.js.map +1 -0
- package/dist/model-router.d.ts +60 -0
- package/dist/model-router.d.ts.map +1 -0
- package/dist/model-router.js +90 -0
- package/dist/model-router.js.map +1 -0
- package/dist/multi-agent.d.ts +56 -0
- package/dist/multi-agent.d.ts.map +1 -0
- package/dist/multi-agent.js +69 -0
- package/dist/multi-agent.js.map +1 -0
- package/dist/native-tool-loop.d.ts +70 -0
- package/dist/native-tool-loop.d.ts.map +1 -0
- package/dist/native-tool-loop.js +92 -0
- package/dist/native-tool-loop.js.map +1 -0
- package/dist/openai-agent.d.ts +75 -0
- package/dist/openai-agent.d.ts.map +1 -0
- package/dist/openai-agent.js +190 -0
- package/dist/openai-agent.js.map +1 -0
- package/dist/openai-compatible.d.ts +117 -0
- package/dist/openai-compatible.d.ts.map +1 -0
- package/dist/openai-compatible.js +486 -0
- package/dist/openai-compatible.js.map +1 -0
- package/dist/otel.d.ts +12 -0
- package/dist/otel.d.ts.map +1 -0
- package/dist/otel.js +35 -0
- package/dist/otel.js.map +1 -0
- package/dist/permissions.d.ts +6 -0
- package/dist/permissions.d.ts.map +1 -0
- package/dist/permissions.js +33 -0
- package/dist/permissions.js.map +1 -0
- package/dist/plan-validator.d.ts +9 -0
- package/dist/plan-validator.d.ts.map +1 -0
- package/dist/plan-validator.js +27 -0
- package/dist/plan-validator.js.map +1 -0
- package/dist/policy.d.ts +27 -0
- package/dist/policy.d.ts.map +1 -0
- package/dist/policy.js +37 -0
- package/dist/policy.js.map +1 -0
- package/dist/postgres-storage.d.ts +33 -0
- package/dist/postgres-storage.d.ts.map +1 -0
- package/dist/postgres-storage.js +80 -0
- package/dist/postgres-storage.js.map +1 -0
- package/dist/provider-capabilities.d.ts +13 -0
- package/dist/provider-capabilities.d.ts.map +1 -0
- package/dist/provider-capabilities.js +19 -0
- package/dist/provider-capabilities.js.map +1 -0
- package/dist/providers.d.ts +14 -0
- package/dist/providers.d.ts.map +1 -0
- package/dist/providers.js +69 -0
- package/dist/providers.js.map +1 -0
- package/dist/queue.d.ts +29 -0
- package/dist/queue.d.ts.map +1 -0
- package/dist/queue.js +36 -0
- package/dist/queue.js.map +1 -0
- package/dist/redis-storage.d.ts +36 -0
- package/dist/redis-storage.d.ts.map +1 -0
- package/dist/redis-storage.js +68 -0
- package/dist/redis-storage.js.map +1 -0
- package/dist/replay.d.ts +13 -0
- package/dist/replay.d.ts.map +1 -0
- package/dist/replay.js +32 -0
- package/dist/replay.js.map +1 -0
- package/dist/runtime.d.ts +54 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/runtime.js +218 -0
- package/dist/runtime.js.map +1 -0
- package/dist/sdk.d.ts +43 -0
- package/dist/sdk.d.ts.map +1 -0
- package/dist/sdk.js +82 -0
- package/dist/sdk.js.map +1 -0
- package/dist/secrets.d.ts +9 -0
- package/dist/secrets.d.ts.map +1 -0
- package/dist/secrets.js +23 -0
- package/dist/secrets.js.map +1 -0
- package/dist/sessions.d.ts +44 -0
- package/dist/sessions.d.ts.map +1 -0
- package/dist/sessions.js +76 -0
- package/dist/sessions.js.map +1 -0
- package/dist/skills.d.ts +12 -0
- package/dist/skills.d.ts.map +1 -0
- package/dist/skills.js +13 -0
- package/dist/skills.js.map +1 -0
- package/dist/smoke.d.ts +8 -0
- package/dist/smoke.d.ts.map +1 -0
- package/dist/smoke.js +5 -0
- package/dist/smoke.js.map +1 -0
- package/dist/sqlite-storage.d.ts +30 -0
- package/dist/sqlite-storage.d.ts.map +1 -0
- package/dist/sqlite-storage.js +52 -0
- package/dist/sqlite-storage.js.map +1 -0
- package/dist/storage.d.ts +74 -0
- package/dist/storage.d.ts.map +1 -0
- package/dist/storage.js +83 -0
- package/dist/storage.js.map +1 -0
- package/dist/structured-output.d.ts +14 -0
- package/dist/structured-output.d.ts.map +1 -0
- package/dist/structured-output.js +24 -0
- package/dist/structured-output.js.map +1 -0
- package/dist/telemetry.d.ts +27 -0
- package/dist/telemetry.d.ts.map +1 -0
- package/dist/telemetry.js +40 -0
- package/dist/telemetry.js.map +1 -0
- package/dist/tenancy.d.ts +9 -0
- package/dist/tenancy.d.ts.map +1 -0
- package/dist/tenancy.js +8 -0
- package/dist/tenancy.js.map +1 -0
- package/dist/tool-factory.d.ts +25 -0
- package/dist/tool-factory.d.ts.map +1 -0
- package/dist/tool-factory.js +38 -0
- package/dist/tool-factory.js.map +1 -0
- package/dist/tool-orchestrator.d.ts +89 -0
- package/dist/tool-orchestrator.d.ts.map +1 -0
- package/dist/tool-orchestrator.js +102 -0
- package/dist/tool-orchestrator.js.map +1 -0
- package/dist/tool-registry.d.ts +52 -0
- package/dist/tool-registry.d.ts.map +1 -0
- package/dist/tool-registry.js +19 -0
- package/dist/tool-registry.js.map +1 -0
- package/dist/types.d.ts +1020 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +115 -0
- package/dist/types.js.map +1 -0
- package/dist/vector-memory.d.ts +19 -0
- package/dist/vector-memory.d.ts.map +1 -0
- package/dist/vector-memory.js +58 -0
- package/dist/vector-memory.js.map +1 -0
- package/dist/workflow.d.ts +65 -0
- package/dist/workflow.d.ts.map +1 -0
- package/dist/workflow.js +102 -0
- package/dist/workflow.js.map +1 -0
- package/dist/workspace.d.ts +35 -0
- package/dist/workspace.d.ts.map +1 -0
- package/dist/workspace.js +131 -0
- package/dist/workspace.js.map +1 -0
- package/package.json +223 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export const agentTaskStateSchema = z.enum([
|
|
3
|
+
"IDLE",
|
|
4
|
+
"RECEIVED",
|
|
5
|
+
"UNDERSTANDING",
|
|
6
|
+
"DEFINING_SUCCESS",
|
|
7
|
+
"PLANNING",
|
|
8
|
+
"VALIDATING_PLAN",
|
|
9
|
+
"DISCOVERING_CAPABILITIES",
|
|
10
|
+
"SELECTING_TOOL",
|
|
11
|
+
"WAITING_FOR_APPROVAL",
|
|
12
|
+
"WAITING_FOR_AUTH",
|
|
13
|
+
"WAITING_FOR_EXTERNAL_JOB",
|
|
14
|
+
"WAITING_FOR_RETRY",
|
|
15
|
+
"PAUSED",
|
|
16
|
+
"EXECUTING",
|
|
17
|
+
"OBSERVING",
|
|
18
|
+
"EVALUATING",
|
|
19
|
+
"VALIDATING",
|
|
20
|
+
"REPLANNING",
|
|
21
|
+
"RECOVERING",
|
|
22
|
+
"BLOCKED",
|
|
23
|
+
"COMPLETED",
|
|
24
|
+
"FAILED",
|
|
25
|
+
"CANCELLED"
|
|
26
|
+
]);
|
|
27
|
+
export const goalKindSchema = z.enum([
|
|
28
|
+
"question",
|
|
29
|
+
"simple_action",
|
|
30
|
+
"compound_goal",
|
|
31
|
+
"research",
|
|
32
|
+
"creation",
|
|
33
|
+
"repair",
|
|
34
|
+
"external_operation",
|
|
35
|
+
"continuous_task",
|
|
36
|
+
"blocked_or_impossible"
|
|
37
|
+
]);
|
|
38
|
+
export const evidenceRefSchema = z.object({
|
|
39
|
+
id: z.string(),
|
|
40
|
+
kind: z.string(),
|
|
41
|
+
summary: z.string(),
|
|
42
|
+
uri: z.string().optional()
|
|
43
|
+
});
|
|
44
|
+
export const evidenceRequirementSchema = z.object({
|
|
45
|
+
kind: z.string(),
|
|
46
|
+
description: z.string(),
|
|
47
|
+
required: z.boolean().default(true)
|
|
48
|
+
});
|
|
49
|
+
export const successCriterionSchema = z.object({
|
|
50
|
+
id: z.string(),
|
|
51
|
+
description: z.string(),
|
|
52
|
+
verificationMethod: z.enum(["tool_evidence", "test_result", "health_check", "user_confirmation", "source_citation", "artifact_exists", "manual_blocker"]),
|
|
53
|
+
requiredEvidence: z.array(evidenceRequirementSchema).default([]),
|
|
54
|
+
required: z.boolean().default(true),
|
|
55
|
+
status: z.enum(["SATISFIED", "UNSATISFIED", "UNKNOWN"]).default("UNKNOWN"),
|
|
56
|
+
evidenceRefs: z.array(evidenceRefSchema).default([])
|
|
57
|
+
});
|
|
58
|
+
export const capabilityRequirementSchema = z.object({
|
|
59
|
+
capability: z.string(),
|
|
60
|
+
operation: z.string().optional(),
|
|
61
|
+
required: z.boolean().default(true),
|
|
62
|
+
constraints: z.record(z.unknown()).default({})
|
|
63
|
+
});
|
|
64
|
+
export const interpretedGoalSchema = z.object({
|
|
65
|
+
objective: z.string().min(1),
|
|
66
|
+
kind: goalKindSchema,
|
|
67
|
+
constraints: z.array(z.string()).default([]),
|
|
68
|
+
deliverables: z.array(z.string()).default([]),
|
|
69
|
+
assumptions: z.array(z.string()).default([]),
|
|
70
|
+
risks: z.array(z.string()).default([]),
|
|
71
|
+
requiredCapabilities: z.array(capabilityRequirementSchema).default([]),
|
|
72
|
+
successCriteria: z.array(successCriterionSchema).default([]),
|
|
73
|
+
userVisibleOutcome: z.string(),
|
|
74
|
+
needsClarification: z.boolean().default(false),
|
|
75
|
+
clarificationQuestions: z.array(z.string()).default([])
|
|
76
|
+
});
|
|
77
|
+
export const agentStepSchema = z.object({
|
|
78
|
+
id: z.string(),
|
|
79
|
+
objective: z.string().min(1),
|
|
80
|
+
type: z.enum(["understand", "discover", "read", "write", "execute", "delegate", "research", "validate", "ask_user", "finalize"]),
|
|
81
|
+
dependencies: z.array(z.string()).default([]),
|
|
82
|
+
requiredCapabilities: z.array(capabilityRequirementSchema).default([]),
|
|
83
|
+
candidateTools: z.array(z.string()).default([]),
|
|
84
|
+
risk: z.enum(["low", "medium", "high", "critical"]).default("low"),
|
|
85
|
+
approvalRisk: z.enum(["SAFE_READ", "LOCAL_WRITE", "EXTERNAL_WRITE", "INSTALL_DEPENDENCY", "CREDENTIAL_ACCESS", "ACCOUNT_CONNECTION", "SENSITIVE_DATA", "DESTRUCTIVE", "FINANCIAL", "PRIVILEGED_EXECUTION"]).default("SAFE_READ"),
|
|
86
|
+
expectedEvidence: z.array(evidenceRequirementSchema).default([]),
|
|
87
|
+
successCriteria: z.array(successCriterionSchema).default([]),
|
|
88
|
+
retryPolicy: z.object({ maxAttempts: z.number().int().min(0).default(1), backoffMs: z.number().int().min(0).default(500), maxBackoffMs: z.number().int().min(0).default(5000) }).default({}),
|
|
89
|
+
timeoutMs: z.number().int().positive().max(900000).default(60000),
|
|
90
|
+
idempotencyKey: z.string(),
|
|
91
|
+
status: z.enum(["pending", "ready", "waiting_approval", "waiting_auth", "waiting_external_job", "waiting_retry", "running", "observing", "evaluating", "completed", "failed", "blocked", "skipped", "cancelled"]).default("pending")
|
|
92
|
+
});
|
|
93
|
+
export const agentPlanSchema = z.object({
|
|
94
|
+
id: z.string(),
|
|
95
|
+
taskId: z.string(),
|
|
96
|
+
runId: z.string(),
|
|
97
|
+
version: z.number().int().positive().default(1),
|
|
98
|
+
status: z.enum(["draft", "active", "superseded", "completed", "blocked", "failed"]).default("draft"),
|
|
99
|
+
rationale: z.string(),
|
|
100
|
+
steps: z.array(agentStepSchema),
|
|
101
|
+
createdAt: z.string()
|
|
102
|
+
});
|
|
103
|
+
export const agentObservationSchema = z.object({
|
|
104
|
+
status: z.enum(["success", "partial", "failed", "running", "cancelled"]),
|
|
105
|
+
summary: z.string(),
|
|
106
|
+
data: z.unknown().optional(),
|
|
107
|
+
evidence: z.array(evidenceRefSchema).default([]),
|
|
108
|
+
artifacts: z.array(evidenceRefSchema).default([]),
|
|
109
|
+
changedResources: z.array(evidenceRefSchema).default([]),
|
|
110
|
+
metrics: z.record(z.unknown()).default({}),
|
|
111
|
+
warnings: z.array(z.string()).default([]),
|
|
112
|
+
errors: z.array(z.object({ code: z.string(), message: z.string(), retryable: z.boolean().default(false) })).default([]),
|
|
113
|
+
nextHints: z.array(z.string()).default([])
|
|
114
|
+
});
|
|
115
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { MemoryRecord } from "./memory.js";
|
|
2
|
+
export type EmbeddingProvider = {
|
|
3
|
+
embed(text: string): Promise<number[]> | number[];
|
|
4
|
+
};
|
|
5
|
+
export type VectorMemoryRecord = MemoryRecord & {
|
|
6
|
+
embedding: number[];
|
|
7
|
+
};
|
|
8
|
+
export declare class VectorMemoryStore {
|
|
9
|
+
private readonly embeddings;
|
|
10
|
+
private readonly records;
|
|
11
|
+
constructor(embeddings?: EmbeddingProvider);
|
|
12
|
+
upsert(record: MemoryRecord): Promise<VectorMemoryRecord>;
|
|
13
|
+
search(query: string, limit?: number): Promise<Array<VectorMemoryRecord & {
|
|
14
|
+
score: number;
|
|
15
|
+
}>>;
|
|
16
|
+
}
|
|
17
|
+
export declare function createVectorMemoryStore(embeddings?: EmbeddingProvider): VectorMemoryStore;
|
|
18
|
+
export declare function lexicalEmbeddingProvider(): EmbeddingProvider;
|
|
19
|
+
//# sourceMappingURL=vector-memory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vector-memory.d.ts","sourceRoot":"","sources":["../src/vector-memory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,MAAM,MAAM,iBAAiB,GAAG;IAC9B,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC;CACnD,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG,YAAY,GAAG;IAC9C,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB,CAAC;AAEF,qBAAa,iBAAiB;IAGhB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAFvC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyC;gBAEpC,UAAU,GAAE,iBAA8C;IAEjF,MAAM,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,kBAAkB,CAAC;IASzD,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,OAAO,CAAC,KAAK,CAAC,kBAAkB,GAAG;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAOhG;AAED,wBAAgB,uBAAuB,CAAC,UAAU,CAAC,EAAE,iBAAiB,GAAG,iBAAiB,CAEzF;AAED,wBAAgB,wBAAwB,IAAI,iBAAiB,CAW5D"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
export class VectorMemoryStore {
|
|
2
|
+
embeddings;
|
|
3
|
+
records = new Map();
|
|
4
|
+
constructor(embeddings = lexicalEmbeddingProvider()) {
|
|
5
|
+
this.embeddings = embeddings;
|
|
6
|
+
}
|
|
7
|
+
async upsert(record) {
|
|
8
|
+
const vectorRecord = {
|
|
9
|
+
...record,
|
|
10
|
+
embedding: await this.embeddings.embed(record.content)
|
|
11
|
+
};
|
|
12
|
+
this.records.set(record.id, vectorRecord);
|
|
13
|
+
return vectorRecord;
|
|
14
|
+
}
|
|
15
|
+
async search(query, limit = 10) {
|
|
16
|
+
const queryEmbedding = await this.embeddings.embed(query);
|
|
17
|
+
return [...this.records.values()]
|
|
18
|
+
.map((record) => ({ ...record, score: cosine(queryEmbedding, record.embedding) }))
|
|
19
|
+
.sort((a, b) => b.score - a.score)
|
|
20
|
+
.slice(0, limit);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
export function createVectorMemoryStore(embeddings) {
|
|
24
|
+
return new VectorMemoryStore(embeddings);
|
|
25
|
+
}
|
|
26
|
+
export function lexicalEmbeddingProvider() {
|
|
27
|
+
return {
|
|
28
|
+
embed(text) {
|
|
29
|
+
const vector = new Array(64).fill(0);
|
|
30
|
+
for (const token of text.toLowerCase().split(/[^a-z0-9_áéíóúñ]+/i).filter(Boolean)) {
|
|
31
|
+
const index = hash(token) % vector.length;
|
|
32
|
+
vector[index] = (vector[index] ?? 0) + 1;
|
|
33
|
+
}
|
|
34
|
+
return vector;
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
function cosine(a, b) {
|
|
39
|
+
let dot = 0;
|
|
40
|
+
let left = 0;
|
|
41
|
+
let right = 0;
|
|
42
|
+
const length = Math.max(a.length, b.length);
|
|
43
|
+
for (let index = 0; index < length; index += 1) {
|
|
44
|
+
const av = a[index] ?? 0;
|
|
45
|
+
const bv = b[index] ?? 0;
|
|
46
|
+
dot += av * bv;
|
|
47
|
+
left += av * av;
|
|
48
|
+
right += bv * bv;
|
|
49
|
+
}
|
|
50
|
+
return left && right ? dot / (Math.sqrt(left) * Math.sqrt(right)) : 0;
|
|
51
|
+
}
|
|
52
|
+
function hash(value) {
|
|
53
|
+
let result = 0;
|
|
54
|
+
for (let index = 0; index < value.length; index += 1)
|
|
55
|
+
result = (result * 31 + value.charCodeAt(index)) >>> 0;
|
|
56
|
+
return result;
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=vector-memory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vector-memory.js","sourceRoot":"","sources":["../src/vector-memory.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import type { NexaStorage } from "./storage.js";
|
|
2
|
+
import type { JsonObject, JsonValue } from "./types.js";
|
|
3
|
+
export type WorkflowNodeStatus = "pending" | "running" | "completed" | "failed" | "skipped";
|
|
4
|
+
export type WorkflowNode = {
|
|
5
|
+
id: string;
|
|
6
|
+
title: string;
|
|
7
|
+
dependsOn?: string[];
|
|
8
|
+
run: (input: {
|
|
9
|
+
workflow: WorkflowRun;
|
|
10
|
+
node: WorkflowNode;
|
|
11
|
+
context: JsonObject;
|
|
12
|
+
signal?: AbortSignal;
|
|
13
|
+
}) => Promise<JsonValue> | JsonValue;
|
|
14
|
+
};
|
|
15
|
+
export type WorkflowRun = {
|
|
16
|
+
id: string;
|
|
17
|
+
name: string;
|
|
18
|
+
status: "created" | "running" | "completed" | "failed" | "cancelled";
|
|
19
|
+
context: JsonObject;
|
|
20
|
+
nodes: Array<{
|
|
21
|
+
id: string;
|
|
22
|
+
title: string;
|
|
23
|
+
status: WorkflowNodeStatus;
|
|
24
|
+
dependsOn: string[];
|
|
25
|
+
output?: JsonValue;
|
|
26
|
+
error?: string;
|
|
27
|
+
startedAt?: string;
|
|
28
|
+
endedAt?: string;
|
|
29
|
+
}>;
|
|
30
|
+
createdAt: string;
|
|
31
|
+
updatedAt: string;
|
|
32
|
+
};
|
|
33
|
+
export type WorkflowCheckpointStore = {
|
|
34
|
+
saveWorkflow(run: WorkflowRun): Promise<void> | void;
|
|
35
|
+
getWorkflow(id: string): Promise<WorkflowRun | undefined> | WorkflowRun | undefined;
|
|
36
|
+
};
|
|
37
|
+
export type WorkflowRuntimeOptions = {
|
|
38
|
+
storage?: WorkflowCheckpointStore | NexaStorage;
|
|
39
|
+
};
|
|
40
|
+
export declare class WorkflowRuntime {
|
|
41
|
+
private readonly options;
|
|
42
|
+
private readonly runs;
|
|
43
|
+
constructor(options?: WorkflowRuntimeOptions);
|
|
44
|
+
create(input: {
|
|
45
|
+
name: string;
|
|
46
|
+
nodes: WorkflowNode[];
|
|
47
|
+
context?: JsonObject;
|
|
48
|
+
}): WorkflowRun;
|
|
49
|
+
resume(input: {
|
|
50
|
+
runId: string;
|
|
51
|
+
nodes: WorkflowNode[];
|
|
52
|
+
signal?: AbortSignal;
|
|
53
|
+
}): Promise<WorkflowRun>;
|
|
54
|
+
run(input: {
|
|
55
|
+
runId: string;
|
|
56
|
+
nodes: WorkflowNode[];
|
|
57
|
+
signal?: AbortSignal;
|
|
58
|
+
}): Promise<WorkflowRun>;
|
|
59
|
+
get(id: string): WorkflowRun | undefined;
|
|
60
|
+
private requireRun;
|
|
61
|
+
private save;
|
|
62
|
+
private load;
|
|
63
|
+
}
|
|
64
|
+
export declare function createWorkflowRuntime(options?: WorkflowRuntimeOptions): WorkflowRuntime;
|
|
65
|
+
//# sourceMappingURL=workflow.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow.d.ts","sourceRoot":"","sources":["../src/workflow.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAExD,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,SAAS,CAAC;AAE5F,MAAM,MAAM,YAAY,GAAG;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,GAAG,EAAE,CAAC,KAAK,EAAE;QAAE,QAAQ,EAAE,WAAW,CAAC;QAAC,IAAI,EAAE,YAAY,CAAC;QAAC,OAAO,EAAE,UAAU,CAAC;QAAC,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,KAAK,OAAO,CAAC,SAAS,CAAC,GAAG,SAAS,CAAC;CAC1I,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,WAAW,CAAC;IACrE,OAAO,EAAE,UAAU,CAAC;IACpB,KAAK,EAAE,KAAK,CAAC;QACX,EAAE,EAAE,MAAM,CAAC;QACX,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,kBAAkB,CAAC;QAC3B,SAAS,EAAE,MAAM,EAAE,CAAC;QACpB,MAAM,CAAC,EAAE,SAAS,CAAC;QACnB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC,CAAC;IACH,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,YAAY,CAAC,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACrD,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC,GAAG,WAAW,GAAG,SAAS,CAAC;CACrF,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,OAAO,CAAC,EAAE,uBAAuB,GAAG,WAAW,CAAC;CACjD,CAAC;AAEF,qBAAa,eAAe;IAGd,OAAO,CAAC,QAAQ,CAAC,OAAO;IAFpC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAkC;gBAE1B,OAAO,GAAE,sBAA2B;IAEjE,MAAM,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,YAAY,EAAE,CAAC;QAAC,OAAO,CAAC,EAAE,UAAU,CAAA;KAAE,GAAG,WAAW;IAqBnF,MAAM,CAAC,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,YAAY,EAAE,CAAC;QAAC,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GAAG,OAAO,CAAC,WAAW,CAAC;IAOnG,GAAG,CAAC,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,YAAY,EAAE,CAAC;QAAC,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GAAG,OAAO,CAAC,WAAW,CAAC;IAwCtG,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAIxC,OAAO,CAAC,UAAU;YAMJ,IAAI;YAKJ,IAAI;CAKnB;AAED,wBAAgB,qBAAqB,CAAC,OAAO,GAAE,sBAA2B,GAAG,eAAe,CAE3F"}
|
package/dist/workflow.js
ADDED
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
export class WorkflowRuntime {
|
|
2
|
+
options;
|
|
3
|
+
runs = new Map();
|
|
4
|
+
constructor(options = {}) {
|
|
5
|
+
this.options = options;
|
|
6
|
+
}
|
|
7
|
+
create(input) {
|
|
8
|
+
const now = new Date().toISOString();
|
|
9
|
+
const run = {
|
|
10
|
+
id: crypto.randomUUID(),
|
|
11
|
+
name: input.name,
|
|
12
|
+
status: "created",
|
|
13
|
+
context: input.context ?? {},
|
|
14
|
+
nodes: input.nodes.map((node) => ({
|
|
15
|
+
id: node.id,
|
|
16
|
+
title: node.title,
|
|
17
|
+
status: "pending",
|
|
18
|
+
dependsOn: node.dependsOn ?? []
|
|
19
|
+
})),
|
|
20
|
+
createdAt: now,
|
|
21
|
+
updatedAt: now
|
|
22
|
+
};
|
|
23
|
+
this.runs.set(run.id, run);
|
|
24
|
+
void this.save(run);
|
|
25
|
+
return run;
|
|
26
|
+
}
|
|
27
|
+
async resume(input) {
|
|
28
|
+
const saved = await this.load(input.runId);
|
|
29
|
+
if (!saved)
|
|
30
|
+
throw new Error(`Workflow not found: ${input.runId}`);
|
|
31
|
+
this.runs.set(saved.id, saved);
|
|
32
|
+
return this.run({ runId: saved.id, nodes: input.nodes, ...(input.signal ? { signal: input.signal } : {}) });
|
|
33
|
+
}
|
|
34
|
+
async run(input) {
|
|
35
|
+
const run = this.requireRun(input.runId);
|
|
36
|
+
const executable = new Map(input.nodes.map((node) => [node.id, node]));
|
|
37
|
+
run.status = "running";
|
|
38
|
+
await this.save(run);
|
|
39
|
+
while (true) {
|
|
40
|
+
if (input.signal?.aborted) {
|
|
41
|
+
run.status = "cancelled";
|
|
42
|
+
await this.save(run);
|
|
43
|
+
return run;
|
|
44
|
+
}
|
|
45
|
+
const next = run.nodes.find((node) => node.status === "pending" && node.dependsOn.every((id) => run.nodes.find((candidate) => candidate.id === id)?.status === "completed"));
|
|
46
|
+
if (!next)
|
|
47
|
+
break;
|
|
48
|
+
const node = executable.get(next.id);
|
|
49
|
+
if (!node)
|
|
50
|
+
throw new Error(`Workflow node implementation missing: ${next.id}`);
|
|
51
|
+
next.status = "running";
|
|
52
|
+
next.startedAt = new Date().toISOString();
|
|
53
|
+
await this.save(run);
|
|
54
|
+
try {
|
|
55
|
+
next.output = await node.run({ workflow: run, node, context: run.context, ...(input.signal ? { signal: input.signal } : {}) });
|
|
56
|
+
next.status = "completed";
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
next.status = "failed";
|
|
60
|
+
next.error = error instanceof Error ? error.message : String(error);
|
|
61
|
+
run.status = "failed";
|
|
62
|
+
}
|
|
63
|
+
next.endedAt = new Date().toISOString();
|
|
64
|
+
run.updatedAt = next.endedAt;
|
|
65
|
+
await this.save(run);
|
|
66
|
+
if (run.status === "failed")
|
|
67
|
+
return run;
|
|
68
|
+
}
|
|
69
|
+
const blocked = run.nodes.some((node) => node.status === "pending");
|
|
70
|
+
run.status = blocked ? "failed" : "completed";
|
|
71
|
+
run.updatedAt = new Date().toISOString();
|
|
72
|
+
await this.save(run);
|
|
73
|
+
return run;
|
|
74
|
+
}
|
|
75
|
+
get(id) {
|
|
76
|
+
return this.runs.get(id);
|
|
77
|
+
}
|
|
78
|
+
requireRun(id) {
|
|
79
|
+
const run = this.runs.get(id);
|
|
80
|
+
if (!run)
|
|
81
|
+
throw new Error(`Workflow not found: ${id}`);
|
|
82
|
+
return run;
|
|
83
|
+
}
|
|
84
|
+
async save(run) {
|
|
85
|
+
const storage = this.options.storage;
|
|
86
|
+
if (hasWorkflowStore(storage))
|
|
87
|
+
await storage.saveWorkflow(run);
|
|
88
|
+
}
|
|
89
|
+
async load(id) {
|
|
90
|
+
const storage = this.options.storage;
|
|
91
|
+
if (hasWorkflowStore(storage))
|
|
92
|
+
return storage.getWorkflow(id);
|
|
93
|
+
return this.runs.get(id);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
export function createWorkflowRuntime(options = {}) {
|
|
97
|
+
return new WorkflowRuntime(options);
|
|
98
|
+
}
|
|
99
|
+
function hasWorkflowStore(value) {
|
|
100
|
+
return Boolean(value && typeof value === "object" && "saveWorkflow" in value && "getWorkflow" in value);
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=workflow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow.js","sourceRoot":"","sources":["../src/workflow.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { type SdkToolRegistration } from "./tool-factory.js";
|
|
2
|
+
export type WorkspaceOptions = {
|
|
3
|
+
root: string;
|
|
4
|
+
timeoutMs?: number;
|
|
5
|
+
maxOutputBytes?: number;
|
|
6
|
+
};
|
|
7
|
+
export type WorkspaceExecResult = {
|
|
8
|
+
stdout: string;
|
|
9
|
+
stderr: string;
|
|
10
|
+
exitCode: number;
|
|
11
|
+
timedOut: boolean;
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* Node-process-level sandbox: confines file access and shell execution to a jailed
|
|
15
|
+
* root directory with a timeout and output cap. This is NOT container/VM isolation —
|
|
16
|
+
* a command can still see the host's environment/network/other processes.
|
|
17
|
+
*/
|
|
18
|
+
export declare class Workspace {
|
|
19
|
+
private readonly options;
|
|
20
|
+
readonly root: string;
|
|
21
|
+
constructor(options: WorkspaceOptions);
|
|
22
|
+
ensureRoot(): Promise<void>;
|
|
23
|
+
resolvePath(relativePath: string): string;
|
|
24
|
+
readFile(relativePath: string): Promise<string>;
|
|
25
|
+
writeFile(relativePath: string, content: string): Promise<void>;
|
|
26
|
+
exec(command: string, args?: string[], options?: {
|
|
27
|
+
cwd?: string;
|
|
28
|
+
signal?: AbortSignal;
|
|
29
|
+
}): Promise<WorkspaceExecResult>;
|
|
30
|
+
snapshot(snapshotDir: string): Promise<void>;
|
|
31
|
+
restore(snapshotDir: string): Promise<void>;
|
|
32
|
+
}
|
|
33
|
+
export declare function createWorkspace(options: WorkspaceOptions): Workspace;
|
|
34
|
+
export declare function workspaceTools(workspace: Workspace): SdkToolRegistration[];
|
|
35
|
+
//# sourceMappingURL=workspace.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace.d.ts","sourceRoot":"","sources":["../src/workspace.ts"],"names":[],"mappings":"AAKA,OAAO,EAAiB,KAAK,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAE5E,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,CAAC;AAE1G;;;;GAIG;AACH,qBAAa,SAAS;IAGR,OAAO,CAAC,QAAQ,CAAC,OAAO;IAFpC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;gBAEO,OAAO,EAAE,gBAAgB;IAIhD,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAIjC,WAAW,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM;IAOnC,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAI/C,SAAS,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMrE,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,MAAM,EAAO,EAAE,OAAO,GAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,WAAW,CAAA;KAAO,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAoCxH,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAM5C,OAAO,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAKlD;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,gBAAgB,GAAG,SAAS,CAEpE;AAED,wBAAgB,cAAc,CAAC,SAAS,EAAE,SAAS,GAAG,mBAAmB,EAAE,CAyC1E"}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
2
|
+
import { spawn } from "node:child_process";
|
|
3
|
+
import { cp, mkdir, readFile, rm, writeFile } from "node:fs/promises";
|
|
4
|
+
import { dirname, isAbsolute, relative, resolve } from "node:path";
|
|
5
|
+
import { z } from "zod";
|
|
6
|
+
import { defineSdkTool } from "./tool-factory.js";
|
|
7
|
+
/**
|
|
8
|
+
* Node-process-level sandbox: confines file access and shell execution to a jailed
|
|
9
|
+
* root directory with a timeout and output cap. This is NOT container/VM isolation —
|
|
10
|
+
* a command can still see the host's environment/network/other processes.
|
|
11
|
+
*/
|
|
12
|
+
export class Workspace {
|
|
13
|
+
options;
|
|
14
|
+
root;
|
|
15
|
+
constructor(options) {
|
|
16
|
+
this.options = options;
|
|
17
|
+
this.root = resolve(options.root);
|
|
18
|
+
}
|
|
19
|
+
async ensureRoot() {
|
|
20
|
+
await mkdir(this.root, { recursive: true });
|
|
21
|
+
}
|
|
22
|
+
resolvePath(relativePath) {
|
|
23
|
+
const target = resolve(this.root, relativePath);
|
|
24
|
+
const rel = relative(this.root, target);
|
|
25
|
+
if (rel.startsWith("..") || isAbsolute(rel))
|
|
26
|
+
throw new Error(`Path escapes workspace root: ${relativePath}`);
|
|
27
|
+
return target;
|
|
28
|
+
}
|
|
29
|
+
async readFile(relativePath) {
|
|
30
|
+
return readFile(this.resolvePath(relativePath), "utf8");
|
|
31
|
+
}
|
|
32
|
+
async writeFile(relativePath, content) {
|
|
33
|
+
const target = this.resolvePath(relativePath);
|
|
34
|
+
await mkdir(dirname(target), { recursive: true });
|
|
35
|
+
await writeFile(target, content, "utf8");
|
|
36
|
+
}
|
|
37
|
+
exec(command, args = [], options = {}) {
|
|
38
|
+
const cwd = options.cwd ? this.resolvePath(options.cwd) : this.root;
|
|
39
|
+
const timeoutMs = this.options.timeoutMs ?? 30000;
|
|
40
|
+
const maxOutputBytes = this.options.maxOutputBytes ?? 1_000_000;
|
|
41
|
+
return new Promise((resolvePromise, rejectPromise) => {
|
|
42
|
+
const child = spawn(command, args, { cwd });
|
|
43
|
+
let stdout = "";
|
|
44
|
+
let stderr = "";
|
|
45
|
+
let timedOut = false;
|
|
46
|
+
const timer = setTimeout(() => {
|
|
47
|
+
timedOut = true;
|
|
48
|
+
child.kill();
|
|
49
|
+
}, timeoutMs);
|
|
50
|
+
const onAbort = () => child.kill();
|
|
51
|
+
options.signal?.addEventListener("abort", onAbort, { once: true });
|
|
52
|
+
child.stdout.on("data", (chunk) => {
|
|
53
|
+
if (stdout.length < maxOutputBytes)
|
|
54
|
+
stdout += chunk.toString("utf8");
|
|
55
|
+
});
|
|
56
|
+
child.stderr.on("data", (chunk) => {
|
|
57
|
+
if (stderr.length < maxOutputBytes)
|
|
58
|
+
stderr += chunk.toString("utf8");
|
|
59
|
+
});
|
|
60
|
+
child.on("error", (error) => {
|
|
61
|
+
clearTimeout(timer);
|
|
62
|
+
options.signal?.removeEventListener("abort", onAbort);
|
|
63
|
+
rejectPromise(error);
|
|
64
|
+
});
|
|
65
|
+
child.on("close", (code) => {
|
|
66
|
+
clearTimeout(timer);
|
|
67
|
+
options.signal?.removeEventListener("abort", onAbort);
|
|
68
|
+
resolvePromise({ stdout: stdout.slice(0, maxOutputBytes), stderr: stderr.slice(0, maxOutputBytes), exitCode: code ?? -1, timedOut });
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
async snapshot(snapshotDir) {
|
|
73
|
+
const target = resolve(snapshotDir);
|
|
74
|
+
await mkdir(target, { recursive: true });
|
|
75
|
+
await cp(this.root, target, { recursive: true });
|
|
76
|
+
}
|
|
77
|
+
async restore(snapshotDir) {
|
|
78
|
+
const source = resolve(snapshotDir);
|
|
79
|
+
await rm(this.root, { recursive: true, force: true });
|
|
80
|
+
await cp(source, this.root, { recursive: true });
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
export function createWorkspace(options) {
|
|
84
|
+
return new Workspace(options);
|
|
85
|
+
}
|
|
86
|
+
export function workspaceTools(workspace) {
|
|
87
|
+
return [
|
|
88
|
+
defineSdkTool({
|
|
89
|
+
id: "workspace.read_file",
|
|
90
|
+
capability: "workspace.read_file",
|
|
91
|
+
description: "Read a text file from the agent workspace.",
|
|
92
|
+
inputSchema: z.object({ path: z.string() }),
|
|
93
|
+
handler: async ({ path }) => {
|
|
94
|
+
try {
|
|
95
|
+
return { status: "ok", output: { content: await workspace.readFile(path) } };
|
|
96
|
+
}
|
|
97
|
+
catch (error) {
|
|
98
|
+
return { status: "error", error: error instanceof Error ? error.message : String(error), retryable: false };
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}),
|
|
102
|
+
defineSdkTool({
|
|
103
|
+
id: "workspace.write_file",
|
|
104
|
+
capability: "workspace.write_file",
|
|
105
|
+
description: "Write a text file into the agent workspace.",
|
|
106
|
+
inputSchema: z.object({ path: z.string(), content: z.string() }),
|
|
107
|
+
handler: async ({ path, content }) => {
|
|
108
|
+
try {
|
|
109
|
+
await workspace.writeFile(path, content);
|
|
110
|
+
return { status: "ok", output: {}, evidence: [{ id: randomUUID(), kind: "artifact", summary: path }] };
|
|
111
|
+
}
|
|
112
|
+
catch (error) {
|
|
113
|
+
return { status: "error", error: error instanceof Error ? error.message : String(error), retryable: false };
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}),
|
|
117
|
+
defineSdkTool({
|
|
118
|
+
id: "workspace.exec",
|
|
119
|
+
capability: "workspace.exec",
|
|
120
|
+
description: "Execute a shell command inside the agent workspace, with a timeout and output cap.",
|
|
121
|
+
inputSchema: z.object({ command: z.string(), args: z.array(z.string()).default([]) }),
|
|
122
|
+
handler: async ({ command, args }) => {
|
|
123
|
+
const result = await workspace.exec(command, args);
|
|
124
|
+
if (result.exitCode !== 0)
|
|
125
|
+
return { status: "error", error: result.stderr || `Command exited with code ${result.exitCode}`, retryable: false };
|
|
126
|
+
return { status: "ok", output: { stdout: result.stdout, stderr: result.stderr, exitCode: result.exitCode } };
|
|
127
|
+
}
|
|
128
|
+
})
|
|
129
|
+
];
|
|
130
|
+
}
|
|
131
|
+
//# sourceMappingURL=workspace.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace.js","sourceRoot":"","sources":["../src/workspace.ts"],"names":[],"mappings":"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"}
|