@ipul-labs/forge 1.22.0 → 1.35.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +153 -78
- package/dist/apple-touch-icon.png +0 -0
- package/dist/assets/index-CNvSOdpC.js +27 -0
- package/dist/assets/index-CSH1OQYQ.css +1 -0
- package/dist/boot-check.js +98 -0
- package/dist/favicon.svg +8 -0
- package/dist/icon-192.png +0 -0
- package/dist/icon-512.png +0 -0
- package/dist/icon.svg +12 -0
- package/dist/index.html +33 -0
- package/dist/manifest.webmanifest +18 -0
- package/dist/theme-init.js +11 -0
- package/lib/bin/cli/analyze.d.ts.map +1 -1
- package/lib/bin/cli/analyze.js +3 -44
- package/lib/bin/cli/analyze.js.map +1 -1
- package/lib/bin/cli/apply.d.ts.map +1 -1
- package/lib/bin/cli/apply.js +2 -20
- package/lib/bin/cli/apply.js.map +1 -1
- package/lib/bin/cli/cifix.d.ts.map +1 -1
- package/lib/bin/cli/cifix.js +4 -28
- package/lib/bin/cli/cifix.js.map +1 -1
- package/lib/bin/cli/close.d.ts.map +1 -1
- package/lib/bin/cli/close.js +2 -33
- package/lib/bin/cli/close.js.map +1 -1
- package/lib/bin/cli/createIssue.d.ts.map +1 -1
- package/lib/bin/cli/createIssue.js +3 -12
- package/lib/bin/cli/createIssue.js.map +1 -1
- package/lib/bin/cli/doctor.d.ts.map +1 -1
- package/lib/bin/cli/doctor.js +3 -4
- package/lib/bin/cli/doctor.js.map +1 -1
- package/lib/bin/cli/init.js +1 -10
- package/lib/bin/cli/init.js.map +1 -1
- package/lib/bin/cli/issue.d.ts.map +1 -1
- package/lib/bin/cli/issue.js +3 -12
- package/lib/bin/cli/issue.js.map +1 -1
- package/lib/bin/cli/issues.d.ts.map +1 -1
- package/lib/bin/cli/issues.js +3 -12
- package/lib/bin/cli/issues.js.map +1 -1
- package/lib/bin/cli/merge.d.ts.map +1 -1
- package/lib/bin/cli/merge.js +4 -20
- package/lib/bin/cli/merge.js.map +1 -1
- package/lib/bin/cli/refine.d.ts.map +1 -1
- package/lib/bin/cli/refine.js +2 -26
- package/lib/bin/cli/refine.js.map +1 -1
- package/lib/bin/cli/repl.d.ts.map +1 -1
- package/lib/bin/cli/repl.js +4 -13
- package/lib/bin/cli/repl.js.map +1 -1
- package/lib/bin/cli/repos.d.ts.map +1 -1
- package/lib/bin/cli/repos.js +1 -11
- package/lib/bin/cli/repos.js.map +1 -1
- package/lib/bin/cli/resetPassword.d.ts +21 -0
- package/lib/bin/cli/resetPassword.d.ts.map +1 -0
- package/lib/bin/cli/resetPassword.js +69 -0
- package/lib/bin/cli/resetPassword.js.map +1 -0
- package/lib/bin/cli/resolution.d.ts.map +1 -1
- package/lib/bin/cli/resolution.js +2 -19
- package/lib/bin/cli/resolution.js.map +1 -1
- package/lib/bin/cli/serverClient.d.ts +2 -0
- package/lib/bin/cli/serverClient.d.ts.map +1 -1
- package/lib/bin/cli/serverClient.js +8 -4
- package/lib/bin/cli/serverClient.js.map +1 -1
- package/lib/bin/cli/session.d.ts.map +1 -1
- package/lib/bin/cli/session.js.map +1 -1
- package/lib/bin/cli/sessionStore.d.ts +1 -1
- package/lib/bin/cli/sessionStore.js +2 -2
- package/lib/bin/cli/sessionStore.js.map +1 -1
- package/lib/bin/cli/ship.d.ts.map +1 -1
- package/lib/bin/cli/ship.js +15 -23
- package/lib/bin/cli/ship.js.map +1 -1
- package/lib/bin/cli/update.d.ts.map +1 -1
- package/lib/bin/cli/update.js +34 -28
- package/lib/bin/cli/update.js.map +1 -1
- package/lib/bin/cli/updatePlan.d.ts +30 -0
- package/lib/bin/cli/updatePlan.d.ts.map +1 -0
- package/lib/bin/cli/updatePlan.js +50 -0
- package/lib/bin/cli/updatePlan.js.map +1 -0
- package/lib/bin/cli/utils.d.ts +3 -0
- package/lib/bin/cli/utils.d.ts.map +1 -1
- package/lib/bin/cli/utils.js +7 -23
- package/lib/bin/cli/utils.js.map +1 -1
- package/lib/bin/cli/validate.d.ts.map +1 -1
- package/lib/bin/cli/validate.js +3 -25
- package/lib/bin/cli/validate.js.map +1 -1
- package/lib/bin/cli/watch.d.ts.map +1 -1
- package/lib/bin/cli/watch.js +3 -12
- package/lib/bin/cli/watch.js.map +1 -1
- package/lib/bin/forge-agent.js +10 -22
- package/lib/bin/forge-agent.js.map +1 -1
- package/lib/server/app.d.ts +24 -0
- package/lib/server/app.d.ts.map +1 -0
- package/lib/server/app.js +58 -0
- package/lib/server/app.js.map +1 -0
- package/lib/server/forge/analyses/analysisStore.d.ts +53 -0
- package/lib/server/forge/analyses/analysisStore.d.ts.map +1 -0
- package/lib/server/forge/analyses/analysisStore.js +77 -0
- package/lib/server/forge/analyses/analysisStore.js.map +1 -0
- package/lib/server/forge/auth/apiTokens.d.ts +34 -0
- package/lib/server/forge/auth/apiTokens.d.ts.map +1 -0
- package/lib/server/forge/auth/apiTokens.js +44 -0
- package/lib/server/forge/auth/apiTokens.js.map +1 -0
- package/lib/server/forge/auth/auditLog.d.ts +36 -0
- package/lib/server/forge/auth/auditLog.d.ts.map +1 -0
- package/lib/server/forge/auth/auditLog.js +56 -0
- package/lib/server/forge/auth/auditLog.js.map +1 -0
- package/lib/server/forge/auth/authConfig.d.ts +13 -0
- package/lib/server/forge/auth/authConfig.d.ts.map +1 -0
- package/lib/server/forge/auth/authConfig.js +37 -0
- package/lib/server/forge/auth/authConfig.js.map +1 -0
- package/lib/server/forge/auth/createAuth.d.ts +130 -0
- package/lib/server/forge/auth/createAuth.d.ts.map +1 -0
- package/lib/server/forge/auth/createAuth.js +387 -0
- package/lib/server/forge/auth/createAuth.js.map +1 -0
- package/lib/server/forge/auth/middleware.d.ts +10 -0
- package/lib/server/forge/auth/middleware.d.ts.map +1 -0
- package/lib/server/forge/auth/middleware.js +22 -0
- package/lib/server/forge/auth/middleware.js.map +1 -0
- package/lib/server/forge/auth/oidc.d.ts +38 -0
- package/lib/server/forge/auth/oidc.d.ts.map +1 -0
- package/lib/server/forge/auth/oidc.js +63 -0
- package/lib/server/forge/auth/oidc.js.map +1 -0
- package/lib/server/forge/auth/passwords.d.ts +7 -0
- package/lib/server/forge/auth/passwords.d.ts.map +1 -0
- package/lib/server/forge/auth/passwords.js +28 -0
- package/lib/server/forge/auth/passwords.js.map +1 -0
- package/lib/server/forge/auth/resetPassword.d.ts +14 -0
- package/lib/server/forge/auth/resetPassword.d.ts.map +1 -0
- package/lib/server/forge/auth/resetPassword.js +29 -0
- package/lib/server/forge/auth/resetPassword.js.map +1 -0
- package/lib/server/forge/auth/roles.d.ts +7 -0
- package/lib/server/forge/auth/roles.d.ts.map +1 -0
- package/lib/server/forge/auth/roles.js +15 -0
- package/lib/server/forge/auth/roles.js.map +1 -0
- package/lib/server/forge/auth/sessions.d.ts +27 -0
- package/lib/server/forge/auth/sessions.d.ts.map +1 -0
- package/lib/server/forge/auth/sessions.js +37 -0
- package/lib/server/forge/auth/sessions.js.map +1 -0
- package/lib/server/forge/auth/testHarness.d.ts +104 -0
- package/lib/server/forge/auth/testHarness.d.ts.map +1 -0
- package/lib/server/forge/auth/testHarness.js +53 -0
- package/lib/server/forge/auth/testHarness.js.map +1 -0
- package/lib/server/forge/auth/tokenHash.d.ts +3 -0
- package/lib/server/forge/auth/tokenHash.d.ts.map +1 -0
- package/lib/server/forge/auth/tokenHash.js +4 -0
- package/lib/server/forge/auth/tokenHash.js.map +1 -0
- package/lib/server/forge/auth/users.d.ts +51 -0
- package/lib/server/forge/auth/users.d.ts.map +1 -0
- package/lib/server/forge/auth/users.js +118 -0
- package/lib/server/forge/auth/users.js.map +1 -0
- package/lib/server/forge/core/ForgeAgent.d.ts +43 -1
- package/lib/server/forge/core/ForgeAgent.d.ts.map +1 -1
- package/lib/server/forge/core/ForgeAgent.js +209 -61
- package/lib/server/forge/core/ForgeAgent.js.map +1 -1
- package/lib/server/forge/core/agentClient.d.ts +7 -23
- package/lib/server/forge/core/agentClient.d.ts.map +1 -1
- package/lib/server/forge/core/agentClient.js +10 -25
- package/lib/server/forge/core/agentClient.js.map +1 -1
- package/lib/server/forge/core/claudeClient.d.ts +24 -1
- package/lib/server/forge/core/claudeClient.d.ts.map +1 -1
- package/lib/server/forge/core/claudeClient.js +25 -7
- package/lib/server/forge/core/claudeClient.js.map +1 -1
- package/lib/server/forge/core/configStore.d.ts +11 -1
- package/lib/server/forge/core/configStore.d.ts.map +1 -1
- package/lib/server/forge/core/configStore.js +33 -2
- package/lib/server/forge/core/configStore.js.map +1 -1
- package/lib/server/forge/core/dependencyPaths.d.ts +19 -0
- package/lib/server/forge/core/dependencyPaths.d.ts.map +1 -0
- package/lib/server/forge/core/dependencyPaths.js +32 -0
- package/lib/server/forge/core/dependencyPaths.js.map +1 -0
- package/lib/server/forge/core/evidence.d.ts +43 -0
- package/lib/server/forge/core/evidence.d.ts.map +1 -0
- package/lib/server/forge/core/evidence.js +108 -0
- package/lib/server/forge/core/evidence.js.map +1 -0
- package/lib/server/forge/core/jobs.d.ts +2 -0
- package/lib/server/forge/core/jobs.d.ts.map +1 -1
- package/lib/server/forge/core/jobs.js +8 -0
- package/lib/server/forge/core/jobs.js.map +1 -1
- package/lib/server/forge/core/localRepo.d.ts +31 -10
- package/lib/server/forge/core/localRepo.d.ts.map +1 -1
- package/lib/server/forge/core/localRepo.js +48 -82
- package/lib/server/forge/core/localRepo.js.map +1 -1
- package/lib/server/forge/core/prompts.d.ts +3 -1
- package/lib/server/forge/core/prompts.d.ts.map +1 -1
- package/lib/server/forge/core/prompts.js +14 -5
- package/lib/server/forge/core/prompts.js.map +1 -1
- package/lib/server/forge/core/providers/azuredevops.d.ts +4 -2
- package/lib/server/forge/core/providers/azuredevops.d.ts.map +1 -1
- package/lib/server/forge/core/providers/azuredevops.js +12 -2
- package/lib/server/forge/core/providers/azuredevops.js.map +1 -1
- package/lib/server/forge/core/providers/base.d.ts +29 -4
- package/lib/server/forge/core/providers/base.d.ts.map +1 -1
- package/lib/server/forge/core/providers/base.js +21 -3
- package/lib/server/forge/core/providers/base.js.map +1 -1
- package/lib/server/forge/core/providers/github.d.ts +7 -7
- package/lib/server/forge/core/providers/github.d.ts.map +1 -1
- package/lib/server/forge/core/providers/github.js +13 -4
- package/lib/server/forge/core/providers/github.js.map +1 -1
- package/lib/server/forge/core/providers/gitlab.d.ts +20 -3
- package/lib/server/forge/core/providers/gitlab.d.ts.map +1 -1
- package/lib/server/forge/core/providers/gitlab.js +65 -5
- package/lib/server/forge/core/providers/gitlab.js.map +1 -1
- package/lib/server/forge/core/providers/types.d.ts +20 -0
- package/lib/server/forge/core/providers/types.d.ts.map +1 -1
- package/lib/server/forge/core/secretBox.d.ts +17 -0
- package/lib/server/forge/core/secretBox.d.ts.map +1 -0
- package/lib/server/forge/core/secretBox.js +74 -0
- package/lib/server/forge/core/secretBox.js.map +1 -0
- package/lib/server/forge/core/types.d.ts +7 -1
- package/lib/server/forge/core/types.d.ts.map +1 -1
- package/lib/server/forge/core/validator/clone.d.ts +5 -4
- package/lib/server/forge/core/validator/clone.d.ts.map +1 -1
- package/lib/server/forge/core/validator/clone.js +6 -86
- package/lib/server/forge/core/validator/clone.js.map +1 -1
- package/lib/server/forge/core/validator/cmd.d.ts.map +1 -1
- package/lib/server/forge/core/validator/cmd.js +4 -1
- package/lib/server/forge/core/validator/cmd.js.map +1 -1
- package/lib/server/forge/core/validator/projectType.d.ts.map +1 -1
- package/lib/server/forge/core/validator/projectType.js +2 -1
- package/lib/server/forge/core/validator/projectType.js.map +1 -1
- package/lib/server/forge/core/validator/runners/node.d.ts.map +1 -1
- package/lib/server/forge/core/validator/runners/node.js +6 -2
- package/lib/server/forge/core/validator/runners/node.js.map +1 -1
- package/lib/server/forge/core/validator.d.ts.map +1 -1
- package/lib/server/forge/core/validator.js +28 -22
- package/lib/server/forge/core/validator.js.map +1 -1
- package/lib/server/forge/core/workspaces.d.ts +70 -0
- package/lib/server/forge/core/workspaces.d.ts.map +1 -0
- package/lib/server/forge/core/workspaces.js +348 -0
- package/lib/server/forge/core/workspaces.js.map +1 -0
- package/lib/server/forge/db/database.d.ts +22 -0
- package/lib/server/forge/db/database.d.ts.map +1 -0
- package/lib/server/forge/db/database.js +71 -0
- package/lib/server/forge/db/database.js.map +1 -0
- package/lib/server/forge/db/migrations.d.ts +11 -0
- package/lib/server/forge/db/migrations.d.ts.map +1 -0
- package/lib/server/forge/db/migrations.js +87 -0
- package/lib/server/forge/db/migrations.js.map +1 -0
- package/lib/server/forge/routes.d.ts.map +1 -1
- package/lib/server/forge/routes.js +413 -163
- package/lib/server/forge/routes.js.map +1 -1
- package/lib/server/forge/sse.d.ts +10 -0
- package/lib/server/forge/sse.d.ts.map +1 -0
- package/lib/server/forge/sse.js +22 -0
- package/lib/server/forge/sse.js.map +1 -0
- package/lib/server/spa.d.ts +12 -0
- package/lib/server/spa.d.ts.map +1 -0
- package/lib/server/spa.js +23 -0
- package/lib/server/spa.js.map +1 -0
- package/lib/server.js +9 -24
- package/lib/server.js.map +1 -1
- package/lib/shared/events.d.ts +3 -0
- package/lib/shared/events.d.ts.map +1 -1
- package/lib/shared/events.js +3 -0
- package/lib/shared/events.js.map +1 -1
- package/lib/shared/packageRoot.d.ts +11 -0
- package/lib/shared/packageRoot.d.ts.map +1 -0
- package/lib/shared/packageRoot.js +23 -0
- package/lib/shared/packageRoot.js.map +1 -0
- package/lib/shared/project.d.ts +3 -0
- package/lib/shared/project.d.ts.map +1 -0
- package/lib/shared/project.js +3 -0
- package/lib/shared/project.js.map +1 -0
- package/package.json +23 -10
- package/lib/bin/cli/improve.d.ts +0 -2
- package/lib/bin/cli/improve.d.ts.map +0 -1
- package/lib/bin/cli/improve.js +0 -189
- package/lib/bin/cli/improve.js.map +0 -1
- package/lib/bin/cli/stats.d.ts +0 -2
- package/lib/bin/cli/stats.d.ts.map +0 -1
- package/lib/bin/cli/stats.js +0 -78
- package/lib/bin/cli/stats.js.map +0 -1
- package/lib/server/forge/core/k8s.d.ts +0 -18
- package/lib/server/forge/core/k8s.d.ts.map +0 -1
- package/lib/server/forge/core/k8s.js +0 -49
- package/lib/server/forge/core/k8s.js.map +0 -1
- package/lib/server/forge/core/openclawClient.d.ts +0 -61
- package/lib/server/forge/core/openclawClient.d.ts.map +0 -1
- package/lib/server/forge/core/openclawClient.js +0 -111
- package/lib/server/forge/core/openclawClient.js.map +0 -1
- package/lib/server/forge/core/quotaClient.d.ts +0 -48
- package/lib/server/forge/core/quotaClient.d.ts.map +0 -1
- package/lib/server/forge/core/quotaClient.js +0 -88
- package/lib/server/forge/core/quotaClient.js.map +0 -1
- package/lib/server/forge/core/selfImprove.d.ts +0 -43
- package/lib/server/forge/core/selfImprove.d.ts.map +0 -1
- package/lib/server/forge/core/selfImprove.js +0 -372
- package/lib/server/forge/core/selfImprove.js.map +0 -1
- package/lib/server/forge/core/telemetry.d.ts +0 -100
- package/lib/server/forge/core/telemetry.d.ts.map +0 -1
- package/lib/server/forge/core/telemetry.js +0 -273
- package/lib/server/forge/core/telemetry.js.map +0 -1
- package/scripts/fix-shebang.cjs +0 -11
- package/scripts/inject-readme.cjs +0 -23
- package/scripts/local-rollout.sh +0 -134
|
@@ -1,372 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* server/forge/core/selfImprove.ts
|
|
3
|
-
*
|
|
4
|
-
* Self-improvement engine. Reads telemetry patterns, generates actionable
|
|
5
|
-
* issues against Forge's own repo, and optionally ships them.
|
|
6
|
-
*
|
|
7
|
-
* The engine never auto-merges — it creates issues and MRs that a human
|
|
8
|
-
* reviews. Rejected MRs feed back into telemetry as learning signals.
|
|
9
|
-
*
|
|
10
|
-
* Flow:
|
|
11
|
-
* 1. evaluate() reads failure patterns from telemetry
|
|
12
|
-
* 2. Each pattern is classified into an improvement category
|
|
13
|
-
* 3. For actionable patterns, an issue is drafted with diagnosis + evidence
|
|
14
|
-
* 4. createSelfIssue() opens the issue on the configured self-repo
|
|
15
|
-
* 5. Optionally, shipSelfIssue() runs `forge ship <iid>` against it
|
|
16
|
-
*/
|
|
17
|
-
import { existsSync } from "node:fs";
|
|
18
|
-
import fs from "node:fs/promises";
|
|
19
|
-
import os from "node:os";
|
|
20
|
-
import path from "node:path";
|
|
21
|
-
import { getFailurePatterns, getSummary, getRecentEvents } from "./telemetry.js";
|
|
22
|
-
const classifiers = [
|
|
23
|
-
{
|
|
24
|
-
match: (p) => /timed?\s*out/i.test(p.errorPattern),
|
|
25
|
-
classify: (p, summary) => ({
|
|
26
|
-
category: "timeout-tuning",
|
|
27
|
-
title: `fix: ${p.operation} timing out (${p.count} occurrences)`,
|
|
28
|
-
description: [
|
|
29
|
-
`The \`${p.operation}\` operation is timing out repeatedly.`,
|
|
30
|
-
``,
|
|
31
|
-
`**Pattern:** ${p.errorPattern}`,
|
|
32
|
-
`**Occurrences:** ${p.count} times across ${p.repos.length} repo(s)`,
|
|
33
|
-
`**First seen:** ${p.firstSeen}`,
|
|
34
|
-
`**Last seen:** ${p.lastSeen}`,
|
|
35
|
-
``,
|
|
36
|
-
`Consider increasing the timeout, optimizing the prompt to reduce token usage,`,
|
|
37
|
-
`or breaking the operation into smaller steps.`,
|
|
38
|
-
].join("\n"),
|
|
39
|
-
evidence: p.examples.map((e) => `${e.ts} — ${e.repo}#${e.iid}: ${e.error}`),
|
|
40
|
-
severity: p.count >= 5 ? "high" : "medium",
|
|
41
|
-
confidence: p.count >= 5 ? "medium" : "low",
|
|
42
|
-
pattern: p,
|
|
43
|
-
}),
|
|
44
|
-
},
|
|
45
|
-
{
|
|
46
|
-
match: (p) => /git\s*(fetch|clone|push)\s*failed/i.test(p.errorPattern),
|
|
47
|
-
classify: (p) => ({
|
|
48
|
-
category: "provider-bug",
|
|
49
|
-
title: `fix: git operation failing in ${p.operation} (${p.count}x)`,
|
|
50
|
-
description: [
|
|
51
|
-
`Git operations are failing during \`${p.operation}\`.`,
|
|
52
|
-
``,
|
|
53
|
-
`**Pattern:** ${p.errorPattern}`,
|
|
54
|
-
`**Occurrences:** ${p.count}`,
|
|
55
|
-
``,
|
|
56
|
-
`This may indicate an authentication issue, network problem,`,
|
|
57
|
-
`or a bug in the clone/fetch credential handling.`,
|
|
58
|
-
].join("\n"),
|
|
59
|
-
evidence: p.examples.map((e) => `${e.ts} — ${e.repo}#${e.iid}: ${e.error}`),
|
|
60
|
-
severity: "high",
|
|
61
|
-
confidence: "low",
|
|
62
|
-
pattern: p,
|
|
63
|
-
}),
|
|
64
|
-
},
|
|
65
|
-
{
|
|
66
|
-
match: (p) => /no json found|parse|unexpected token/i.test(p.errorPattern),
|
|
67
|
-
classify: (p) => ({
|
|
68
|
-
category: "prompt-quality",
|
|
69
|
-
title: `fix: ${p.operation} returning unparseable output (${p.count}x)`,
|
|
70
|
-
description: [
|
|
71
|
-
`Claude is returning output that can't be parsed as JSON during \`${p.operation}\`.`,
|
|
72
|
-
``,
|
|
73
|
-
`**Pattern:** ${p.errorPattern}`,
|
|
74
|
-
`**Occurrences:** ${p.count}`,
|
|
75
|
-
``,
|
|
76
|
-
`The system prompt may need stronger formatting instructions,`,
|
|
77
|
-
`or extractJSON needs more lenient parsing.`,
|
|
78
|
-
].join("\n"),
|
|
79
|
-
evidence: p.examples.map((e) => `${e.ts} — ${e.repo}#${e.iid}: ${e.error}`),
|
|
80
|
-
severity: "medium",
|
|
81
|
-
confidence: "medium",
|
|
82
|
-
pattern: p,
|
|
83
|
-
}),
|
|
84
|
-
},
|
|
85
|
-
{
|
|
86
|
-
match: (p) => /validation|lint|typecheck|test.*fail/i.test(p.errorPattern),
|
|
87
|
-
classify: (p) => ({
|
|
88
|
-
category: "validation-gap",
|
|
89
|
-
title: `fix: proposed changes failing validation in ${p.operation} (${p.count}x)`,
|
|
90
|
-
description: [
|
|
91
|
-
`Proposed changes are failing pre-flight validation during \`${p.operation}\`.`,
|
|
92
|
-
``,
|
|
93
|
-
`**Pattern:** ${p.errorPattern}`,
|
|
94
|
-
`**Occurrences:** ${p.count}`,
|
|
95
|
-
``,
|
|
96
|
-
`The analysis prompts may need stronger instructions about type safety,`,
|
|
97
|
-
`import correctness, or test coverage.`,
|
|
98
|
-
].join("\n"),
|
|
99
|
-
evidence: p.examples.map((e) => `${e.ts} — ${e.repo}#${e.iid}: ${e.error}`),
|
|
100
|
-
severity: "medium",
|
|
101
|
-
confidence: "medium",
|
|
102
|
-
pattern: p,
|
|
103
|
-
}),
|
|
104
|
-
},
|
|
105
|
-
{
|
|
106
|
-
match: (p, summary) => {
|
|
107
|
-
const stats = summary.byOperation[p.operation];
|
|
108
|
-
if (!stats || stats.total < 5)
|
|
109
|
-
return false;
|
|
110
|
-
return stats.failures / stats.total > 0.3;
|
|
111
|
-
},
|
|
112
|
-
classify: (p, summary) => {
|
|
113
|
-
const stats = summary.byOperation[p.operation];
|
|
114
|
-
const failRate = stats ? Math.round((stats.failures / stats.total) * 100) : 0;
|
|
115
|
-
return {
|
|
116
|
-
category: "error-handling",
|
|
117
|
-
title: `fix: ${p.operation} has ${failRate}% failure rate`,
|
|
118
|
-
description: [
|
|
119
|
-
`The \`${p.operation}\` operation has an elevated failure rate.`,
|
|
120
|
-
``,
|
|
121
|
-
`**Success rate:** ${100 - failRate}% (${stats?.successes}/${stats?.total})`,
|
|
122
|
-
`**Most common error:** ${p.errorPattern}`,
|
|
123
|
-
`**Occurrences:** ${p.count}`,
|
|
124
|
-
``,
|
|
125
|
-
`Review error handling and recovery for this operation.`,
|
|
126
|
-
].join("\n"),
|
|
127
|
-
evidence: p.examples.map((e) => `${e.ts} — ${e.repo}#${e.iid}: ${e.error}`),
|
|
128
|
-
severity: failRate > 50 ? "high" : "medium",
|
|
129
|
-
confidence: "medium",
|
|
130
|
-
pattern: p,
|
|
131
|
-
};
|
|
132
|
-
},
|
|
133
|
-
},
|
|
134
|
-
];
|
|
135
|
-
function deriveUxDiagnoses(summary, events) {
|
|
136
|
-
const diagnoses = [];
|
|
137
|
-
// Slow operations suggest UX improvements
|
|
138
|
-
for (const [op, stats] of Object.entries(summary.byOperation)) {
|
|
139
|
-
if (stats.total < 3)
|
|
140
|
-
continue;
|
|
141
|
-
if (stats.avgDurationMs > 120_000) {
|
|
142
|
-
diagnoses.push({
|
|
143
|
-
category: "ux-improvement",
|
|
144
|
-
title: `ux: ${op} takes ${(stats.avgDurationMs / 1000).toFixed(0)}s avg — add progress feedback`,
|
|
145
|
-
description: [
|
|
146
|
-
`The \`${op}\` operation averages ${(stats.avgDurationMs / 1000).toFixed(0)} seconds.`,
|
|
147
|
-
`Users may think it's frozen.`,
|
|
148
|
-
``,
|
|
149
|
-
`**Avg duration:** ${(stats.avgDurationMs / 1000).toFixed(1)}s over ${stats.total} runs`,
|
|
150
|
-
``,
|
|
151
|
-
`Suggestions:`,
|
|
152
|
-
`- Add more granular progress steps so the UI/CLI shows activity`,
|
|
153
|
-
`- Show estimated time remaining based on historical avg`,
|
|
154
|
-
`- Consider streaming partial results earlier`,
|
|
155
|
-
].join("\n"),
|
|
156
|
-
evidence: [`avg ${(stats.avgDurationMs / 1000).toFixed(1)}s across ${stats.total} operations`],
|
|
157
|
-
severity: stats.avgDurationMs > 300_000 ? "high" : "medium",
|
|
158
|
-
confidence: "high",
|
|
159
|
-
pattern: { operation: op, errorPattern: "slow", count: stats.total, repos: new Set(), firstSeen: "", lastSeen: "", examples: [] },
|
|
160
|
-
});
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
// High token usage suggests prompt optimization
|
|
164
|
-
for (const [op, stats] of Object.entries(summary.byOperation)) {
|
|
165
|
-
if (stats.total < 3 || stats.totalTokensIn === 0)
|
|
166
|
-
continue;
|
|
167
|
-
const avgTokensPerOp = (stats.totalTokensIn + stats.totalTokensOut) / stats.total;
|
|
168
|
-
if (avgTokensPerOp > 50_000) {
|
|
169
|
-
diagnoses.push({
|
|
170
|
-
category: "ux-improvement",
|
|
171
|
-
title: `ux: ${op} uses ${Math.round(avgTokensPerOp / 1000)}k tokens avg — optimize prompts`,
|
|
172
|
-
description: [
|
|
173
|
-
`The \`${op}\` operation averages ${Math.round(avgTokensPerOp)} tokens per call.`,
|
|
174
|
-
`This affects response time and cost.`,
|
|
175
|
-
``,
|
|
176
|
-
`**Avg tokens:** ${Math.round(avgTokensPerOp)} (in+out) over ${stats.total} runs`,
|
|
177
|
-
`**Total cost:** $${stats.totalCost.toFixed(4)}`,
|
|
178
|
-
``,
|
|
179
|
-
`Suggestions:`,
|
|
180
|
-
`- Reduce file content sent to Claude (tighter truncation)`,
|
|
181
|
-
`- Cache file-tree results across refine turns`,
|
|
182
|
-
`- Consider using a smaller model for the identify-files pass`,
|
|
183
|
-
].join("\n"),
|
|
184
|
-
evidence: [`${Math.round(avgTokensPerOp)} avg tokens, $${stats.totalCost.toFixed(4)} total cost`],
|
|
185
|
-
severity: "medium",
|
|
186
|
-
confidence: "high",
|
|
187
|
-
pattern: { operation: op, errorPattern: "high-tokens", count: stats.total, repos: new Set(), firstSeen: "", lastSeen: "", examples: [] },
|
|
188
|
-
});
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
// Frequent cancel/abort suggests UX friction
|
|
192
|
-
const cancels = events.filter((e) => e.error?.includes("cancelled") || e.error?.includes("abort"));
|
|
193
|
-
if (cancels.length >= 3) {
|
|
194
|
-
diagnoses.push({
|
|
195
|
-
category: "ux-improvement",
|
|
196
|
-
title: `ux: ${cancels.length} operations cancelled — investigate user frustration`,
|
|
197
|
-
description: [
|
|
198
|
-
`${cancels.length} operations were cancelled by the user.`,
|
|
199
|
-
`Frequent cancellations suggest the operation is taking too long`,
|
|
200
|
-
`or producing unexpected results.`,
|
|
201
|
-
``,
|
|
202
|
-
`Suggestions:`,
|
|
203
|
-
`- Show clearer progress indicators`,
|
|
204
|
-
`- Allow partial results before full completion`,
|
|
205
|
-
`- Add a "quick mode" that uses fewer passes`,
|
|
206
|
-
].join("\n"),
|
|
207
|
-
evidence: cancels.slice(0, 3).map((e) => `${e.ts} — ${e.operation} on ${e.repo}#${e.iid}`),
|
|
208
|
-
severity: cancels.length >= 5 ? "high" : "medium",
|
|
209
|
-
confidence: "medium",
|
|
210
|
-
pattern: { operation: "mixed", errorPattern: "cancelled", count: cancels.length, repos: new Set(), firstSeen: cancels[0]?.ts ?? "", lastSeen: cancels[cancels.length - 1]?.ts ?? "", examples: [] },
|
|
211
|
-
});
|
|
212
|
-
}
|
|
213
|
-
return diagnoses;
|
|
214
|
-
}
|
|
215
|
-
// ─── Public API ──────────────────────────────────────────────────────────────
|
|
216
|
-
export async function evaluate() {
|
|
217
|
-
const [summary, patterns, events] = await Promise.all([
|
|
218
|
-
getSummary(),
|
|
219
|
-
getFailurePatterns(),
|
|
220
|
-
getRecentEvents(500),
|
|
221
|
-
]);
|
|
222
|
-
const diagnoses = [];
|
|
223
|
-
const seen = new Set();
|
|
224
|
-
for (const pattern of patterns) {
|
|
225
|
-
for (const classifier of classifiers) {
|
|
226
|
-
if (!classifier.match(pattern, summary))
|
|
227
|
-
continue;
|
|
228
|
-
const diagnosis = classifier.classify(pattern, summary, events);
|
|
229
|
-
const key = `${diagnosis.category}:${diagnosis.title}`;
|
|
230
|
-
if (seen.has(key))
|
|
231
|
-
continue;
|
|
232
|
-
seen.add(key);
|
|
233
|
-
diagnoses.push(diagnosis);
|
|
234
|
-
break;
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
// Add UX-derived diagnoses (not based on failure patterns)
|
|
238
|
-
const uxDiagnoses = deriveUxDiagnoses(summary, events);
|
|
239
|
-
for (const d of uxDiagnoses) {
|
|
240
|
-
const key = `${d.category}:${d.title}`;
|
|
241
|
-
if (!seen.has(key)) {
|
|
242
|
-
seen.add(key);
|
|
243
|
-
diagnoses.push(d);
|
|
244
|
-
}
|
|
245
|
-
}
|
|
246
|
-
diagnoses.sort((a, b) => {
|
|
247
|
-
const sev = { high: 3, medium: 2, low: 1 };
|
|
248
|
-
return sev[b.severity] - sev[a.severity];
|
|
249
|
-
});
|
|
250
|
-
return {
|
|
251
|
-
summary,
|
|
252
|
-
patterns,
|
|
253
|
-
diagnoses,
|
|
254
|
-
timestamp: new Date().toISOString(),
|
|
255
|
-
};
|
|
256
|
-
}
|
|
257
|
-
export function formatIssueBody(diagnosis) {
|
|
258
|
-
const lines = [
|
|
259
|
-
diagnosis.description,
|
|
260
|
-
"",
|
|
261
|
-
"## Evidence",
|
|
262
|
-
"",
|
|
263
|
-
...diagnosis.evidence.map((e) => `- \`${e}\``),
|
|
264
|
-
"",
|
|
265
|
-
"## Classification",
|
|
266
|
-
"",
|
|
267
|
-
`- **Category:** \`${diagnosis.category}\``,
|
|
268
|
-
`- **Severity:** ${diagnosis.severity}`,
|
|
269
|
-
`- **Confidence:** ${diagnosis.confidence}`,
|
|
270
|
-
];
|
|
271
|
-
if (diagnosis.confidence === "low") {
|
|
272
|
-
lines.push("", "> **⚠️ Low confidence diagnosis.** The error pattern is ambiguous — the root cause may differ from what's described above. Manual investigation is recommended before applying any fix.");
|
|
273
|
-
}
|
|
274
|
-
lines.push("", "---", "*This issue was created automatically by Forge's self-improvement engine.*");
|
|
275
|
-
return lines.join("\n");
|
|
276
|
-
}
|
|
277
|
-
// ─── Auto-evaluation ─────────────────────────────────────────────────────────
|
|
278
|
-
// Runs automatically after every EVAL_THRESHOLD telemetry events. When
|
|
279
|
-
// high-severity diagnoses are found and a self-repo is configured, creates
|
|
280
|
-
// issues automatically. Results are logged to ~/.forge/telemetry/evaluations/.
|
|
281
|
-
const EVAL_THRESHOLD = 25;
|
|
282
|
-
const EVAL_COOLDOWN_MS = 4 * 60 * 60 * 1000; // 4 hours between auto-evals
|
|
283
|
-
function evalDir() {
|
|
284
|
-
return path.join(process.env.FORGE_TELEMETRY_PATH ?? path.join(os.homedir(), ".forge", "telemetry"), "evaluations");
|
|
285
|
-
}
|
|
286
|
-
function lastEvalFile() {
|
|
287
|
-
return path.join(evalDir(), "last-eval.json");
|
|
288
|
-
}
|
|
289
|
-
async function readLastEval() {
|
|
290
|
-
try {
|
|
291
|
-
if (!existsSync(lastEvalFile()))
|
|
292
|
-
return null;
|
|
293
|
-
return JSON.parse(await fs.readFile(lastEvalFile(), "utf8"));
|
|
294
|
-
}
|
|
295
|
-
catch {
|
|
296
|
-
return null;
|
|
297
|
-
}
|
|
298
|
-
}
|
|
299
|
-
async function writeLastEval(state) {
|
|
300
|
-
await fs.mkdir(evalDir(), { recursive: true, mode: 0o700 });
|
|
301
|
-
await fs.writeFile(lastEvalFile(), JSON.stringify(state, null, 2), { encoding: "utf8", mode: 0o600 });
|
|
302
|
-
}
|
|
303
|
-
async function resolveSelfRepo() {
|
|
304
|
-
if (process.env.FORGE_SELF_REPO)
|
|
305
|
-
return process.env.FORGE_SELF_REPO;
|
|
306
|
-
try {
|
|
307
|
-
const { get } = await import("./configStore.js");
|
|
308
|
-
const repos = get()?.repos ?? [];
|
|
309
|
-
const forgeRepo = repos.find((r) => r.id.toLowerCase().includes("forge"));
|
|
310
|
-
return forgeRepo?.id ?? null;
|
|
311
|
-
}
|
|
312
|
-
catch {
|
|
313
|
-
return null;
|
|
314
|
-
}
|
|
315
|
-
}
|
|
316
|
-
export async function maybeAutoEvaluate() {
|
|
317
|
-
try {
|
|
318
|
-
const summary = await getSummary();
|
|
319
|
-
const lastEval = await readLastEval();
|
|
320
|
-
// Check threshold: need EVAL_THRESHOLD new events since last eval
|
|
321
|
-
if (lastEval) {
|
|
322
|
-
const newEvents = summary.totalEvents - lastEval.eventCount;
|
|
323
|
-
if (newEvents < EVAL_THRESHOLD) {
|
|
324
|
-
return { skipped: true, reason: `only ${newEvents}/${EVAL_THRESHOLD} new events` };
|
|
325
|
-
}
|
|
326
|
-
// Check cooldown
|
|
327
|
-
const elapsed = Date.now() - new Date(lastEval.timestamp).getTime();
|
|
328
|
-
if (elapsed < EVAL_COOLDOWN_MS) {
|
|
329
|
-
const hoursLeft = ((EVAL_COOLDOWN_MS - elapsed) / 3_600_000).toFixed(1);
|
|
330
|
-
return { skipped: true, reason: `cooldown: ${hoursLeft}h remaining` };
|
|
331
|
-
}
|
|
332
|
-
}
|
|
333
|
-
else if (summary.totalEvents < EVAL_THRESHOLD) {
|
|
334
|
-
return { skipped: true, reason: `only ${summary.totalEvents}/${EVAL_THRESHOLD} total events` };
|
|
335
|
-
}
|
|
336
|
-
const result = await evaluate();
|
|
337
|
-
const highSeverity = result.diagnoses.filter((d) => d.severity === "high");
|
|
338
|
-
let issuesCreated = 0;
|
|
339
|
-
const selfRepo = await resolveSelfRepo();
|
|
340
|
-
if (highSeverity.length > 0 && selfRepo) {
|
|
341
|
-
try {
|
|
342
|
-
const { createProvider: cp } = await import("./providers/index.js");
|
|
343
|
-
const provider = cp(selfRepo);
|
|
344
|
-
for (const diagnosis of highSeverity.slice(0, 2)) {
|
|
345
|
-
try {
|
|
346
|
-
const title = `[self-improve] ${diagnosis.title}`;
|
|
347
|
-
const body = formatIssueBody(diagnosis);
|
|
348
|
-
await provider.createIssue(title, body);
|
|
349
|
-
issuesCreated++;
|
|
350
|
-
}
|
|
351
|
-
catch {
|
|
352
|
-
// issue creation is best-effort
|
|
353
|
-
}
|
|
354
|
-
}
|
|
355
|
-
}
|
|
356
|
-
catch {
|
|
357
|
-
// provider import/creation is best-effort
|
|
358
|
-
}
|
|
359
|
-
}
|
|
360
|
-
await writeLastEval({
|
|
361
|
-
timestamp: new Date().toISOString(),
|
|
362
|
-
eventCount: summary.totalEvents,
|
|
363
|
-
diagnosesCount: result.diagnoses.length,
|
|
364
|
-
issuesCreated,
|
|
365
|
-
});
|
|
366
|
-
return { skipped: false, diagnoses: result.diagnoses, issuesCreated };
|
|
367
|
-
}
|
|
368
|
-
catch {
|
|
369
|
-
return { skipped: true, reason: "evaluation failed" };
|
|
370
|
-
}
|
|
371
|
-
}
|
|
372
|
-
//# sourceMappingURL=selfImprove.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"selfImprove.js","sourceRoot":"","sources":["../../../../server/forge/core/selfImprove.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* server/forge/core/telemetry.ts
|
|
3
|
-
*
|
|
4
|
-
* Append-only telemetry store for Forge's self-improvement loop.
|
|
5
|
-
*
|
|
6
|
-
* Every analysis, refine, CI-fix, apply, validate, merge, and close records
|
|
7
|
-
* its outcome here. The data feeds pattern detection which can identify
|
|
8
|
-
* recurring failures and propose fixes against Forge's own repo.
|
|
9
|
-
*
|
|
10
|
-
* Storage: ~/.forge/telemetry/
|
|
11
|
-
* events.ndjson — append-only log of every telemetry event
|
|
12
|
-
* summary.json — rolling aggregates (updated on each write)
|
|
13
|
-
*
|
|
14
|
-
* Events are fire-and-forget — telemetry failures never break the main flow.
|
|
15
|
-
*/
|
|
16
|
-
export interface TelemetryEvent {
|
|
17
|
-
ts: string;
|
|
18
|
-
operation: TelemetryOperation;
|
|
19
|
-
repo: string;
|
|
20
|
-
iid: number;
|
|
21
|
-
success: boolean;
|
|
22
|
-
durationMs: number;
|
|
23
|
-
error?: string;
|
|
24
|
-
stderr?: string;
|
|
25
|
-
context?: string;
|
|
26
|
-
recentChanges?: string[];
|
|
27
|
-
tokens?: {
|
|
28
|
-
input: number;
|
|
29
|
-
output: number;
|
|
30
|
-
cacheCreation: number;
|
|
31
|
-
cacheRead: number;
|
|
32
|
-
};
|
|
33
|
-
cost?: number;
|
|
34
|
-
model?: string;
|
|
35
|
-
agent?: string;
|
|
36
|
-
mode?: "server" | "local";
|
|
37
|
-
meta?: Record<string, unknown>;
|
|
38
|
-
resolved?: boolean;
|
|
39
|
-
resolvedAt?: string;
|
|
40
|
-
}
|
|
41
|
-
export type TelemetryOperation = "analyze" | "refine" | "ci-fix" | "validate" | "apply" | "merge" | "close" | "resolution-check";
|
|
42
|
-
export interface TelemetrySummary {
|
|
43
|
-
totalEvents: number;
|
|
44
|
-
byOperation: Record<string, OperationStats>;
|
|
45
|
-
recentErrors: RecentError[];
|
|
46
|
-
lastUpdated: string;
|
|
47
|
-
}
|
|
48
|
-
interface OperationStats {
|
|
49
|
-
total: number;
|
|
50
|
-
successes: number;
|
|
51
|
-
failures: number;
|
|
52
|
-
avgDurationMs: number;
|
|
53
|
-
totalTokensIn: number;
|
|
54
|
-
totalTokensOut: number;
|
|
55
|
-
totalCost: number;
|
|
56
|
-
}
|
|
57
|
-
interface RecentError {
|
|
58
|
-
ts: string;
|
|
59
|
-
operation: string;
|
|
60
|
-
repo: string;
|
|
61
|
-
iid: number;
|
|
62
|
-
error: string;
|
|
63
|
-
}
|
|
64
|
-
export declare function record(event: TelemetryEvent): Promise<void>;
|
|
65
|
-
export declare function buildEvent(operation: TelemetryOperation, repo: string, iid: number, success: boolean, startTime: number, opts?: {
|
|
66
|
-
error?: string;
|
|
67
|
-
tokens?: TelemetryEvent["tokens"];
|
|
68
|
-
cost?: number;
|
|
69
|
-
model?: string;
|
|
70
|
-
agent?: string;
|
|
71
|
-
mode?: "server" | "local";
|
|
72
|
-
meta?: Record<string, unknown>;
|
|
73
|
-
}): TelemetryEvent;
|
|
74
|
-
export declare function getSummary(): Promise<TelemetrySummary>;
|
|
75
|
-
export declare function getRecentEvents(limit?: number): Promise<TelemetryEvent[]>;
|
|
76
|
-
export declare function getFailurePatterns(): Promise<FailurePattern[]>;
|
|
77
|
-
export interface FailurePattern {
|
|
78
|
-
operation: string;
|
|
79
|
-
errorPattern: string;
|
|
80
|
-
count: number;
|
|
81
|
-
repos: Set<string>;
|
|
82
|
-
firstSeen: string;
|
|
83
|
-
lastSeen: string;
|
|
84
|
-
examples: Array<{
|
|
85
|
-
ts: string;
|
|
86
|
-
repo: string;
|
|
87
|
-
iid: number;
|
|
88
|
-
error: string;
|
|
89
|
-
}>;
|
|
90
|
-
}
|
|
91
|
-
/**
|
|
92
|
-
* Mark failure events as resolved when the underlying issue has been fixed.
|
|
93
|
-
* Matches events by operation and error substring. Resolved events are
|
|
94
|
-
* excluded from getFailurePatterns() and the summary is rebuilt.
|
|
95
|
-
*
|
|
96
|
-
* Returns the number of events resolved.
|
|
97
|
-
*/
|
|
98
|
-
export declare function resolvePatterns(operation: string, errorMatch: string): Promise<number>;
|
|
99
|
-
export {};
|
|
100
|
-
//# sourceMappingURL=telemetry.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../../../../server/forge/core/telemetry.ts"],"names":[],"mappings":"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"}
|