@mikode13/harness 0.1.0 → 1.0.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.
Files changed (46) hide show
  1. package/README.md +35 -26
  2. package/dist/agent/domain/agent.d.ts +5 -0
  3. package/dist/agent/domain/agent.d.ts.map +1 -1
  4. package/dist/agent/domain/errors.d.ts +6 -0
  5. package/dist/agent/domain/errors.d.ts.map +1 -1
  6. package/dist/agent/domain/errors.js +6 -0
  7. package/dist/agent/domain/errors.js.map +1 -1
  8. package/dist/agent/domain/providerFailure.d.ts +6 -0
  9. package/dist/agent/domain/providerFailure.d.ts.map +1 -1
  10. package/dist/agent/domain/providerFailure.js +13 -0
  11. package/dist/agent/domain/providerFailure.js.map +1 -1
  12. package/dist/engines/claude/infrastructure/model/claudeAgent.d.ts +14 -4
  13. package/dist/engines/claude/infrastructure/model/claudeAgent.d.ts.map +1 -1
  14. package/dist/engines/claude/infrastructure/model/claudeAgent.js +130 -25
  15. package/dist/engines/claude/infrastructure/model/claudeAgent.js.map +1 -1
  16. package/dist/engines/codex/infrastructure/model/codexAgent.d.ts +8 -8
  17. package/dist/engines/codex/infrastructure/model/codexAgent.d.ts.map +1 -1
  18. package/dist/engines/codex/infrastructure/model/codexAgent.js +35 -8
  19. package/dist/engines/codex/infrastructure/model/codexAgent.js.map +1 -1
  20. package/dist/factory/infrastructure/agentFactory.d.ts +50 -0
  21. package/dist/factory/infrastructure/agentFactory.d.ts.map +1 -0
  22. package/dist/factory/infrastructure/agentFactory.js +91 -0
  23. package/dist/factory/infrastructure/agentFactory.js.map +1 -0
  24. package/dist/index.d.ts +2 -8
  25. package/dist/index.d.ts.map +1 -1
  26. package/dist/index.js +2 -6
  27. package/dist/index.js.map +1 -1
  28. package/dist/orchestration/domain/model/orchestratorAgent.d.ts +11 -1
  29. package/dist/orchestration/domain/model/orchestratorAgent.d.ts.map +1 -1
  30. package/dist/orchestration/domain/model/orchestratorAgent.js +13 -1
  31. package/dist/orchestration/domain/model/orchestratorAgent.js.map +1 -1
  32. package/dist/retry/domain/model/retryingAgent.d.ts +7 -1
  33. package/dist/retry/domain/model/retryingAgent.d.ts.map +1 -1
  34. package/dist/retry/domain/model/retryingAgent.js +13 -3
  35. package/dist/retry/domain/model/retryingAgent.js.map +1 -1
  36. package/dist/shared/domain/isOneOf.d.ts +3 -0
  37. package/dist/shared/domain/isOneOf.d.ts.map +1 -0
  38. package/dist/shared/domain/isOneOf.js +5 -0
  39. package/dist/shared/domain/isOneOf.js.map +1 -0
  40. package/dist/shared/domain/logger.d.ts +0 -2
  41. package/dist/shared/domain/logger.d.ts.map +1 -1
  42. package/dist/shared/infrastructure/logger.d.ts +5 -0
  43. package/dist/shared/infrastructure/logger.d.ts.map +1 -0
  44. package/dist/shared/infrastructure/logger.js +6 -0
  45. package/dist/shared/infrastructure/logger.js.map +1 -0
  46. package/package.json +60 -57
