@helmiq/crew 0.1.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 (209) hide show
  1. package/defaults/personas/architect.persona.yaml +72 -0
  2. package/defaults/personas/engineer.persona.yaml +137 -0
  3. package/defaults/personas/persona-spec.schema.yaml +149 -0
  4. package/defaults/personas/reviewer.persona.yaml +47 -0
  5. package/defaults/rubrics/adr.rubric.yaml +48 -0
  6. package/defaults/rubrics/code-review.rubric.yaml +39 -0
  7. package/defaults/rubrics/pull-request.rubric.yaml +40 -0
  8. package/dist/actions/actions.test.d.ts +2 -0
  9. package/dist/actions/actions.test.d.ts.map +1 -0
  10. package/dist/actions/actions.test.js +158 -0
  11. package/dist/actions/direct-dispatcher.d.ts +10 -0
  12. package/dist/actions/direct-dispatcher.d.ts.map +1 -0
  13. package/dist/actions/direct-dispatcher.js +27 -0
  14. package/dist/actions/dispatcher.d.ts +11 -0
  15. package/dist/actions/dispatcher.d.ts.map +1 -0
  16. package/dist/actions/dispatcher.js +1 -0
  17. package/dist/actions/index.d.ts +7 -0
  18. package/dist/actions/index.d.ts.map +1 -0
  19. package/dist/actions/index.js +3 -0
  20. package/dist/actions/registry.d.ts +13 -0
  21. package/dist/actions/registry.d.ts.map +1 -0
  22. package/dist/actions/registry.js +40 -0
  23. package/dist/actions/resolver.d.ts +47 -0
  24. package/dist/actions/resolver.d.ts.map +1 -0
  25. package/dist/actions/resolver.js +43 -0
  26. package/dist/cli/cli.test.d.ts +2 -0
  27. package/dist/cli/cli.test.d.ts.map +1 -0
  28. package/dist/cli/cli.test.js +392 -0
  29. package/dist/cli/run.d.ts +45 -0
  30. package/dist/cli/run.d.ts.map +1 -0
  31. package/dist/cli/run.js +236 -0
  32. package/dist/common/errors.d.ts +76 -0
  33. package/dist/common/errors.d.ts.map +1 -0
  34. package/dist/common/errors.js +74 -0
  35. package/dist/config/config.test.d.ts +2 -0
  36. package/dist/config/config.test.d.ts.map +1 -0
  37. package/dist/config/config.test.js +691 -0
  38. package/dist/config/index.d.ts +7 -0
  39. package/dist/config/index.d.ts.map +1 -0
  40. package/dist/config/index.js +4 -0
  41. package/dist/config/loader.d.ts +16 -0
  42. package/dist/config/loader.d.ts.map +1 -0
  43. package/dist/config/loader.js +56 -0
  44. package/dist/config/model-resolver.d.ts +24 -0
  45. package/dist/config/model-resolver.d.ts.map +1 -0
  46. package/dist/config/model-resolver.js +39 -0
  47. package/dist/config/resolver.d.ts +22 -0
  48. package/dist/config/resolver.d.ts.map +1 -0
  49. package/dist/config/resolver.js +115 -0
  50. package/dist/config/schemas.d.ts +266 -0
  51. package/dist/config/schemas.d.ts.map +1 -0
  52. package/dist/config/schemas.js +115 -0
  53. package/dist/context/artifact-reader.d.ts +12 -0
  54. package/dist/context/artifact-reader.d.ts.map +1 -0
  55. package/dist/context/artifact-reader.js +92 -0
  56. package/dist/context/assembler.d.ts +22 -0
  57. package/dist/context/assembler.d.ts.map +1 -0
  58. package/dist/context/assembler.js +126 -0
  59. package/dist/context/code-reader.d.ts +14 -0
  60. package/dist/context/code-reader.d.ts.map +1 -0
  61. package/dist/context/code-reader.js +56 -0
  62. package/dist/context/context.test.d.ts +2 -0
  63. package/dist/context/context.test.d.ts.map +1 -0
  64. package/dist/context/context.test.js +260 -0
  65. package/dist/context/index.d.ts +9 -0
  66. package/dist/context/index.d.ts.map +1 -0
  67. package/dist/context/index.js +5 -0
  68. package/dist/context/section-extractor.d.ts +9 -0
  69. package/dist/context/section-extractor.d.ts.map +1 -0
  70. package/dist/context/section-extractor.js +32 -0
  71. package/dist/context/token-budget.d.ts +11 -0
  72. package/dist/context/token-budget.d.ts.map +1 -0
  73. package/dist/context/token-budget.js +22 -0
  74. package/dist/control/control.test.d.ts +2 -0
  75. package/dist/control/control.test.d.ts.map +1 -0
  76. package/dist/control/control.test.js +137 -0
  77. package/dist/control/id-generator.d.ts +12 -0
  78. package/dist/control/id-generator.d.ts.map +1 -0
  79. package/dist/control/id-generator.js +20 -0
  80. package/dist/control/index.d.ts +5 -0
  81. package/dist/control/index.d.ts.map +1 -0
  82. package/dist/control/index.js +3 -0
  83. package/dist/control/lock-manager.d.ts +13 -0
  84. package/dist/control/lock-manager.d.ts.map +1 -0
  85. package/dist/control/lock-manager.js +72 -0
  86. package/dist/control/run-state.d.ts +16 -0
  87. package/dist/control/run-state.d.ts.map +1 -0
  88. package/dist/control/run-state.js +55 -0
  89. package/dist/engine/composite.d.ts +34 -0
  90. package/dist/engine/composite.d.ts.map +1 -0
  91. package/dist/engine/composite.js +192 -0
  92. package/dist/engine/composite.test.d.ts +2 -0
  93. package/dist/engine/composite.test.d.ts.map +1 -0
  94. package/dist/engine/composite.test.js +1947 -0
  95. package/dist/engine/engine.test.d.ts +2 -0
  96. package/dist/engine/engine.test.d.ts.map +1 -0
  97. package/dist/engine/engine.test.js +334 -0
  98. package/dist/engine/index.d.ts +10 -0
  99. package/dist/engine/index.d.ts.map +1 -0
  100. package/dist/engine/index.js +5 -0
  101. package/dist/engine/llm-client.d.ts +27 -0
  102. package/dist/engine/llm-client.d.ts.map +1 -0
  103. package/dist/engine/llm-client.js +46 -0
  104. package/dist/engine/simple.d.ts +21 -0
  105. package/dist/engine/simple.d.ts.map +1 -0
  106. package/dist/engine/simple.js +59 -0
  107. package/dist/engine/tool-dispatch.d.ts +37 -0
  108. package/dist/engine/tool-dispatch.d.ts.map +1 -0
  109. package/dist/engine/tool-dispatch.js +146 -0
  110. package/dist/engine/tool-dispatch.test.d.ts +2 -0
  111. package/dist/engine/tool-dispatch.test.d.ts.map +1 -0
  112. package/dist/engine/tool-dispatch.test.js +348 -0
  113. package/dist/engine/tool-filter.d.ts +13 -0
  114. package/dist/engine/tool-filter.d.ts.map +1 -0
  115. package/dist/engine/tool-filter.js +25 -0
  116. package/dist/evaluation/evaluation.test.d.ts +2 -0
  117. package/dist/evaluation/evaluation.test.d.ts.map +1 -0
  118. package/dist/evaluation/evaluation.test.js +490 -0
  119. package/dist/evaluation/evaluator.d.ts +19 -0
  120. package/dist/evaluation/evaluator.d.ts.map +1 -0
  121. package/dist/evaluation/evaluator.js +78 -0
  122. package/dist/evaluation/index.d.ts +4 -0
  123. package/dist/evaluation/index.d.ts.map +1 -0
  124. package/dist/evaluation/index.js +2 -0
  125. package/dist/evaluation/scorer.d.ts +38 -0
  126. package/dist/evaluation/scorer.d.ts.map +1 -0
  127. package/dist/evaluation/scorer.js +94 -0
  128. package/dist/index.d.ts +47 -0
  129. package/dist/index.d.ts.map +1 -0
  130. package/dist/index.js +28 -0
  131. package/dist/providers/index.d.ts +2 -0
  132. package/dist/providers/index.d.ts.map +1 -0
  133. package/dist/providers/index.js +1 -0
  134. package/dist/providers/provider-factory.d.ts +11 -0
  135. package/dist/providers/provider-factory.d.ts.map +1 -0
  136. package/dist/providers/provider-factory.js +30 -0
  137. package/dist/publication/frontmatter.d.ts +21 -0
  138. package/dist/publication/frontmatter.d.ts.map +1 -0
  139. package/dist/publication/frontmatter.js +15 -0
  140. package/dist/publication/git-ops.d.ts +18 -0
  141. package/dist/publication/git-ops.d.ts.map +1 -0
  142. package/dist/publication/git-ops.js +74 -0
  143. package/dist/publication/index.d.ts +9 -0
  144. package/dist/publication/index.d.ts.map +1 -0
  145. package/dist/publication/index.js +5 -0
  146. package/dist/publication/provenance-writer.d.ts +27 -0
  147. package/dist/publication/provenance-writer.d.ts.map +1 -0
  148. package/dist/publication/provenance-writer.js +21 -0
  149. package/dist/publication/publication.test.d.ts +2 -0
  150. package/dist/publication/publication.test.d.ts.map +1 -0
  151. package/dist/publication/publication.test.js +235 -0
  152. package/dist/publication/publisher.d.ts +32 -0
  153. package/dist/publication/publisher.d.ts.map +1 -0
  154. package/dist/publication/publisher.js +113 -0
  155. package/dist/publication/secret-scanner.d.ts +6 -0
  156. package/dist/publication/secret-scanner.d.ts.map +1 -0
  157. package/dist/publication/secret-scanner.js +19 -0
  158. package/dist/tools/index.d.ts +4 -0
  159. package/dist/tools/index.d.ts.map +1 -0
  160. package/dist/tools/index.js +2 -0
  161. package/dist/tools/registry.d.ts +15 -0
  162. package/dist/tools/registry.d.ts.map +1 -0
  163. package/dist/tools/registry.js +288 -0
  164. package/dist/tools/registry.test.d.ts +2 -0
  165. package/dist/tools/registry.test.d.ts.map +1 -0
  166. package/dist/tools/registry.test.js +131 -0
  167. package/dist/tools/tool-groups.d.ts +20 -0
  168. package/dist/tools/tool-groups.d.ts.map +1 -0
  169. package/dist/tools/tool-groups.js +48 -0
  170. package/dist/tools/tool-groups.test.d.ts +2 -0
  171. package/dist/tools/tool-groups.test.d.ts.map +1 -0
  172. package/dist/tools/tool-groups.test.js +127 -0
  173. package/dist/types/artifact-store.d.ts +33 -0
  174. package/dist/types/artifact-store.d.ts.map +1 -0
  175. package/dist/types/artifact-store.js +9 -0
  176. package/dist/types/evaluation-rubric.d.ts +18 -0
  177. package/dist/types/evaluation-rubric.d.ts.map +1 -0
  178. package/dist/types/evaluation-rubric.js +1 -0
  179. package/dist/types/index.d.ts +10 -0
  180. package/dist/types/index.d.ts.map +1 -0
  181. package/dist/types/index.js +1 -0
  182. package/dist/types/llm-provider.d.ts +47 -0
  183. package/dist/types/llm-provider.d.ts.map +1 -0
  184. package/dist/types/llm-provider.js +8 -0
  185. package/dist/types/persona-spec.d.ts +79 -0
  186. package/dist/types/persona-spec.d.ts.map +1 -0
  187. package/dist/types/persona-spec.js +1 -0
  188. package/dist/types/project-config.d.ts +28 -0
  189. package/dist/types/project-config.d.ts.map +1 -0
  190. package/dist/types/project-config.js +1 -0
  191. package/dist/types/provenance.d.ts +67 -0
  192. package/dist/types/provenance.d.ts.map +1 -0
  193. package/dist/types/provenance.js +1 -0
  194. package/dist/types/run-state.d.ts +11 -0
  195. package/dist/types/run-state.d.ts.map +1 -0
  196. package/dist/types/run-state.js +1 -0
  197. package/dist/types/tool-runtime.d.ts +43 -0
  198. package/dist/types/tool-runtime.d.ts.map +1 -0
  199. package/dist/types/tool-runtime.js +30 -0
  200. package/dist/workspace/detect.d.ts +11 -0
  201. package/dist/workspace/detect.d.ts.map +1 -0
  202. package/dist/workspace/detect.js +28 -0
  203. package/dist/workspace/detect.test.d.ts +2 -0
  204. package/dist/workspace/detect.test.d.ts.map +1 -0
  205. package/dist/workspace/detect.test.js +53 -0
  206. package/dist/workspace/index.d.ts +2 -0
  207. package/dist/workspace/index.d.ts.map +1 -0
  208. package/dist/workspace/index.js +1 -0
  209. package/package.json +51 -0
