@viewportai/daemon 0.9.0 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -7
- package/dist/adapters/claude.js +1 -1
- package/dist/adapters/claude.js.map +1 -1
- package/dist/adapters/codex.d.ts +1 -0
- package/dist/adapters/codex.d.ts.map +1 -1
- package/dist/adapters/codex.js +13 -0
- package/dist/adapters/codex.js.map +1 -1
- package/dist/cli/lifecycle-commands.js +1 -1
- package/dist/cli/lifecycle-commands.js.map +1 -1
- package/dist/cli/lifecycle-pair-command.js +1 -1
- package/dist/cli/lifecycle-pair-command.js.map +1 -1
- package/dist/cli/org-binding.d.ts +1 -0
- package/dist/cli/org-binding.d.ts.map +1 -1
- package/dist/cli/org-binding.js +2 -2
- package/dist/cli/org-binding.js.map +1 -1
- package/dist/cli/workflow-commands.d.ts.map +1 -1
- package/dist/cli/workflow-commands.js +6 -1
- package/dist/cli/workflow-commands.js.map +1 -1
- package/dist/cli/workflow-managed-worker-format.d.ts +10 -0
- package/dist/cli/workflow-managed-worker-format.d.ts.map +1 -0
- package/dist/cli/workflow-managed-worker-format.js +120 -0
- package/dist/cli/workflow-managed-worker-format.js.map +1 -0
- package/dist/cli/workflow-managed-worker-types.d.ts +55 -0
- package/dist/cli/workflow-managed-worker-types.d.ts.map +1 -0
- package/dist/cli/workflow-managed-worker-types.js +2 -0
- package/dist/cli/workflow-managed-worker-types.js.map +1 -0
- package/dist/cli/workflow-managed-worker-util.d.ts +5 -0
- package/dist/cli/workflow-managed-worker-util.d.ts.map +1 -0
- package/dist/cli/workflow-managed-worker-util.js +28 -0
- package/dist/cli/workflow-managed-worker-util.js.map +1 -0
- package/dist/cli/workflow-managed-worker.d.ts +2 -0
- package/dist/cli/workflow-managed-worker.d.ts.map +1 -0
- package/dist/cli/workflow-managed-worker.js +240 -0
- package/dist/cli/workflow-managed-worker.js.map +1 -0
- package/dist/core/session-context-prompt.d.ts.map +1 -1
- package/dist/core/session-context-prompt.js +70 -13
- package/dist/core/session-context-prompt.js.map +1 -1
- package/dist/discovery/jsonl-entry-parser.js +82 -0
- package/dist/discovery/jsonl-entry-parser.js.map +1 -1
- package/dist/relay/bridge-daemon-key-registration.d.ts +2 -0
- package/dist/relay/bridge-daemon-key-registration.d.ts.map +1 -1
- package/dist/relay/bridge-daemon-key-registration.js +6 -2
- package/dist/relay/bridge-daemon-key-registration.js.map +1 -1
- package/dist/relay/bridge-org-routing-filter.d.ts +1 -0
- package/dist/relay/bridge-org-routing-filter.d.ts.map +1 -1
- package/dist/relay/bridge-org-routing-filter.js +1 -0
- package/dist/relay/bridge-org-routing-filter.js.map +1 -1
- package/dist/server/ws-protocol.d.ts +1 -0
- package/dist/server/ws-protocol.d.ts.map +1 -1
- package/dist/server/ws-protocol.js +1 -1
- package/dist/server/ws-protocol.js.map +1 -1
- package/dist/server/ws-session-command-handlers.d.ts +1 -1
- package/dist/server/ws-session-command-handlers.d.ts.map +1 -1
- package/dist/server/ws-session-command-handlers.js +2 -1
- package/dist/server/ws-session-command-handlers.js.map +1 -1
- package/dist/startup.d.ts.map +1 -1
- package/dist/startup.js +3 -0
- package/dist/startup.js.map +1 -1
- package/dist/workflows/action-adapters.d.ts +7 -0
- package/dist/workflows/action-adapters.d.ts.map +1 -0
- package/dist/workflows/action-adapters.js +138 -0
- package/dist/workflows/action-adapters.js.map +1 -0
- package/dist/workflows/action-provider-adapters.d.ts +13 -0
- package/dist/workflows/action-provider-adapters.d.ts.map +1 -0
- package/dist/workflows/action-provider-adapters.js +260 -0
- package/dist/workflows/action-provider-adapters.js.map +1 -0
- package/dist/workflows/context-node-resolver.d.ts +3 -0
- package/dist/workflows/context-node-resolver.d.ts.map +1 -0
- package/dist/workflows/context-node-resolver.js +122 -0
- package/dist/workflows/context-node-resolver.js.map +1 -0
- package/dist/workflows/event-types.d.ts +1 -1
- package/dist/workflows/event-types.d.ts.map +1 -1
- package/dist/workflows/node-registry.d.ts.map +1 -1
- package/dist/workflows/node-registry.js +115 -1
- package/dist/workflows/node-registry.js.map +1 -1
- package/dist/workflows/parser.js +30 -0
- package/dist/workflows/parser.js.map +1 -1
- package/dist/workflows/plugin-loader.d.ts.map +1 -1
- package/dist/workflows/plugin-loader.js +6 -0
- package/dist/workflows/plugin-loader.js.map +1 -1
- package/dist/workflows/preflight.d.ts.map +1 -1
- package/dist/workflows/preflight.js +6 -2
- package/dist/workflows/preflight.js.map +1 -1
- package/dist/workflows/runner-hook-events.d.ts +19 -0
- package/dist/workflows/runner-hook-events.d.ts.map +1 -0
- package/dist/workflows/runner-hook-events.js +16 -0
- package/dist/workflows/runner-hook-events.js.map +1 -0
- package/dist/workflows/runner-shared.d.ts.map +1 -1
- package/dist/workflows/runner-shared.js +26 -2
- package/dist/workflows/runner-shared.js.map +1 -1
- package/dist/workflows/runner.d.ts +0 -1
- package/dist/workflows/runner.d.ts.map +1 -1
- package/dist/workflows/runner.js +21 -17
- package/dist/workflows/runner.js.map +1 -1
- package/dist/workflows/types.d.ts +54 -13
- package/dist/workflows/types.d.ts.map +1 -1
- package/dist/workflows/workflow-production-schema.d.ts +100 -0
- package/dist/workflows/workflow-production-schema.d.ts.map +1 -0
- package/dist/workflows/workflow-production-schema.js +107 -0
- package/dist/workflows/workflow-production-schema.js.map +1 -0
- package/dist/workflows/workflow-production-types.d.ts +71 -0
- package/dist/workflows/workflow-production-types.d.ts.map +1 -0
- package/dist/workflows/workflow-production-types.js +2 -0
- package/dist/workflows/workflow-production-types.js.map +1 -0
- package/dist/workflows/workflow-schema-common.d.ts +85 -0
- package/dist/workflows/workflow-schema-common.d.ts.map +1 -0
- package/dist/workflows/workflow-schema-common.js +78 -0
- package/dist/workflows/workflow-schema-common.js.map +1 -0
- package/dist/workflows/workflow-schema.d.ts +442 -3
- package/dist/workflows/workflow-schema.d.ts.map +1 -1
- package/dist/workflows/workflow-schema.js +63 -77
- package/dist/workflows/workflow-schema.js.map +1 -1
- package/docs/configuration.md +6 -3
- package/package.json +1 -1
- package/schemas/workflow-v1.schema.json +262 -1
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
export function localRunToSyncPayload(run) {
|
|
2
|
+
return {
|
|
3
|
+
runtime_run_id: run.id,
|
|
4
|
+
status: run.status,
|
|
5
|
+
data_capture_policy: run.dataCapturePolicy,
|
|
6
|
+
output_snapshot: {
|
|
7
|
+
inputs: run.inputs,
|
|
8
|
+
nodes: Object.fromEntries(Object.entries(run.nodes).map(([key, node]) => [
|
|
9
|
+
key,
|
|
10
|
+
{ status: node.status, output: node.output, outputs: node.outputs ?? null },
|
|
11
|
+
])),
|
|
12
|
+
},
|
|
13
|
+
error_summary: run.error ?? null,
|
|
14
|
+
started_at: iso(run.startedAt),
|
|
15
|
+
completed_at: iso(run.completedAt),
|
|
16
|
+
nodes: Object.values(run.nodes).map(formatNode),
|
|
17
|
+
artifacts: run.artifacts.map(formatArtifact),
|
|
18
|
+
events: run.events.map(formatEvent),
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
export function capabilityPayload(capabilities) {
|
|
22
|
+
return {
|
|
23
|
+
tools: ['shell'],
|
|
24
|
+
...(capabilities.agentCommand && capabilities.agents.length > 0
|
|
25
|
+
? { agents: capabilities.agents }
|
|
26
|
+
: {}),
|
|
27
|
+
...(capabilities.agentCommand && capabilities.models.length > 0
|
|
28
|
+
? { models: capabilities.models }
|
|
29
|
+
: {}),
|
|
30
|
+
...(capabilities.integrations.length > 0 ? { integrations: capabilities.integrations } : {}),
|
|
31
|
+
...(capabilities.secrets.length > 0 ? { secrets: capabilities.secrets } : {}),
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
export function dataFrom(body) {
|
|
35
|
+
if (body && typeof body === 'object' && 'data' in body) {
|
|
36
|
+
return body.data;
|
|
37
|
+
}
|
|
38
|
+
return body;
|
|
39
|
+
}
|
|
40
|
+
export function readRun(body) {
|
|
41
|
+
const run = body && typeof body === 'object' && 'run' in body ? body.run : body;
|
|
42
|
+
if (!run || typeof run !== 'object' || typeof run.id !== 'string') {
|
|
43
|
+
throw new Error('Daemon workflow response did not include a run.');
|
|
44
|
+
}
|
|
45
|
+
return run;
|
|
46
|
+
}
|
|
47
|
+
export function approvalMessage(node) {
|
|
48
|
+
const approval = node.metadata?.['approval'];
|
|
49
|
+
if (approval && typeof approval === 'object' && 'message' in approval) {
|
|
50
|
+
const message = approval.message;
|
|
51
|
+
if (typeof message === 'string' && message.trim() !== '')
|
|
52
|
+
return message;
|
|
53
|
+
}
|
|
54
|
+
return node.output ?? 'Approved from Viewport';
|
|
55
|
+
}
|
|
56
|
+
export function approvalActor(node) {
|
|
57
|
+
const approval = node.metadata?.['approval'];
|
|
58
|
+
const actor = approval && typeof approval === 'object' ? approval.actor : null;
|
|
59
|
+
return actor && typeof actor === 'object'
|
|
60
|
+
? actor
|
|
61
|
+
: { name: 'Viewport', source: 'managed-executor' };
|
|
62
|
+
}
|
|
63
|
+
export function progressSyncEveryMs(leaseSeconds) {
|
|
64
|
+
return Math.max(500, Math.min(30_000, Math.floor(leaseSeconds * 500)));
|
|
65
|
+
}
|
|
66
|
+
function formatNode(node) {
|
|
67
|
+
return {
|
|
68
|
+
node_key: node.id,
|
|
69
|
+
title: node.title ?? node.id,
|
|
70
|
+
type: node.type,
|
|
71
|
+
status: node.status,
|
|
72
|
+
session_id: node.sessionId ?? null,
|
|
73
|
+
worktree_path: node.worktreePath ?? null,
|
|
74
|
+
output: node.output ?? null,
|
|
75
|
+
output_snapshot: node.outputs ?? null,
|
|
76
|
+
transcript_excerpt: node.transcriptExcerpt ?? null,
|
|
77
|
+
error: node.error ?? null,
|
|
78
|
+
started_at: iso(node.startedAt),
|
|
79
|
+
completed_at: iso(node.completedAt),
|
|
80
|
+
metadata: {
|
|
81
|
+
...(node.metadata ?? {}),
|
|
82
|
+
approval: node.approval ?? null,
|
|
83
|
+
inlineAgents: node.inlineAgents ?? null,
|
|
84
|
+
nativeSessionId: node.nativeSessionId ?? null,
|
|
85
|
+
exitCode: node.exitCode ?? null,
|
|
86
|
+
skipReason: node.skipReason ?? null,
|
|
87
|
+
},
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
function formatArtifact(artifact) {
|
|
91
|
+
return {
|
|
92
|
+
node_key: artifact.nodeId,
|
|
93
|
+
name: artifact.name,
|
|
94
|
+
kind: artifact.kind ?? null,
|
|
95
|
+
path: artifact.path,
|
|
96
|
+
uri: null,
|
|
97
|
+
mime_type: null,
|
|
98
|
+
digest: artifact.digest ?? null,
|
|
99
|
+
metadata: {
|
|
100
|
+
...(artifact.metadata ?? {}),
|
|
101
|
+
description: artifact.description ?? null,
|
|
102
|
+
sizeBytes: artifact.sizeBytes ?? null,
|
|
103
|
+
},
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
function formatEvent(event) {
|
|
107
|
+
return {
|
|
108
|
+
runtime_event_id: event.id,
|
|
109
|
+
node_key: event.nodeId ?? null,
|
|
110
|
+
type: event.type,
|
|
111
|
+
severity: event.type.includes('failed') ? 'error' : 'info',
|
|
112
|
+
message: event.message,
|
|
113
|
+
payload: event.data ?? null,
|
|
114
|
+
occurred_at: iso(event.timestamp),
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
function iso(value) {
|
|
118
|
+
return value ? new Date(value).toISOString() : null;
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=workflow-managed-worker-format.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-managed-worker-format.js","sourceRoot":"","sources":["../../src/cli/workflow-managed-worker-format.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import type { WorkflowInputValue } from '../workflows/types.js';
|
|
2
|
+
export interface ManagedWorkerOptions {
|
|
3
|
+
server: string;
|
|
4
|
+
workspaceId: string;
|
|
5
|
+
executorId: string;
|
|
6
|
+
credential: string;
|
|
7
|
+
workdir?: string;
|
|
8
|
+
leaseSeconds: number;
|
|
9
|
+
sleepSeconds: number;
|
|
10
|
+
maxRuns?: number;
|
|
11
|
+
once: boolean;
|
|
12
|
+
capabilities: ManagedWorkerCapabilities;
|
|
13
|
+
}
|
|
14
|
+
export interface ManagedWorkerCapabilities {
|
|
15
|
+
agentCommand?: string;
|
|
16
|
+
agents: string[];
|
|
17
|
+
models: string[];
|
|
18
|
+
integrations: string[];
|
|
19
|
+
secrets: string[];
|
|
20
|
+
}
|
|
21
|
+
export interface ManagedAssignment {
|
|
22
|
+
id: string;
|
|
23
|
+
assignment_claim_token?: string | null;
|
|
24
|
+
yaml_snapshot?: string | null;
|
|
25
|
+
source_ref?: string | null;
|
|
26
|
+
directory_path?: string | null;
|
|
27
|
+
runtime_run_id?: string | null;
|
|
28
|
+
runtime_target_id?: string | null;
|
|
29
|
+
input_snapshot?: Record<string, WorkflowInputValue> | null;
|
|
30
|
+
data_capture_policy?: {
|
|
31
|
+
transcripts?: 'none' | 'excerpt';
|
|
32
|
+
logs?: 'metadata' | 'content';
|
|
33
|
+
artifacts?: 'metadata' | 'local_reference';
|
|
34
|
+
} | null;
|
|
35
|
+
status?: string | null;
|
|
36
|
+
nodes?: Array<{
|
|
37
|
+
node_key: string;
|
|
38
|
+
type?: string | null;
|
|
39
|
+
status?: string | null;
|
|
40
|
+
output?: string | null;
|
|
41
|
+
error?: string | null;
|
|
42
|
+
metadata?: Record<string, unknown> | null;
|
|
43
|
+
}>;
|
|
44
|
+
}
|
|
45
|
+
export interface DirectoryInfo {
|
|
46
|
+
id: string;
|
|
47
|
+
path: string;
|
|
48
|
+
}
|
|
49
|
+
export interface WorkerStats {
|
|
50
|
+
claimed: number;
|
|
51
|
+
completed: number;
|
|
52
|
+
blocked: number;
|
|
53
|
+
failed: number;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=workflow-managed-worker-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-managed-worker-types.d.ts","sourceRoot":"","sources":["../../src/cli/workflow-managed-worker-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAEhE,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,EAAE,yBAAyB,CAAC;CACzC;AAED,MAAM,WAAW,yBAAyB;IACxC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,sBAAsB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,GAAG,IAAI,CAAC;IAC3D,mBAAmB,CAAC,EAAE;QACpB,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QACjC,IAAI,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;QAC9B,SAAS,CAAC,EAAE,UAAU,GAAG,iBAAiB,CAAC;KAC5C,GAAG,IAAI,CAAC;IACT,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,KAAK,CAAC,EAAE,KAAK,CAAC;QACZ,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACrB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACvB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACvB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACtB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;KAC3C,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-managed-worker-types.js","sourceRoot":"","sources":["../../src/cli/workflow-managed-worker-types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export declare function listFlagValue(value: string | undefined): string[];
|
|
2
|
+
export declare function positiveIntFlagValue(value: string | undefined): number | undefined;
|
|
3
|
+
export declare function safeText(response: Response | undefined): Promise<string>;
|
|
4
|
+
export declare function delay(ms: number): Promise<void>;
|
|
5
|
+
//# sourceMappingURL=workflow-managed-worker-util.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-managed-worker-util.d.ts","sourceRoot":"","sources":["../../src/cli/workflow-managed-worker-util.ts"],"names":[],"mappings":"AAAA,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,EAAE,CAMjE;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAIlF;AAED,wBAAsB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAG,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAO9E;AAED,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE/C"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export function listFlagValue(value) {
|
|
2
|
+
if (!value)
|
|
3
|
+
return [];
|
|
4
|
+
return value
|
|
5
|
+
.split(',')
|
|
6
|
+
.map((entry) => entry.trim())
|
|
7
|
+
.filter(Boolean);
|
|
8
|
+
}
|
|
9
|
+
export function positiveIntFlagValue(value) {
|
|
10
|
+
if (!value)
|
|
11
|
+
return undefined;
|
|
12
|
+
const parsed = Number.parseInt(value, 10);
|
|
13
|
+
return Number.isFinite(parsed) && parsed > 0 ? parsed : undefined;
|
|
14
|
+
}
|
|
15
|
+
export async function safeText(response) {
|
|
16
|
+
if (!response)
|
|
17
|
+
return '';
|
|
18
|
+
try {
|
|
19
|
+
return await response.text();
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
return '';
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
export function delay(ms) {
|
|
26
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=workflow-managed-worker-util.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-managed-worker-util.js","sourceRoot":"","sources":["../../src/cli/workflow-managed-worker-util.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,aAAa,CAAC,KAAyB;IACrD,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,CAAC;IACtB,OAAO,KAAK;SACT,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;SAC5B,MAAM,CAAC,OAAO,CAAC,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,KAAyB;IAC5D,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAC7B,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAC1C,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;AACpE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,QAA8B;IAC3D,IAAI,CAAC,QAAQ;QAAE,OAAO,EAAE,CAAC;IACzB,IAAI,CAAC;QACH,OAAO,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,KAAK,CAAC,EAAU;IAC9B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-managed-worker.d.ts","sourceRoot":"","sources":["../../src/cli/workflow-managed-worker.ts"],"names":[],"mappings":"AA4BA,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAoDpD"}
|
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import { getFlag, hasFlag } from './args.js';
|
|
3
|
+
import { daemonFetch, isDaemonRunning } from './daemon-client.js';
|
|
4
|
+
import { isJsonMode, printJson } from './command-shared.js';
|
|
5
|
+
import { parseCsvList, parseTlsVerifyMode, transportFetch } from './network.js';
|
|
6
|
+
import { delay, listFlagValue, positiveIntFlagValue, safeText, } from './workflow-managed-worker-util.js';
|
|
7
|
+
import { approvalActor, approvalMessage, capabilityPayload, dataFrom, localRunToSyncPayload, progressSyncEveryMs, readRun, } from './workflow-managed-worker-format.js';
|
|
8
|
+
export async function workflowWorker() {
|
|
9
|
+
const options = resolveWorkerOptions();
|
|
10
|
+
if (!(await isDaemonRunning())) {
|
|
11
|
+
throw new Error('Daemon is not running. Start it first with `vpd start`.');
|
|
12
|
+
}
|
|
13
|
+
const stats = { claimed: 0, completed: 0, blocked: 0, failed: 0 };
|
|
14
|
+
do {
|
|
15
|
+
await heartbeat(options, 'online', 'idle');
|
|
16
|
+
const assignment = await claimAssignment(options);
|
|
17
|
+
if (!assignment) {
|
|
18
|
+
if (options.once)
|
|
19
|
+
break;
|
|
20
|
+
await delay(options.sleepSeconds * 1000);
|
|
21
|
+
continue;
|
|
22
|
+
}
|
|
23
|
+
stats.claimed += 1;
|
|
24
|
+
const localRun = await runAssignmentLocally(options, assignment);
|
|
25
|
+
const synced = await syncLocalRun(options, assignment.id, localRun, assignment.assignment_claim_token);
|
|
26
|
+
if (synced.status === 'blocked') {
|
|
27
|
+
stats.blocked += 1;
|
|
28
|
+
if (!options.once) {
|
|
29
|
+
const resumed = await waitForApprovalAndResume(options, assignment.id, localRun.id, assignment.assignment_claim_token);
|
|
30
|
+
stats.completed += resumed.status === 'completed' ? 1 : 0;
|
|
31
|
+
stats.failed += resumed.status === 'failed' || resumed.status === 'canceled' ? 1 : 0;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
else if (synced.status === 'completed') {
|
|
35
|
+
stats.completed += 1;
|
|
36
|
+
}
|
|
37
|
+
else if (synced.status === 'failed' || synced.status === 'canceled') {
|
|
38
|
+
stats.failed += 1;
|
|
39
|
+
}
|
|
40
|
+
if (options.once || (options.maxRuns !== undefined && stats.claimed >= options.maxRuns))
|
|
41
|
+
break;
|
|
42
|
+
} while (true);
|
|
43
|
+
if (isJsonMode()) {
|
|
44
|
+
printJson({ command: 'workflow worker', ok: stats.failed === 0, stats });
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
console.log(`Workflow worker stopped. Claimed ${stats.claimed}, completed ${stats.completed}, blocked ${stats.blocked}, failed ${stats.failed}.`);
|
|
48
|
+
}
|
|
49
|
+
function resolveWorkerOptions() {
|
|
50
|
+
const server = getFlag('server') ?? process.env['VIEWPORT_SERVER_URL'] ?? process.env['VPD_SERVER_URL'];
|
|
51
|
+
const workspaceId = getFlag('workspace') ?? getFlag('resource') ?? process.env['VIEWPORT_WORKSPACE_ID'];
|
|
52
|
+
const executorId = getFlag('executor') ?? process.env['VIEWPORT_MANAGED_EXECUTOR_ID'];
|
|
53
|
+
const credential = getFlag('credential') ??
|
|
54
|
+
process.env['VIEWPORT_MANAGED_EXECUTOR_TOKEN'] ??
|
|
55
|
+
process.env['VPD_MANAGED_EXECUTOR_TOKEN'];
|
|
56
|
+
if (!server || !workspaceId || !executorId || !credential) {
|
|
57
|
+
throw new Error('Usage: vpd workflow worker --server <url> --workspace <id> --executor <id> --credential <token> [--workdir <path>] [--once]');
|
|
58
|
+
}
|
|
59
|
+
return {
|
|
60
|
+
server: server.replace(/\/+$/, ''),
|
|
61
|
+
workspaceId,
|
|
62
|
+
executorId,
|
|
63
|
+
credential,
|
|
64
|
+
workdir: getFlag('workdir') ? path.resolve(getFlag('workdir')) : undefined,
|
|
65
|
+
leaseSeconds: positiveIntFlagValue(getFlag('lease')) ?? 300,
|
|
66
|
+
sleepSeconds: positiveIntFlagValue(getFlag('sleep')) ?? 5,
|
|
67
|
+
maxRuns: positiveIntFlagValue(getFlag('max-runs')),
|
|
68
|
+
once: hasFlag('once'),
|
|
69
|
+
capabilities: {
|
|
70
|
+
agentCommand: getFlag('agent-command') ?? process.env['VIEWPORT_MANAGED_AGENT_COMMAND'],
|
|
71
|
+
agents: listFlagValue(getFlag('agents')),
|
|
72
|
+
models: listFlagValue(getFlag('models')),
|
|
73
|
+
integrations: listFlagValue(getFlag('integrations')),
|
|
74
|
+
secrets: listFlagValue(getFlag('secrets')),
|
|
75
|
+
},
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
async function heartbeat(options, status, healthStatus) {
|
|
79
|
+
await platformJson(options, 'POST', 'heartbeat', {
|
|
80
|
+
status,
|
|
81
|
+
health_status: healthStatus,
|
|
82
|
+
capabilities: capabilityPayload(options.capabilities),
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
async function claimAssignment(options) {
|
|
86
|
+
const response = await platformFetch(options, 'POST', 'claim', {
|
|
87
|
+
lease_seconds: options.leaseSeconds,
|
|
88
|
+
});
|
|
89
|
+
if (response.status === 204)
|
|
90
|
+
return null;
|
|
91
|
+
const body = await responseJson(response);
|
|
92
|
+
return dataFrom(body);
|
|
93
|
+
}
|
|
94
|
+
async function runAssignmentLocally(options, assignment) {
|
|
95
|
+
if (!assignment.yaml_snapshot) {
|
|
96
|
+
throw new Error(`Managed workflow assignment ${assignment.id} is missing yaml_snapshot.`);
|
|
97
|
+
}
|
|
98
|
+
await heartbeat(options, 'online', 'busy');
|
|
99
|
+
const existingRun = await readExistingLocalRun(assignment.runtime_run_id);
|
|
100
|
+
if (existingRun) {
|
|
101
|
+
return existingRun;
|
|
102
|
+
}
|
|
103
|
+
const directory = await ensureDirectory(options.workdir ?? assignment.directory_path ?? process.cwd());
|
|
104
|
+
const started = await daemonJson('POST', '/api/workflows/runs', {
|
|
105
|
+
workflowYaml: assignment.yaml_snapshot,
|
|
106
|
+
workflowSourceRef: assignment.source_ref ?? `viewport://managed-executor/${assignment.id}`,
|
|
107
|
+
directoryId: directory.id,
|
|
108
|
+
inputs: assignment.input_snapshot ?? {},
|
|
109
|
+
resourceId: options.workspaceId,
|
|
110
|
+
runtimeTargetId: assignment.runtime_target_id ?? undefined,
|
|
111
|
+
platformRunId: assignment.id,
|
|
112
|
+
initiation: 'cli',
|
|
113
|
+
});
|
|
114
|
+
const runId = readRun(started).id;
|
|
115
|
+
return pollLocalRun(runId, async (run) => {
|
|
116
|
+
await syncLocalRun(options, assignment.id, run, assignment.assignment_claim_token);
|
|
117
|
+
}, progressSyncEveryMs(options.leaseSeconds));
|
|
118
|
+
}
|
|
119
|
+
async function readExistingLocalRun(runId) {
|
|
120
|
+
if (!runId)
|
|
121
|
+
return null;
|
|
122
|
+
const response = await daemonFetch(`/api/workflows/runs/${encodeURIComponent(runId)}`, {
|
|
123
|
+
method: 'GET',
|
|
124
|
+
timeoutMs: 30_000,
|
|
125
|
+
});
|
|
126
|
+
if (response?.status === 404)
|
|
127
|
+
return null;
|
|
128
|
+
if (!response?.ok) {
|
|
129
|
+
throw new Error(`Daemon request failed: ${response?.status ?? 'no response'} ${await safeText(response ?? undefined)}`);
|
|
130
|
+
}
|
|
131
|
+
return readRun(await response.json());
|
|
132
|
+
}
|
|
133
|
+
async function waitForApprovalAndResume(options, platformRunId, localRunId, assignmentClaimToken) {
|
|
134
|
+
while (true) {
|
|
135
|
+
await delay(options.sleepSeconds * 1000);
|
|
136
|
+
await heartbeat(options, 'online', 'busy');
|
|
137
|
+
const assignment = await getAssignment(options, platformRunId, assignmentClaimToken);
|
|
138
|
+
const approved = assignment.nodes?.find((node) => ['approval', 'gate', 'plan', 'action'].includes(String(node.type ?? '')) &&
|
|
139
|
+
node.status === 'completed');
|
|
140
|
+
if (approved) {
|
|
141
|
+
await daemonJson('POST', `/api/workflows/runs/${encodeURIComponent(localRunId)}/approvals/${encodeURIComponent(approved.node_key)}`, {
|
|
142
|
+
approved: true,
|
|
143
|
+
message: approvalMessage(approved),
|
|
144
|
+
actor: approvalActor(approved),
|
|
145
|
+
});
|
|
146
|
+
const resumed = await pollLocalRun(localRunId, async (run) => {
|
|
147
|
+
await syncLocalRun(options, platformRunId, run, assignmentClaimToken);
|
|
148
|
+
}, progressSyncEveryMs(options.leaseSeconds));
|
|
149
|
+
await syncLocalRun(options, platformRunId, resumed, assignmentClaimToken);
|
|
150
|
+
return resumed;
|
|
151
|
+
}
|
|
152
|
+
if (assignment.status === 'canceled' || assignment.status === 'failed') {
|
|
153
|
+
const canceled = await daemonJson('POST', `/api/workflows/runs/${encodeURIComponent(localRunId)}/cancel`, {
|
|
154
|
+
message: 'Managed workflow assignment was canceled from Viewport.',
|
|
155
|
+
actor: { name: 'Viewport', source: 'managed-executor' },
|
|
156
|
+
});
|
|
157
|
+
const run = readRun(canceled);
|
|
158
|
+
await syncLocalRun(options, platformRunId, run, assignmentClaimToken);
|
|
159
|
+
return run;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
async function getAssignment(options, platformRunId, assignmentClaimToken) {
|
|
164
|
+
const body = await platformJson(options, 'GET', `workflow-runs/${encodeURIComponent(platformRunId)}`, undefined, assignmentClaimToken);
|
|
165
|
+
return dataFrom(body);
|
|
166
|
+
}
|
|
167
|
+
async function syncLocalRun(options, platformRunId, run, assignmentClaimToken) {
|
|
168
|
+
const body = await platformJson(options, 'PATCH', `workflow-runs/${encodeURIComponent(platformRunId)}/sync`, localRunToSyncPayload(run), assignmentClaimToken);
|
|
169
|
+
return dataFrom(body);
|
|
170
|
+
}
|
|
171
|
+
async function ensureDirectory(directoryPath) {
|
|
172
|
+
const resolvedPath = path.resolve(directoryPath);
|
|
173
|
+
const directories = (await daemonJson('GET', '/api/directories'));
|
|
174
|
+
const existing = directories.find((directory) => directory.path === resolvedPath);
|
|
175
|
+
if (existing)
|
|
176
|
+
return existing;
|
|
177
|
+
const created = (await daemonJson('POST', '/api/directories', { path: resolvedPath }));
|
|
178
|
+
if (!created.id)
|
|
179
|
+
throw new Error(`Failed to register workflow worker directory: ${resolvedPath}`);
|
|
180
|
+
return { id: created.id, path: resolvedPath };
|
|
181
|
+
}
|
|
182
|
+
async function pollLocalRun(runId, onProgress, progressEveryMs = 30_000) {
|
|
183
|
+
let nextProgressAt = 0;
|
|
184
|
+
while (true) {
|
|
185
|
+
const body = await daemonJson('GET', `/api/workflows/runs/${encodeURIComponent(runId)}`);
|
|
186
|
+
const run = readRun(body);
|
|
187
|
+
if (['completed', 'failed', 'blocked', 'canceled'].includes(run.status))
|
|
188
|
+
return run;
|
|
189
|
+
if (onProgress && Date.now() >= nextProgressAt) {
|
|
190
|
+
await onProgress(run);
|
|
191
|
+
nextProgressAt = Date.now() + progressEveryMs;
|
|
192
|
+
}
|
|
193
|
+
await delay(500);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
async function daemonJson(method, urlPath, body) {
|
|
197
|
+
const response = await daemonFetch(urlPath, {
|
|
198
|
+
method,
|
|
199
|
+
...(body !== undefined
|
|
200
|
+
? { headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(body) }
|
|
201
|
+
: {}),
|
|
202
|
+
timeoutMs: 30_000,
|
|
203
|
+
});
|
|
204
|
+
if (!response?.ok) {
|
|
205
|
+
throw new Error(`Daemon request failed: ${response?.status ?? 'no response'} ${await safeText(response ?? undefined)}`);
|
|
206
|
+
}
|
|
207
|
+
return response.json();
|
|
208
|
+
}
|
|
209
|
+
async function platformJson(options, method, pathSuffix, body, assignmentClaimToken) {
|
|
210
|
+
return responseJson(await platformFetch(options, method, pathSuffix, body, assignmentClaimToken));
|
|
211
|
+
}
|
|
212
|
+
async function platformFetch(options, method, pathSuffix, body, assignmentClaimToken) {
|
|
213
|
+
const response = await transportFetch(`${baseManagedUrl(options)}/${pathSuffix}`, {
|
|
214
|
+
method,
|
|
215
|
+
headers: {
|
|
216
|
+
Authorization: `Bearer ${options.credential}`,
|
|
217
|
+
Accept: 'application/json',
|
|
218
|
+
...(assignmentClaimToken ? { 'X-Viewport-Assignment-Claim': assignmentClaimToken } : {}),
|
|
219
|
+
...(body !== undefined ? { 'Content-Type': 'application/json' } : {}),
|
|
220
|
+
},
|
|
221
|
+
...(body !== undefined ? { body: JSON.stringify(body) } : {}),
|
|
222
|
+
timeoutMs: 30_000,
|
|
223
|
+
tlsVerify: parseTlsVerifyMode(process.env['VPD_SERVER_TLS_VERIFY']) ?? 'auto',
|
|
224
|
+
caCertPath: process.env['VPD_SERVER_CA_CERT'],
|
|
225
|
+
tlsPins: parseCsvList(process.env['VPD_SERVER_TLS_PINS']),
|
|
226
|
+
});
|
|
227
|
+
if (!response.ok && response.status !== 204) {
|
|
228
|
+
throw new Error(`Platform request failed: HTTP ${response.status} ${await response.text()}`);
|
|
229
|
+
}
|
|
230
|
+
return response;
|
|
231
|
+
}
|
|
232
|
+
async function responseJson(response) {
|
|
233
|
+
if (response.status === 204)
|
|
234
|
+
return null;
|
|
235
|
+
return response.json();
|
|
236
|
+
}
|
|
237
|
+
function baseManagedUrl(options) {
|
|
238
|
+
return `${options.server}/api/runtime/workspaces/${encodeURIComponent(options.workspaceId)}/managed-executors/${encodeURIComponent(options.executorId)}`;
|
|
239
|
+
}
|
|
240
|
+
//# sourceMappingURL=workflow-managed-worker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-managed-worker.js","sourceRoot":"","sources":["../../src/cli/workflow-managed-worker.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-context-prompt.d.ts","sourceRoot":"","sources":["../../src/core/session-context-prompt.ts"],"names":[],"mappings":"AAYA,MAAM,WAAW,8BAA8B;IAC7C,kBAAkB,EAAE,OAAO,CAAC;IAC5B,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,wBAAsB,6BAA6B,CAAC,OAAO,EAAE;IAC3D,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC,MAAM,CAAC,CAwBlB;AAED,wBAAsB,wBAAwB,CAAC,OAAO,EAAE;IACtD,gBAAgB,EAAE,MAAM,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAezB;AAED,wBAAsB,6BAA6B,CAAC,OAAO,EAAE;IAC3D,gBAAgB,EAAE,MAAM,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,GAAG,OAAO,CAAC,8BAA8B,CAAC,
|
|
1
|
+
{"version":3,"file":"session-context-prompt.d.ts","sourceRoot":"","sources":["../../src/core/session-context-prompt.ts"],"names":[],"mappings":"AAYA,MAAM,WAAW,8BAA8B;IAC7C,kBAAkB,EAAE,OAAO,CAAC;IAC5B,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,wBAAsB,6BAA6B,CAAC,OAAO,EAAE;IAC3D,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC,MAAM,CAAC,CAwBlB;AAED,wBAAsB,wBAAwB,CAAC,OAAO,EAAE;IACtD,gBAAgB,EAAE,MAAM,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAezB;AAED,wBAAsB,6BAA6B,CAAC,OAAO,EAAE;IAC3D,gBAAgB,EAAE,MAAM,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,GAAG,OAAO,CAAC,8BAA8B,CAAC,CA6G1C"}
|
|
@@ -64,11 +64,12 @@ export async function resolveSessionContextSections(options) {
|
|
|
64
64
|
query: text,
|
|
65
65
|
sizeBudgetBytes: manifest.contract.contextResolution.sizeBudgetBytes,
|
|
66
66
|
});
|
|
67
|
-
|
|
67
|
+
const relevantItems = filterPromptRelevantItems(items, text);
|
|
68
|
+
if (relevantItems.length === 0)
|
|
68
69
|
continue;
|
|
69
70
|
sections.push([
|
|
70
71
|
`## ${provider.id} (${provider.provider})`,
|
|
71
|
-
...
|
|
72
|
+
...relevantItems.map((item) => [`### ${item.title}`, item.body].join('\n')),
|
|
72
73
|
].join('\n\n'));
|
|
73
74
|
}
|
|
74
75
|
const requestedContexts = manifest.resources.contexts;
|
|
@@ -95,23 +96,15 @@ export async function resolveSessionContextSections(options) {
|
|
|
95
96
|
workspaceId,
|
|
96
97
|
actorName: record.deviceName,
|
|
97
98
|
});
|
|
98
|
-
|
|
99
|
+
const bundle = await resolveContextBundle({
|
|
99
100
|
contextResourceId: context.id,
|
|
100
101
|
actorName: record.deviceName,
|
|
101
102
|
query: text,
|
|
102
103
|
maxItems: options.maxVaultItems ?? MAX_VAULT_PROMPT_ITEMS,
|
|
103
104
|
includePrivate: false,
|
|
104
105
|
});
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
contextResourceId: context.id,
|
|
108
|
-
actorName: record.deviceName,
|
|
109
|
-
query: '',
|
|
110
|
-
maxItems: options.maxVaultItems ?? MAX_VAULT_PROMPT_ITEMS,
|
|
111
|
-
includePrivate: false,
|
|
112
|
-
});
|
|
113
|
-
}
|
|
114
|
-
const contextSections = bundle.items.map((item) => [`### ${item.title}`, `Trust: ${item.trustState}`, item.body].join('\n'));
|
|
106
|
+
const relevantItems = filterPromptRelevantItems(bundle.items, text);
|
|
107
|
+
const contextSections = relevantItems.map((item) => [`### ${item.title}`, `Trust: ${item.trustState}`, item.body].join('\n'));
|
|
115
108
|
if (options.includePendingLocal) {
|
|
116
109
|
const pending = await listLocalPendingContextCandidates({
|
|
117
110
|
contextResourceId: context.id,
|
|
@@ -153,4 +146,68 @@ function contextGuidanceLines(useWhen, updateWhen) {
|
|
|
153
146
|
lines.push(`Propose an update when: ${update}`);
|
|
154
147
|
return lines;
|
|
155
148
|
}
|
|
149
|
+
const CONTEXT_STOPWORDS = new Set([
|
|
150
|
+
'about',
|
|
151
|
+
'after',
|
|
152
|
+
'again',
|
|
153
|
+
'also',
|
|
154
|
+
'and',
|
|
155
|
+
'are',
|
|
156
|
+
'been',
|
|
157
|
+
'because',
|
|
158
|
+
'before',
|
|
159
|
+
'being',
|
|
160
|
+
'below',
|
|
161
|
+
'context',
|
|
162
|
+
'could',
|
|
163
|
+
'does',
|
|
164
|
+
'done',
|
|
165
|
+
'down',
|
|
166
|
+
'from',
|
|
167
|
+
'have',
|
|
168
|
+
'into',
|
|
169
|
+
'just',
|
|
170
|
+
'like',
|
|
171
|
+
'more',
|
|
172
|
+
'need',
|
|
173
|
+
'only',
|
|
174
|
+
'repo',
|
|
175
|
+
'should',
|
|
176
|
+
'shows',
|
|
177
|
+
'than',
|
|
178
|
+
'that',
|
|
179
|
+
'then',
|
|
180
|
+
'there',
|
|
181
|
+
'they',
|
|
182
|
+
'this',
|
|
183
|
+
'time',
|
|
184
|
+
'vault',
|
|
185
|
+
'viewport',
|
|
186
|
+
'will',
|
|
187
|
+
'what',
|
|
188
|
+
'when',
|
|
189
|
+
'where',
|
|
190
|
+
'with',
|
|
191
|
+
'would',
|
|
192
|
+
]);
|
|
193
|
+
function filterPromptRelevantItems(items, query) {
|
|
194
|
+
const tokens = meaningfulContextTokens(query);
|
|
195
|
+
if (tokens.length === 0)
|
|
196
|
+
return [];
|
|
197
|
+
return items.filter((item) => {
|
|
198
|
+
const haystack = new Set(tokenizeContextText(`${item.title}\n${item.body}`));
|
|
199
|
+
return tokens.some((token) => haystack.has(token) ||
|
|
200
|
+
haystack.has(singularContextToken(token)) ||
|
|
201
|
+
haystack.has(`${token}s`));
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
function meaningfulContextTokens(value) {
|
|
205
|
+
return tokenizeContextText(value).filter((token) => token.length >= 4 && !/^\d+$/.test(token) && !CONTEXT_STOPWORDS.has(token));
|
|
206
|
+
}
|
|
207
|
+
function tokenizeContextText(value) {
|
|
208
|
+
return value.toLowerCase().match(/[a-z0-9]+/g) ?? [];
|
|
209
|
+
}
|
|
210
|
+
function singularContextToken(token) {
|
|
211
|
+
return token.endsWith('s') && token.length > 4 ? token.slice(0, -1) : token;
|
|
212
|
+
}
|
|
156
213
|
//# sourceMappingURL=session-context-prompt.js.map
|