@@ -0,0 +1,50 @@
1
+ import type { Agent } from '../../agent/domain/agent.ts';
2
+ import { type ClaudeModel, type ClaudeReasoningEffort } from '../../engines/claude/infrastructure/model/claudeAgent.ts';
3
+ import { type CodexModel, type CodexReasoningEffort } from '../../engines/codex/infrastructure/model/codexAgent.ts';
4
+ import type { ILogger } from '../../shared/domain/logger.ts';
5
+ export declare const agentProviders: readonly ["claude", "codex"];
6
+ export type AgentProvider = (typeof agentProviders)[number];
7
+ /** Any provider's model. The engine the provider selects rejects one it does not support. */
8
+ export type AgentModel = ClaudeModel | CodexModel;
9
+ /** Any provider's reasoning effort. The engine the provider selects rejects one it does not support. */
10
+ export type ReasoningEffort = ClaudeReasoningEffort | CodexReasoningEffort;
11
+ export declare function isAgentProvider(value: string): value is AgentProvider;
12
+ export interface CreateAgentOptions {
13
+ /** Defaults to `'opus'` on Claude and `'gpt-5.6-sol'` on Codex. */
14
+ model?: AgentModel;
15
+ /** Defaults to `'high'`. */
16
+ reasoningEffort?: ReasoningEffort;
17
+ /** Maps to the provider's permission-bypass mode. Defaults to `false`. */
18
+ autoApprove?: boolean;
19
+ /** Defaults to warnings on stderr. */
20
+ logger?: ILogger;
21
+ }
22
+ /**
23
+ * Builds the agent for a provider, already wrapped in the harness's retry policy.
24
+ *
25
+ * @throws {InvalidAgentConfigError} for an unknown provider, or a model or reasoning effort
26
+ * the provider does not support.
27
+ * @throws {UnrecoverableError} when Codex cannot be set up, for example because its CLI binary
28
+ * is missing.
29
+ */
30
+ export declare function createAgent(provider: AgentProvider, { model, reasoningEffort, autoApprove, logger }?: CreateAgentOptions): Agent;
31
+ export interface CreateOrchestratorOptions {
32
+ /**
33
+ * Runs every role on one provider, for example when the other one is out of quota. By
34
+ * default Codex plans and executes, and Claude reviews.
35
+ */
36
+ provider?: AgentProvider;
37
+ /** Maps to each provider's permission-bypass mode. Defaults to `false`. */
38
+ autoApprove?: boolean;
39
+ /** Defaults to warnings on stderr. */
40
+ logger?: ILogger;
41
+ }
42
+ /**
43
+ * Builds the planner → executor → reviewer workflow, each role an agent from `createAgent`.
44
+ *
45
+ * @throws {InvalidAgentConfigError} for an unknown provider.
46
+ * @throws {UnrecoverableError} when a Codex role cannot be set up, for example because its CLI
47
+ * binary is missing.
48
+ */
49
+ export declare function createOrchestrator({ provider, autoApprove, logger, }?: CreateOrchestratorOptions): Agent;
50
+ //# sourceMappingURL=agentFactory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agentFactory.d.ts","sourceRoot":"","sources":["../../../src/factory/infrastructure/agentFactory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AAEzD,OAAO,EAEN,KAAK,WAAW,EAChB,KAAK,qBAAqB,EAC1B,MAAM,0DAA0D,CAAC;AAClE,OAAO,EAEN,KAAK,UAAU,EACf,KAAK,oBAAoB,EACzB,MAAM,wDAAwD,CAAC;AAKhE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AAG7D,eAAO,MAAM,cAAc,8BAA+B,CAAC;AAC3D,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAE5D,6FAA6F;AAC7F,MAAM,MAAM,UAAU,GAAG,WAAW,GAAG,UAAU,CAAC;AAClD,wGAAwG;AACxG,MAAM,MAAM,eAAe,GAAG,qBAAqB,GAAG,oBAAoB,CAAC;AAE3E,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,aAAa,CAErE;AAED,MAAM,WAAW,kBAAkB;IAClC,mEAAmE;IACnE,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,4BAA4B;IAC5B,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,0EAA0E;IAC1E,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,sCAAsC;IACtC,MAAM,CAAC,EAAE,OAAO,CAAC;CACjB;AAOD;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAC1B,QAAQ,EAAE,aAAa,EACvB,EAAE,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,MAAqB,EAAE,GAAE,kBAAuB,GACrF,KAAK,CA8BP;AAED,MAAM,WAAW,yBAAyB;IACzC;;;OAGG;IACH,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,2EAA2E;IAC3E,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,sCAAsC;IACtC,MAAM,CAAC,EAAE,OAAO,CAAC;CACjB;AA8BD;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,EAClC,QAAQ,EACR,WAAW,EACX,MAAqB,GACrB,GAAE,yBAA8B,GAAG,KAAK,CAkBxC"}
@@ -0,0 +1,91 @@
1
+ import { InvalidAgentConfigError } from "../../agent/domain/errors.js";
2
+ import { ClaudeAgent, } from "../../engines/claude/infrastructure/model/claudeAgent.js";
3
+ import { CodexAgent, } from "../../engines/codex/infrastructure/model/codexAgent.js";
4
+ import { OrchestratorAgent } from "../../orchestration/domain/model/orchestratorAgent.js";
5
+ import { ReviewerDecisionValidator } from "../../orchestration/infrastructure/model/reviewerDecisionValidator.js";
6
+ import { RetryingAgent } from "../../retry/domain/model/retryingAgent.js";
7
+ import { isOneOf } from "../../shared/domain/isOneOf.js";
8
+ import { Logger } from "../../shared/infrastructure/logger.js";
9
+ export const agentProviders = ['claude', 'codex'];
10
+ export function isAgentProvider(value) {
11
+ return isOneOf(agentProviders, value);
12
+ }
13
+ const defaultModels = {
14
+ claude: 'opus',
15
+ codex: 'gpt-5.6-sol',
16
+ };
17
+ /**
18
+ * Builds the agent for a provider, already wrapped in the harness's retry policy.
19
+ *
20
+ * @throws {InvalidAgentConfigError} for an unknown provider, or a model or reasoning effort
21
+ * the provider does not support.
22
+ * @throws {UnrecoverableError} when Codex cannot be set up, for example because its CLI binary
23
+ * is missing.
24
+ */
25
+ export function createAgent(provider, { model, reasoningEffort, autoApprove, logger = new Logger() } = {}) {
26
+ let engine;
27
+ switch (provider) {
28
+ case 'claude':
29
+ engine = new ClaudeAgent({
30
+ model: model ?? defaultModels.claude,
31
+ reasoningEffort,
32
+ autoApprove,
33
+ logger,
34
+ });
35
+ break;
36
+ case 'codex':
37
+ engine = new CodexAgent({
38
+ model: model ?? defaultModels.codex,
39
+ reasoningEffort,
40
+ autoApprove,
41
+ logger,
42
+ });
43
+ break;
44
+ default: {
45
+ // Reachable from untyped input that skipped `isAgentProvider`.
46
+ const unknownProvider = provider;
47
+ throw new InvalidAgentConfigError(`"${String(unknownProvider)}" is not an agent provider; expected one of: ${agentProviders.join(', ')}`);
48
+ }
49
+ }
50
+ return new RetryingAgent({ inner: engine, logger });
51
+ }
52
+ // A stronger model plans and reviews; a cheaper one executes the plan.
53
+ const orchestratorRoles = {
54
+ default: {
55
+ planner: { provider: 'codex', model: 'gpt-5.6-sol', reasoningEffort: 'high' },
56
+ executor: { provider: 'codex', model: 'gpt-5.6-luna', reasoningEffort: 'xhigh' },
57
+ reviewer: { provider: 'claude', model: 'opus', reasoningEffort: 'high' },
58
+ },
59
+ claude: {
60
+ planner: { provider: 'claude', model: 'opus', reasoningEffort: 'high' },
61
+ executor: { provider: 'claude', model: 'sonnet', reasoningEffort: 'xhigh' },
62
+ reviewer: { provider: 'claude', model: 'opus', reasoningEffort: 'high' },
63
+ },
64
+ codex: {
65
+ planner: { provider: 'codex', model: 'gpt-5.6-sol', reasoningEffort: 'high' },
66
+ executor: { provider: 'codex', model: 'gpt-5.6-luna', reasoningEffort: 'xhigh' },
67
+ reviewer: { provider: 'codex', model: 'gpt-5.6-sol', reasoningEffort: 'high' },
68
+ },
69
+ };
70
+ /**
71
+ * Builds the planner → executor → reviewer workflow, each role an agent from `createAgent`.
72
+ *
73
+ * @throws {InvalidAgentConfigError} for an unknown provider.
74
+ * @throws {UnrecoverableError} when a Codex role cannot be set up, for example because its CLI
75
+ * binary is missing.
76
+ */
77
+ export function createOrchestrator({ provider, autoApprove, logger = new Logger(), } = {}) {
78
+ if (provider !== undefined && !isAgentProvider(provider)) {
79
+ throw new InvalidAgentConfigError(`"${String(provider)}" is not an agent provider; expected one of: ${agentProviders.join(', ')}`);
80
+ }
81
+ const roles = orchestratorRoles[provider ?? 'default'];
82
+ const agentFor = ({ provider, model, reasoningEffort }) => createAgent(provider, { model, reasoningEffort, autoApprove, logger });
83
+ return new OrchestratorAgent({
84
+ plannerAgent: agentFor(roles.planner),
85
+ executorAgent: agentFor(roles.executor),
86
+ reviewerAgent: agentFor(roles.reviewer),
87
+ reviewerDecisionValidator: new ReviewerDecisionValidator(),
88
+ logger,
89
+ });
90
+ }
91
+ //# sourceMappingURL=agentFactory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agentFactory.js","sourceRoot":"","sources":["../../../src/factory/infrastructure/agentFactory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EACN,WAAW,GAGX,MAAM,0DAA0D,CAAC;AAClE,OAAO,EACN,UAAU,GAGV,MAAM,wDAAwD,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uDAAuD,CAAC;AAC1F,OAAO,EAAE,yBAAyB,EAAE,MAAM,uEAAuE,CAAC;AAClH,OAAO,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAC;AAC1E,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAC;AAEzD,OAAO,EAAE,MAAM,EAAE,MAAM,uCAAuC,CAAC;AAE/D,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAU,CAAC;AAQ3D,MAAM,UAAU,eAAe,CAAC,KAAa;IAC5C,OAAO,OAAO,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;AACvC,CAAC;AAaD,MAAM,aAAa,GAAG;IACrB,MAAM,EAAE,MAAM;IACd,KAAK,EAAE,aAAa;CACiC,CAAC;AAEvD;;;;;;;GAOG;AACH,MAAM,UAAU,WAAW,CAC1B,QAAuB,EACvB,EAAE,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,MAAM,EAAE,KAAyB,EAAE;IAEvF,IAAI,MAAa,CAAC;IAElB,QAAQ,QAAQ,EAAE,CAAC;QAClB,KAAK,QAAQ;YACZ,MAAM,GAAG,IAAI,WAAW,CAAC;gBACxB,KAAK,EAAE,KAAK,IAAI,aAAa,CAAC,MAAM;gBACpC,eAAe;gBACf,WAAW;gBACX,MAAM;aACN,CAAC,CAAC;YACH,MAAM;QACP,KAAK,OAAO;YACX,MAAM,GAAG,IAAI,UAAU,CAAC;gBACvB,KAAK,EAAE,KAAK,IAAI,aAAa,CAAC,KAAK;gBACnC,eAAe;gBACf,WAAW;gBACX,MAAM;aACN,CAAC,CAAC;YACH,MAAM;QACP,OAAO,CAAC,CAAC,CAAC;YACT,+DAA+D;YAC/D,MAAM,eAAe,GAAU,QAAQ,CAAC;YACxC,MAAM,IAAI,uBAAuB,CAChC,IAAI,MAAM,CAAC,eAAe,CAAC,gDAAgD,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACtG,CAAC;QACH,CAAC;IACF,CAAC;IAED,OAAO,IAAI,aAAa,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;AACrD,CAAC;AAoBD,uEAAuE;AACvE,MAAM,iBAAiB,GAAG;IACzB,OAAO,EAAE;QACR,OAAO,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,EAAE;QAC7E,QAAQ,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,OAAO,EAAE;QAChF,QAAQ,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE;KACxE;IACD,MAAM,EAAE;QACP,OAAO,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE;QACvE,QAAQ,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,OAAO,EAAE;QAC3E,QAAQ,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE;KACxE;IACD,KAAK,EAAE;QACN,OAAO,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,EAAE;QAC7E,QAAQ,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,OAAO,EAAE;QAChF,QAAQ,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,EAAE;KAC9E;CAID,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAAC,EAClC,QAAQ,EACR,WAAW,EACX,MAAM,GAAG,IAAI,MAAM,EAAE,MACS,EAAE;IAChC,IAAI,QAAQ,KAAK,SAAS,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1D,MAAM,IAAI,uBAAuB,CAChC,IAAI,MAAM,CAAC,QAAQ,CAAC,gDAAgD,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC/F,CAAC;IACH,CAAC;IAED,MAAM,KAAK,GAAG,iBAAiB,CAAC,QAAQ,IAAI,SAAS,CAAC,CAAC;IACvD,MAAM,QAAQ,GAAG,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,eAAe,EAAQ,EAAE,EAAE,CAC/D,WAAW,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC;IAExE,OAAO,IAAI,iBAAiB,CAAC;QAC5B,YAAY,EAAE,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC;QACrC,aAAa,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC;QACvC,aAAa,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC;QACvC,yBAAyB,EAAE,IAAI,yBAAyB,EAAE;QAC1D,MAAM;KACN,CAAC,CAAC;AACJ,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,12 +1,6 @@
1
1
  export type { ILogger } from './shared/domain/logger.ts';