@@ -0,0 +1,94 @@
1
+ const WEIGHT_VALUES = {
2
+ blocking: 3,
3
+ important: 2,
4
+ advisory: 1,
5
+ };
6
+ /**
7
+ * Compute a weighted aggregate score from per-criterion scores.
8
+ * blocking=3, important=2, advisory=1
9
+ */
10
+ export function computeAggregate(scores) {
11
+ if (scores.length === 0)
12
+ return 0;
13
+ let weightedSum = 0;
14
+ let totalWeight = 0;
15
+ for (const s of scores) {
16
+ const w = WEIGHT_VALUES[s.weight];
17
+ weightedSum += s.score * w;
18
+ totalWeight += w;
19
+ }
20
+ if (totalWeight === 0)
21
+ return 0;
22
+ return Math.round((weightedSum / totalWeight) * 100) / 100;
23
+ }
24
+ /**
25
+ * Determine pass/fail from per-criterion scores and rubric thresholds.
26
+ *
27
+ * Pass requires:
28
+ * 1. All blocking criteria score >= pass_threshold
29
+ * 2. If aggregate_threshold is set, the weighted aggregate must meet it
30
+ */
31
+ export function determinePassFail(scores, rubric) {
32
+ const { pass_threshold, aggregate_threshold } = rubric.rubric;
33
+ const blockingFailed = scores.filter((s) => s.weight === 'blocking' && s.score < pass_threshold);
34
+ if (blockingFailed.length > 0)
35
+ return false;
36
+ if (aggregate_threshold !== undefined) {
37
+ const aggregate = computeAggregate(scores);
38
+ if (aggregate < aggregate_threshold)
39
+ return false;
40
+ }
41
+ return true;
42
+ }
43
+ /**
44
+ * Parse the LLM's structured evaluation response into typed scores.
45
+ * Expects a JSON array of { name, score, reasoning } objects.
46
+ * Merges the weight from the rubric criteria definitions.
47
+ */
48
+ export function parseEvaluationResponse(text, rubric) {
49
+ let parsed;
50
+ try {
51
+ parsed = JSON.parse(text);
52
+ }
53
+ catch {
54
+ const jsonMatch = /\[[\s\S]*\]/.exec(text);
55
+ if (jsonMatch) {
56
+ parsed = JSON.parse(jsonMatch[0]);
57
+ }
58
+ else {
59
+ return rubric.rubric.criteria.map((c) => ({
60
+ name: c.name,
61
+ weight: c.weight,
62
+ score: 0,
63
+ reasoning: 'Failed to parse evaluation response',
64
+ }));
65
+ }
66
+ }
67
+ if (!Array.isArray(parsed)) {
68
+ return rubric.rubric.criteria.map((c) => ({
69
+ name: c.name,
70
+ weight: c.weight,
71
+ score: 0,
72
+ reasoning: 'Evaluation response was not an array',
73
+ }));
74
+ }
75
+ return rubric.rubric.criteria.map((criterion) => {
76
+ const match = parsed.find((entry) => entry.name?.toLowerCase() === criterion.name.toLowerCase());
77
+ return {
78
+ name: criterion.name,
79
+ weight: criterion.weight,
80
+ score: typeof match?.score === 'number' ? match.score : 0,
81
+ reasoning: match?.reasoning ?? 'No evaluation provided',
82
+ };
83
+ });
84
+ }
85
+ /**
86
+ * Format failure feedback for the refinement callback.
87
+ */
88
+ export function formatFailureFeedback(scores) {
89
+ const failed = scores.filter((s) => s.score < 7);
90
+ if (failed.length === 0)
91
+ return 'Evaluation failed but no specific criteria scored below threshold.';
92
+ const lines = failed.map((s) => `- ${s.name} (${s.weight}, score: ${s.score}/10): ${s.reasoning}`);
93
+ return `The following evaluation criteria need improvement:\n${lines.join('\n')}\n\nPlease revise the artifact to address these issues.`;
94
+ }
@@ -0,0 +1,47 @@
1
+ export { loadConfig, loadYaml, projectConfigPath, loadProjectConfig } from './config/index.js';
2
+ export type { LoadedConfig, ResolverOptions, ResolvedSkills } from './config/index.js';
3
+ export { resolveModel, resolveExecutionModel, resolveEvalModel } from './config/index.js';
4
+ export type { ResolvedModel } from './config/index.js';
5
+ export { assembleContext } from './context/index.js';
6
+ export type { ContextBlock, AssembledContext } from './context/index.js';
7
+ export { readArtifact } from './context/index.js';
8
+ export type { ArtifactReadResult } from './context/index.js';
9
+ export { readCodeFiles } from './context/index.js';
10
+ export type { CodeFileResult } from './context/index.js';
11
+ export { extractSections } from './context/index.js';
12
+ export { countTokens, defaultTokenBudget } from './context/index.js';
13
+ export { executeSimpleTask } from './engine/index.js';
14
+ export type { EngineResult } from './engine/index.js';
15
+ export { executeCompositeTask } from './engine/index.js';
16
+ export type { CompositeResult, CheckpointRecord } from './engine/index.js';
17
+ export { callLlm } from './engine/index.js';
18
+ export type { LlmCallOptions, LlmCallResult } from './engine/index.js';
19
+ export { filterTools } from './engine/index.js';
20
+ export { executeWithToolDispatch, toSchemaOnlyToolSet, filterCrewTools } from './engine/index.js';
21
+ export type { ToolDispatchOptions, ToolDispatchResult } from './engine/index.js';
22
+ export { evaluate } from './evaluation/index.js';
23
+ export { computeAggregate, determinePassFail, parseEvaluationResponse, } from './evaluation/index.js';
24
+ export type { CriterionScore, EvaluationResult } from './evaluation/index.js';
25
+ export { publish } from './publication/index.js';
26
+ export type { PublicationOptions, PublicationResult } from './publication/index.js';
27
+ export { addFrontmatter, parseFrontmatter } from './publication/index.js';
28
+ export type { ArtifactMetadata } from './publication/index.js';
29
+ export { writeProvenance, writeManifest } from './publication/index.js';
30
+ export type { ManifestData } from './publication/index.js';
31
+ export { scanForSecrets } from './publication/index.js';
32
+ export { acquireLock } from './control/index.js';
33
+ export type { LockHandle } from './control/index.js';
34
+ export { transitionState, persistState, loadState } from './control/index.js';
35
+ export { generateRunId, generateIdempotencyKey } from './control/index.js';
36
+ export { executeRunCommand } from './cli/run.js';
37
+ export type { RunCommandOptions, RunCommandResult, ProviderFactory } from './cli/run.js';
38
+ export { resolveProvider } from './providers/index.js';
39
+ export { detectWorkspace, WorkspaceNotFoundError } from './workspace/index.js';
40
+ export { createToolRegistry } from './tools/index.js';
41
+ export type { ToolRegistryOptions } from './tools/index.js';
42
+ export { getAction, listActions, listActionNames, resolveAction, parseWorkItemId, UnknownActionError, DirectDispatcher, } from './actions/index.js';
43
+ export type { ActionDefinition, ActionTrack, ActionIdLevel, ResolvedAction, ActionResult, ResolveOptions, ActionDispatcher, } from './actions/index.js';
44
+ export { CrewError, ConfigNotFoundError, PersonaNotFoundError, RubricNotFoundError, SkillNotFoundError, SchemaValidationError, ModelNotFoundError, ModelNotAllowedError, LlmCallError, PublicationError, SecretDetectedError, LockAcquisitionError, InvalidStateTransitionError, ArtifactStoreError, } from './common/errors.js';
45
+ export type { PersonaSpec, ProjectConfig, SourceConfig, WorkspaceConfig, LlmConfig, Provider, EvaluationRubric, RunStatus, RunRecord, Provenance, LlmProvider, GenerateTextOptions, GenerateTextResult, LlmMessage, ToolCallRecord, ToolDefinition, ToolSet, ArtifactStore, ArtifactRecord, ArtifactVersion, ArtifactListFilter, ArtifactWriteResult, CrewTool, CrewToolSet, ToolExecutionContext, ToolExecutionRecord, ToolLogger, } from './types/index.js';
46
+ export { createNullToolContext } from './types/index.js';
47
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js ADDED
@@ -0,0 +1,28 @@
1
+ export { loadConfig, loadYaml, projectConfigPath, loadProjectConfig } from './config/index.js';
2
+ export { resolveModel, resolveExecutionModel, resolveEvalModel } from './config/index.js';
3
+ export { assembleContext } from './context/index.js';
4
+ export { readArtifact } from './context/index.js';
5
+ export { readCodeFiles } from './context/index.js';
6
+ export { extractSections } from './context/index.js';
7
+ export { countTokens, defaultTokenBudget } from './context/index.js';
8
+ export { executeSimpleTask } from './engine/index.js';
9
+ export { executeCompositeTask } from './engine/index.js';
10
+ export { callLlm } from './engine/index.js';
11
+ export { filterTools } from './engine/index.js';
12
+ export { executeWithToolDispatch, toSchemaOnlyToolSet, filterCrewTools } from './engine/index.js';
13
+ export { evaluate } from './evaluation/index.js';
14
+ export { computeAggregate, determinePassFail, parseEvaluationResponse, } from './evaluation/index.js';
15
+ export { publish } from './publication/index.js';
16
+ export { addFrontmatter, parseFrontmatter } from './publication/index.js';
17
+ export { writeProvenance, writeManifest } from './publication/index.js';
18
+ export { scanForSecrets } from './publication/index.js';
19
+ export { acquireLock } from './control/index.js';
20
+ export { transitionState, persistState, loadState } from './control/index.js';
21
+ export { generateRunId, generateIdempotencyKey } from './control/index.js';
22
+ export { executeRunCommand } from './cli/run.js';
23
+ export { resolveProvider } from './providers/index.js';
24
+ export { detectWorkspace, WorkspaceNotFoundError } from './workspace/index.js';
25
+ export { createToolRegistry } from './tools/index.js';
26
+ export { getAction, listActions, listActionNames, resolveAction, parseWorkItemId, UnknownActionError, DirectDispatcher, } from './actions/index.js';
27
+ export { CrewError, ConfigNotFoundError, PersonaNotFoundError, RubricNotFoundError, SkillNotFoundError, SchemaValidationError, ModelNotFoundError, ModelNotAllowedError, LlmCallError, PublicationError, SecretDetectedError, LockAcquisitionError, InvalidStateTransitionError, ArtifactStoreError, } from './common/errors.js';
28
+ export { createNullToolContext } from './types/index.js';
@@ -0,0 +1,2 @@
1
+ export { resolveProvider } from './provider-factory.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1 @@
1
+ export { resolveProvider } from './provider-factory.js';
@@ -0,0 +1,11 @@
1
+ import type { LlmProvider } from '../types/index.js';
2
+ import type { ResolvedModel } from '../config/model-resolver.js';
3
+ /**
4
+ * Resolve a provider from the model config using dynamic imports.
5
+ *
6
+ * Provider packages are loaded at runtime so `@helmiq/crew` does not
7
+ * declare a package.json dependency on them (which would create a cycle
8
+ * since providers depend on crew for the LlmProvider contract).
9
+ */
10
+ export declare function resolveProvider(model: ResolvedModel): Promise<LlmProvider>;
11
+ //# sourceMappingURL=provider-factory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-factory.d.ts","sourceRoot":"","sources":["../../src/providers/provider-factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAWjE;;;;;;GAMG;AACH,wBAAsB,eAAe,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,WAAW,CAAC,CAsBhF"}
@@ -0,0 +1,30 @@
1
+ const PROVIDER_PACKAGES = {
2
+ anthropic: '@helmiq/anthropic-sdk',
3
+ cursor: '@helmiq/cursor-sdk',
4
+ };
5
+ /**
6
+ * Resolve a provider from the model config using dynamic imports.
7
+ *
8
+ * Provider packages are loaded at runtime so `@helmiq/crew` does not
9
+ * declare a package.json dependency on them (which would create a cycle
10
+ * since providers depend on crew for the LlmProvider contract).
11
+ */
12
+ export async function resolveProvider(model) {
13
+ const apiKey = process.env[model.apiKeyEnv];
14
+ if (!apiKey) {
15
+ throw new Error(`Environment variable '${model.apiKeyEnv}' is not set (required for provider '${model.provider}')`);
16
+ }
17
+ const packageName = PROVIDER_PACKAGES[model.provider];
18
+ if (!packageName) {
19
+ const available = Object.keys(PROVIDER_PACKAGES).join(', ');
20
+ throw new Error(`Unsupported provider: '${model.provider}'. Available: ${available}`);
21
+ }
22
+ let mod;
23
+ try {
24
+ mod = (await import(packageName));
25
+ }
26
+ catch {
27
+ throw new Error(`Failed to load provider package '${packageName}'. Is it installed?`);
28
+ }
29
+ return model.provider === 'cursor' ? mod.createProvider({ apiKey }) : mod.createProvider(apiKey);
30
+ }
@@ -0,0 +1,21 @@
1
+ export interface ArtifactMetadata {
2
+ author: string;
3
+ run_id: string;
4
+ status: string;
5
+ timestamp: string;
6
+ eval_score?: number;
7
+ eval_pass?: boolean;
8
+ }
9
+ /**
10
+ * Prepend YAML frontmatter to a Markdown artifact.
11
+ */
12
+ export declare function addFrontmatter(content: string, metadata: ArtifactMetadata): string;
13
+ /**
14
+ * Parse YAML frontmatter from a Markdown artifact.
15
+ * Returns the content body and the parsed metadata.
16
+ */
17
+ export declare function parseFrontmatter(raw: string): {
18
+ content: string;
19
+ data: Record<string, unknown>;
20
+ };
21
+ //# sourceMappingURL=frontmatter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frontmatter.d.ts","sourceRoot":"","sources":["../../src/publication/frontmatter.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,gBAAgB,GAAG,MAAM,CAElF;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG;IAC7C,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B,CAGA"}
@@ -0,0 +1,15 @@
1
+ import matter from 'gray-matter';
2
+ /**
3
+ * Prepend YAML frontmatter to a Markdown artifact.
4
+ */
5
+ export function addFrontmatter(content, metadata) {
6
+ return matter.stringify(content, metadata);
7
+ }
8
+ /**
9
+ * Parse YAML frontmatter from a Markdown artifact.
10
+ * Returns the content body and the parsed metadata.
11
+ */
12
+ export function parseFrontmatter(raw) {
13
+ const { content, data } = matter(raw);
14
+ return { content, data };
15
+ }
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Stage, commit, and optionally push a file in a Git repo.
3
+ * Returns the commit SHA.
4
+ */
5
+ export declare function commitAndPush(repoPath: string, filePaths: string[], message: string, push: boolean, branch?: string): Promise<string>;
6
+ /**
7
+ * Create and checkout a new branch in a repo.
8
+ */
9
+ export declare function createBranch(repoPath: string, branchName: string): Promise<void>;
10
+ /**
11
+ * Get the current HEAD commit SHA.
12
+ */
13
+ export declare function getHeadSha(repoPath: string): Promise<string>;
14
+ /**
15
+ * Reset the last commit (soft, local only -- before any push).
16
+ */
17
+ export declare function resetLastCommit(repoPath: string): Promise<void>;
18
+ //# sourceMappingURL=git-ops.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-ops.d.ts","sourceRoot":"","sources":["../../src/publication/git-ops.ts"],"names":[],"mappings":"AAeA;;;GAGG;AACH,wBAAsB,aAAa,CACjC,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EAAE,EACnB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,OAAO,EACb,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,CAAC,CAmBjB;AAkBD;;GAEG;AACH,wBAAsB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAUtF;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAIlE;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGrE"}
@@ -0,0 +1,74 @@
1
+ import { simpleGit } from 'simple-git';
2
+ import { PublicationError } from '../common/errors.js';
3
+ const GIT_PUSH_RETRIES = 2;
4
+ const GIT_PUSH_DELAY_MS = 2000;
5
+ function git(cwd) {
6
+ return simpleGit(cwd);
7
+ }
8
+ async function sleep(ms) {
9
+ return new Promise((resolve) => setTimeout(resolve, ms));
10
+ }
11
+ /**
12
+ * Stage, commit, and optionally push a file in a Git repo.
13
+ * Returns the commit SHA.
14
+ */
15
+ export async function commitAndPush(repoPath, filePaths, message, push, branch) {
16
+ const g = git(repoPath);
17
+ try {
18
+ await g.add(filePaths);
19
+ const commitResult = await g.commit(message, filePaths);
20
+ const sha = commitResult.commit || 'unknown';
21
+ if (push) {
22
+ await pushWithRetry(g, branch);
23
+ }
24
+ return sha;
25
+ }
26
+ catch (err) {
27
+ throw new PublicationError(`Git commit/push failed in ${repoPath}: ${err instanceof Error ? err.message : String(err)}`, { cause: err, stage: 'git-commit' });
28
+ }
29
+ }
30
+ async function pushWithRetry(g, branch) {
31
+ for (let attempt = 0; attempt <= GIT_PUSH_RETRIES; attempt++) {
32
+ try {
33
+ if (branch) {
34
+ await g.push('origin', branch);
35
+ }
36
+ else {
37
+ await g.push();
38
+ }
39
+ return;
40
+ }
41
+ catch (err) {
42
+ if (attempt === GIT_PUSH_RETRIES)
43
+ throw err;
44
+ await sleep(GIT_PUSH_DELAY_MS);
45
+ }
46
+ }
47
+ }
48
+ /**
49
+ * Create and checkout a new branch in a repo.
50
+ */
51
+ export async function createBranch(repoPath, branchName) {
52
+ const g = git(repoPath);
53
+ try {
54
+ await g.checkoutLocalBranch(branchName);
55
+ }
56
+ catch (err) {
57
+ throw new PublicationError(`Failed to create branch '${branchName}' in ${repoPath}: ${err instanceof Error ? err.message : String(err)}`, { cause: err, stage: 'git-branch' });
58
+ }
59
+ }
60
+ /**
61
+ * Get the current HEAD commit SHA.
62
+ */
63
+ export async function getHeadSha(repoPath) {
64
+ const g = git(repoPath);
65
+ const log = await g.log({ maxCount: 1 });
66
+ return log.latest?.hash ?? 'unknown';
67
+ }
68
+ /**
69
+ * Reset the last commit (soft, local only -- before any push).
70
+ */
71
+ export async function resetLastCommit(repoPath) {
72
+ const g = git(repoPath);
73
+ await g.reset(['--soft', 'HEAD~1']);
74
+ }
@@ -0,0 +1,9 @@
1
+ export { publish } from './publisher.js';
2
+ export type { PublicationOptions, PublicationResult } from './publisher.js';
3
+ export { addFrontmatter, parseFrontmatter } from './frontmatter.js';
4
+ export type { ArtifactMetadata } from './frontmatter.js';
5
+ export { commitAndPush, createBranch, getHeadSha, resetLastCommit } from './git-ops.js';
6
+ export { writeProvenance, writeManifest } from './provenance-writer.js';
7
+ export type { ManifestData } from './provenance-writer.js';
8
+ export { scanForSecrets } from './secret-scanner.js';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/publication/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,YAAY,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAC5E,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpE,YAAY,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACxF,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACxE,YAAY,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,5 @@
1
+ export { publish } from './publisher.js';
2
+ export { addFrontmatter, parseFrontmatter } from './frontmatter.js';
3
+ export { commitAndPush, createBranch, getHeadSha, resetLastCommit } from './git-ops.js';
4
+ export { writeProvenance, writeManifest } from './provenance-writer.js';
5
+ export { scanForSecrets } from './secret-scanner.js';
@@ -0,0 +1,27 @@
1
+ import type { Provenance } from '../types/index.js';
2
+ export interface ManifestData {
3
+ run_id: string;
4
+ artifacts_repo: {
5
+ commit_sha: string;
6
+ artifacts_referenced: {
7
+ type: string;
8
+ path: string;
9
+ status: string;
10
+ }[];
11
+ };
12
+ target_repo?: {
13
+ branch: string;
14
+ commit_sha: string;
15
+ pr_number?: number;
16
+ };
17
+ story_id?: string;
18
+ }
19
+ /**
20
+ * Write the provenance record for a run.
21
+ */
22
+ export declare function writeProvenance(runDir: string, provenance: Provenance): Promise<string>;
23
+ /**
24
+ * Write the cross-repo run manifest.
25
+ */
26
+ export declare function writeManifest(runDir: string, manifest: ManifestData): Promise<string>;
27
+ //# sourceMappingURL=provenance-writer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provenance-writer.d.ts","sourceRoot":"","sources":["../../src/publication/provenance-writer.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEpD,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE;QACd,UAAU,EAAE,MAAM,CAAC;QACnB,oBAAoB,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,EAAE,CAAC;KACxE,CAAC;IACF,WAAW,CAAC,EAAE;QACZ,MAAM,EAAE,MAAM,CAAC;QACf,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAK7F;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAK3F"}
@@ -0,0 +1,21 @@
1
+ import { writeFile, mkdir } from 'node:fs/promises';
2
+ import { join } from 'node:path';
3
+ import { stringify as yamlStringify } from 'yaml';
4
+ /**
5
+ * Write the provenance record for a run.
6
+ */
7
+ export async function writeProvenance(runDir, provenance) {
8
+ await mkdir(runDir, { recursive: true });
9
+ const filePath = join(runDir, 'provenance.yaml');
10
+ await writeFile(filePath, yamlStringify(provenance), 'utf-8');
11
+ return filePath;
12
+ }
13
+ /**
14
+ * Write the cross-repo run manifest.
15
+ */
16
+ export async function writeManifest(runDir, manifest) {
17
+ await mkdir(runDir, { recursive: true });
18
+ const filePath = join(runDir, 'manifest.yaml');
19
+ await writeFile(filePath, yamlStringify({ manifest }), 'utf-8');
20
+ return filePath;
21
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=publication.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publication.test.d.ts","sourceRoot":"","sources":["../../src/publication/publication.test.ts"],"names":[],"mappings":""}