indusagi-coding-agent 0.1.42 → 0.1.44
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +23 -3
- package/README.md +3 -0
- package/dist/command-line/args.js +1 -1
- package/dist/command-line/args.js.map +1 -1
- package/dist/command-line/list-models.js +1 -1
- package/dist/command-line/list-models.js.map +1 -1
- package/dist/command-line/login-handler.d.ts.map +1 -1
- package/dist/command-line/login-handler.js +39 -0
- package/dist/command-line/login-handler.js.map +1 -1
- package/dist/dev/observe-deep.d.ts +2 -0
- package/dist/dev/observe-deep.d.ts.map +1 -0
- package/dist/dev/observe-deep.js +333 -0
- package/dist/dev/observe-deep.js.map +1 -0
- package/dist/dev/observe-smoke.d.ts +2 -0
- package/dist/dev/observe-smoke.d.ts.map +1 -0
- package/dist/dev/observe-smoke.js +264 -0
- package/dist/dev/observe-smoke.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/interfaces/induscode-ui-delegate.d.ts +3 -0
- package/dist/interfaces/induscode-ui-delegate.d.ts.map +1 -0
- package/dist/interfaces/induscode-ui-delegate.js +148 -0
- package/dist/interfaces/induscode-ui-delegate.js.map +1 -0
- package/dist/interfaces/terminal-ui/components/footer.d.ts.map +1 -1
- package/dist/interfaces/terminal-ui/components/footer.js +9 -15
- package/dist/interfaces/terminal-ui/components/footer.js.map +1 -1
- package/dist/interfaces/terminal-ui/components/model-selector.d.ts.map +1 -1
- package/dist/interfaces/terminal-ui/components/model-selector.js +1 -1
- package/dist/interfaces/terminal-ui/components/model-selector.js.map +1 -1
- package/dist/interfaces/terminal-ui/components/oauth-selector.d.ts.map +1 -1
- package/dist/interfaces/terminal-ui/components/oauth-selector.js +1 -0
- package/dist/interfaces/terminal-ui/components/oauth-selector.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +42 -18
- package/dist/main.js.map +1 -1
- package/dist/observe.d.ts +2 -0
- package/dist/observe.d.ts.map +1 -0
- package/dist/observe.js +2 -0
- package/dist/observe.js.map +1 -0
- package/dist/runtime/agent-session.d.ts +15 -0
- package/dist/runtime/agent-session.d.ts.map +1 -1
- package/dist/runtime/agent-session.js +444 -223
- package/dist/runtime/agent-session.js.map +1 -1
- package/dist/runtime/index.d.ts +5 -0
- package/dist/runtime/index.d.ts.map +1 -1
- package/dist/runtime/index.js +5 -0
- package/dist/runtime/index.js.map +1 -1
- package/dist/runtime/model-registry.d.ts +6 -0
- package/dist/runtime/model-registry.d.ts.map +1 -1
- package/dist/runtime/model-registry.js +71 -14
- package/dist/runtime/model-registry.js.map +1 -1
- package/dist/runtime/model-resolver.d.ts.map +1 -1
- package/dist/runtime/model-resolver.js +6 -3
- package/dist/runtime/model-resolver.js.map +1 -1
- package/dist/runtime/observe.d.ts +50 -0
- package/dist/runtime/observe.d.ts.map +1 -0
- package/dist/runtime/observe.js +233 -0
- package/dist/runtime/observe.js.map +1 -0
- package/dist/runtime/plugins/types.d.ts +3 -0
- package/dist/runtime/plugins/types.d.ts.map +1 -1
- package/dist/runtime/plugins/types.js.map +1 -1
- package/dist/runtime/providers/adapters/claude-cli-adapter.d.ts +19 -0
- package/dist/runtime/providers/adapters/claude-cli-adapter.d.ts.map +1 -0
- package/dist/runtime/providers/adapters/claude-cli-adapter.js +242 -0
- package/dist/runtime/providers/adapters/claude-cli-adapter.js.map +1 -0
- package/dist/runtime/providers/adapters/codex-cli-adapter.d.ts +18 -0
- package/dist/runtime/providers/adapters/codex-cli-adapter.d.ts.map +1 -0
- package/dist/runtime/providers/adapters/codex-cli-adapter.js +177 -0
- package/dist/runtime/providers/adapters/codex-cli-adapter.js.map +1 -0
- package/dist/runtime/providers/adapters/indusagi-cli-adapter.d.ts +21 -0
- package/dist/runtime/providers/adapters/indusagi-cli-adapter.d.ts.map +1 -0
- package/dist/runtime/providers/adapters/indusagi-cli-adapter.js +162 -0
- package/dist/runtime/providers/adapters/indusagi-cli-adapter.js.map +1 -0
- package/dist/runtime/providers/adapters/utils.d.ts +12 -0
- package/dist/runtime/providers/adapters/utils.d.ts.map +1 -0
- package/dist/runtime/providers/adapters/utils.js +122 -0
- package/dist/runtime/providers/adapters/utils.js.map +1 -0
- package/dist/runtime/providers/builtins.d.ts +3 -0
- package/dist/runtime/providers/builtins.d.ts.map +1 -0
- package/dist/runtime/providers/builtins.js +99 -0
- package/dist/runtime/providers/builtins.js.map +1 -0
- package/dist/runtime/providers/provider-adapter-registry.d.ts +11 -0
- package/dist/runtime/providers/provider-adapter-registry.d.ts.map +1 -0
- package/dist/runtime/providers/provider-adapter-registry.js +36 -0
- package/dist/runtime/providers/provider-adapter-registry.js.map +1 -0
- package/dist/runtime/providers/provider-adapter.d.ts +33 -0
- package/dist/runtime/providers/provider-adapter.d.ts.map +1 -0
- package/dist/runtime/providers/provider-adapter.js +2 -0
- package/dist/runtime/providers/provider-adapter.js.map +1 -0
- package/dist/runtime/providers/provider-service.d.ts +33 -0
- package/dist/runtime/providers/provider-service.d.ts.map +1 -0
- package/dist/runtime/providers/provider-service.js +157 -0
- package/dist/runtime/providers/provider-service.js.map +1 -0
- package/dist/runtime/providers/types.d.ts +29 -0
- package/dist/runtime/providers/types.d.ts.map +1 -0
- package/dist/runtime/providers/types.js +9 -0
- package/dist/runtime/providers/types.js.map +1 -0
- package/dist/runtime/sdk.d.ts +6 -0
- package/dist/runtime/sdk.d.ts.map +1 -1
- package/dist/runtime/sdk.js +55 -8
- package/dist/runtime/sdk.js.map +1 -1
- package/dist/telemetry/core/types.d.ts +1 -1
- package/dist/telemetry/core/types.js +1 -1
- package/dist/vendor/observe/adapters/agent-event-adapter.d.ts +28 -0
- package/dist/vendor/observe/adapters/agent-event-adapter.d.ts.map +1 -0
- package/dist/vendor/observe/adapters/agent-event-adapter.js +136 -0
- package/dist/vendor/observe/adapters/agent-event-adapter.js.map +1 -0
- package/dist/vendor/observe/adapters/ai-stream-adapter.d.ts +24 -0
- package/dist/vendor/observe/adapters/ai-stream-adapter.d.ts.map +1 -0
- package/dist/vendor/observe/adapters/ai-stream-adapter.js +118 -0
- package/dist/vendor/observe/adapters/ai-stream-adapter.js.map +1 -0
- package/dist/vendor/observe/artifacts/content-store.d.ts +12 -0
- package/dist/vendor/observe/artifacts/content-store.d.ts.map +1 -0
- package/dist/vendor/observe/artifacts/content-store.js +2 -0
- package/dist/vendor/observe/artifacts/content-store.js.map +1 -0
- package/dist/vendor/observe/artifacts/file-content-store.d.ts +16 -0
- package/dist/vendor/observe/artifacts/file-content-store.d.ts.map +1 -0
- package/dist/vendor/observe/artifacts/file-content-store.js +43 -0
- package/dist/vendor/observe/artifacts/file-content-store.js.map +1 -0
- package/dist/vendor/observe/batcher.d.ts +27 -0
- package/dist/vendor/observe/batcher.d.ts.map +1 -0
- package/dist/vendor/observe/batcher.js +66 -0
- package/dist/vendor/observe/batcher.js.map +1 -0
- package/dist/vendor/observe/client/artifacts-manager.d.ts +29 -0
- package/dist/vendor/observe/client/artifacts-manager.d.ts.map +1 -0
- package/dist/vendor/observe/client/artifacts-manager.js +120 -0
- package/dist/vendor/observe/client/artifacts-manager.js.map +1 -0
- package/dist/vendor/observe/client/datasets-manager.d.ts +16 -0
- package/dist/vendor/observe/client/datasets-manager.d.ts.map +1 -0
- package/dist/vendor/observe/client/datasets-manager.js +27 -0
- package/dist/vendor/observe/client/datasets-manager.js.map +1 -0
- package/dist/vendor/observe/client/experiments-manager.d.ts +61 -0
- package/dist/vendor/observe/client/experiments-manager.d.ts.map +1 -0
- package/dist/vendor/observe/client/experiments-manager.js +132 -0
- package/dist/vendor/observe/client/experiments-manager.js.map +1 -0
- package/dist/vendor/observe/client/index.d.ts +9 -0
- package/dist/vendor/observe/client/index.d.ts.map +1 -0
- package/dist/vendor/observe/client/index.js +9 -0
- package/dist/vendor/observe/client/index.js.map +1 -0
- package/dist/vendor/observe/client/observe-client.d.ts +30 -0
- package/dist/vendor/observe/client/observe-client.d.ts.map +1 -0
- package/dist/vendor/observe/client/observe-client.js +22 -0
- package/dist/vendor/observe/client/observe-client.js.map +1 -0
- package/dist/vendor/observe/client/prompts-manager.d.ts +17 -0
- package/dist/vendor/observe/client/prompts-manager.d.ts.map +1 -0
- package/dist/vendor/observe/client/prompts-manager.js +38 -0
- package/dist/vendor/observe/client/prompts-manager.js.map +1 -0
- package/dist/vendor/observe/client/scores-manager.d.ts +10 -0
- package/dist/vendor/observe/client/scores-manager.d.ts.map +1 -0
- package/dist/vendor/observe/client/scores-manager.js +15 -0
- package/dist/vendor/observe/client/scores-manager.js.map +1 -0
- package/dist/vendor/observe/client/sessions-manager.d.ts +15 -0
- package/dist/vendor/observe/client/sessions-manager.d.ts.map +1 -0
- package/dist/vendor/observe/client/sessions-manager.js +24 -0
- package/dist/vendor/observe/client/sessions-manager.js.map +1 -0
- package/dist/vendor/observe/client/traces-manager.d.ts +23 -0
- package/dist/vendor/observe/client/traces-manager.d.ts.map +1 -0
- package/dist/vendor/observe/client/traces-manager.js +39 -0
- package/dist/vendor/observe/client/traces-manager.js.map +1 -0
- package/dist/vendor/observe/console-exporter.d.ts +11 -0
- package/dist/vendor/observe/console-exporter.d.ts.map +1 -0
- package/dist/vendor/observe/console-exporter.js +18 -0
- package/dist/vendor/observe/console-exporter.js.map +1 -0
- package/dist/vendor/observe/context.d.ts +4 -0
- package/dist/vendor/observe/context.d.ts.map +1 -0
- package/dist/vendor/observe/context.js +9 -0
- package/dist/vendor/observe/context.js.map +1 -0
- package/dist/vendor/observe/entities/artifacts.d.ts +46 -0
- package/dist/vendor/observe/entities/artifacts.d.ts.map +1 -0
- package/dist/vendor/observe/entities/artifacts.js +2 -0
- package/dist/vendor/observe/entities/artifacts.js.map +1 -0
- package/dist/vendor/observe/entities/datasets.d.ts +37 -0
- package/dist/vendor/observe/entities/datasets.d.ts.map +1 -0
- package/dist/vendor/observe/entities/datasets.js +2 -0
- package/dist/vendor/observe/entities/datasets.js.map +1 -0
- package/dist/vendor/observe/entities/experiments.d.ts +66 -0
- package/dist/vendor/observe/entities/experiments.d.ts.map +1 -0
- package/dist/vendor/observe/entities/experiments.js +2 -0
- package/dist/vendor/observe/entities/experiments.js.map +1 -0
- package/dist/vendor/observe/entities/index.d.ts +9 -0
- package/dist/vendor/observe/entities/index.d.ts.map +1 -0
- package/dist/vendor/observe/entities/index.js +9 -0
- package/dist/vendor/observe/entities/index.js.map +1 -0
- package/dist/vendor/observe/entities/prompts.d.ts +25 -0
- package/dist/vendor/observe/entities/prompts.d.ts.map +1 -0
- package/dist/vendor/observe/entities/prompts.js +2 -0
- package/dist/vendor/observe/entities/prompts.js.map +1 -0
- package/dist/vendor/observe/entities/scores.d.ts +28 -0
- package/dist/vendor/observe/entities/scores.d.ts.map +1 -0
- package/dist/vendor/observe/entities/scores.js +2 -0
- package/dist/vendor/observe/entities/scores.js.map +1 -0
- package/dist/vendor/observe/entities/sessions.d.ts +36 -0
- package/dist/vendor/observe/entities/sessions.d.ts.map +1 -0
- package/dist/vendor/observe/entities/sessions.js +2 -0
- package/dist/vendor/observe/entities/sessions.js.map +1 -0
- package/dist/vendor/observe/entities/shared.d.ts +26 -0
- package/dist/vendor/observe/entities/shared.d.ts.map +1 -0
- package/dist/vendor/observe/entities/shared.js +2 -0
- package/dist/vendor/observe/entities/shared.js.map +1 -0
- package/dist/vendor/observe/entities/traces.d.ts +59 -0
- package/dist/vendor/observe/entities/traces.d.ts.map +1 -0
- package/dist/vendor/observe/entities/traces.js +2 -0
- package/dist/vendor/observe/entities/traces.js.map +1 -0
- package/dist/vendor/observe/exporter.d.ts +2 -0
- package/dist/vendor/observe/exporter.d.ts.map +1 -0
- package/dist/vendor/observe/exporter.js +2 -0
- package/dist/vendor/observe/exporter.js.map +1 -0
- package/dist/vendor/observe/file-exporter.d.ts +16 -0
- package/dist/vendor/observe/file-exporter.d.ts.map +1 -0
- package/dist/vendor/observe/file-exporter.js +39 -0
- package/dist/vendor/observe/file-exporter.js.map +1 -0
- package/dist/vendor/observe/global.d.ts +6 -0
- package/dist/vendor/observe/global.d.ts.map +1 -0
- package/dist/vendor/observe/global.js +17 -0
- package/dist/vendor/observe/global.js.map +1 -0
- package/dist/vendor/observe/index.d.ts +24 -0
- package/dist/vendor/observe/index.d.ts.map +1 -0
- package/dist/vendor/observe/index.js +24 -0
- package/dist/vendor/observe/index.js.map +1 -0
- package/dist/vendor/observe/noop.d.ts +17 -0
- package/dist/vendor/observe/noop.d.ts.map +1 -0
- package/dist/vendor/observe/noop.js +80 -0
- package/dist/vendor/observe/noop.js.map +1 -0
- package/dist/vendor/observe/privacy.d.ts +18 -0
- package/dist/vendor/observe/privacy.d.ts.map +1 -0
- package/dist/vendor/observe/privacy.js +160 -0
- package/dist/vendor/observe/privacy.js.map +1 -0
- package/dist/vendor/observe/query/simple-query-client.d.ts +11 -0
- package/dist/vendor/observe/query/simple-query-client.d.ts.map +1 -0
- package/dist/vendor/observe/query/simple-query-client.js +31 -0
- package/dist/vendor/observe/query/simple-query-client.js.map +1 -0
- package/dist/vendor/observe/replay/session-replay.d.ts +20 -0
- package/dist/vendor/observe/replay/session-replay.d.ts.map +1 -0
- package/dist/vendor/observe/replay/session-replay.js +180 -0
- package/dist/vendor/observe/replay/session-replay.js.map +1 -0
- package/dist/vendor/observe/runtime.d.ts +27 -0
- package/dist/vendor/observe/runtime.d.ts.map +1 -0
- package/dist/vendor/observe/runtime.js +177 -0
- package/dist/vendor/observe/runtime.js.map +1 -0
- package/dist/vendor/observe/server/dashboard-html.d.ts +6 -0
- package/dist/vendor/observe/server/dashboard-html.d.ts.map +1 -0
- package/dist/vendor/observe/server/dashboard-html.js +305 -0
- package/dist/vendor/observe/server/dashboard-html.js.map +1 -0
- package/dist/vendor/observe/server/http-observe-server.d.ts +62 -0
- package/dist/vendor/observe/server/http-observe-server.d.ts.map +1 -0
- package/dist/vendor/observe/server/http-observe-server.js +418 -0
- package/dist/vendor/observe/server/http-observe-server.js.map +1 -0
- package/dist/vendor/observe/server/in-memory-observe-server.d.ts +20 -0
- package/dist/vendor/observe/server/in-memory-observe-server.d.ts.map +1 -0
- package/dist/vendor/observe/server/in-memory-observe-server.js +76 -0
- package/dist/vendor/observe/server/in-memory-observe-server.js.map +1 -0
- package/dist/vendor/observe/span.d.ts +45 -0
- package/dist/vendor/observe/span.d.ts.map +1 -0
- package/dist/vendor/observe/span.js +110 -0
- package/dist/vendor/observe/span.js.map +1 -0
- package/dist/vendor/observe/store/contracts.d.ts +59 -0
- package/dist/vendor/observe/store/contracts.d.ts.map +1 -0
- package/dist/vendor/observe/store/contracts.js +2 -0
- package/dist/vendor/observe/store/contracts.js.map +1 -0
- package/dist/vendor/observe/store/file-control-plane-store.d.ts +33 -0
- package/dist/vendor/observe/store/file-control-plane-store.d.ts.map +1 -0
- package/dist/vendor/observe/store/file-control-plane-store.js +146 -0
- package/dist/vendor/observe/store/file-control-plane-store.js.map +1 -0
- package/dist/vendor/observe/store/in-memory-control-plane-store.d.ts +84 -0
- package/dist/vendor/observe/store/in-memory-control-plane-store.d.ts.map +1 -0
- package/dist/vendor/observe/store/in-memory-control-plane-store.js +447 -0
- package/dist/vendor/observe/store/in-memory-control-plane-store.js.map +1 -0
- package/dist/vendor/observe/store/index.d.ts +4 -0
- package/dist/vendor/observe/store/index.d.ts.map +1 -0
- package/dist/vendor/observe/store/index.js +4 -0
- package/dist/vendor/observe/store/index.js.map +1 -0
- package/dist/vendor/observe/types.d.ts +246 -0
- package/dist/vendor/observe/types.d.ts.map +1 -0
- package/dist/vendor/observe/types.js +152 -0
- package/dist/vendor/observe/types.js.map +1 -0
- package/dist/vendor/observe/worker/in-memory-observe-worker.d.ts +25 -0
- package/dist/vendor/observe/worker/in-memory-observe-worker.d.ts.map +1 -0
- package/dist/vendor/observe/worker/in-memory-observe-worker.js +82 -0
- package/dist/vendor/observe/worker/in-memory-observe-worker.js.map +1 -0
- package/guides/CLAUDE_CODEX_CLI_INTEGRATION_PLAN.md +321 -0
- package/guides/{PI_MONO_MIT_REMOVAL_GUIDE.md → INDUSAGI_MONO_MIT_REMOVAL_GUIDE.md} +29 -29
- package/guides/INDUSVX_OBSERVE_FULL_INTEGRATION_REPORT.md +543 -0
- package/guides/OBSERVE_DEEP_VALIDATION.md +252 -0
- package/guides/OBSERVE_LOCAL_TESTING.md +183 -0
- package/guides/OPTION3_PROVIDER_ADAPTER_RUNTIME_PLAN.md +370 -0
- package/package.json +11 -4
|
@@ -0,0 +1,333 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
2
|
+
import { readdir } from "node:fs/promises";
|
|
3
|
+
import { join, resolve } from "node:path";
|
|
4
|
+
import { createAssistantMessage, createAssistantMessageEventStream, getModel, } from "indusagi/ai";
|
|
5
|
+
import { AuthStorage } from "../runtime/auth-storage.js";
|
|
6
|
+
import { ModelRegistry } from "../runtime/model-registry.js";
|
|
7
|
+
import { createAppObserveContext } from "../runtime/observe.js";
|
|
8
|
+
import { createAgentSession } from "../runtime/sdk.js";
|
|
9
|
+
function createTimestamp() {
|
|
10
|
+
return new Date().toISOString().replace(/[:.]/g, "-");
|
|
11
|
+
}
|
|
12
|
+
function createWorkspace(outputRoot) {
|
|
13
|
+
const workspace = join(outputRoot, "workspace");
|
|
14
|
+
mkdirSync(join(workspace, "src"), { recursive: true });
|
|
15
|
+
writeFileSync(join(workspace, "package.json"), JSON.stringify({
|
|
16
|
+
name: "observe-deep-workspace",
|
|
17
|
+
version: "1.0.0",
|
|
18
|
+
type: "module",
|
|
19
|
+
scripts: {
|
|
20
|
+
check: "node src/index.ts",
|
|
21
|
+
},
|
|
22
|
+
}, null, 2));
|
|
23
|
+
writeFileSync(join(workspace, "README.md"), "# Observe Deep Validation Workspace\n\nThis workspace is generated by the deep Observe validation harness.\n");
|
|
24
|
+
writeFileSync(join(workspace, "src", "index.ts"), [
|
|
25
|
+
"export const APP_NAME = \"observe-deep-test\";",
|
|
26
|
+
"export function describeApp(): string {",
|
|
27
|
+
" return `workspace:${APP_NAME}`;",
|
|
28
|
+
"}",
|
|
29
|
+
"",
|
|
30
|
+
].join("\n"));
|
|
31
|
+
return workspace;
|
|
32
|
+
}
|
|
33
|
+
function createDeepToolStreamFn(model) {
|
|
34
|
+
let turn = 0;
|
|
35
|
+
return async () => {
|
|
36
|
+
const stream = createAssistantMessageEventStream();
|
|
37
|
+
queueMicrotask(() => {
|
|
38
|
+
if (turn === 0) {
|
|
39
|
+
stream.push({
|
|
40
|
+
type: "done",
|
|
41
|
+
reason: "toolUse",
|
|
42
|
+
message: createAssistantMessage({
|
|
43
|
+
api: model.api,
|
|
44
|
+
provider: model.provider,
|
|
45
|
+
model: model.id,
|
|
46
|
+
stopReason: "toolUse",
|
|
47
|
+
content: [
|
|
48
|
+
{
|
|
49
|
+
type: "toolCall",
|
|
50
|
+
id: "read-pkg",
|
|
51
|
+
name: "read",
|
|
52
|
+
arguments: { path: "package.json" },
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
type: "toolCall",
|
|
56
|
+
id: "read-src-index",
|
|
57
|
+
name: "read",
|
|
58
|
+
arguments: { path: "src/index.ts" },
|
|
59
|
+
},
|
|
60
|
+
],
|
|
61
|
+
}),
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
else if (turn === 1) {
|
|
65
|
+
stream.push({
|
|
66
|
+
type: "done",
|
|
67
|
+
reason: "toolUse",
|
|
68
|
+
message: createAssistantMessage({
|
|
69
|
+
api: model.api,
|
|
70
|
+
provider: model.provider,
|
|
71
|
+
model: model.id,
|
|
72
|
+
stopReason: "toolUse",
|
|
73
|
+
content: [
|
|
74
|
+
{
|
|
75
|
+
type: "toolCall",
|
|
76
|
+
id: "write-generated-report",
|
|
77
|
+
name: "write",
|
|
78
|
+
arguments: {
|
|
79
|
+
path: "reports/generated-report.md",
|
|
80
|
+
content: "# Generated Report\n\nThis file was created by the deep Observe validation harness.\n",
|
|
81
|
+
},
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
type: "toolCall",
|
|
85
|
+
id: "edit-src-index",
|
|
86
|
+
name: "edit",
|
|
87
|
+
arguments: {
|
|
88
|
+
path: "src/index.ts",
|
|
89
|
+
oldText: 'export const APP_NAME = "observe-deep-test";',
|
|
90
|
+
newText: 'export const APP_NAME = "observe-deep-test-updated";',
|
|
91
|
+
},
|
|
92
|
+
},
|
|
93
|
+
],
|
|
94
|
+
}),
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
stream.push({
|
|
99
|
+
type: "done",
|
|
100
|
+
reason: "stop",
|
|
101
|
+
message: createAssistantMessage({
|
|
102
|
+
api: model.api,
|
|
103
|
+
provider: model.provider,
|
|
104
|
+
model: model.id,
|
|
105
|
+
stopReason: "stop",
|
|
106
|
+
content: [
|
|
107
|
+
{
|
|
108
|
+
type: "text",
|
|
109
|
+
text: "Deep validation complete. I inspected the workspace, created a generated report, and updated src/index.ts.",
|
|
110
|
+
},
|
|
111
|
+
],
|
|
112
|
+
}),
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
turn += 1;
|
|
116
|
+
});
|
|
117
|
+
return stream;
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
async function fetchJson(url) {
|
|
121
|
+
const response = await fetch(url);
|
|
122
|
+
return response.json();
|
|
123
|
+
}
|
|
124
|
+
async function main() {
|
|
125
|
+
const repoRoot = resolve(process.cwd());
|
|
126
|
+
const timestamp = createTimestamp();
|
|
127
|
+
const outputRoot = join(repoRoot, ".indusagi", "observe-deep", timestamp);
|
|
128
|
+
const agentDir = join(outputRoot, "agent");
|
|
129
|
+
mkdirSync(outputRoot, { recursive: true });
|
|
130
|
+
mkdirSync(agentDir, { recursive: true });
|
|
131
|
+
const workspace = createWorkspace(outputRoot);
|
|
132
|
+
const observe = await createAppObserveContext({ agentDir, cwd: workspace });
|
|
133
|
+
if (!observe) {
|
|
134
|
+
throw new Error("Observe context did not initialize");
|
|
135
|
+
}
|
|
136
|
+
const authStorage = new AuthStorage(agentDir);
|
|
137
|
+
authStorage.setRuntimeApiKey("mock", "mock-api-key");
|
|
138
|
+
const modelRegistry = new ModelRegistry(authStorage, join(agentDir, "models.json"));
|
|
139
|
+
const model = getModel("mock", "mock-default");
|
|
140
|
+
const publishedPrompt = await observe.client.prompts.publish({
|
|
141
|
+
name: `observe-deep-prompt-${timestamp}`,
|
|
142
|
+
version: "v1",
|
|
143
|
+
labels: ["deep", "local"],
|
|
144
|
+
template: "Inspect the workspace, use tools, and improve it.",
|
|
145
|
+
metadata: { workspace },
|
|
146
|
+
});
|
|
147
|
+
const { session } = await createAgentSession({
|
|
148
|
+
cwd: workspace,
|
|
149
|
+
agentDir,
|
|
150
|
+
authStorage,
|
|
151
|
+
modelRegistry,
|
|
152
|
+
model,
|
|
153
|
+
observe,
|
|
154
|
+
});
|
|
155
|
+
const originalSessionFile = session.sessionFile;
|
|
156
|
+
const observedStreamFn = session.agent.streamFn;
|
|
157
|
+
session.agent.streamFn = createDeepToolStreamFn(model);
|
|
158
|
+
await session.prompt("Inspect the generated workspace and apply one useful improvement.");
|
|
159
|
+
await observe.runtime.flush();
|
|
160
|
+
session.agent.streamFn = observedStreamFn;
|
|
161
|
+
await session.prompt("Give a one-line final summary of the workspace state.");
|
|
162
|
+
await session.executeBash("pwd && ls -R", undefined, { excludeFromContext: false });
|
|
163
|
+
const firstUserEntry = session.sessionManager
|
|
164
|
+
.getEntries()
|
|
165
|
+
.find((entry) => entry.type === "message" && entry.message.role === "user");
|
|
166
|
+
if (firstUserEntry) {
|
|
167
|
+
await session.fork(firstUserEntry.id);
|
|
168
|
+
}
|
|
169
|
+
if (originalSessionFile && existsSync(originalSessionFile)) {
|
|
170
|
+
await session.switchSession(originalSessionFile);
|
|
171
|
+
}
|
|
172
|
+
await session.newSession();
|
|
173
|
+
await observe.runtime.trace({
|
|
174
|
+
name: "privacy-probe",
|
|
175
|
+
kind: "custom",
|
|
176
|
+
attributes: { sessionId: session.getSessionId(), probe: true },
|
|
177
|
+
}, async (span) => {
|
|
178
|
+
span.addEvent({
|
|
179
|
+
name: "privacy-probe-event",
|
|
180
|
+
kind: "annotation",
|
|
181
|
+
data: {
|
|
182
|
+
apiKey: "sk-super-secret-123",
|
|
183
|
+
token: "tok-secret-456",
|
|
184
|
+
password: "hunter2",
|
|
185
|
+
nested: { authorization: "Bearer secret-789" },
|
|
186
|
+
},
|
|
187
|
+
});
|
|
188
|
+
span.end({ output: { apiKey: "sk-super-secret-123", status: "probe-complete" } });
|
|
189
|
+
});
|
|
190
|
+
await observe.runtime.flush();
|
|
191
|
+
await observe.controlPlaneStore.flush();
|
|
192
|
+
const traces = await observe.client.traces.list();
|
|
193
|
+
const latestTrace = traces[traces.length - 1];
|
|
194
|
+
if (latestTrace) {
|
|
195
|
+
await observe.client.traces.update(latestTrace.id, {
|
|
196
|
+
promptId: publishedPrompt.id,
|
|
197
|
+
metadata: { validation: "deep", timestamp },
|
|
198
|
+
});
|
|
199
|
+
await observe.client.artifacts.attachExternalText({ kind: "trace", id: latestTrace.id }, "workspace-index-ts", readFileSync(join(workspace, "src", "index.ts"), "utf8"), { key: "workspace-index.ts", tags: ["deep", "workspace"] });
|
|
200
|
+
const dataset = await observe.client.datasets.create({
|
|
201
|
+
name: `observe-deep-dataset-${timestamp}`,
|
|
202
|
+
description: "Deep validation dataset",
|
|
203
|
+
});
|
|
204
|
+
const [datasetItem] = await observe.client.datasets.addItems(dataset.id, [
|
|
205
|
+
{
|
|
206
|
+
name: "workspace-rewrite",
|
|
207
|
+
input: { prompt: "Inspect workspace and improve it" },
|
|
208
|
+
expectedOutput: { fileUpdated: true, reportCreated: true },
|
|
209
|
+
sourceTraceId: latestTrace.id,
|
|
210
|
+
},
|
|
211
|
+
]);
|
|
212
|
+
const experiment = await observe.client.experiments.create({
|
|
213
|
+
name: `observe-deep-experiment-${timestamp}`,
|
|
214
|
+
datasetId: dataset.id,
|
|
215
|
+
promptId: publishedPrompt.id,
|
|
216
|
+
model: model.id,
|
|
217
|
+
provider: model.provider,
|
|
218
|
+
});
|
|
219
|
+
const run = await observe.client.experiments.startRun({
|
|
220
|
+
experimentId: experiment.id,
|
|
221
|
+
datasetItemId: datasetItem.id,
|
|
222
|
+
traceId: latestTrace.id,
|
|
223
|
+
});
|
|
224
|
+
await observe.client.experiments.finishRun(run.id, {
|
|
225
|
+
traceId: latestTrace.id,
|
|
226
|
+
result: { success: true, traceId: latestTrace.id },
|
|
227
|
+
});
|
|
228
|
+
await observe.client.scores.create({
|
|
229
|
+
target: { kind: "experiment_run", id: run.id },
|
|
230
|
+
key: "deep_validation_pass",
|
|
231
|
+
value: 1,
|
|
232
|
+
source: "system",
|
|
233
|
+
comment: "Deep Observe validation completed successfully",
|
|
234
|
+
});
|
|
235
|
+
}
|
|
236
|
+
await observe.controlPlaneStore.flush();
|
|
237
|
+
await observe.runtime.flush();
|
|
238
|
+
const baseUrl = observe.dashboardUrl?.replace(/\/ui$/, "") ?? "";
|
|
239
|
+
const health = baseUrl ? await fetchJson(`${baseUrl}/health`) : { ok: false };
|
|
240
|
+
const stats = baseUrl ? await fetchJson(`${baseUrl}/stats`) : {};
|
|
241
|
+
const recordsPage = baseUrl ? await fetchJson(`${baseUrl}/records?limit=100`) : { items: [] };
|
|
242
|
+
const tracePage = baseUrl ? await fetchJson(`${baseUrl}/control-plane/traces`) : { items: [] };
|
|
243
|
+
const artifactPage = baseUrl ? await fetchJson(`${baseUrl}/control-plane/artifacts`) : { items: [] };
|
|
244
|
+
const sessionPage = baseUrl ? await fetchJson(`${baseUrl}/control-plane/sessions`) : { items: [] };
|
|
245
|
+
const experimentPage = baseUrl ? await fetchJson(`${baseUrl}/control-plane/experiments`) : { items: [] };
|
|
246
|
+
const runtimeFiles = (await readdir(join(outputRoot, "agent", "observe", "runtime-records")).catch(async () => {
|
|
247
|
+
return readdir(join(agentDir, "observe", "runtime-records"));
|
|
248
|
+
})).map((name) => join(agentDir, "observe", "runtime-records", name));
|
|
249
|
+
const runtimeNdjson = runtimeFiles.map((file) => readFileSync(file, "utf8")).join("\n");
|
|
250
|
+
const controlPlaneRaw = readFileSync(join(agentDir, "observe", "control-plane.json"), "utf8");
|
|
251
|
+
const recordsRaw = JSON.stringify(recordsPage);
|
|
252
|
+
const workspaceIndexTs = readFileSync(join(workspace, "src", "index.ts"), "utf8");
|
|
253
|
+
const generatedReport = readFileSync(join(workspace, "reports", "generated-report.md"), "utf8");
|
|
254
|
+
const artifactFiles = await readdir(join(agentDir, "observe", "artifacts"));
|
|
255
|
+
const forbiddenSecrets = ["sk-super-secret-123", "tok-secret-456", "hunter2", "Bearer secret-789"];
|
|
256
|
+
const runtimeFileRedacted = forbiddenSecrets.every((secret) => !runtimeNdjson.includes(secret));
|
|
257
|
+
const apiResponseRedacted = forbiddenSecrets.every((secret) => !recordsRaw.includes(secret));
|
|
258
|
+
const controlPlaneRedacted = forbiddenSecrets.every((secret) => !controlPlaneRaw.includes(secret));
|
|
259
|
+
const summary = {
|
|
260
|
+
outputRoot,
|
|
261
|
+
workspace,
|
|
262
|
+
dashboardUrl: observe.dashboardUrl,
|
|
263
|
+
health,
|
|
264
|
+
stats,
|
|
265
|
+
recordCount: Array.isArray(recordsPage.items) ? recordsPage.items.length : 0,
|
|
266
|
+
traceCount: Array.isArray(tracePage.items) ? tracePage.items.length : 0,
|
|
267
|
+
sessionCount: Array.isArray(sessionPage.items) ? sessionPage.items.length : 0,
|
|
268
|
+
artifactCount: Array.isArray(artifactPage.items) ? artifactPage.items.length : 0,
|
|
269
|
+
experimentCount: Array.isArray(experimentPage.items) ? experimentPage.items.length : 0,
|
|
270
|
+
files: artifactFiles,
|
|
271
|
+
workspaceSnapshot: {
|
|
272
|
+
indexTs: workspaceIndexTs,
|
|
273
|
+
generatedReport,
|
|
274
|
+
},
|
|
275
|
+
privacy: {
|
|
276
|
+
runtimeFileRedacted,
|
|
277
|
+
apiResponseRedacted,
|
|
278
|
+
controlPlaneRedacted,
|
|
279
|
+
},
|
|
280
|
+
notes: [
|
|
281
|
+
"Deep test exercised package-based indusagi imports backed by local indusvx-screth.",
|
|
282
|
+
"Deep test covered session prompt flow, tool execution, explicit bash execution, fork, switch, new session, artifact creation, datasets, experiments, scores, HTTP endpoints, and privacy redaction.",
|
|
283
|
+
"MCP, TUI overlays, and subagent/task traces were not exercised in this harness.",
|
|
284
|
+
],
|
|
285
|
+
};
|
|
286
|
+
if (!runtimeFileRedacted || !apiResponseRedacted || !controlPlaneRedacted) {
|
|
287
|
+
throw new Error("Privacy redaction validation failed");
|
|
288
|
+
}
|
|
289
|
+
if (!Array.isArray(tracePage.items) || tracePage.items.length === 0) {
|
|
290
|
+
throw new Error("No control-plane traces found after deep validation");
|
|
291
|
+
}
|
|
292
|
+
if (!Array.isArray(artifactPage.items) || artifactPage.items.length === 0) {
|
|
293
|
+
throw new Error("No control-plane artifacts found after deep validation");
|
|
294
|
+
}
|
|
295
|
+
if (!generatedReport.includes("deep Observe validation harness")) {
|
|
296
|
+
throw new Error("Generated report file content validation failed");
|
|
297
|
+
}
|
|
298
|
+
if (!workspaceIndexTs.includes("observe-deep-test-updated")) {
|
|
299
|
+
throw new Error("Workspace edit validation failed");
|
|
300
|
+
}
|
|
301
|
+
writeFileSync(join(outputRoot, "summary.json"), JSON.stringify(summary, null, 2));
|
|
302
|
+
writeFileSync(join(outputRoot, "report.md"), [
|
|
303
|
+
"# Observe deep validation report",
|
|
304
|
+
"",
|
|
305
|
+
`- Output root: ${outputRoot}`,
|
|
306
|
+
`- Dashboard: ${observe.dashboardUrl ?? "n/a"}`,
|
|
307
|
+
`- Records queried: ${summary.recordCount}`,
|
|
308
|
+
`- Control-plane traces: ${summary.traceCount}`,
|
|
309
|
+
`- Control-plane sessions: ${summary.sessionCount}`,
|
|
310
|
+
`- Control-plane artifacts: ${summary.artifactCount}`,
|
|
311
|
+
`- Control-plane experiments: ${summary.experimentCount}`,
|
|
312
|
+
`- Privacy redaction: runtime=${summary.privacy.runtimeFileRedacted}, api=${summary.privacy.apiResponseRedacted}, control-plane=${summary.privacy.controlPlaneRedacted}`,
|
|
313
|
+
"",
|
|
314
|
+
"## Notes",
|
|
315
|
+
...summary.notes.map((note) => `- ${note}`),
|
|
316
|
+
].join("\n"));
|
|
317
|
+
console.log("Observe deep validation completed.");
|
|
318
|
+
console.log(`Output root: ${outputRoot}`);
|
|
319
|
+
console.log(`Dashboard: ${observe.dashboardUrl ?? "n/a"}`);
|
|
320
|
+
console.log(`Summary: ${join(outputRoot, "summary.json")}`);
|
|
321
|
+
console.log(`Report: ${join(outputRoot, "report.md")}`);
|
|
322
|
+
console.log(`Workspace: ${workspace}`);
|
|
323
|
+
console.log(`Health: ${JSON.stringify(health)}`);
|
|
324
|
+
console.log(`Stats: ${JSON.stringify(stats, null, 2)}`);
|
|
325
|
+
console.log(`Counts: ${JSON.stringify({ records: summary.recordCount, traces: summary.traceCount, sessions: summary.sessionCount, artifacts: summary.artifactCount, experiments: summary.experimentCount }, null, 2)}`);
|
|
326
|
+
await observe.shutdown();
|
|
327
|
+
}
|
|
328
|
+
main().catch((error) => {
|
|
329
|
+
console.error("Observe deep validation failed:");
|
|
330
|
+
console.error(error instanceof Error ? error.stack ?? error.message : error);
|
|
331
|
+
process.exit(1);
|
|
332
|
+
});
|
|
333
|
+
//# sourceMappingURL=observe-deep.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"observe-deep.js","sourceRoot":"","sources":["../../app/dev/observe-deep.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"observe-smoke.d.ts","sourceRoot":"","sources":["../../app/dev/observe-smoke.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
import { mkdirSync } from "node:fs";
|
|
2
|
+
import { access } from "node:fs/promises";
|
|
3
|
+
import { join, resolve } from "node:path";
|
|
4
|
+
import { pathToFileURL } from "node:url";
|
|
5
|
+
class ObserveMirrorExporter {
|
|
6
|
+
constructor(queryBackend, controlPlaneStore, sessionId) {
|
|
7
|
+
this.queryBackend = queryBackend;
|
|
8
|
+
this.controlPlaneStore = controlPlaneStore;
|
|
9
|
+
this.sessionId = sessionId;
|
|
10
|
+
}
|
|
11
|
+
async export(batch) {
|
|
12
|
+
await this.queryBackend.appendMany(batch.records);
|
|
13
|
+
for (const record of batch.records) {
|
|
14
|
+
if (record.recordType !== "trace")
|
|
15
|
+
continue;
|
|
16
|
+
await this.controlPlaneStore.traces.ingest({
|
|
17
|
+
sessionId: this.sessionId,
|
|
18
|
+
record,
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
function createTimestamp() {
|
|
24
|
+
return new Date().toISOString().replace(/[:.]/g, "-");
|
|
25
|
+
}
|
|
26
|
+
function hasFlag(flag) {
|
|
27
|
+
return process.argv.includes(flag);
|
|
28
|
+
}
|
|
29
|
+
async function ensureFileExists(path) {
|
|
30
|
+
try {
|
|
31
|
+
await access(path);
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
throw new Error(`Required file not found: ${path}`);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
async function loadBuiltIndusagi(repoRoot) {
|
|
38
|
+
const distRoot = resolve(repoRoot, "dist");
|
|
39
|
+
const agentPath = join(distRoot, "agent.js");
|
|
40
|
+
const aiPath = join(distRoot, "ai.js");
|
|
41
|
+
const observePath = join(distRoot, "observe.js");
|
|
42
|
+
await Promise.all([ensureFileExists(agentPath), ensureFileExists(aiPath), ensureFileExists(observePath)]);
|
|
43
|
+
const [agent, ai, observe] = await Promise.all([
|
|
44
|
+
import(pathToFileURL(agentPath).href),
|
|
45
|
+
import(pathToFileURL(aiPath).href),
|
|
46
|
+
import(pathToFileURL(observePath).href),
|
|
47
|
+
]);
|
|
48
|
+
return { agent, ai, observe };
|
|
49
|
+
}
|
|
50
|
+
function createSmokeStreamFn(ai, model) {
|
|
51
|
+
const { createAssistantMessageEventStream, createAssistantMessage } = ai;
|
|
52
|
+
let turn = 0;
|
|
53
|
+
return () => {
|
|
54
|
+
const stream = createAssistantMessageEventStream();
|
|
55
|
+
queueMicrotask(() => {
|
|
56
|
+
if (turn === 0) {
|
|
57
|
+
const first = createAssistantMessage({
|
|
58
|
+
api: model.api,
|
|
59
|
+
provider: model.provider,
|
|
60
|
+
model: model.id,
|
|
61
|
+
stopReason: "toolUse",
|
|
62
|
+
content: [
|
|
63
|
+
{
|
|
64
|
+
type: "toolCall",
|
|
65
|
+
id: "read-pkg",
|
|
66
|
+
name: "read",
|
|
67
|
+
arguments: { path: "package.json" },
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
type: "toolCall",
|
|
71
|
+
id: "ls-app",
|
|
72
|
+
name: "ls",
|
|
73
|
+
arguments: { path: "app" },
|
|
74
|
+
},
|
|
75
|
+
],
|
|
76
|
+
});
|
|
77
|
+
stream.push({ type: "done", reason: "toolUse", message: first });
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
const second = createAssistantMessage({
|
|
81
|
+
api: model.api,
|
|
82
|
+
provider: model.provider,
|
|
83
|
+
model: model.id,
|
|
84
|
+
stopReason: "stop",
|
|
85
|
+
content: [
|
|
86
|
+
{
|
|
87
|
+
type: "text",
|
|
88
|
+
text: "Inspected package.json and app/. The repo is a terminal-first coding agent with command-line, runtime, telemetry, and tooling modules.",
|
|
89
|
+
},
|
|
90
|
+
],
|
|
91
|
+
});
|
|
92
|
+
stream.push({ type: "done", reason: "stop", message: second });
|
|
93
|
+
}
|
|
94
|
+
turn += 1;
|
|
95
|
+
});
|
|
96
|
+
return stream;
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
async function main() {
|
|
100
|
+
const repoRoot = resolve(process.cwd());
|
|
101
|
+
const serve = hasFlag("--serve");
|
|
102
|
+
const modules = await loadBuiltIndusagi(repoRoot);
|
|
103
|
+
const { Agent, createReadTool, createLsTool } = modules.agent;
|
|
104
|
+
const { getModel, streamSimple } = modules.ai;
|
|
105
|
+
const { createObserve, FileObserveArtifactContentStore, FileObserveControlPlaneStore, FileObserveExporter, InMemoryObserveServer, ObserveClient, ObserveHttpServer, } = modules.observe;
|
|
106
|
+
const timestamp = createTimestamp();
|
|
107
|
+
const outputRoot = join(repoRoot, ".indusagi", "observe-smoke", timestamp);
|
|
108
|
+
const runtimeOutput = join(outputRoot, "runtime-records");
|
|
109
|
+
const artifactRoot = join(outputRoot, "artifacts");
|
|
110
|
+
const controlPlanePath = join(outputRoot, "control-plane.json");
|
|
111
|
+
mkdirSync(outputRoot, { recursive: true });
|
|
112
|
+
const queryBackend = new InMemoryObserveServer();
|
|
113
|
+
const controlPlaneStore = new FileObserveControlPlaneStore({ path: controlPlanePath });
|
|
114
|
+
const artifactContentStore = new FileObserveArtifactContentStore({ rootDir: artifactRoot });
|
|
115
|
+
const client = new ObserveClient({
|
|
116
|
+
store: controlPlaneStore,
|
|
117
|
+
queryBackend,
|
|
118
|
+
artifactContentStore,
|
|
119
|
+
});
|
|
120
|
+
const session = await client.sessions.create({
|
|
121
|
+
name: "indusagi-screth observe smoke",
|
|
122
|
+
externalSessionId: timestamp,
|
|
123
|
+
metadata: { cwd: repoRoot, mode: serve ? "serve" : "oneshot" },
|
|
124
|
+
});
|
|
125
|
+
const prompt = await client.prompts.publish({
|
|
126
|
+
name: "indusagi-screth-observe-smoke",
|
|
127
|
+
version: "v1",
|
|
128
|
+
labels: ["smoke", "local"],
|
|
129
|
+
template: "Inspect {{target}} and summarize the coding-agent structure.",
|
|
130
|
+
metadata: { target: repoRoot },
|
|
131
|
+
});
|
|
132
|
+
const runtime = createObserve({
|
|
133
|
+
resource: {
|
|
134
|
+
serviceName: "indusagi-screth-smoke",
|
|
135
|
+
environment: "local",
|
|
136
|
+
attributes: { repo: "indusagi-screth", cwd: repoRoot },
|
|
137
|
+
},
|
|
138
|
+
exporters: [
|
|
139
|
+
new FileObserveExporter({ outputPath: runtimeOutput, format: "ndjson" }),
|
|
140
|
+
new ObserveMirrorExporter(queryBackend, controlPlaneStore, session.id),
|
|
141
|
+
],
|
|
142
|
+
batchSize: 100,
|
|
143
|
+
privacy: {
|
|
144
|
+
maxStringLength: 600,
|
|
145
|
+
omit: {
|
|
146
|
+
outputs: false,
|
|
147
|
+
eventData: false,
|
|
148
|
+
},
|
|
149
|
+
},
|
|
150
|
+
});
|
|
151
|
+
const httpServer = new ObserveHttpServer({
|
|
152
|
+
sink: queryBackend,
|
|
153
|
+
queryBackend,
|
|
154
|
+
controlPlaneStore,
|
|
155
|
+
});
|
|
156
|
+
const address = await httpServer.start();
|
|
157
|
+
const baseUrl = `http://${address.host}:${address.port}/api/observe`;
|
|
158
|
+
const model = getModel("mock", "mock-default");
|
|
159
|
+
const agent = new Agent({
|
|
160
|
+
initialState: { model },
|
|
161
|
+
sessionId: session.id,
|
|
162
|
+
observe: runtime,
|
|
163
|
+
streamFn: createSmokeStreamFn(modules.ai, model),
|
|
164
|
+
});
|
|
165
|
+
agent.setTools([createReadTool(repoRoot), createLsTool(repoRoot)]);
|
|
166
|
+
await agent.prompt("Inspect this indusagi-screth coding-agent repo, use tools if needed, and summarize package.json plus the app directory.");
|
|
167
|
+
const aiStream = streamSimple(model, {
|
|
168
|
+
messages: [
|
|
169
|
+
{
|
|
170
|
+
role: "user",
|
|
171
|
+
content: "Give a one-line smoke-test summary for observability.",
|
|
172
|
+
timestamp: Date.now(),
|
|
173
|
+
},
|
|
174
|
+
],
|
|
175
|
+
}, {
|
|
176
|
+
observe: { runtime, sessionId: session.id, captureDeltas: true },
|
|
177
|
+
mockText: "Observe smoke summary complete.",
|
|
178
|
+
});
|
|
179
|
+
await aiStream.result();
|
|
180
|
+
await runtime.flush();
|
|
181
|
+
const traceRecords = (await queryBackend.query({ recordTypes: ["trace"], order: "desc", limit: 10 })).items;
|
|
182
|
+
const latestTraceRecord = traceRecords[0];
|
|
183
|
+
if (latestTraceRecord?.recordType === "trace") {
|
|
184
|
+
await client.traces.update(latestTraceRecord.traceId, { promptId: prompt.id, metadata: { smoke: true } });
|
|
185
|
+
}
|
|
186
|
+
const lastAssistant = [...agent.state.messages]
|
|
187
|
+
.reverse()
|
|
188
|
+
.find((message) => message.role === "assistant" && Array.isArray(message.content));
|
|
189
|
+
const assistantText = lastAssistant?.content
|
|
190
|
+
?.filter((part) => part.type === "text")
|
|
191
|
+
?.map((part) => part.text)
|
|
192
|
+
?.join("\n") ?? "";
|
|
193
|
+
if (latestTraceRecord?.recordType === "trace") {
|
|
194
|
+
await client.artifacts.attachExternalText({ kind: "trace", id: latestTraceRecord.traceId }, "assistant-summary", assistantText, { key: "assistant-summary.txt", tags: ["smoke"] });
|
|
195
|
+
const dataset = await client.datasets.create({
|
|
196
|
+
name: `observe-smoke-dataset-${timestamp}`,
|
|
197
|
+
description: "Smoke-test dataset generated from indusagi-screth local run",
|
|
198
|
+
});
|
|
199
|
+
const [item] = await client.datasets.addItems(dataset.id, [
|
|
200
|
+
{
|
|
201
|
+
name: "inspect-package-json",
|
|
202
|
+
input: { prompt: "Inspect package.json and app/" },
|
|
203
|
+
expectedOutput: { summary: true },
|
|
204
|
+
sourceTraceId: latestTraceRecord.traceId,
|
|
205
|
+
},
|
|
206
|
+
]);
|
|
207
|
+
const experiment = await client.experiments.create({
|
|
208
|
+
name: `observe-smoke-experiment-${timestamp}`,
|
|
209
|
+
datasetId: dataset.id,
|
|
210
|
+
promptId: prompt.id,
|
|
211
|
+
model: model.id,
|
|
212
|
+
provider: model.provider,
|
|
213
|
+
});
|
|
214
|
+
const run = await client.experiments.startRun({
|
|
215
|
+
experimentId: experiment.id,
|
|
216
|
+
datasetItemId: item.id,
|
|
217
|
+
traceId: latestTraceRecord.traceId,
|
|
218
|
+
});
|
|
219
|
+
await client.experiments.finishRun(run.id, {
|
|
220
|
+
traceId: latestTraceRecord.traceId,
|
|
221
|
+
result: { smoke: "ok", records: traceRecords.length },
|
|
222
|
+
});
|
|
223
|
+
await client.scores.create({
|
|
224
|
+
target: { kind: "experiment_run", id: run.id },
|
|
225
|
+
key: "smoke_pass",
|
|
226
|
+
value: 1,
|
|
227
|
+
source: "system",
|
|
228
|
+
comment: "Observe smoke run completed successfully",
|
|
229
|
+
});
|
|
230
|
+
}
|
|
231
|
+
await controlPlaneStore.flush();
|
|
232
|
+
const stats = await queryBackend.stats();
|
|
233
|
+
const traces = await client.traces.list({ sessionId: session.id });
|
|
234
|
+
const artifacts = await client.artifacts.list();
|
|
235
|
+
const experiments = await client.experiments.list();
|
|
236
|
+
const dashboardHealth = await fetch(`${baseUrl}/health`).then((response) => response.json());
|
|
237
|
+
console.log("Observe smoke run completed.");
|
|
238
|
+
console.log(`Repo: ${repoRoot}`);
|
|
239
|
+
console.log(`Output root: ${outputRoot}`);
|
|
240
|
+
console.log(`Runtime records: ${runtimeOutput}`);
|
|
241
|
+
console.log(`Control plane store: ${controlPlanePath}`);
|
|
242
|
+
console.log(`Artifact blobs: ${artifactRoot}`);
|
|
243
|
+
console.log(`Dashboard: ${baseUrl}/ui`);
|
|
244
|
+
console.log(`Health: ${JSON.stringify(dashboardHealth)}`);
|
|
245
|
+
console.log(`Stats: ${JSON.stringify(stats, null, 2)}`);
|
|
246
|
+
console.log(`Control-plane summary: ${JSON.stringify({ sessionId: session.id, traces: traces.length, artifacts: artifacts.length, experiments: experiments.length }, null, 2)}`);
|
|
247
|
+
if (!serve) {
|
|
248
|
+
await httpServer.stop();
|
|
249
|
+
await runtime.shutdown();
|
|
250
|
+
return;
|
|
251
|
+
}
|
|
252
|
+
console.log("Serve mode enabled. Press Ctrl+C to stop the Observe dashboard server.");
|
|
253
|
+
process.on("SIGINT", async () => {
|
|
254
|
+
await httpServer.stop();
|
|
255
|
+
await runtime.shutdown();
|
|
256
|
+
process.exit(0);
|
|
257
|
+
});
|
|
258
|
+
}
|
|
259
|
+
main().catch((error) => {
|
|
260
|
+
console.error("Observe smoke run failed:");
|
|
261
|
+
console.error(error instanceof Error ? error.stack ?? error.message : error);
|
|
262
|
+
process.exit(1);
|
|
263
|
+
});
|
|
264
|
+
//# sourceMappingURL=observe-smoke.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"observe-smoke.js","sourceRoot":"","sources":["../../app/dev/observe-smoke.ts"],"names":[],"mappings":"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"}
|