2
- export { CodexAgent } from './engines/codex/infrastructure/model/codexAgent.ts';
3
- export { ClaudeAgent } from './engines/claude/infrastructure/model/claudeAgent.ts';
4
- export { RetryingAgent } from './retry/domain/model/retryingAgent.ts';
5
- export { OrchestratorAgent } from './orchestration/domain/model/orchestratorAgent.ts';
2
+ export { agentProviders, createAgent, createOrchestrator, isAgentProvider, type AgentModel, type AgentProvider, type CreateAgentOptions, type CreateOrchestratorOptions, type ReasoningEffort, } from './factory/infrastructure/agentFactory.ts';
6
3
  export { type Agent, type AgentResponse, type Callback, type ProgressEvent, } from './agent/domain/agent.ts';
7
- export { RecoverableError, UnrecoverableError } from './agent/domain/errors.ts';
4
+ export { InvalidAgentConfigError, RecoverableError, UnrecoverableError, } from './agent/domain/errors.ts';
8
5
  export { isAbortError } from './shared/domain/isAbortError.ts';
9
- export type { ReviewerDecision } from './orchestration/domain/model/reviewerDecision.ts';
10
- export type { Validator } from './orchestration/domain/interface/validator.ts';
11
- export { ReviewerDecisionValidator } from './orchestration/infrastructure/model/reviewerDecisionValidator.ts';
12
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,oDAAoD,CAAC;AAChF,OAAO,EAAE,WAAW,EAAE,MAAM,sDAAsD,CAAC;AACnF,OAAO,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,mDAAmD,CAAC;AACtF,OAAO,EACN,KAAK,KAAK,EACV,KAAK,aAAa,EAClB,KAAK,QAAQ,EACb,KAAK,aAAa,GAClB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAChF,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC/D,YAAY,EAAE,gBAAgB,EAAE,MAAM,kDAAkD,CAAC;AACzF,YAAY,EAAE,SAAS,EAAE,MAAM,+CAA+C,CAAC;AAC/E,OAAO,EAAE,yBAAyB,EAAE,MAAM,mEAAmE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EACN,cAAc,EACd,WAAW,EACX,kBAAkB,EAClB,eAAe,EACf,KAAK,UAAU,EACf,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACvB,KAAK,yBAAyB,EAC9B,KAAK,eAAe,GACpB,MAAM,0CAA0C,CAAC;AAClD,OAAO,EACN,KAAK,KAAK,EACV,KAAK,aAAa,EAClB,KAAK,QAAQ,EACb,KAAK,aAAa,GAClB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACN,uBAAuB,EACvB,gBAAgB,EAChB,kBAAkB,GAClB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC"}
package/dist/index.js CHANGED
@@ -1,9 +1,5 @@
1
- export { CodexAgent } from "./engines/codex/infrastructure/model/codexAgent.js";
2
- export { ClaudeAgent } from "./engines/claude/infrastructure/model/claudeAgent.js";
3
- export { RetryingAgent } from "./retry/domain/model/retryingAgent.js";
4
- export { OrchestratorAgent } from "./orchestration/domain/model/orchestratorAgent.js";
1
+ export { agentProviders, createAgent, createOrchestrator, isAgentProvider, } from "./factory/infrastructure/agentFactory.js";
5
2
  export {} from "./agent/domain/agent.js";
