thehood 0.1.0-preview.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/CODE_OF_CONDUCT.md +21 -0
- package/CONTRIBUTING.md +58 -0
- package/LICENSE +21 -0
- package/PRIVACY.md +49 -0
- package/README.md +264 -0
- package/SECURITY.md +31 -0
- package/dist/bridges/chatgptWebBridge.d.ts +2 -0
- package/dist/bridges/chatgptWebBridge.js +981 -0
- package/dist/bridges/chatgptWebBridge.js.map +1 -0
- package/dist/cli/args.d.ts +9 -0
- package/dist/cli/args.js +82 -0
- package/dist/cli/args.js.map +1 -0
- package/dist/cli/format.d.ts +56 -0
- package/dist/cli/format.js +752 -0
- package/dist/cli/format.js.map +1 -0
- package/dist/cli/main.d.ts +2 -0
- package/dist/cli/main.js +996 -0
- package/dist/cli/main.js.map +1 -0
- package/dist/cli/mcpConfig.d.ts +36 -0
- package/dist/cli/mcpConfig.js +98 -0
- package/dist/cli/mcpConfig.js.map +1 -0
- package/dist/index.d.ts +37 -0
- package/dist/index.js +38 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/protocol.d.ts +44 -0
- package/dist/mcp/protocol.js +33 -0
- package/dist/mcp/protocol.js.map +1 -0
- package/dist/mcp/server.d.ts +1 -0
- package/dist/mcp/server.js +106 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/tools.d.ts +10 -0
- package/dist/mcp/tools.js +2200 -0
- package/dist/mcp/tools.js.map +1 -0
- package/dist/mcp/validation.d.ts +8 -0
- package/dist/mcp/validation.js +67 -0
- package/dist/mcp/validation.js.map +1 -0
- package/dist/providers/chatgptWeb.d.ts +2 -0
- package/dist/providers/chatgptWeb.js +26 -0
- package/dist/providers/chatgptWeb.js.map +1 -0
- package/dist/providers/claudeCode.d.ts +4 -0
- package/dist/providers/claudeCode.js +32 -0
- package/dist/providers/claudeCode.js.map +1 -0
- package/dist/providers/codexCli.d.ts +6 -0
- package/dist/providers/codexCli.js +25 -0
- package/dist/providers/codexCli.js.map +1 -0
- package/dist/providers/codexCliModels.d.ts +23 -0
- package/dist/providers/codexCliModels.js +147 -0
- package/dist/providers/codexCliModels.js.map +1 -0
- package/dist/providers/localCommand.d.ts +26 -0
- package/dist/providers/localCommand.js +614 -0
- package/dist/providers/localCommand.js.map +1 -0
- package/dist/providers/markdownPayload.d.ts +7 -0
- package/dist/providers/markdownPayload.js +29 -0
- package/dist/providers/markdownPayload.js.map +1 -0
- package/dist/providers/responseSchema.d.ts +3 -0
- package/dist/providers/responseSchema.js +187 -0
- package/dist/providers/responseSchema.js.map +1 -0
- package/dist/providers/router.d.ts +3 -0
- package/dist/providers/router.js +21 -0
- package/dist/providers/router.js.map +1 -0
- package/dist/providers/stub.d.ts +2 -0
- package/dist/providers/stub.js +177 -0
- package/dist/providers/stub.js.map +1 -0
- package/dist/providers/types.d.ts +37 -0
- package/dist/providers/types.js +2 -0
- package/dist/providers/types.js.map +1 -0
- package/dist/runtime/agentBoard.d.ts +79 -0
- package/dist/runtime/agentBoard.js +166 -0
- package/dist/runtime/agentBoard.js.map +1 -0
- package/dist/runtime/agentBoardArtifact.d.ts +9 -0
- package/dist/runtime/agentBoardArtifact.js +171 -0
- package/dist/runtime/agentBoardArtifact.js.map +1 -0
- package/dist/runtime/agentRunner.d.ts +17 -0
- package/dist/runtime/agentRunner.js +92 -0
- package/dist/runtime/agentRunner.js.map +1 -0
- package/dist/runtime/approvalInbox.d.ts +54 -0
- package/dist/runtime/approvalInbox.js +143 -0
- package/dist/runtime/approvalInbox.js.map +1 -0
- package/dist/runtime/approvalPolicy.d.ts +11 -0
- package/dist/runtime/approvalPolicy.js +58 -0
- package/dist/runtime/approvalPolicy.js.map +1 -0
- package/dist/runtime/artifacts.d.ts +23 -0
- package/dist/runtime/artifacts.js +48 -0
- package/dist/runtime/artifacts.js.map +1 -0
- package/dist/runtime/browserManager.d.ts +37 -0
- package/dist/runtime/browserManager.js +356 -0
- package/dist/runtime/browserManager.js.map +1 -0
- package/dist/runtime/canonicalMemory.d.ts +23 -0
- package/dist/runtime/canonicalMemory.js +134 -0
- package/dist/runtime/canonicalMemory.js.map +1 -0
- package/dist/runtime/chatGptPageReadiness.d.ts +16 -0
- package/dist/runtime/chatGptPageReadiness.js +74 -0
- package/dist/runtime/chatGptPageReadiness.js.map +1 -0
- package/dist/runtime/commandRunner.d.ts +18 -0
- package/dist/runtime/commandRunner.js +115 -0
- package/dist/runtime/commandRunner.js.map +1 -0
- package/dist/runtime/commandSafety.d.ts +7 -0
- package/dist/runtime/commandSafety.js +61 -0
- package/dist/runtime/commandSafety.js.map +1 -0
- package/dist/runtime/config.d.ts +10 -0
- package/dist/runtime/config.js +107 -0
- package/dist/runtime/config.js.map +1 -0
- package/dist/runtime/crewLanes.d.ts +2 -0
- package/dist/runtime/crewLanes.js +123 -0
- package/dist/runtime/crewLanes.js.map +1 -0
- package/dist/runtime/criticPolicy.d.ts +17 -0
- package/dist/runtime/criticPolicy.js +50 -0
- package/dist/runtime/criticPolicy.js.map +1 -0
- package/dist/runtime/defaults.d.ts +5 -0
- package/dist/runtime/defaults.js +100 -0
- package/dist/runtime/defaults.js.map +1 -0
- package/dist/runtime/directives.d.ts +3 -0
- package/dist/runtime/directives.js +218 -0
- package/dist/runtime/directives.js.map +1 -0
- package/dist/runtime/doctor.d.ts +36 -0
- package/dist/runtime/doctor.js +185 -0
- package/dist/runtime/doctor.js.map +1 -0
- package/dist/runtime/errors.d.ts +20 -0
- package/dist/runtime/errors.js +41 -0
- package/dist/runtime/errors.js.map +1 -0
- package/dist/runtime/externalTransfer.d.ts +20 -0
- package/dist/runtime/externalTransfer.js +156 -0
- package/dist/runtime/externalTransfer.js.map +1 -0
- package/dist/runtime/fanout.d.ts +64 -0
- package/dist/runtime/fanout.js +263 -0
- package/dist/runtime/fanout.js.map +1 -0
- package/dist/runtime/gitEvidence.d.ts +10 -0
- package/dist/runtime/gitEvidence.js +80 -0
- package/dist/runtime/gitEvidence.js.map +1 -0
- package/dist/runtime/handoffs.d.ts +32 -0
- package/dist/runtime/handoffs.js +100 -0
- package/dist/runtime/handoffs.js.map +1 -0
- package/dist/runtime/ids.d.ts +2 -0
- package/dist/runtime/ids.js +4 -0
- package/dist/runtime/ids.js.map +1 -0
- package/dist/runtime/localStateIgnore.d.ts +9 -0
- package/dist/runtime/localStateIgnore.js +98 -0
- package/dist/runtime/localStateIgnore.js.map +1 -0
- package/dist/runtime/loop.d.ts +14 -0
- package/dist/runtime/loop.js +1863 -0
- package/dist/runtime/loop.js.map +1 -0
- package/dist/runtime/loopRecommendation.d.ts +109 -0
- package/dist/runtime/loopRecommendation.js +566 -0
- package/dist/runtime/loopRecommendation.js.map +1 -0
- package/dist/runtime/loopResponsibilities.d.ts +2 -0
- package/dist/runtime/loopResponsibilities.js +395 -0
- package/dist/runtime/loopResponsibilities.js.map +1 -0
- package/dist/runtime/loopRunner.d.ts +28 -0
- package/dist/runtime/loopRunner.js +81 -0
- package/dist/runtime/loopRunner.js.map +1 -0
- package/dist/runtime/operatorNextActions.d.ts +2 -0
- package/dist/runtime/operatorNextActions.js +344 -0
- package/dist/runtime/operatorNextActions.js.map +1 -0
- package/dist/runtime/paths.d.ts +9 -0
- package/dist/runtime/paths.js +14 -0
- package/dist/runtime/paths.js.map +1 -0
- package/dist/runtime/permissions.d.ts +9 -0
- package/dist/runtime/permissions.js +73 -0
- package/dist/runtime/permissions.js.map +1 -0
- package/dist/runtime/progressPacket.d.ts +12 -0
- package/dist/runtime/progressPacket.js +512 -0
- package/dist/runtime/progressPacket.js.map +1 -0
- package/dist/runtime/protectedPaths.d.ts +6 -0
- package/dist/runtime/protectedPaths.js +48 -0
- package/dist/runtime/protectedPaths.js.map +1 -0
- package/dist/runtime/providers.d.ts +13 -0
- package/dist/runtime/providers.js +60 -0
- package/dist/runtime/providers.js.map +1 -0
- package/dist/runtime/reconciliation.d.ts +17 -0
- package/dist/runtime/reconciliation.js +283 -0
- package/dist/runtime/reconciliation.js.map +1 -0
- package/dist/runtime/redaction.d.ts +1 -0
- package/dist/runtime/redaction.js +5 -0
- package/dist/runtime/redaction.js.map +1 -0
- package/dist/runtime/remoteRepoContext.d.ts +77 -0
- package/dist/runtime/remoteRepoContext.js +316 -0
- package/dist/runtime/remoteRepoContext.js.map +1 -0
- package/dist/runtime/repoContext.d.ts +50 -0
- package/dist/runtime/repoContext.js +399 -0
- package/dist/runtime/repoContext.js.map +1 -0
- package/dist/runtime/repoGateway.d.ts +64 -0
- package/dist/runtime/repoGateway.js +308 -0
- package/dist/runtime/repoGateway.js.map +1 -0
- package/dist/runtime/responseContracts.d.ts +3 -0
- package/dist/runtime/responseContracts.js +86 -0
- package/dist/runtime/responseContracts.js.map +1 -0
- package/dist/runtime/reviewLanes.d.ts +2 -0
- package/dist/runtime/reviewLanes.js +343 -0
- package/dist/runtime/reviewLanes.js.map +1 -0
- package/dist/runtime/reviewRouting.d.ts +51 -0
- package/dist/runtime/reviewRouting.js +152 -0
- package/dist/runtime/reviewRouting.js.map +1 -0
- package/dist/runtime/revisionPacket.d.ts +38 -0
- package/dist/runtime/revisionPacket.js +144 -0
- package/dist/runtime/revisionPacket.js.map +1 -0
- package/dist/runtime/revisionTrail.d.ts +2 -0
- package/dist/runtime/revisionTrail.js +162 -0
- package/dist/runtime/revisionTrail.js.map +1 -0
- package/dist/runtime/role-assignment.d.ts +4 -0
- package/dist/runtime/role-assignment.js +21 -0
- package/dist/runtime/role-assignment.js.map +1 -0
- package/dist/runtime/roleRoster.d.ts +28 -0
- package/dist/runtime/roleRoster.js +96 -0
- package/dist/runtime/roleRoster.js.map +1 -0
- package/dist/runtime/runInsights.d.ts +121 -0
- package/dist/runtime/runInsights.js +305 -0
- package/dist/runtime/runInsights.js.map +1 -0
- package/dist/runtime/runMonitor.d.ts +33 -0
- package/dist/runtime/runMonitor.js +143 -0
- package/dist/runtime/runMonitor.js.map +1 -0
- package/dist/runtime/runtime.d.ts +15 -0
- package/dist/runtime/runtime.js +199 -0
- package/dist/runtime/runtime.js.map +1 -0
- package/dist/runtime/runtimeInfo.d.ts +9 -0
- package/dist/runtime/runtimeInfo.js +76 -0
- package/dist/runtime/runtimeInfo.js.map +1 -0
- package/dist/runtime/store.d.ts +4 -0
- package/dist/runtime/store.js +48 -0
- package/dist/runtime/store.js.map +1 -0
- package/dist/runtime/summons.d.ts +25 -0
- package/dist/runtime/summons.js +403 -0
- package/dist/runtime/summons.js.map +1 -0
- package/dist/runtime/teamPresets.d.ts +14 -0
- package/dist/runtime/teamPresets.js +153 -0
- package/dist/runtime/teamPresets.js.map +1 -0
- package/dist/runtime/types.d.ts +505 -0
- package/dist/runtime/types.js +28 -0
- package/dist/runtime/types.js.map +1 -0
- package/dist/runtime/validationCommands.d.ts +18 -0
- package/dist/runtime/validationCommands.js +106 -0
- package/dist/runtime/validationCommands.js.map +1 -0
- package/dist/tui/dashboard.d.ts +41 -0
- package/dist/tui/dashboard.js +1115 -0
- package/dist/tui/dashboard.js.map +1 -0
- package/docs/ARCHITECTURE.md +277 -0
- package/docs/CLI_SPEC.md +396 -0
- package/docs/CODEX_SETUP.md +288 -0
- package/docs/COMPLETION_CONTRACT.md +52 -0
- package/docs/CONTRIBUTOR_GUIDE.md +70 -0
- package/docs/DEMO.md +62 -0
- package/docs/GLOSSARY.md +46 -0
- package/docs/GOAL_LOOP_SCHEDULE.md +50 -0
- package/docs/KNOWN_LIMITATIONS.md +29 -0
- package/docs/LICENSING.md +21 -0
- package/docs/LOOP_RECIPES.md +290 -0
- package/docs/LOOP_SELECTION_UX.md +118 -0
- package/docs/MCP_SPEC.md +689 -0
- package/docs/MEMORY_AND_RECONCILIATION.md +222 -0
- package/docs/NPM_PUBLISHING.md +51 -0
- package/docs/OPEN_DECISIONS.md +81 -0
- package/docs/PROMPT_SCHEMAS.md +411 -0
- package/docs/PROVIDER_ADAPTERS.md +323 -0
- package/docs/PROVIDER_MATRIX.md +21 -0
- package/docs/PUBLIC_REPO_READINESS.md +49 -0
- package/docs/RESEARCH_NOTES.md +92 -0
- package/docs/ROADMAP.md +94 -0
- package/docs/ROLE_CONTRACTS.md +252 -0
- package/docs/RUNTIME_LOOP.md +240 -0
- package/docs/SECURITY_AND_PRIVACY.md +161 -0
- package/docs/TESTING_AND_VERIFICATION.md +180 -0
- package/docs/TRUST_MODEL.md +65 -0
- package/docs/decisions/0001-runtime-first-cli-and-mcp.md +23 -0
- package/docs/decisions/0002-provider-neutral-role-mapping.md +43 -0
- package/docs/decisions/0003-separate-implementation-and-verification.md +27 -0
- package/docs/product/README.md +14 -0
- package/docs/product/model-selection.md +88 -0
- package/docs/product/positioning.md +37 -0
- package/docs/product/pro-usage-modes.md +70 -0
- package/docs/product/roadmap.md +57 -0
- package/docs/product/role-policy.md +89 -0
- package/docs/product/runtime-invariants.md +44 -0
- package/docs/release/v0.1.0-preview.0.md +48 -0
- package/examples/stub-demo/README.md +25 -0
- package/package.json +55 -0
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
export const defaultProtectedTestPaths = [
|
|
2
|
+
"**/test/**",
|
|
3
|
+
"**/tests/**",
|
|
4
|
+
"**/*.spec.*",
|
|
5
|
+
"**/*.test.*",
|
|
6
|
+
"**/__snapshots__/**",
|
|
7
|
+
"**/fixtures/**",
|
|
8
|
+
"**/evals/**"
|
|
9
|
+
];
|
|
10
|
+
export const builtinProviders = {
|
|
11
|
+
"chatgpt-web": {
|
|
12
|
+
enabled: true,
|
|
13
|
+
models: ["chatgpt-pro", "configured"],
|
|
14
|
+
accessModes: ["agent-bridge", "mcp-connector"],
|
|
15
|
+
defaultAccessMode: "agent-bridge",
|
|
16
|
+
browserProfile: "default"
|
|
17
|
+
},
|
|
18
|
+
"openai-api": {
|
|
19
|
+
enabled: false,
|
|
20
|
+
models: ["configured"],
|
|
21
|
+
accessModes: ["api-agent"],
|
|
22
|
+
defaultAccessMode: "api-agent",
|
|
23
|
+
apiKeyEnv: "OPENAI_API_KEY"
|
|
24
|
+
},
|
|
25
|
+
"anthropic-api": {
|
|
26
|
+
enabled: false,
|
|
27
|
+
models: ["configured", "claude-opus", "claude-sonnet", "claude-haiku", "opus", "sonnet", "haiku", "mythos", "fable"],
|
|
28
|
+
accessModes: ["api-agent"],
|
|
29
|
+
defaultAccessMode: "api-agent",
|
|
30
|
+
apiKeyEnv: "ANTHROPIC_API_KEY"
|
|
31
|
+
},
|
|
32
|
+
"codex-cli": {
|
|
33
|
+
enabled: true,
|
|
34
|
+
models: ["default", "spark", "configured"],
|
|
35
|
+
accessModes: ["agent-bridge"],
|
|
36
|
+
defaultAccessMode: "agent-bridge"
|
|
37
|
+
},
|
|
38
|
+
"claude-code": {
|
|
39
|
+
enabled: true,
|
|
40
|
+
models: ["default", "configured", "sonnet", "opus", "haiku", "mythos", "fable"],
|
|
41
|
+
accessModes: ["agent-bridge"],
|
|
42
|
+
defaultAccessMode: "agent-bridge"
|
|
43
|
+
},
|
|
44
|
+
stub: {
|
|
45
|
+
enabled: true,
|
|
46
|
+
models: ["orchestrator", "planner", "researcher", "implementer", "qa", "verifier", "critic"],
|
|
47
|
+
accessModes: ["agent-bridge"],
|
|
48
|
+
defaultAccessMode: "agent-bridge"
|
|
49
|
+
},
|
|
50
|
+
local: {
|
|
51
|
+
enabled: false,
|
|
52
|
+
models: ["default"],
|
|
53
|
+
accessModes: ["agent-bridge", "api-agent"],
|
|
54
|
+
defaultAccessMode: "agent-bridge"
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
export const defaultRoles = {
|
|
58
|
+
orchestrator: {
|
|
59
|
+
provider: "codex-cli",
|
|
60
|
+
model: "default"
|
|
61
|
+
},
|
|
62
|
+
implementer: {
|
|
63
|
+
provider: "codex-cli",
|
|
64
|
+
model: "default"
|
|
65
|
+
},
|
|
66
|
+
qa: {
|
|
67
|
+
provider: "codex-cli",
|
|
68
|
+
model: "spark"
|
|
69
|
+
},
|
|
70
|
+
verifier: {
|
|
71
|
+
provider: "codex-cli",
|
|
72
|
+
model: "spark"
|
|
73
|
+
},
|
|
74
|
+
critic: {
|
|
75
|
+
provider: "codex-cli",
|
|
76
|
+
model: "spark"
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
export const createDefaultConfig = () => ({
|
|
80
|
+
version: 1,
|
|
81
|
+
defaults: {
|
|
82
|
+
maxIterations: 8,
|
|
83
|
+
fanoutMaxItems: 8,
|
|
84
|
+
editRequiresApproval: true,
|
|
85
|
+
dependencyInstallRequiresApproval: true,
|
|
86
|
+
networkRequiresApproval: true,
|
|
87
|
+
protectedTestPaths: [...defaultProtectedTestPaths]
|
|
88
|
+
},
|
|
89
|
+
approvalPolicy: {
|
|
90
|
+
mode: "manual",
|
|
91
|
+
externalTransfers: {
|
|
92
|
+
mode: "manual",
|
|
93
|
+
maxAutoApproveBytes: 200_000,
|
|
94
|
+
rules: []
|
|
95
|
+
}
|
|
96
|
+
},
|
|
97
|
+
providers: structuredClone(builtinProviders),
|
|
98
|
+
roles: structuredClone(defaultRoles)
|
|
99
|
+
});
|
|
100
|
+
//# sourceMappingURL=defaults.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/runtime/defaults.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { AgentDirective } from "../providers/types.js";
|
|
2
|
+
import type { JsonObject, RoleAssignment, RunRecord, RuntimeRole } from "./types.js";
|
|
3
|
+
export declare const buildAgentDirective: (run: RunRecord, role: RuntimeRole, assignment: RoleAssignment, context: JsonObject) => Promise<AgentDirective>;
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
import { loadConfig } from "./config.js";
|
|
2
|
+
import { buildCanonicalMemory } from "./canonicalMemory.js";
|
|
3
|
+
import { newId } from "./ids.js";
|
|
4
|
+
import { defaultRolePermissions } from "./permissions.js";
|
|
5
|
+
import { formatRoleAssignment } from "./role-assignment.js";
|
|
6
|
+
import { agentMarkdownField } from "../providers/markdownPayload.js";
|
|
7
|
+
const outputContracts = {
|
|
8
|
+
orchestrator: {
|
|
9
|
+
schemaVersion: 1,
|
|
10
|
+
name: "orchestrator_decision",
|
|
11
|
+
requiredDataKey: "decision"
|
|
12
|
+
},
|
|
13
|
+
planner: {
|
|
14
|
+
schemaVersion: 1,
|
|
15
|
+
name: "planner_decision",
|
|
16
|
+
requiredDataKey: "decision"
|
|
17
|
+
},
|
|
18
|
+
researcher: {
|
|
19
|
+
schemaVersion: 1,
|
|
20
|
+
name: "research_result",
|
|
21
|
+
requiredDataKey: "researchResult"
|
|
22
|
+
},
|
|
23
|
+
implementer: {
|
|
24
|
+
schemaVersion: 1,
|
|
25
|
+
name: "implementation_result",
|
|
26
|
+
requiredDataKey: "implementationResult"
|
|
27
|
+
},
|
|
28
|
+
qa: {
|
|
29
|
+
schemaVersion: 1,
|
|
30
|
+
name: "qa_result",
|
|
31
|
+
requiredDataKey: "qaResult"
|
|
32
|
+
},
|
|
33
|
+
verifier: {
|
|
34
|
+
schemaVersion: 1,
|
|
35
|
+
name: "verification_result",
|
|
36
|
+
requiredDataKey: "verificationResult"
|
|
37
|
+
},
|
|
38
|
+
critic: {
|
|
39
|
+
schemaVersion: 1,
|
|
40
|
+
name: "critique_result",
|
|
41
|
+
requiredDataKey: "critiqueResult"
|
|
42
|
+
},
|
|
43
|
+
integrator: {
|
|
44
|
+
schemaVersion: 1,
|
|
45
|
+
name: "integration_result",
|
|
46
|
+
requiredDataKey: "integrationResult"
|
|
47
|
+
},
|
|
48
|
+
citation: {
|
|
49
|
+
schemaVersion: 1,
|
|
50
|
+
name: "citation_result",
|
|
51
|
+
requiredDataKey: "citationResult"
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
const roleObjectives = {
|
|
55
|
+
orchestrator: "Plan the next step, delegate narrowly, and decide whether more evidence or user approval is needed.",
|
|
56
|
+
planner: "Create a repo-grounded plan with risks, acceptance criteria, and a small execution path.",
|
|
57
|
+
researcher: "Gather relevant facts and source-grounded context without editing files.",
|
|
58
|
+
implementer: "Make only the scoped changes required for the task and report unresolved risks honestly.",
|
|
59
|
+
qa: "Act as a read-only tester: inspect runtime evidence, look for missed cases, and recommend concrete validation without claiming proof.",
|
|
60
|
+
verifier: "Independently validate runtime evidence and recommend approve, revise, abort, or ask_user.",
|
|
61
|
+
critic: "Challenge the plan or patch for missing cases, unsafe assumptions, and better alternatives.",
|
|
62
|
+
integrator: "Apply only approved changes and preserve the target checkout state.",
|
|
63
|
+
citation: "Verify evidence references and attribution without changing source files."
|
|
64
|
+
};
|
|
65
|
+
const roleInstructions = {
|
|
66
|
+
orchestrator: [
|
|
67
|
+
"Do not edit files directly.",
|
|
68
|
+
"Delegate the smallest useful task to one role at a time.",
|
|
69
|
+
"Ask for approval when policy, uncertainty, or protected paths require it.",
|
|
70
|
+
"When approvalPolicy.mode is autopilot, do not ask the user to approve bounded gates the runtime can enforce.",
|
|
71
|
+
"Echo directiveAck exactly in data.decision.thehoodDirectiveAck.",
|
|
72
|
+
"Return structured data matching the output contract."
|
|
73
|
+
],
|
|
74
|
+
planner: [
|
|
75
|
+
"Inspect provided context before proposing work.",
|
|
76
|
+
"Separate facts from assumptions.",
|
|
77
|
+
"Prefer minimal, reversible steps.",
|
|
78
|
+
"When approvalPolicy.mode is autopilot, plan around runtime-enforced gates instead of asking for user approval.",
|
|
79
|
+
"Echo directiveAck exactly in data.decision.thehoodDirectiveAck.",
|
|
80
|
+
"Return structured data matching the output contract."
|
|
81
|
+
],
|
|
82
|
+
researcher: [
|
|
83
|
+
"Do not edit files.",
|
|
84
|
+
"Prefer primary sources and direct repository evidence.",
|
|
85
|
+
"Record uncertainty explicitly.",
|
|
86
|
+
"Echo directiveAck exactly in data.researchResult.thehoodDirectiveAck.",
|
|
87
|
+
"Return structured data matching the output contract."
|
|
88
|
+
],
|
|
89
|
+
implementer: [
|
|
90
|
+
"Change only files needed for the assigned task.",
|
|
91
|
+
"Do not change tests, fixtures, snapshots, or evals unless explicitly approved.",
|
|
92
|
+
"Do not claim final acceptance; verification is separate.",
|
|
93
|
+
"Echo directiveAck exactly in data.implementationResult.thehoodDirectiveAck.",
|
|
94
|
+
"Return structured data matching the output contract."
|
|
95
|
+
],
|
|
96
|
+
qa: [
|
|
97
|
+
"Do not edit files.",
|
|
98
|
+
"Do not run or claim command results unless they are present as runtime-captured evidence in the directive context.",
|
|
99
|
+
"Review plans, diffs, logs, and artifacts for missing cases, product risks, and useful validation commands.",
|
|
100
|
+
"Treat runtime validation evidence as the only source that can prove tests passed.",
|
|
101
|
+
"Echo directiveAck exactly in data.qaResult.thehoodDirectiveAck.",
|
|
102
|
+
"Return structured data matching the output contract."
|
|
103
|
+
],
|
|
104
|
+
verifier: [
|
|
105
|
+
"Do not edit files.",
|
|
106
|
+
"Treat runtime-captured commands, diffs, and logs as stronger evidence than model summaries.",
|
|
107
|
+
"Fail closed when evidence is missing or protected files changed without approval.",
|
|
108
|
+
"Echo directiveAck exactly in data.verificationResult.thehoodDirectiveAck.",
|
|
109
|
+
"Return structured data matching the output contract."
|
|
110
|
+
],
|
|
111
|
+
critic: [
|
|
112
|
+
"Do not edit files.",
|
|
113
|
+
"Focus on concrete risks, missing cases, and unsafe assumptions.",
|
|
114
|
+
"Separate blocking concerns from non-blocking improvements.",
|
|
115
|
+
"Echo directiveAck exactly in data.critiqueResult.thehoodDirectiveAck.",
|
|
116
|
+
"Return structured data matching the output contract."
|
|
117
|
+
],
|
|
118
|
+
integrator: [
|
|
119
|
+
"Apply only approved changes.",
|
|
120
|
+
"Do not expand scope.",
|
|
121
|
+
"Preserve unrelated user work.",
|
|
122
|
+
"Echo directiveAck exactly in data.integrationResult.thehoodDirectiveAck.",
|
|
123
|
+
"Return structured data matching the output contract."
|
|
124
|
+
],
|
|
125
|
+
citation: [
|
|
126
|
+
"Do not edit files.",
|
|
127
|
+
"Verify that cited evidence supports the claim.",
|
|
128
|
+
"Flag missing or weak attribution.",
|
|
129
|
+
"Echo directiveAck exactly in data.citationResult.thehoodDirectiveAck.",
|
|
130
|
+
"Return structured data matching the output contract."
|
|
131
|
+
]
|
|
132
|
+
};
|
|
133
|
+
const canonicalMemoryInstructions = [
|
|
134
|
+
"Ignore stale browser, chat, or provider session context unless it is repeated in TheHood canonicalMemory or the current directive context.",
|
|
135
|
+
"Treat TheHood runtime artifacts, artifact refs, events, and approval records as authoritative.",
|
|
136
|
+
"Do not infer large artifact bodies from canonicalMemory; it is a bounded refs-only index."
|
|
137
|
+
];
|
|
138
|
+
const markdownPayloadInstructions = (requiredDataKey) => [
|
|
139
|
+
"Keep the AgentResponse JSON envelope mechanical and small: status, summary, required control fields, artifact refs, and directive acknowledgement.",
|
|
140
|
+
`Put human-facing plans, reports, reviews, critique, rationale, acceptance criteria, and other long narrative content in data.${requiredDataKey}.${agentMarkdownField} as GitHub-flavored Markdown.`,
|
|
141
|
+
"Do not model long plans or reports as deep nested JSON arrays/objects; use markdown lists or tables inside the markdown string instead."
|
|
142
|
+
];
|
|
143
|
+
const enabledTools = (permissions) => Object.entries(permissions)
|
|
144
|
+
.filter(([, enabled]) => enabled)
|
|
145
|
+
.map(([tool]) => tool);
|
|
146
|
+
const disabledTools = (permissions) => Object.entries(permissions)
|
|
147
|
+
.filter(([, enabled]) => !enabled)
|
|
148
|
+
.map(([tool]) => tool);
|
|
149
|
+
export const buildAgentDirective = async (run, role, assignment, context) => {
|
|
150
|
+
const config = await loadConfig(run.repoPath);
|
|
151
|
+
const toolPermissions = defaultRolePermissions[role];
|
|
152
|
+
const outputContract = outputContracts[role];
|
|
153
|
+
const canonicalMemory = await buildCanonicalMemory(run);
|
|
154
|
+
const outputContractVariables = {
|
|
155
|
+
schemaVersion: outputContract.schemaVersion,
|
|
156
|
+
name: outputContract.name,
|
|
157
|
+
requiredDataKey: outputContract.requiredDataKey
|
|
158
|
+
};
|
|
159
|
+
const directiveAck = {
|
|
160
|
+
runId: run.runId,
|
|
161
|
+
nonce: newId("directive_ack"),
|
|
162
|
+
responseField: "thehoodDirectiveAck"
|
|
163
|
+
};
|
|
164
|
+
return {
|
|
165
|
+
role,
|
|
166
|
+
objective: roleObjectives[role],
|
|
167
|
+
instructions: [
|
|
168
|
+
...roleInstructions[role],
|
|
169
|
+
...markdownPayloadInstructions(outputContract.requiredDataKey),
|
|
170
|
+
...canonicalMemoryInstructions
|
|
171
|
+
],
|
|
172
|
+
toolPermissions,
|
|
173
|
+
outputContract,
|
|
174
|
+
directiveAck,
|
|
175
|
+
variables: {
|
|
176
|
+
directiveAck,
|
|
177
|
+
run: {
|
|
178
|
+
runId: run.runId,
|
|
179
|
+
userGoal: run.userGoal,
|
|
180
|
+
mode: run.mode,
|
|
181
|
+
repoPath: run.repoPath,
|
|
182
|
+
currentState: run.state,
|
|
183
|
+
constraints: run.constraints,
|
|
184
|
+
maxIterations: run.maxIterations,
|
|
185
|
+
approvalPolicy: {
|
|
186
|
+
mode: config.approvalPolicy.mode,
|
|
187
|
+
editRequiresApproval: config.defaults.editRequiresApproval,
|
|
188
|
+
dependencyInstallRequiresApproval: config.defaults.dependencyInstallRequiresApproval,
|
|
189
|
+
networkRequiresApproval: config.defaults.networkRequiresApproval,
|
|
190
|
+
protectedTestPaths: config.defaults.protectedTestPaths,
|
|
191
|
+
externalTransfers: {
|
|
192
|
+
mode: config.approvalPolicy.externalTransfers.mode,
|
|
193
|
+
maxAutoApproveBytes: config.approvalPolicy.externalTransfers.maxAutoApproveBytes
|
|
194
|
+
}
|
|
195
|
+
},
|
|
196
|
+
stopConditions: [
|
|
197
|
+
"terminal_state",
|
|
198
|
+
"approval_required",
|
|
199
|
+
"provider_error",
|
|
200
|
+
"schema_validation_failed",
|
|
201
|
+
"max_iterations"
|
|
202
|
+
]
|
|
203
|
+
},
|
|
204
|
+
role: {
|
|
205
|
+
name: role,
|
|
206
|
+
assignment: formatRoleAssignment(assignment),
|
|
207
|
+
provider: assignment.provider,
|
|
208
|
+
model: assignment.model,
|
|
209
|
+
allowedTools: enabledTools(toolPermissions),
|
|
210
|
+
disallowedTools: disabledTools(toolPermissions),
|
|
211
|
+
outputContract: outputContractVariables
|
|
212
|
+
},
|
|
213
|
+
canonicalMemory,
|
|
214
|
+
context
|
|
215
|
+
}
|
|
216
|
+
};
|
|
217
|
+
};
|
|
218
|
+
//# sourceMappingURL=directives.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"directives.js","sourceRoot":"","sources":["../../src/runtime/directives.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { type RuntimeInfo } from "./runtimeInfo.js";
|
|
2
|
+
import { type CodexCliModelDiscovery } from "../providers/codexCliModels.js";
|
|
3
|
+
import type { ProviderModelPolicy } from "./providers.js";
|
|
4
|
+
import type { ProviderAccessMode, RoleAssignment, RuntimeRole, TheHoodConfig } from "./types.js";
|
|
5
|
+
export interface ProviderHealth {
|
|
6
|
+
id: string;
|
|
7
|
+
enabled: boolean;
|
|
8
|
+
implemented: boolean;
|
|
9
|
+
models: string[];
|
|
10
|
+
accessModes: ProviderAccessMode[];
|
|
11
|
+
defaultAccessMode: ProviderAccessMode;
|
|
12
|
+
modelPolicy: ProviderModelPolicy;
|
|
13
|
+
modelDiscovery?: CodexCliModelDiscovery;
|
|
14
|
+
command?: string;
|
|
15
|
+
commandFound?: boolean;
|
|
16
|
+
issues: string[];
|
|
17
|
+
}
|
|
18
|
+
export interface RoleHealth {
|
|
19
|
+
role: RuntimeRole;
|
|
20
|
+
assignment: RoleAssignment;
|
|
21
|
+
providerEnabled: boolean;
|
|
22
|
+
providerImplemented: boolean;
|
|
23
|
+
modelConfigured: boolean;
|
|
24
|
+
modelPolicy: ProviderModelPolicy;
|
|
25
|
+
modelStatus: "listed" | "passthrough" | "available" | "unavailable" | "unknown";
|
|
26
|
+
modelAvailable?: boolean;
|
|
27
|
+
resolvedModel?: string;
|
|
28
|
+
commandFound?: boolean;
|
|
29
|
+
issues: string[];
|
|
30
|
+
}
|
|
31
|
+
export interface RuntimeHealthReport {
|
|
32
|
+
runtime: RuntimeInfo;
|
|
33
|
+
providers: ProviderHealth[];
|
|
34
|
+
roles: RoleHealth[];
|
|
35
|
+
}
|
|
36
|
+
export declare const inspectRuntimeHealth: (config: TheHoodConfig) => Promise<RuntimeHealthReport>;
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
import { constants } from "node:fs";
|
|
2
|
+
import fs from "node:fs/promises";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { inspectBrowser } from "./browserManager.js";
|
|
5
|
+
import { listProvidersWithRuntimeModels } from "./providers.js";
|
|
6
|
+
import { runtimeInfo } from "./runtimeInfo.js";
|
|
7
|
+
import { codexCliModelAvailable, resolveCodexCliModel } from "../providers/codexCliModels.js";
|
|
8
|
+
const implementedProviderIds = new Set(["stub", "chatgpt-web", "codex-cli", "claude-code"]);
|
|
9
|
+
const commandForProvider = (providerId) => {
|
|
10
|
+
if (providerId === "chatgpt-web") {
|
|
11
|
+
return process.env.THEHOOD_CHATGPT_WEB_COMMAND;
|
|
12
|
+
}
|
|
13
|
+
if (providerId === "codex-cli") {
|
|
14
|
+
return process.env.THEHOOD_CODEX_COMMAND ?? "codex";
|
|
15
|
+
}
|
|
16
|
+
if (providerId === "claude-code") {
|
|
17
|
+
return process.env.THEHOOD_CLAUDE_COMMAND ?? "claude";
|
|
18
|
+
}
|
|
19
|
+
return undefined;
|
|
20
|
+
};
|
|
21
|
+
const executableNames = (command) => {
|
|
22
|
+
if (process.platform !== "win32") {
|
|
23
|
+
return [command];
|
|
24
|
+
}
|
|
25
|
+
const extensions = (process.env.PATHEXT ?? ".EXE;.CMD;.BAT;.COM").split(";");
|
|
26
|
+
return extensions.some((extension) => command.toUpperCase().endsWith(extension.toUpperCase()))
|
|
27
|
+
? [command]
|
|
28
|
+
: extensions.map((extension) => `${command}${extension.toLowerCase()}`);
|
|
29
|
+
};
|
|
30
|
+
const canExecute = async (filePath) => {
|
|
31
|
+
try {
|
|
32
|
+
await fs.access(filePath, constants.X_OK);
|
|
33
|
+
return true;
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
const commandExists = async (command) => {
|
|
40
|
+
if (command.includes("/") || command.includes("\\")) {
|
|
41
|
+
return canExecute(command);
|
|
42
|
+
}
|
|
43
|
+
const pathEntries = (process.env.PATH ?? "").split(path.delimiter).filter(Boolean);
|
|
44
|
+
const names = executableNames(command);
|
|
45
|
+
for (const entry of pathEntries) {
|
|
46
|
+
for (const name of names) {
|
|
47
|
+
if (await canExecute(path.join(entry, name))) {
|
|
48
|
+
return true;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return false;
|
|
53
|
+
};
|
|
54
|
+
const modelConfigured = (provider, assignment) => {
|
|
55
|
+
if (!provider) {
|
|
56
|
+
return false;
|
|
57
|
+
}
|
|
58
|
+
return provider.models.includes(assignment.model) || provider.models.includes("configured");
|
|
59
|
+
};
|
|
60
|
+
const modelStatus = (provider, assignment, available) => {
|
|
61
|
+
if (!provider || !modelConfigured(provider, assignment)) {
|
|
62
|
+
return "unavailable";
|
|
63
|
+
}
|
|
64
|
+
if (provider.id === "codex-cli") {
|
|
65
|
+
if (available === true) {
|
|
66
|
+
return "available";
|
|
67
|
+
}
|
|
68
|
+
if (available === false) {
|
|
69
|
+
return "unavailable";
|
|
70
|
+
}
|
|
71
|
+
return "unknown";
|
|
72
|
+
}
|
|
73
|
+
if (provider.models.includes(assignment.model)) {
|
|
74
|
+
return "listed";
|
|
75
|
+
}
|
|
76
|
+
return provider.modelPolicy === "passthrough" ? "passthrough" : "unknown";
|
|
77
|
+
};
|
|
78
|
+
const modelAvailability = (provider, assignment) => {
|
|
79
|
+
if (provider?.id !== "codex-cli" || !provider.modelDiscovery) {
|
|
80
|
+
return {};
|
|
81
|
+
}
|
|
82
|
+
const available = codexCliModelAvailable(assignment.model, provider.modelDiscovery);
|
|
83
|
+
const resolvedModel = provider.modelDiscovery.status === "available"
|
|
84
|
+
? resolveCodexCliModel(assignment.model, provider.modelDiscovery)
|
|
85
|
+
: undefined;
|
|
86
|
+
return {
|
|
87
|
+
...(available === undefined ? {} : { available }),
|
|
88
|
+
...(resolvedModel ? { resolvedModel } : {})
|
|
89
|
+
};
|
|
90
|
+
};
|
|
91
|
+
const bridgeIssues = (providerId, command) => providerId === "chatgpt-web" && !command ? ["bridge_command_not_configured"] : [];
|
|
92
|
+
const chatGptModelConfirmed = () => process.env.THEHOOD_CHATGPT_WEB_MODEL_CONFIRMED === "1" ||
|
|
93
|
+
process.env.THEHOOD_CHATGPT_WEB_ALLOW_UNVERIFIED_MODEL === "1";
|
|
94
|
+
const chatGptCdpUrl = () => process.env.THEHOOD_CHATGPT_WEB_CDP_URL ?? "http://127.0.0.1:9222";
|
|
95
|
+
const chatGptCdpIssues = async () => {
|
|
96
|
+
const status = await inspectBrowser({ cdpUrl: chatGptCdpUrl() });
|
|
97
|
+
return status.issues;
|
|
98
|
+
};
|
|
99
|
+
const chatGptWebIssues = async (command) => {
|
|
100
|
+
if (!command) {
|
|
101
|
+
return ["bridge_command_not_configured"];
|
|
102
|
+
}
|
|
103
|
+
if (!chatGptModelConfirmed()) {
|
|
104
|
+
return ["model_not_confirmed"];
|
|
105
|
+
}
|
|
106
|
+
return chatGptCdpIssues();
|
|
107
|
+
};
|
|
108
|
+
const providerIssues = (provider, implemented, providerSpecificIssues, command, commandFound) => [
|
|
109
|
+
...(provider.enabled ? [] : ["provider_disabled"]),
|
|
110
|
+
...(implemented ? [] : ["provider_not_implemented"]),
|
|
111
|
+
...(provider.modelDiscovery?.status === "unavailable" ? provider.modelDiscovery.issues : []),
|
|
112
|
+
...providerSpecificIssues,
|
|
113
|
+
...(commandFound === false ? ["command_not_found"] : [])
|
|
114
|
+
];
|
|
115
|
+
const roleIssues = (role, assignment, provider, implemented, providerSpecificIssues, modelAvailable, command, commandFound) => [
|
|
116
|
+
...(provider ? [] : [`provider_not_configured:${assignment.provider}`]),
|
|
117
|
+
...(provider?.enabled === false ? ["provider_disabled"] : []),
|
|
118
|
+
...(implemented ? [] : ["provider_not_implemented"]),
|
|
119
|
+
...providerSpecificIssues,
|
|
120
|
+
...(provider && !modelConfigured(provider, assignment) ? [`model_not_configured:${assignment.model}`] : []),
|
|
121
|
+
...(modelAvailable === false ? [`model_not_available:${assignment.model}`] : []),
|
|
122
|
+
...(commandFound === false ? ["command_not_found"] : [])
|
|
123
|
+
];
|
|
124
|
+
export const inspectRuntimeHealth = async (config) => {
|
|
125
|
+
const providers = listProvidersWithRuntimeModels(config);
|
|
126
|
+
const commandChecks = new Map();
|
|
127
|
+
const providerIssueChecks = new Map();
|
|
128
|
+
for (const provider of providers) {
|
|
129
|
+
const command = commandForProvider(provider.id);
|
|
130
|
+
if (command) {
|
|
131
|
+
commandChecks.set(provider.id, await commandExists(command));
|
|
132
|
+
}
|
|
133
|
+
providerIssueChecks.set(provider.id, provider.id === "chatgpt-web" ? await chatGptWebIssues(command) : bridgeIssues(provider.id, command));
|
|
134
|
+
}
|
|
135
|
+
const providerHealth = providers.map((provider) => {
|
|
136
|
+
const implemented = implementedProviderIds.has(provider.id);
|
|
137
|
+
const command = commandForProvider(provider.id);
|
|
138
|
+
const commandFound = command ? commandChecks.get(provider.id) ?? false : undefined;
|
|
139
|
+
const providerSpecificIssues = providerIssueChecks.get(provider.id) ?? [];
|
|
140
|
+
return {
|
|
141
|
+
id: provider.id,
|
|
142
|
+
enabled: provider.enabled,
|
|
143
|
+
implemented,
|
|
144
|
+
models: provider.models,
|
|
145
|
+
accessModes: provider.accessModes,
|
|
146
|
+
defaultAccessMode: provider.defaultAccessMode,
|
|
147
|
+
modelPolicy: provider.modelPolicy,
|
|
148
|
+
...(provider.modelDiscovery ? { modelDiscovery: provider.modelDiscovery } : {}),
|
|
149
|
+
...(command ? { command } : {}),
|
|
150
|
+
...(commandFound === undefined ? {} : { commandFound }),
|
|
151
|
+
issues: providerIssues(provider, implemented, providerSpecificIssues, command, commandFound)
|
|
152
|
+
};
|
|
153
|
+
});
|
|
154
|
+
const providerById = new Map(providers.map((provider) => [provider.id, provider]));
|
|
155
|
+
const roleHealth = Object.entries(config.roles)
|
|
156
|
+
.sort(([left], [right]) => left.localeCompare(right))
|
|
157
|
+
.map(([role, assignment]) => {
|
|
158
|
+
const provider = providerById.get(assignment.provider);
|
|
159
|
+
const implemented = implementedProviderIds.has(assignment.provider);
|
|
160
|
+
const command = commandForProvider(assignment.provider);
|
|
161
|
+
const commandFound = commandChecks.get(assignment.provider);
|
|
162
|
+
const providerSpecificIssues = providerIssueChecks.get(assignment.provider) ?? [];
|
|
163
|
+
const availability = modelAvailability(provider, assignment);
|
|
164
|
+
const status = modelStatus(provider, assignment, availability.available);
|
|
165
|
+
return {
|
|
166
|
+
role: role,
|
|
167
|
+
assignment,
|
|
168
|
+
providerEnabled: provider?.enabled ?? false,
|
|
169
|
+
providerImplemented: implemented,
|
|
170
|
+
modelConfigured: modelConfigured(provider, assignment),
|
|
171
|
+
modelPolicy: provider?.modelPolicy ?? "listed",
|
|
172
|
+
modelStatus: status,
|
|
173
|
+
...(availability.available === undefined ? {} : { modelAvailable: availability.available }),
|
|
174
|
+
...(availability.resolvedModel ? { resolvedModel: availability.resolvedModel } : {}),
|
|
175
|
+
...(commandFound === undefined ? {} : { commandFound }),
|
|
176
|
+
issues: roleIssues(role, assignment, provider, implemented, providerSpecificIssues, availability.available, command, commandFound)
|
|
177
|
+
};
|
|
178
|
+
});
|
|
179
|
+
return {
|
|
180
|
+
runtime: runtimeInfo,
|
|
181
|
+
providers: providerHealth,
|
|
182
|
+
roles: roleHealth
|
|
183
|
+
};
|
|
184
|
+
};
|
|
185
|
+
//# sourceMappingURL=doctor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/runtime/doctor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export declare class TheHoodError extends Error {
|
|
2
|
+
readonly code: string;
|
|
3
|
+
readonly exitCode: number;
|
|
4
|
+
constructor(message: string, code: string, exitCode?: number);
|
|
5
|
+
}
|
|
6
|
+
export declare class InputError extends TheHoodError {
|
|
7
|
+
constructor(message: string);
|
|
8
|
+
}
|
|
9
|
+
export declare class ApprovalRequiredError extends TheHoodError {
|
|
10
|
+
constructor(message: string);
|
|
11
|
+
}
|
|
12
|
+
export declare class ProviderUnavailableError extends TheHoodError {
|
|
13
|
+
constructor(message: string);
|
|
14
|
+
}
|
|
15
|
+
export declare class PermissionDeniedError extends TheHoodError {
|
|
16
|
+
constructor(message: string);
|
|
17
|
+
}
|
|
18
|
+
export declare class SchemaValidationError extends TheHoodError {
|
|
19
|
+
constructor(message: string);
|
|
20
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
export class TheHoodError extends Error {
|
|
2
|
+
code;
|
|
3
|
+
exitCode;
|
|
4
|
+
constructor(message, code, exitCode = 1) {
|
|
5
|
+
super(message);
|
|
6
|
+
this.code = code;
|
|
7
|
+
this.exitCode = exitCode;
|
|
8
|
+
this.name = "TheHoodError";
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
export class InputError extends TheHoodError {
|
|
12
|
+
constructor(message) {
|
|
13
|
+
super(message, "invalid_input", 2);
|
|
14
|
+
this.name = "InputError";
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
export class ApprovalRequiredError extends TheHoodError {
|
|
18
|
+
constructor(message) {
|
|
19
|
+
super(message, "approval_required", 3);
|
|
20
|
+
this.name = "ApprovalRequiredError";
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
export class ProviderUnavailableError extends TheHoodError {
|
|
24
|
+
constructor(message) {
|
|
25
|
+
super(message, "provider_unavailable", 4);
|
|
26
|
+
this.name = "ProviderUnavailableError";
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
export class PermissionDeniedError extends TheHoodError {
|
|
30
|
+
constructor(message) {
|
|
31
|
+
super(message, "permission_denied", 6);
|
|
32
|
+
this.name = "PermissionDeniedError";
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
export class SchemaValidationError extends TheHoodError {
|
|
36
|
+
constructor(message) {
|
|
37
|
+
super(message, "schema_validation_failed", 7);
|
|
38
|
+
this.name = "SchemaValidationError";
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/runtime/errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,YAAa,SAAQ,KAAK;IAG1B;IACA;IAHX,YACE,OAAe,EACN,IAAY,EACZ,WAAW,CAAC;QAErB,KAAK,CAAC,OAAO,CAAC,CAAC;QAHN,SAAI,GAAJ,IAAI,CAAQ;QACZ,aAAQ,GAAR,QAAQ,CAAI;QAGrB,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;IAC7B,CAAC;CACF;AAED,MAAM,OAAO,UAAW,SAAQ,YAAY;IAC1C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC;QACnC,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC;IAC3B,CAAC;CACF;AAED,MAAM,OAAO,qBAAsB,SAAQ,YAAY;IACrD,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC,CAAC;QACvC,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAC;IACtC,CAAC;CACF;AAED,MAAM,OAAO,wBAAyB,SAAQ,YAAY;IACxD,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,EAAE,sBAAsB,EAAE,CAAC,CAAC,CAAC;QAC1C,IAAI,CAAC,IAAI,GAAG,0BAA0B,CAAC;IACzC,CAAC;CACF;AAED,MAAM,OAAO,qBAAsB,SAAQ,YAAY;IACrD,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC,CAAC;QACvC,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAC;IACtC,CAAC;CACF;AAED,MAAM,OAAO,qBAAsB,SAAQ,YAAY;IACrD,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,EAAE,0BAA0B,EAAE,CAAC,CAAC,CAAC;QAC9C,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAC;IACtC,CAAC;CACF"}
|