6
- export { RecoverableError, UnrecoverableError } from "./agent/domain/errors.js";
3
+ export { InvalidAgentConfigError, RecoverableError, UnrecoverableError, } from "./agent/domain/errors.js";
7
4
  export { isAbortError } from "./shared/domain/isAbortError.js";
8
- export { ReviewerDecisionValidator } from "./orchestration/infrastructure/model/reviewerDecisionValidator.js";
9
5
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,oDAAoD,CAAC;AAChF,OAAO,EAAE,WAAW,EAAE,MAAM,sDAAsD,CAAC;AACnF,OAAO,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,mDAAmD,CAAC;AACtF,OAAO,EAKN,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAChF,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAG/D,OAAO,EAAE,yBAAyB,EAAE,MAAM,mEAAmE,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EACN,cAAc,EACd,WAAW,EACX,kBAAkB,EAClB,eAAe,GAMf,MAAM,0CAA0C,CAAC;AAClD,OAAO,EAKN,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACN,uBAAuB,EACvB,gBAAgB,EAChB,kBAAkB,GAClB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC"}
@@ -1,14 +1,24 @@
1
1
  import type { Agent, AgentResponse, Callback } from '../../../agent/domain/agent.ts';
2
2
  import type { ReviewerDecision } from './reviewerDecision.ts';
3
3
  import type { Validator } from '../interface/validator.ts';
4
+ import type { ILogger } from '../../../shared/domain/logger.ts';
4
5
  export declare class OrchestratorAgent implements Agent {
5
6
  private plannerAgent;
6
7
  private executorAgent;
7
8
  private reviewerAgent;
8
9
  private reviewerDecisionValidator;
9
10
  private maxAttempts;
10
- constructor(plannerAgent: Agent, executorAgent: Agent, reviewerAgent: Agent, reviewerDecisionValidator: Validator<ReviewerDecision>, maxAttempts?: number);
11
+ private logger;
12
+ constructor({ plannerAgent, executorAgent, reviewerAgent, reviewerDecisionValidator, maxAttempts, logger, }: {
13
+ plannerAgent: Agent;
14
+ executorAgent: Agent;
15
+ reviewerAgent: Agent;
16
+ reviewerDecisionValidator: Validator<ReviewerDecision>;
17
+ maxAttempts?: number;
18
+ logger: ILogger;
19
+ });
11
20
  run(prompt: string, signal: AbortSignal, callback: Callback): Promise<AgentResponse | undefined>;
12
21
  private getReviewerDecision;
22
+ private warn;
13
23
  }
14
24
  //# sourceMappingURL=orchestratorAgent.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"orchestratorAgent.d.ts","sourceRoot":"","sources":["../../../../src/orchestration/domain/model/orchestratorAgent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAErF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAsG3D,qBAAa,iBAAkB,YAAW,KAAK;IAC9C,OAAO,CAAC,YAAY,CAAQ;IAC5B,OAAO,CAAC,aAAa,CAAQ;IAC7B,OAAO,CAAC,aAAa,CAAQ;IAC7B,OAAO,CAAC,yBAAyB,CAA8B;IAC/D,OAAO,CAAC,WAAW,CAAS;gBAG3B,YAAY,EAAE,KAAK,EACnB,aAAa,EAAE,KAAK,EACpB,aAAa,EAAE,KAAK,EACpB,yBAAyB,EAAE,SAAS,CAAC,gBAAgB,CAAC,EACtD,WAAW,SAAI;IAaV,GAAG,CACR,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,WAAW,EACnB,QAAQ,EAAE,QAAQ,GAChB,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;YAmEvB,mBAAmB;CAqCjC"}
1
+ {"version":3,"file":"orchestratorAgent.d.ts","sourceRoot":"","sources":["../../../../src/orchestration/domain/model/orchestratorAgent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAErF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kCAAkC,CAAC;AAuGhE,qBAAa,iBAAkB,YAAW,KAAK;IAC9C,OAAO,CAAC,YAAY,CAAQ;IAC5B,OAAO,CAAC,aAAa,CAAQ;IAC7B,OAAO,CAAC,aAAa,CAAQ;IAC7B,OAAO,CAAC,yBAAyB,CAA8B;IAC/D,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,MAAM,CAAU;gBAEZ,EACX,YAAY,EACZ,aAAa,EACb,aAAa,EACb,yBAAyB,EACzB,WAAe,EACf,MAAM,GACN,EAAE;QACF,YAAY,EAAE,KAAK,CAAC;QACpB,aAAa,EAAE,KAAK,CAAC;QACrB,aAAa,EAAE,KAAK,CAAC;QACrB,yBAAyB,EAAE,SAAS,CAAC,gBAAgB,CAAC,CAAC;QACvD,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,MAAM,EAAE,OAAO,CAAC;KAChB;IAaK,GAAG,CACR,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,WAAW,EACnB,QAAQ,EAAE,QAAQ,GAChB,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;YA+EvB,mBAAmB;IA2CjC,OAAO,CAAC,IAAI;CASZ"}
@@ -1,4 +1,5 @@
1
1
  import { RecoverableError, UnrecoverableError } from "../../../agent/domain/errors.js";
2
+ import { classifyHostFailure, treatErrors } from "../../../agent/domain/providerFailure.js";
2
3
  const getPlannerPrompt = (userPrompt, previousFailureReason) => {
3
4
  const feedback = previousFailureReason
4
5
  ? `\n\nFeedback from the previous attempt:\n---\n${previousFailureReason}\n---`
@@ -80,7 +81,8 @@ export class OrchestratorAgent {
80
81
  reviewerAgent;
81
82
  reviewerDecisionValidator;
82
83
  maxAttempts;
83
- constructor(plannerAgent, executorAgent, reviewerAgent, reviewerDecisionValidator, maxAttempts = 3) {
84
+ logger;
85
+ constructor({ plannerAgent, executorAgent, reviewerAgent, reviewerDecisionValidator, maxAttempts = 3, logger, }) {
84
86
  if (!Number.isInteger(maxAttempts) || maxAttempts < 1) {
85
87
  throw new RangeError('maxAttempts must be a positive integer');
86
88
  }
@@ -89,6 +91,7 @@ export class OrchestratorAgent {
89
91
  this.reviewerAgent = reviewerAgent;
90
92
  this.reviewerDecisionValidator = reviewerDecisionValidator;
91
93
  this.maxAttempts = maxAttempts;
94
+ this.logger = logger;
92
95
  }
93
96
  async run(prompt, signal, callback) {
94
97
  // Per invocation, not per instance: the CLI keeps one orchestrator for a whole session.
@@ -102,6 +105,7 @@ export class OrchestratorAgent {
102
105
  if (isLastAttempt) {
103
106
  throw new UnrecoverableError('Max attempts exhausted', { cause: lastFailureReason });
104
107
  }
108
+ this.warn(`Attempt ${String(attempt)}/${String(this.maxAttempts)}: the planner produced no response; starting another round`);
105
109
  continue;
106
110
  }
107
111
  addToTotals(totals, plannerResponse);
@@ -111,6 +115,7 @@ export class OrchestratorAgent {
111
115
  if (isLastAttempt) {
112
116
  throw new UnrecoverableError('Max attempts exhausted', { cause: lastFailureReason });
113
117
  }
118
+ this.warn(`Attempt ${String(attempt)}/${String(this.maxAttempts)}: the executor produced no response; starting another round`);
114
119
  continue;
115
120
  }
116
121
  addToTotals(totals, executorResponse);
@@ -122,6 +127,7 @@ export class OrchestratorAgent {
122
127
  if (isLastAttempt) {
123
128
  throw new UnrecoverableError('Max attempts exhausted', { cause: lastFailureReason });
124
129
  }
130
+ this.warn(`Attempt ${String(attempt)}/${String(this.maxAttempts)}: the reviewer rejected the round; starting another with its feedback`, lastFailureReason);
125
131
  }
126
132
  throw new UnrecoverableError('Max attempts exhausted', {
127
133
  cause: lastFailureReason ?? 'Unknown failure.',
@@ -147,11 +153,17 @@ export class OrchestratorAgent {
147
153
  if (attempt === this.maxAttempts) {
148
154
  throw new UnrecoverableError('Max attempts exhausted', { cause: parseFailureReason });
149
155
  }
156
+ this.warn(`Reviewer decision ${String(attempt)}/${String(this.maxAttempts)} was unusable; asking the reviewer again`, parseFailureReason);
150
157
  }
151
158
  }
152
159
  throw new UnrecoverableError('Max attempts exhausted', {
153
160
  cause: parseFailureReason ?? 'Unknown failure.',
154
161
  });
155
162
  }
163
+ warn(...args) {
164
+ treatErrors(() => {
165
+ this.logger.warn(...args);
166
+ }, classifyHostFailure, 'Orchestrator logger failed while reporting a retry');
167
+ }
156
168
  }
157
169
  //# sourceMappingURL=orchestratorAgent.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"orchestratorAgent.js","sourceRoot":"","sources":["../../../../src/orchestration/domain/model/orchestratorAgent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"orchestratorAgent.js","sourceRoot":"","sources":["../../../../src/orchestration/domain/model/orchestratorAgent.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,14 @@
1
1
  import type { Agent, AgentResponse, Callback } from '../../../agent/domain/agent.ts';
2
+ import type { ILogger } from '../../../shared/domain/logger.ts';
2
3
  export declare class RetryingAgent implements Agent {
3
4
  private inner;
4
5
  private maxAttempts;
5
- constructor(inner: Agent, maxAttempts?: number);
6
+ private logger;
7
+ constructor({ inner, maxAttempts, logger, }: {
8
+ inner: Agent;
9
+ maxAttempts?: number;
10
+ logger: ILogger;
11
+ });
6
12
  run(prompt: string, signal: AbortSignal, callback: Callback): Promise<AgentResponse | undefined>;
7
13
  }
8
14
  //# sourceMappingURL=retryingAgent.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"retryingAgent.d.ts","sourceRoot":"","sources":["../../../../src/retry/domain/model/retryingAgent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAKrF,qBAAa,aAAc,YAAW,KAAK;IAC1C,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,WAAW,CAAS;gBAEhB,KAAK,EAAE,KAAK,EAAE,WAAW,SAAI;IAKnC,GAAG,CACR,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,WAAW,EACnB,QAAQ,EAAE,QAAQ,GAChB,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;CA2BrC"}
1
+ {"version":3,"file":"retryingAgent.d.ts","sourceRoot":"","sources":["../../../../src/retry/domain/model/retryingAgent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAQrF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kCAAkC,CAAC;AAEhE,qBAAa,aAAc,YAAW,KAAK;IAC1C,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,MAAM,CAAU;gBAEZ,EACX,KAAK,EACL,WAAe,EACf,MAAM,GACN,EAAE;QACF,KAAK,EAAE,KAAK,CAAC;QACb,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,MAAM,EAAE,OAAO,CAAC;KAChB;IAUK,GAAG,CACR,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,WAAW,EACnB,QAAQ,EAAE,QAAQ,GAChB,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;CAuCrC"}
@@ -1,12 +1,17 @@
1
1
  import { RecoverableError, UnrecoverableError } from "../../../agent/domain/errors.js";
2
- import { describeFailure } from "../../../agent/domain/providerFailure.js";
2
+ import { classifyHostFailure, describeFailure, treatErrors, } from "../../../agent/domain/providerFailure.js";
3
3
  import { isAbortError } from "../../../shared/domain/isAbortError.js";
4
4
  export class RetryingAgent {
5
5
  inner;
6
6
  maxAttempts;
7
- constructor(inner, maxAttempts = 3) {
7
+ logger;
8
+ constructor({ inner, maxAttempts = 3, logger, }) {
9
+ if (!Number.isInteger(maxAttempts) || maxAttempts < 1) {
10
+ throw new RangeError('maxAttempts must be a positive integer');
11
+ }
8
12
  this.inner = inner;
9
13
  this.maxAttempts = maxAttempts;
14
+ this.logger = logger;
10
15
  }
11
16
  async run(prompt, signal, callback) {
12
17
  let lastPrompt = null;
@@ -29,7 +34,12 @@ export class RetryingAgent {
29
34
  throw new UnrecoverableError('Max attempts exhausted', {
30
35
  cause: `Gave up after ${String(this.maxAttempts)} attempts. Last failure: ${e.cause}`,
31
36
  });
32
- lastPrompt = `The past prompt failed for the following reason: ${e.cause}`;
37
+ // Keeps the original request: an attempt that failed before the provider registered
38
+ // the turn left no session that remembers it.
39
+ lastPrompt = `${prompt}\n\nThe previous attempt failed for the following reason: ${e.cause}`;
40
+ treatErrors(() => {
41
+ this.logger.warn(`Attempt ${String(attempt)}/${String(this.maxAttempts)} failed; retrying`, e);
42
+ }, classifyHostFailure, 'RetryingAgent logger failed while reporting a retry');
33
43
  }
34
44
  }
35
45
  return undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"retryingAgent.js","sourceRoot":"","sources":["../../../../src/retry/domain/model/retryingAgent.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACvF,OAAO,EAAE,eAAe,EAAE,MAAM,0CAA0C,CAAC;AAC3E,OAAO,EAAE,YAAY,EAAE,MAAM,wCAAwC,CAAC;AAEtE,MAAM,OAAO,aAAa;IACjB,KAAK,CAAQ;IACb,WAAW,CAAS;IAE5B,YAAY,KAAY,EAAE,WAAW,GAAG,CAAC;QACxC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IAChC,CAAC;IAED,KAAK,CAAC,GAAG,CACR,MAAc,EACd,MAAmB,EACnB,QAAkB;QAElB,IAAI,UAAU,GAAkB,IAAI,CAAC;QACrC,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE,EAAE,CAAC;YAC9D,IAAI,CAAC;gBACJ,MAAM,YAAY,GAAG,UAAU,IAAI,MAAM,CAAC;gBAC1C,OAAO,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;YAC7D,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACZ,IAAI,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,kBAAkB;oBAAE,MAAM,CAAC,CAAC;gBAEhE,4EAA4E;gBAC5E,8EAA8E;gBAC9E,4EAA4E;gBAC5E,IAAI,CAAC,CAAC,CAAC,YAAY,gBAAgB,CAAC;oBACnC,MAAM,IAAI,kBAAkB,CAAC,kDAAkD,EAAE;wBAChF,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC;qBACzB,CAAC,CAAC;gBAEJ,IAAI,OAAO,KAAK,IAAI,CAAC,WAAW;oBAC/B,MAAM,IAAI,kBAAkB,CAAC,wBAAwB,EAAE;wBACtD,KAAK,EAAE,iBAAiB,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,4BAA4B,CAAC,CAAC,KAAK,EAAE;qBACrF,CAAC,CAAC;gBAEJ,UAAU,GAAG,oDAAoD,CAAC,CAAC,KAAK,EAAE,CAAC;YAC5E,CAAC;QACF,CAAC;QACD,OAAO,SAAS,CAAC;IAClB,CAAC;CACD"}
1
+ {"version":3,"file":"retryingAgent.js","sourceRoot":"","sources":["../../../../src/retry/domain/model/retryingAgent.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACvF,OAAO,EACN,mBAAmB,EACnB,eAAe,EACf,WAAW,GACX,MAAM,0CAA0C,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,wCAAwC,CAAC;AAGtE,MAAM,OAAO,aAAa;IACjB,KAAK,CAAQ;IACb,WAAW,CAAS;IACpB,MAAM,CAAU;IAExB,YAAY,EACX,KAAK,EACL,WAAW,GAAG,CAAC,EACf,MAAM,GAKN;QACA,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;YACvD,MAAM,IAAI,UAAU,CAAC,wCAAwC,CAAC,CAAC;QAChE,CAAC;QAED,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACtB,CAAC;IAED,KAAK,CAAC,GAAG,CACR,MAAc,EACd,MAAmB,EACnB,QAAkB;QAElB,IAAI,UAAU,GAAkB,IAAI,CAAC;QACrC,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE,EAAE,CAAC;YAC9D,IAAI,CAAC;gBACJ,MAAM,YAAY,GAAG,UAAU,IAAI,MAAM,CAAC;gBAC1C,OAAO,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;YAC7D,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACZ,IAAI,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,kBAAkB;oBAAE,MAAM,CAAC,CAAC;gBAEhE,4EAA4E;gBAC5E,8EAA8E;gBAC9E,4EAA4E;gBAC5E,IAAI,CAAC,CAAC,CAAC,YAAY,gBAAgB,CAAC;oBACnC,MAAM,IAAI,kBAAkB,CAAC,kDAAkD,EAAE;wBAChF,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC;qBACzB,CAAC,CAAC;gBAEJ,IAAI,OAAO,KAAK,IAAI,CAAC,WAAW;oBAC/B,MAAM,IAAI,kBAAkB,CAAC,wBAAwB,EAAE;wBACtD,KAAK,EAAE,iBAAiB,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,4BAA4B,CAAC,CAAC,KAAK,EAAE;qBACrF,CAAC,CAAC;gBAEJ,oFAAoF;gBACpF,8CAA8C;gBAC9C,UAAU,GAAG,GAAG,MAAM,6DAA6D,CAAC,CAAC,KAAK,EAAE,CAAC;gBAC7F,WAAW,CACV,GAAG,EAAE;oBACJ,IAAI,CAAC,MAAM,CAAC,IAAI,CACf,WAAW,MAAM,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,mBAAmB,EACzE,CAAC,CACD,CAAC;gBACH,CAAC,EACD,mBAAmB,EACnB,qDAAqD,CACrD,CAAC;YACH,CAAC;QACF,CAAC;QACD,OAAO,SAAS,CAAC;IAClB,CAAC;CACD"}
@@ -0,0 +1,3 @@
1
+ /** Narrows untyped input, such as a CLI flag, to one of a fixed set of string literals. */
2
+ export declare function isOneOf<T extends string>(values: readonly T[], value: string): value is T;
3
+ //# sourceMappingURL=isOneOf.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isOneOf.d.ts","sourceRoot":"","sources":["../../../src/shared/domain/isOneOf.ts"],"names":[],"mappings":"AAAA,2FAA2F;AAC3F,wBAAgB,OAAO,CAAC,CAAC,SAAS,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,CAAC,CAEzF"}
@@ -0,0 +1,5 @@
1
+ /** Narrows untyped input, such as a CLI flag, to one of a fixed set of string literals. */
2
+ export function isOneOf(values, value) {
3
+ return values.includes(value);
4
+ }
5
+ //# sourceMappingURL=isOneOf.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isOneOf.js","sourceRoot":"","sources":["../../../src/shared/domain/isOneOf.ts"],"names":[],"mappings":"AAAA,2FAA2F;AAC3F,MAAM,UAAU,OAAO,CAAmB,MAAoB,EAAE,KAAa;IAC5E,OAAQ,MAA4B,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACtD,CAAC"}
@@ -1,6 +1,4 @@
1
1
  export interface ILogger {
2
- log: (...args: unknown[]) => void;
3
2
  warn: (...args: unknown[]) => void;
4
- error: (...args: unknown[]) => void;
5
3
  }
6
4
  //# sourceMappingURL=logger.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../src/shared/domain/logger.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,OAAO;IACvB,GAAG,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IAClC,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACnC,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;CACpC"}
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../src/shared/domain/logger.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,OAAO;IACvB,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;CACnC"}
@@ -0,0 +1,5 @@
1
+ import type { ILogger } from '../domain/logger.ts';
2
+ export declare class Logger implements ILogger {
3
+ warn(...args: unknown[]): void;
4
+ }
5
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../src/shared/infrastructure/logger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAEnD,qBAAa,MAAO,YAAW,OAAO;IACrC,IAAI,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;CAG9B"}
@@ -0,0 +1,6 @@
1
+ export class Logger {
2
+ warn(...args) {
3
+ console.warn(...args);
4
+ }
5
+ }
6
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../../src/shared/infrastructure/logger.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,MAAM;IAClB,IAAI,CAAC,GAAG,IAAe;QACtB,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;IACvB,CAAC;CACD"}
package/package.json CHANGED
@@ -1,58 +1,61 @@
1
1
  {
2
- "name": "@mikode13/harness",
3
- "version": "0.1.0",
4
- "description": "Test/agent harness utility",
5
- "type": "module",
6
- "license": "SEE LICENSE IN LICENSE",
7
- "repository": {
8
- "type": "git",
9
- "url": "git+https://github.com/Mikode13/harness.git"
10
- },
11
- "engines": {
12
- "node": "^22.13.0 || ^24.0.0"
13
- },
14
- "main": "./dist/index.js",
15
- "types": "./dist/index.d.ts",
16
- "exports": {
17
- ".": "./dist/index.js"
18
- },
19
- "files": [
20
- "dist"
21
- ],
22
- "publishConfig": {
23
- "access": "public"
24
- },
25
- "devDependencies": {
26
- "@mikode13/code-quality": "0.1.0",
27
- "@mikode13/cross-platform": "0.1.0",
28
- "@mikode13/code-style": "0.1.0",
29
- "@mikode13/git-hooks": "0.1.0",
30
- "@mikode13/tsconfig": "0.1.0",
31
- "@types/node": "^26.1.2",
32
- "@vitest/coverage-v8": "^4.1.11",
33
- "eslint": "^10.8.0",
34
- "prettier": "^3.9.6",
35
- "typescript": "^6.0.3",
36
- "vitest": "^4.1.11"
37
- },
38
- "dependencies": {
39
- "@anthropic-ai/claude-agent-sdk": "^0.3.220",
40
- "@openai/codex-sdk": "^0.146.0",
41
- "zod": "^4.4.3"
42
- },
43
- "scripts": {
44
- "build": "mikode-scripts clean dist && tsc -p tsconfig.build.json",
45
- "typecheck": "tsc --noEmit && tsc --noEmit -p tests && tsc --noEmit -p cli",
46
- "format": "prettier . --write",
47
- "format:check": "prettier . --check",
48
- "lint": "eslint . --max-warnings 0",
49
- "lint:fix": "eslint . --fix",
50
- "dev": "pnpm --filter @mikode13/harness-cli run dev",
51
- "test": "vitest run --project unit --project cli",
52
- "test:unit": "vitest run --project unit --project cli",
53
- "test:unit:watch": "vitest --project unit --project cli",
54
- "test:coverage": "vitest run --project unit --project cli --coverage",
55
- "pack:check": "pnpm run build && node scripts/pack-check.mjs",
56
- "check": "pnpm run format:check && pnpm run lint && pnpm run typecheck"
57
- }
58
- }
2
+ "name": "@mikode13/harness",
3
+ "version": "1.0.0",
4
+ "description": "Test/agent harness utility",
5
+ "type": "module",
6
+ "license": "SEE LICENSE IN LICENSE",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "git+https://github.com/Mikode13/harness.git"
10
+ },
11
+ "engines": {
12
+ "node": "^22.13.0 || ^24.0.0"
13
+ },
14
+ "packageManager": "pnpm@11.17.0",
15
+ "main": "./dist/index.js",
16
+ "types": "./dist/index.d.ts",
17
+ "exports": {
18
+ ".": "./dist/index.js"
19
+ },
20
+ "files": [
21
+ "dist"
22
+ ],
23
+ "publishConfig": {
24
+ "access": "public"
25
+ },
26
+ "scripts": {
27
+ "prepare": "mikode-git-hooks install",
28
+ "prepack": "pnpm run build",
29
+ "build": "mikode-scripts clean dist && tsc -p tsconfig.build.json",
30
+ "typecheck": "tsc --noEmit && tsc --noEmit -p tests && tsc --noEmit -p cli",
31
+ "format": "prettier . --write",
32
+ "format:check": "prettier . --check",
33
+ "lint": "eslint . --max-warnings 0",
34
+ "lint:fix": "eslint . --fix",
35
+ "dev": "pnpm --filter @mikode13/harness-cli run dev",
36
+ "test": "vitest run --project unit --project cli",
37
+ "test:unit": "vitest run --project unit --project cli",
38
+ "test:unit:watch": "vitest --project unit --project cli",
39
+ "test:coverage": "vitest run --project unit --project cli --coverage",
40
+ "pack:check": "pnpm run build && node scripts/pack-check.mjs",
41
+ "check": "pnpm run format:check && pnpm run lint && pnpm run typecheck"
42
+ },
43
+ "devDependencies": {
44
+ "@mikode13/code-quality": "1.0.0",
45
+ "@mikode13/cross-platform": "1.0.0",
46
+ "@mikode13/code-style": "1.0.0",
47
+ "@mikode13/git-hooks": "1.0.0",
48
+ "@mikode13/tsconfig": "1.0.0",
49
+ "@types/node": "^26.1.2",
50
+ "@vitest/coverage-v8": "^4.1.11",
51
+ "eslint": "^10.8.0",
52
+ "prettier": "^3.9.6",
53
+ "typescript": "^6.0.3",
54
+ "vitest": "^4.1.11"
55
+ },
56
+ "dependencies": {
57
+ "@anthropic-ai/claude-agent-sdk": "^0.3.220",
58
+ "@openai/codex-sdk": "^0.154.0",
59
+ "zod": "^4.4.3"
60
+ }
61
+ }