@oisincoveney/pipeline 3.19.5 → 3.20.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/dist/argo-submit.d.ts +2 -0
- package/dist/argo-submit.js +3 -0
- package/dist/cli/doctor.d.ts +1 -1
- package/dist/cli/doctor.js +2 -2
- package/dist/cli/format.js +1 -1
- package/dist/cli/program.d.ts +1 -1
- package/dist/cli/run-command.d.ts +1 -1
- package/dist/cli/run-resolver.d.ts +1 -1
- package/dist/cli/run-service.d.ts +1 -1
- package/dist/cli/submit-options.js +10 -2
- package/dist/commands/pipeline-command.js +1 -1
- package/dist/commands/ticket/shared.d.ts +1 -1
- package/dist/commands/ticket-command.d.ts +2 -1
- package/dist/config/schemas.d.ts +1 -1
- package/dist/context/repo-map.js +2 -2
- package/dist/credentials/broker.d.ts +1 -1
- package/dist/install-commands/opencode.js +1 -1
- package/dist/install-commands/planner.js +1 -1
- package/dist/install-hooks.js +1 -1
- package/dist/loop/argo-poll.js +2 -2
- package/dist/loop/loop-command.js +1 -1
- package/dist/loop/merge.js +1 -1
- package/dist/moka-global-config.d.ts +1 -0
- package/dist/moka-global-config.js +1 -0
- package/dist/moka-submit.d.ts +5 -0
- package/dist/moka-submit.js +1 -0
- package/dist/planning/generate.js +1 -1
- package/dist/remote/argo/model.d.ts +2 -0
- package/dist/remote/argo/model.js +1 -0
- package/dist/remote/argo/storage.js +27 -6
- package/dist/remote/submit/argo-submission.d.ts +1 -0
- package/dist/remote/submit/argo-submission.js +1 -0
- package/dist/remote/submit/io.js +2 -2
- package/dist/run-control/contracts.d.ts +1 -1
- package/dist/run-control/contracts.js +1 -1
- package/dist/run-control/detach.js +1 -1
- package/dist/run-control/next-node.js +1 -1
- package/dist/run-control/run-artifacts-command.js +1 -1
- package/dist/run-control/run-command-domain.js +2 -2
- package/dist/run-control/runtime-reporter.js +1 -1
- package/dist/run-control/store-paths.js +1 -1
- package/dist/run-control/submit-result.js +1 -1
- package/dist/run-control/supervisor.js +2 -2
- package/dist/run-state/git-refs.js +1 -1
- package/dist/runner-command/run.js +1 -1
- package/dist/runtime/actor-ids.d.ts +1 -1
- package/dist/runtime/agent-node/index.js +2 -2
- package/dist/runtime/builtins/index.js +2 -2
- package/dist/runtime/changed-files/changed-files.js +1 -1
- package/dist/runtime/changed-files/index.js +2 -2
- package/dist/runtime/command-executor/index.js +2 -2
- package/dist/runtime/context/index.js +2 -2
- package/dist/runtime/contracts/index.d.ts +2 -1
- package/dist/runtime/drain-merge/index.js +2 -2
- package/dist/runtime/events/events.js +2 -2
- package/dist/runtime/events/index.js +2 -2
- package/dist/runtime/gates/index.js +5 -5
- package/dist/runtime/gates/kinds/acceptance/acceptance.js +1 -1
- package/dist/runtime/hooks/command-hook.js +1 -1
- package/dist/runtime/hooks/index.js +2 -2
- package/dist/runtime/json-validation/index.js +2 -2
- package/dist/runtime/node-protocol/node-protocol.js +1 -1
- package/dist/runtime/node-state-store.js +1 -1
- package/dist/runtime/open-pull-request/index.js +2 -2
- package/dist/runtime/opencode-session-executor.js +1 -1
- package/dist/runtime/parallel-node/index.js +2 -2
- package/dist/runtime/retry.js +1 -1
- package/dist/runtime/scheduler.js +1 -1
- package/dist/runtime/services/backlog-service.d.ts +1 -1
- package/dist/runtime/services/backlog-service.js +1 -1
- package/dist/runtime/services/drain-merge-git-service.js +2 -2
- package/dist/runtime/services/kubernetes-argo-service.js +1 -1
- package/dist/runtime/services/run-journal-file-service.js +1 -1
- package/dist/tickets/backlog-task-store.js +1 -1
- package/dist/tickets/completion/complete-ticket.js +1 -1
- package/dist/tickets/ticket-graph.js +2 -2
- package/dist/tickets/ticket-plan.d.ts +1 -1
- package/docs/operator-guide.md +7 -0
- package/package.json +7 -1
package/dist/argo-submit.d.ts
CHANGED
|
@@ -34,6 +34,7 @@ declare const submitRunnerArgoWorkflowOptionsSchema: z.ZodObject<{
|
|
|
34
34
|
}, z.core.$strict>>;
|
|
35
35
|
name: z.ZodOptional<z.ZodString>;
|
|
36
36
|
namespace: z.ZodString;
|
|
37
|
+
npmRegistryAuthSecretName: z.ZodOptional<z.ZodString>;
|
|
37
38
|
payloadJson: z.ZodString;
|
|
38
39
|
serviceAccountName: z.ZodOptional<z.ZodString>;
|
|
39
40
|
scheduleYaml: z.ZodString;
|
|
@@ -68,6 +69,7 @@ declare const submitDynamicRunnerArgoWorkflowOptionsSchema: z.ZodObject<{
|
|
|
68
69
|
}, z.core.$strict>>;
|
|
69
70
|
name: z.ZodOptional<z.ZodString>;
|
|
70
71
|
namespace: z.ZodString;
|
|
72
|
+
npmRegistryAuthSecretName: z.ZodOptional<z.ZodString>;
|
|
71
73
|
payloadJson: z.ZodString;
|
|
72
74
|
serviceAccountName: z.ZodOptional<z.ZodString>;
|
|
73
75
|
workflowId: z.ZodString;
|
package/dist/argo-submit.js
CHANGED
|
@@ -48,6 +48,7 @@ const submitRunnerArgoWorkflowBaseOptionShape = {
|
|
|
48
48
|
mcpGatewayAuth: mcpGatewayAuthOptionSchema.optional(),
|
|
49
49
|
name: z.string().min(1).optional(),
|
|
50
50
|
namespace: z.string().min(1),
|
|
51
|
+
npmRegistryAuthSecretName: z.string().min(1).optional(),
|
|
51
52
|
payloadJson: z.string().min(1),
|
|
52
53
|
serviceAccountName: z.string().min(1).optional()
|
|
53
54
|
};
|
|
@@ -113,6 +114,7 @@ function submitRunnerArgoWorkflowEffect(rawOptions, dependencies) {
|
|
|
113
114
|
labels,
|
|
114
115
|
name: options.name,
|
|
115
116
|
namespace: options.namespace,
|
|
117
|
+
npmRegistryAuthSecretName: options.npmRegistryAuthSecretName,
|
|
116
118
|
payloadConfigMapName,
|
|
117
119
|
plan: compiled.plan,
|
|
118
120
|
scheduleConfigMapName: scheduleArtifactConfigMapName,
|
|
@@ -215,6 +217,7 @@ function submitDynamicRunnerArgoWorkflowEffect(rawOptions, dependencies) {
|
|
|
215
217
|
labels,
|
|
216
218
|
name: options.name,
|
|
217
219
|
namespace: options.namespace,
|
|
220
|
+
npmRegistryAuthSecretName: options.npmRegistryAuthSecretName,
|
|
218
221
|
payloadConfigMapName,
|
|
219
222
|
serviceAccountName: options.serviceAccountName,
|
|
220
223
|
workflowId: options.workflowId
|
package/dist/cli/doctor.d.ts
CHANGED
package/dist/cli/doctor.js
CHANGED
|
@@ -9,8 +9,8 @@ import { execa } from "execa";
|
|
|
9
9
|
import { join } from "node:path";
|
|
10
10
|
import matter from "gray-matter";
|
|
11
11
|
//#region src/cli/doctor.ts
|
|
12
|
-
const HEADLESS_AGENT_PERMISSION_VALUES = new Set(["ask"]);
|
|
13
|
-
const RUN_READINESS_CATEGORIES = new Set([
|
|
12
|
+
const HEADLESS_AGENT_PERMISSION_VALUES = /* @__PURE__ */ new Set(["ask"]);
|
|
13
|
+
const RUN_READINESS_CATEGORIES = /* @__PURE__ */ new Set([
|
|
14
14
|
"acceptance",
|
|
15
15
|
"green",
|
|
16
16
|
"intake",
|
package/dist/cli/format.js
CHANGED
|
@@ -137,4 +137,4 @@ function truncateMiddle(text, maxLength) {
|
|
|
137
137
|
return `${text.slice(0, keep)}\n... truncated ...\n${text.slice(-keep)}`;
|
|
138
138
|
}
|
|
139
139
|
//#endregion
|
|
140
|
-
export { createTerminalRuntimeReporter, formatDoctorResult, formatRuntimeFailure, formatRuntimeResult };
|
|
140
|
+
export { createTerminalRuntimeReporter, formatDoctorResult, formatRuntimeFailure, formatRuntimeProgressMessage, formatRuntimeResult };
|
package/dist/cli/program.d.ts
CHANGED
|
@@ -11,4 +11,4 @@ interface CliProgramOptions {
|
|
|
11
11
|
declare function createCliProgram(options?: CliProgramOptions): Command;
|
|
12
12
|
declare function runCli(argv: string[]): Promise<void>;
|
|
13
13
|
//#endregion
|
|
14
|
-
export { createCliProgram, runCli };
|
|
14
|
+
export { CliProgramOptions, createCliProgram, runCli };
|
|
@@ -33,4 +33,4 @@ interface RunResolution {
|
|
|
33
33
|
target: MokaRunTarget;
|
|
34
34
|
}
|
|
35
35
|
//#endregion
|
|
36
|
-
export { RunResolution, RunResolverFlags };
|
|
36
|
+
export { LocalRuntimeExecution, MOKA_RUN_EFFORTS, MOKA_RUN_TARGETS, MokaRunEffort, MokaRunMode, MokaRunTarget, RemoteSubmitExecution, RunResolution, RunResolverFlags };
|
|
@@ -26,4 +26,4 @@ interface RunControlOptions {
|
|
|
26
26
|
declare function execute(description: string, options?: ExecuteOptions): Promise<void>;
|
|
27
27
|
declare function quick(description: string, options?: Omit<ExecuteOptions, "entrypoint">): Promise<void>;
|
|
28
28
|
//#endregion
|
|
29
|
-
export { execute, quick };
|
|
29
|
+
export { ExecuteOptions, RunControlOptions, RunStoreMode, execute, quick };
|
|
@@ -12,8 +12,12 @@ function resolveOptionalSecretRef(flags, fromGlobalConfig) {
|
|
|
12
12
|
};
|
|
13
13
|
return fromGlobalConfig;
|
|
14
14
|
}
|
|
15
|
+
function resolveOptionalSecretName(flags, fromGlobalConfig) {
|
|
16
|
+
if (flags.skip) return;
|
|
17
|
+
return flags.secretName ?? fromGlobalConfig;
|
|
18
|
+
}
|
|
15
19
|
function addMokaSubmitOptions(command) {
|
|
16
|
-
return addRunnerArgoOptions(command.option("--quick", "submit the compact graph").option("--command", "treat input after -- as explicit argv").option("--schedule <path>", "approved schedule YAML to submit").option("--event-url <url>", "runner event sink URL").option("--open-pr", "append an open-pull-request delivery node (preview-labelled PR)").option("--task <text>", "task description for command-mode metadata").option("--db-auth-secret-name <name>", "override momokaya.submit.dbAuth secret name").option("--db-auth-secret-key <key>", "override momokaya.submit.dbAuth secret key").option("--skip-db-auth", "omit MOKA_DB_URL injection regardless of global config").option("--mcp-gateway-auth-secret-name <name>", "override momokaya.submit.mcpGatewayAuth secret name").option("--mcp-gateway-auth-secret-key <key>", "override momokaya.submit.mcpGatewayAuth secret key").option("--skip-mcp-gateway-auth", "omit PIPELINE_MCP_GATEWAY_AUTHORIZATION injection regardless of global config"), { kubeconfig: true });
|
|
20
|
+
return addRunnerArgoOptions(command.option("--quick", "submit the compact graph").option("--command", "treat input after -- as explicit argv").option("--schedule <path>", "approved schedule YAML to submit").option("--event-url <url>", "runner event sink URL").option("--open-pr", "append an open-pull-request delivery node (preview-labelled PR)").option("--task <text>", "task description for command-mode metadata").option("--db-auth-secret-name <name>", "override momokaya.submit.dbAuth secret name").option("--db-auth-secret-key <key>", "override momokaya.submit.dbAuth secret key").option("--skip-db-auth", "omit MOKA_DB_URL injection regardless of global config").option("--mcp-gateway-auth-secret-name <name>", "override momokaya.submit.mcpGatewayAuth secret name").option("--mcp-gateway-auth-secret-key <key>", "override momokaya.submit.mcpGatewayAuth secret key").option("--skip-mcp-gateway-auth", "omit PIPELINE_MCP_GATEWAY_AUTHORIZATION injection regardless of global config").option("--npm-registry-auth-secret-name <name>", "override momokaya.submit.npmRegistryAuthSecretName").option("--skip-npm-registry-auth", "omit the /root/.npmrc mount regardless of global config"), { kubeconfig: true });
|
|
17
21
|
}
|
|
18
22
|
function runMokaSubmitFromCli(input, flags) {
|
|
19
23
|
const cwd = process.env.PIPELINE_TARGET_PATH ?? process.cwd();
|
|
@@ -68,6 +72,10 @@ function mokaCommonSubmitOptions(input) {
|
|
|
68
72
|
kubeconfigPath: input.flags.kubeconfig ?? momokaya?.kubernetes.kubeconfig,
|
|
69
73
|
name: input.flags.name,
|
|
70
74
|
namespace: input.flags.namespace ?? momokaya?.kubernetes.namespace,
|
|
75
|
+
npmRegistryAuthSecretName: resolveOptionalSecretName({
|
|
76
|
+
secretName: input.flags.npmRegistryAuthSecretName,
|
|
77
|
+
skip: input.flags.skipNpmRegistryAuth
|
|
78
|
+
}, momokaya?.submit.npmRegistryAuthSecretName),
|
|
71
79
|
serviceAccountName: input.flags.serviceAccount ?? momokaya?.submit.serviceAccountName,
|
|
72
80
|
worktreePath: input.cwd
|
|
73
81
|
};
|
|
@@ -112,4 +120,4 @@ function parseImagePullPolicy(value) {
|
|
|
112
120
|
return "Always";
|
|
113
121
|
}
|
|
114
122
|
//#endregion
|
|
115
|
-
export { addMokaSubmitOptions, buildMokaSubmitInputFromCli, runMokaSubmitFromCli };
|
|
123
|
+
export { addMokaSubmitOptions, buildMokaSubmitInputFromCli, parseImagePullPolicy, runMokaSubmitFromCli };
|
package/dist/config/schemas.d.ts
CHANGED
|
@@ -583,4 +583,4 @@ interface PipelineConfigValidationOptions {
|
|
|
583
583
|
allowMissingLintFileReferences?: boolean;
|
|
584
584
|
}
|
|
585
585
|
//#endregion
|
|
586
|
-
export { GateKind, HookEvent, McpGatewayBackendLocality, McpGatewayWorkspacePathSource, PipelineConfig, PipelineConfigError, PipelineConfigErrorCode, PipelineConfigIssue, PipelineConfigParts, PipelineConfigValidationOptions, RunnerType, ScheduleBaseline, SchedulingRole, WorkflowNodeKind, workflowSchema };
|
|
586
|
+
export { GateKind, HookEvent, McpGatewayBackendLocality, McpGatewayWorkspacePathSource, PipelineConfig, PipelineConfigError, PipelineConfigErrorCode, PipelineConfigIssue, PipelineConfigParts, PipelineConfigValidationOptions, RunnerType, ScheduleBaseline, SchedulingRole, WorkflowNodeKind, configSchema, workflowSchema };
|
package/dist/context/repo-map.js
CHANGED
|
@@ -7,7 +7,7 @@ import { Query } from "web-tree-sitter";
|
|
|
7
7
|
import Graph from "graphology";
|
|
8
8
|
import pagerank from "graphology-metrics/centrality/pagerank.js";
|
|
9
9
|
//#region src/context/repo-map.ts
|
|
10
|
-
const SOURCE_EXTENSIONS = new Set([
|
|
10
|
+
const SOURCE_EXTENSIONS = /* @__PURE__ */ new Set([
|
|
11
11
|
".cjs",
|
|
12
12
|
".js",
|
|
13
13
|
".jsx",
|
|
@@ -15,7 +15,7 @@ const SOURCE_EXTENSIONS = new Set([
|
|
|
15
15
|
".ts",
|
|
16
16
|
".tsx"
|
|
17
17
|
]);
|
|
18
|
-
const SKIP_DIRS = new Set([
|
|
18
|
+
const SKIP_DIRS = /* @__PURE__ */ new Set([
|
|
19
19
|
"node_modules",
|
|
20
20
|
".git",
|
|
21
21
|
"dist",
|
|
@@ -413,4 +413,4 @@ const opencodeAdapter = {
|
|
|
413
413
|
}
|
|
414
414
|
};
|
|
415
415
|
//#endregion
|
|
416
|
-
export { agentDispatchRoutes, entrypointDispatchBlock, grants, header, markdown, opencodeAdapter, projectAgentsMdDefinition, resolvedHostModel };
|
|
416
|
+
export { agentDispatchRoutes, entrypointDispatchBlock, grants, header, markdown, opencodeAdapter, projectAgentsMdDefinition, resolvedHostModel, shouldEmbedProjectGateway };
|
|
@@ -15,7 +15,7 @@ const ADAPTERS = {
|
|
|
15
15
|
opencode: opencodeAdapter,
|
|
16
16
|
"claude-code": claudeCodeAdapter
|
|
17
17
|
};
|
|
18
|
-
const GLOBAL_EXCLUDED_PATHS = new Set(["AGENTS.md"]);
|
|
18
|
+
const GLOBAL_EXCLUDED_PATHS = /* @__PURE__ */ new Set(["AGENTS.md"]);
|
|
19
19
|
const GENERATED_CONTENT_MARKERS = [
|
|
20
20
|
GENERATED_MARKER,
|
|
21
21
|
GENERATED_TS_MARKER,
|
package/dist/install-hooks.js
CHANGED
|
@@ -20,7 +20,7 @@ const HOST_TARGET_ROOT = {
|
|
|
20
20
|
codex: ".codex",
|
|
21
21
|
opencode: ".opencode"
|
|
22
22
|
};
|
|
23
|
-
const NON_HOOK_OWNED_TARGETS = new Set([".opencode/opencode.json"]);
|
|
23
|
+
const NON_HOOK_OWNED_TARGETS = /* @__PURE__ */ new Set([".opencode/opencode.json"]);
|
|
24
24
|
function hashContent(content) {
|
|
25
25
|
return createHash("sha256").update(content).digest("hex");
|
|
26
26
|
}
|
package/dist/loop/argo-poll.js
CHANGED
|
@@ -2,12 +2,12 @@ import { isRecord } from "../safe-json.js";
|
|
|
2
2
|
import { Duration, Effect } from "effect";
|
|
3
3
|
import { CustomObjectsApi, KubeConfig } from "@kubernetes/client-node";
|
|
4
4
|
//#region src/loop/argo-poll.ts
|
|
5
|
-
const TERMINAL_PHASES = new Set([
|
|
5
|
+
const TERMINAL_PHASES = /* @__PURE__ */ new Set([
|
|
6
6
|
"Succeeded",
|
|
7
7
|
"Failed",
|
|
8
8
|
"Error"
|
|
9
9
|
]);
|
|
10
|
-
const KNOWN_RUNNING_PHASES = new Set([
|
|
10
|
+
const KNOWN_RUNNING_PHASES = /* @__PURE__ */ new Set([
|
|
11
11
|
"Running",
|
|
12
12
|
"Pending",
|
|
13
13
|
""
|
package/dist/loop/merge.js
CHANGED
|
@@ -33,6 +33,7 @@ declare const mokaGlobalConfigSchema: z.ZodObject<{
|
|
|
33
33
|
gitCredentialsSecretName: z.ZodString;
|
|
34
34
|
githubAuthSecretName: z.ZodString;
|
|
35
35
|
imagePullSecretName: z.ZodString;
|
|
36
|
+
npmRegistryAuthSecretName: z.ZodOptional<z.ZodString>;
|
|
36
37
|
serviceAccountName: z.ZodString;
|
|
37
38
|
}, z.core.$strict>;
|
|
38
39
|
}, z.core.$strict>;
|
|
@@ -26,6 +26,7 @@ const mokaSubmitGlobalConfigSchema = z.object({
|
|
|
26
26
|
gitCredentialsSecretName: z.string().min(1),
|
|
27
27
|
githubAuthSecretName: z.string().min(1),
|
|
28
28
|
imagePullSecretName: z.string().min(1),
|
|
29
|
+
npmRegistryAuthSecretName: z.string().min(1).optional(),
|
|
29
30
|
serviceAccountName: z.string().min(1)
|
|
30
31
|
}).strict();
|
|
31
32
|
const mokaKubernetesGlobalConfigSchema = z.object({
|
package/dist/moka-submit.d.ts
CHANGED
|
@@ -201,6 +201,7 @@ declare const mokaSubmitBaseOptionsSchema: z.ZodObject<{
|
|
|
201
201
|
kubeconfigPath: z.ZodOptional<z.ZodString>;
|
|
202
202
|
name: z.ZodOptional<z.ZodString>;
|
|
203
203
|
namespace: z.ZodOptional<z.ZodString>;
|
|
204
|
+
npmRegistryAuthSecretName: z.ZodOptional<z.ZodString>;
|
|
204
205
|
repository: z.ZodOptional<z.ZodObject<{
|
|
205
206
|
baseBranch: z.ZodString;
|
|
206
207
|
headBranch: z.ZodOptional<z.ZodString>;
|
|
@@ -315,6 +316,7 @@ declare const mokaGraphSubmitOptionsSchema: z.ZodObject<{
|
|
|
315
316
|
kubeconfigPath: z.ZodOptional<z.ZodString>;
|
|
316
317
|
name: z.ZodOptional<z.ZodString>;
|
|
317
318
|
namespace: z.ZodOptional<z.ZodString>;
|
|
319
|
+
npmRegistryAuthSecretName: z.ZodOptional<z.ZodString>;
|
|
318
320
|
repository: z.ZodOptional<z.ZodObject<{
|
|
319
321
|
baseBranch: z.ZodString;
|
|
320
322
|
headBranch: z.ZodOptional<z.ZodString>;
|
|
@@ -446,6 +448,7 @@ declare const mokaCommandSubmitOptionsSchema: z.ZodObject<{
|
|
|
446
448
|
kubeconfigPath: z.ZodOptional<z.ZodString>;
|
|
447
449
|
name: z.ZodOptional<z.ZodString>;
|
|
448
450
|
namespace: z.ZodOptional<z.ZodString>;
|
|
451
|
+
npmRegistryAuthSecretName: z.ZodOptional<z.ZodString>;
|
|
449
452
|
repository: z.ZodOptional<z.ZodObject<{
|
|
450
453
|
baseBranch: z.ZodString;
|
|
451
454
|
headBranch: z.ZodOptional<z.ZodString>;
|
|
@@ -572,6 +575,7 @@ declare const mokaSubmitOptionsSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
|
572
575
|
kubeconfigPath: z.ZodOptional<z.ZodString>;
|
|
573
576
|
name: z.ZodOptional<z.ZodString>;
|
|
574
577
|
namespace: z.ZodOptional<z.ZodString>;
|
|
578
|
+
npmRegistryAuthSecretName: z.ZodOptional<z.ZodString>;
|
|
575
579
|
repository: z.ZodOptional<z.ZodObject<{
|
|
576
580
|
baseBranch: z.ZodString;
|
|
577
581
|
headBranch: z.ZodOptional<z.ZodString>;
|
|
@@ -702,6 +706,7 @@ declare const mokaSubmitOptionsSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
|
702
706
|
kubeconfigPath: z.ZodOptional<z.ZodString>;
|
|
703
707
|
name: z.ZodOptional<z.ZodString>;
|
|
704
708
|
namespace: z.ZodOptional<z.ZodString>;
|
|
709
|
+
npmRegistryAuthSecretName: z.ZodOptional<z.ZodString>;
|
|
705
710
|
repository: z.ZodOptional<z.ZodObject<{
|
|
706
711
|
baseBranch: z.ZodString;
|
|
707
712
|
headBranch: z.ZodOptional<z.ZodString>;
|
package/dist/moka-submit.js
CHANGED
|
@@ -70,6 +70,7 @@ const mokaSubmitBaseOptionsSchema = z.object({
|
|
|
70
70
|
kubeconfigPath: z.string().min(1).optional(),
|
|
71
71
|
name: z.string().min(1).optional(),
|
|
72
72
|
namespace: z.string().min(1).optional(),
|
|
73
|
+
npmRegistryAuthSecretName: z.string().min(1).optional(),
|
|
73
74
|
repository: runnerRepositoryContextSchema.optional(),
|
|
74
75
|
run: runnerRunIdentitySchema.optional(),
|
|
75
76
|
serviceAccountName: z.string().min(1).optional()
|
|
@@ -41,7 +41,7 @@ const SCHEDULE_BUILTINS = [
|
|
|
41
41
|
"test",
|
|
42
42
|
"typecheck"
|
|
43
43
|
];
|
|
44
|
-
const PARALLEL_MERGE_BUILTINS = new Set(["drain-merge"]);
|
|
44
|
+
const PARALLEL_MERGE_BUILTINS = /* @__PURE__ */ new Set(["drain-merge"]);
|
|
45
45
|
const scheduleArtifactSchema = z.object({
|
|
46
46
|
generated_at: z.string().datetime(),
|
|
47
47
|
kind: z.literal(SCHEDULE_KIND),
|
|
@@ -32,6 +32,7 @@ declare const buildRunnerArgoWorkflowOptionsSchema: z.ZodObject<{
|
|
|
32
32
|
}, z.core.$strict>>;
|
|
33
33
|
name: z.ZodOptional<z.ZodString>;
|
|
34
34
|
namespace: z.ZodString;
|
|
35
|
+
npmRegistryAuthSecretName: z.ZodOptional<z.ZodString>;
|
|
35
36
|
payloadConfigMapKey: z.ZodDefault<z.ZodString>;
|
|
36
37
|
payloadConfigMapName: z.ZodString;
|
|
37
38
|
resources: z.ZodOptional<z.ZodObject<{
|
|
@@ -79,6 +80,7 @@ declare const buildDynamicRunnerArgoWorkflowOptionsSchema: z.ZodObject<{
|
|
|
79
80
|
}, z.core.$strict>>;
|
|
80
81
|
name: z.ZodOptional<z.ZodString>;
|
|
81
82
|
namespace: z.ZodString;
|
|
83
|
+
npmRegistryAuthSecretName: z.ZodOptional<z.ZodString>;
|
|
82
84
|
payloadConfigMapKey: z.ZodDefault<z.ZodString>;
|
|
83
85
|
payloadConfigMapName: z.ZodString;
|
|
84
86
|
resources: z.ZodOptional<z.ZodObject<{
|
|
@@ -198,6 +198,7 @@ const runnerArgoWorkflowBaseOptionsSchema = z.object({
|
|
|
198
198
|
mcpGatewayAuth: mcpGatewayAuthOptionSchema.optional(),
|
|
199
199
|
name: z.string().min(1).optional(),
|
|
200
200
|
namespace: kubernetesNameSchema,
|
|
201
|
+
npmRegistryAuthSecretName: kubernetesNameSchema.optional(),
|
|
201
202
|
payloadConfigMapKey: z.string().min(1).default("payload.json"),
|
|
202
203
|
payloadConfigMapName: kubernetesNameSchema,
|
|
203
204
|
resources: argoWorkflowResourceRequirementsSchema.optional(),
|
|
@@ -32,9 +32,7 @@ function runnerWorkflowStorage(options, tasks) {
|
|
|
32
32
|
readOnly: true,
|
|
33
33
|
subPath: "schedule.yaml"
|
|
34
34
|
}];
|
|
35
|
-
|
|
36
|
-
appendGitCredentialsStorage(options, volumes, volumeMounts);
|
|
37
|
-
appendGithubAuthStorage(options, volumes, volumeMounts);
|
|
35
|
+
appendSharedSecretStorage(options, volumes, volumeMounts);
|
|
38
36
|
return {
|
|
39
37
|
volumeMounts: z.array(argoWorkflowVolumeMountSchema).parse(volumeMounts),
|
|
40
38
|
volumes: z.array(argoWorkflowVolumeSchema).parse(volumes)
|
|
@@ -43,14 +41,18 @@ function runnerWorkflowStorage(options, tasks) {
|
|
|
43
41
|
function dynamicRunnerWorkflowStorage(options) {
|
|
44
42
|
const volumes = [runnerPayloadVolume(options)];
|
|
45
43
|
const volumeMounts = [runnerPayloadVolumeMount()];
|
|
46
|
-
|
|
47
|
-
appendGitCredentialsStorage(options, volumes, volumeMounts);
|
|
48
|
-
appendGithubAuthStorage(options, volumes, volumeMounts);
|
|
44
|
+
appendSharedSecretStorage(options, volumes, volumeMounts);
|
|
49
45
|
return {
|
|
50
46
|
volumeMounts: z.array(argoWorkflowVolumeMountSchema).parse(volumeMounts),
|
|
51
47
|
volumes: z.array(argoWorkflowVolumeSchema).parse(volumes)
|
|
52
48
|
};
|
|
53
49
|
}
|
|
50
|
+
function appendSharedSecretStorage(options, volumes, volumeMounts) {
|
|
51
|
+
appendEventAuthStorage(options, volumes, volumeMounts);
|
|
52
|
+
appendGitCredentialsStorage(options, volumes, volumeMounts);
|
|
53
|
+
appendGithubAuthStorage(options, volumes, volumeMounts);
|
|
54
|
+
appendNpmRegistryAuthStorage(options, volumes, volumeMounts);
|
|
55
|
+
}
|
|
54
56
|
function runnerPayloadVolume(options) {
|
|
55
57
|
return {
|
|
56
58
|
configMap: {
|
|
@@ -123,5 +125,24 @@ function appendGithubAuthStorage(options, volumes, volumeMounts) {
|
|
|
123
125
|
subPath: "hosts.yml"
|
|
124
126
|
});
|
|
125
127
|
}
|
|
128
|
+
function appendNpmRegistryAuthStorage(options, volumes, volumeMounts) {
|
|
129
|
+
if (!options.npmRegistryAuthSecretName) return;
|
|
130
|
+
volumes.push({
|
|
131
|
+
name: "npm-registry-auth",
|
|
132
|
+
secret: {
|
|
133
|
+
items: [{
|
|
134
|
+
key: "npmrc",
|
|
135
|
+
path: "npmrc"
|
|
136
|
+
}],
|
|
137
|
+
secretName: options.npmRegistryAuthSecretName
|
|
138
|
+
}
|
|
139
|
+
});
|
|
140
|
+
volumeMounts.push({
|
|
141
|
+
mountPath: "/root/.npmrc",
|
|
142
|
+
name: "npm-registry-auth",
|
|
143
|
+
readOnly: true,
|
|
144
|
+
subPath: "npmrc"
|
|
145
|
+
});
|
|
146
|
+
}
|
|
126
147
|
//#endregion
|
|
127
148
|
export { dynamicRunnerWorkflowStorage, runnerWorkflowStorage };
|
|
@@ -54,6 +54,7 @@ function workflowSubmitOptions(options) {
|
|
|
54
54
|
kubeconfigPath: options.kubeconfigPath,
|
|
55
55
|
name: options.name,
|
|
56
56
|
namespace: requireSubmitOption(options.namespace, "namespace"),
|
|
57
|
+
npmRegistryAuthSecretName: options.npmRegistryAuthSecretName,
|
|
57
58
|
serviceAccountName: options.serviceAccountName
|
|
58
59
|
};
|
|
59
60
|
}
|
package/dist/remote/submit/io.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { normalizeRunnerRepositoryForSubmit } from "../../git-remote-url.js";
|
|
2
2
|
import { readFileSync } from "node:fs";
|
|
3
|
-
import { simpleGit } from "simple-git";
|
|
3
|
+
import { simpleGit as simpleGit$1 } from "simple-git";
|
|
4
4
|
import parseGitUrl from "git-url-parse";
|
|
5
5
|
//#region src/remote/submit/io.ts
|
|
6
6
|
function readScheduleFile(dependencies, path) {
|
|
@@ -47,7 +47,7 @@ function runContext(options, git, runId) {
|
|
|
47
47
|
}
|
|
48
48
|
async function resolveGit(worktreePath, dependencies) {
|
|
49
49
|
if (dependencies.resolveGitContext) return dependencies.resolveGitContext(worktreePath);
|
|
50
|
-
const git = simpleGit({ baseDir: worktreePath });
|
|
50
|
+
const git = simpleGit$1({ baseDir: worktreePath });
|
|
51
51
|
const [branchResult, sha, remoteConfig] = await Promise.all([
|
|
52
52
|
git.branch(),
|
|
53
53
|
git.revparse(["HEAD"]),
|
|
@@ -103,4 +103,4 @@ type RunEffort = z.infer<typeof runEffortSchema>;
|
|
|
103
103
|
type RunMode = z.infer<typeof runModeSchema>;
|
|
104
104
|
type MokaRunManifest = z.infer<typeof mokaRunManifestSchema>;
|
|
105
105
|
//#endregion
|
|
106
|
-
export { MokaRunManifest, RunEffort, RunMode, RunTarget };
|
|
106
|
+
export { MokaRunManifest, RunEffort, RunMode, RunTarget, mokaRunManifestSchema, runEffortSchema, runModeSchema, runTargetSchema };
|
|
@@ -127,4 +127,4 @@ function parseMokaRunManifest(input) {
|
|
|
127
127
|
return mokaRunManifestSchema.parse(input);
|
|
128
128
|
}
|
|
129
129
|
//#endregion
|
|
130
|
-
export { DEFAULT_RUN_CONTROL_HEARTBEAT_INTERVAL_MS, DEFAULT_RUN_CONTROL_NODE_STALE_AFTER_MS, DEFAULT_RUN_CONTROL_STALE_DETECTION, mokaNodeStatusSchema, mokaRunStatusSchema, parseMokaNodeStatus, parseMokaRunController, parseMokaRunEvent, parseMokaRunManifest, parseMokaRunStatus, parseRunControlStaleDetection, parseRunEffort, parseRunMode, parseRunTarget };
|
|
130
|
+
export { DEFAULT_RUN_CONTROL_HEARTBEAT_INTERVAL_MS, DEFAULT_RUN_CONTROL_NODE_STALE_AFTER_MS, DEFAULT_RUN_CONTROL_STALE_DETECTION, MOKA_NODE_STATUSES, MOKA_RUN_STATUSES, RUN_EFFORTS, RUN_MODES, RUN_TARGETS, mokaNodeStatusEventSchema, mokaNodeStatusSchema, mokaRunControlEventSchema, mokaRunControllerSchema, mokaRunEventSchema, mokaRunHeartbeatEventSchema, mokaRunManifestSchema, mokaRunStatusEventSchema, mokaRunStatusSchema, parseMokaNodeStatus, parseMokaRunController, parseMokaRunEvent, parseMokaRunManifest, parseMokaRunStatus, parseRunControlStaleDetection, parseRunEffort, parseRunMode, parseRunTarget, runControlStaleDetectionSchema, runEffortSchema, runModeSchema, runTargetSchema };
|
|
@@ -115,4 +115,4 @@ function printNextNodeEnvelopeScoped(runId) {
|
|
|
115
115
|
});
|
|
116
116
|
}
|
|
117
117
|
//#endregion
|
|
118
|
-
export { readPersistedScheduleEffect, readyNodeIdsFromRunStore, registerNextNodeSubcommand };
|
|
118
|
+
export { buildNextNodeEnvelope, buildNextNodeEnvelopeFromRunStore, readPersistedScheduleEffect, readyNodeIdsFromRunStore, registerNextNodeSubcommand };
|
|
@@ -14,7 +14,7 @@ const WATCH_INTERVAL_MS = 1e3;
|
|
|
14
14
|
const SENSITIVE_BASENAME_PARTS = ["prompt", "session"];
|
|
15
15
|
const SENSITIVE_BASENAME_PREFIXES = ["body."];
|
|
16
16
|
const SENSITIVE_PATH_PARTS = ["session-body", "session_body"];
|
|
17
|
-
const SENSITIVE_BASENAMES = new Set(["body"]);
|
|
17
|
+
const SENSITIVE_BASENAMES = /* @__PURE__ */ new Set(["body"]);
|
|
18
18
|
function printLogsEffect(input) {
|
|
19
19
|
return Effect.gen(function* () {
|
|
20
20
|
const run = yield* requireRunEffect(input.store, input.runId);
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { parseLogicalSegment } from "./logical-segment.js";
|
|
2
2
|
import { Effect } from "effect";
|
|
3
3
|
//#region src/run-control/run-command-domain.ts
|
|
4
|
-
const ACTIVE_RUN_STATUSES = new Set([
|
|
4
|
+
const ACTIVE_RUN_STATUSES = /* @__PURE__ */ new Set([
|
|
5
5
|
"queued",
|
|
6
6
|
"starting",
|
|
7
7
|
"running",
|
|
8
8
|
"stalled"
|
|
9
9
|
]);
|
|
10
|
-
const ACTIVE_NODE_STATUSES = new Set([
|
|
10
|
+
const ACTIVE_NODE_STATUSES = /* @__PURE__ */ new Set([
|
|
11
11
|
"queued",
|
|
12
12
|
"starting",
|
|
13
13
|
"running",
|
|
@@ -3,7 +3,7 @@ import { createSerializedWriteQueue } from "../serialized-write-queue.js";
|
|
|
3
3
|
import { createRunStoreRuntimeReporter } from "./runtime-reporter.js";
|
|
4
4
|
import { Effect } from "effect";
|
|
5
5
|
//#region src/run-control/supervisor.ts
|
|
6
|
-
const RUNNING_NODE_EVENT_TYPES = new Set([
|
|
6
|
+
const RUNNING_NODE_EVENT_TYPES = /* @__PURE__ */ new Set([
|
|
7
7
|
"agent.start",
|
|
8
8
|
"artifact.check.start",
|
|
9
9
|
"gate.start",
|
|
@@ -193,4 +193,4 @@ function shouldMarkNodeRunning(event) {
|
|
|
193
193
|
}
|
|
194
194
|
}
|
|
195
195
|
//#endregion
|
|
196
|
-
export { createRunControlSupervisor };
|
|
196
|
+
export { createRunControlSupervisor, createRunControlSupervisorEffect };
|
|
@@ -347,4 +347,4 @@ function shellQuote(value) {
|
|
|
347
347
|
return `'${value.replaceAll("'", `'\\''`)}'`;
|
|
348
348
|
}
|
|
349
349
|
//#endregion
|
|
350
|
-
export { commitAndPushNodeRef, mergeDependencyRefs, prepareRunnerGitWorkspace, promoteFinalRef, runAuthenticatedGit };
|
|
350
|
+
export { commitAndPushNodeRef, mergeDependencyRefs, prepareRunnerGitWorkspace, promoteFinalRef, runAuthenticatedGit, runnerCommitMessage };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import "./agent-node.js";
|
|
2
|
-
export {};
|
|
1
|
+
import { executeAgentNode } from "./agent-node.js";
|
|
2
|
+
export { executeAgentNode };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import "./builtins.js";
|
|
2
|
-
export {};
|
|
1
|
+
import { executeBuiltin } from "./builtins.js";
|
|
2
|
+
export { executeBuiltin };
|
|
@@ -35,7 +35,7 @@ function pathFromPorcelainEntry(entry) {
|
|
|
35
35
|
return path ? [path] : [];
|
|
36
36
|
}
|
|
37
37
|
function diffChangedFiles(before, after, worktreePath) {
|
|
38
|
-
const files = [
|
|
38
|
+
const files = [.../* @__PURE__ */ new Set([...before.files, ...after.files])].filter((file) => !before.files.has(file) || before.fingerprints.get(file) !== (after.fingerprints.get(file) ?? fileFingerprint(worktreePath, file)));
|
|
39
39
|
return {
|
|
40
40
|
files: new Set(files),
|
|
41
41
|
fingerprints: new Map(files.map((file) => [file, after.fingerprints.get(file) ?? fileFingerprint(worktreePath, file)]))
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import "./changed-files.js";
|
|
2
|
-
export {};
|
|
1
|
+
import { diffChangedFiles, snapshotChangedFiles } from "./changed-files.js";
|
|
2
|
+
export { diffChangedFiles, snapshotChangedFiles };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import "./command-executor.js";
|
|
2
|
-
export {};
|
|
1
|
+
import { executeCommand } from "./command-executor.js";
|
|
2
|
+
export { executeCommand };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import "./context.js";
|
|
2
|
-
export {};
|
|
1
|
+
import { createRuntimeContext, generateRuntimeRunId, resolveWorkflowSelection } from "./context.js";
|
|
2
|
+
export { createRuntimeContext, generateRuntimeRunId, resolveWorkflowSelection };
|
|
@@ -1 +1,2 @@
|
|
|
1
|
-
import { AcceptanceCriterion, HookRuntimePolicy, NodeExecutionState, NodeStatus, PipelineRuntimeEvent, PipelineRuntimeObservabilityLevel, PipelineRuntimeOptions, PipelineRuntimeResult, PipelineTaskContext, RuntimeFailure, RuntimeGateResult, RuntimeNodeResult, RuntimeStructuredOutput, UnmetCriterion } from "./contracts.js";
|
|
1
|
+
import { AcceptanceCriterion, HookRuntimePolicy, NodeExecutionState, NodeStatus, PipelineRuntimeEvent, PipelineRuntimeObservabilityLevel, PipelineRuntimeOptions, PipelineRuntimeResult, PipelineTaskContext, RuntimeFailure, RuntimeGateResult, RuntimeNodeResult, RuntimeStructuredOutput, UnmetCriterion } from "./contracts.js";
|
|
2
|
+
export { AcceptanceCriterion, HookRuntimePolicy, NodeExecutionState, NodeStatus, PipelineRuntimeEvent, PipelineRuntimeObservabilityLevel, PipelineRuntimeOptions, PipelineRuntimeResult, PipelineTaskContext, RuntimeFailure, RuntimeGateResult, RuntimeNodeResult, RuntimeStructuredOutput, UnmetCriterion };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import "./drain-merge.js";
|
|
2
|
-
export {};
|
|
1
|
+
import { executeDrainMergeBuiltin } from "./drain-merge.js";
|
|
2
|
+
export { executeDrainMergeBuiltin };
|
|
@@ -3,7 +3,7 @@ import { runtimeActorId } from "../actor-ids.js";
|
|
|
3
3
|
import { parseRuntimeOutput, validateJsonSchemaSource } from "../json-validation/json-validation.js";
|
|
4
4
|
import "../json-validation/index.js";
|
|
5
5
|
//#region src/runtime/events/events.ts
|
|
6
|
-
const warningRuntimeObservabilityTypes = new Set([
|
|
6
|
+
const warningRuntimeObservabilityTypes = /* @__PURE__ */ new Set([
|
|
7
7
|
"runtime.gate.cancelled",
|
|
8
8
|
"runtime.gate.failed",
|
|
9
9
|
"runtime.hook.failed",
|
|
@@ -15,7 +15,7 @@ const primaryRuntimeObservabilityPrefixes = [
|
|
|
15
15
|
"runtime.hook.",
|
|
16
16
|
"runtime.state."
|
|
17
17
|
];
|
|
18
|
-
const structuredOutputFormats = new Set([
|
|
18
|
+
const structuredOutputFormats = /* @__PURE__ */ new Set([
|
|
19
19
|
"json",
|
|
20
20
|
"json_schema",
|
|
21
21
|
"jsonl"
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import "./events.js";
|
|
2
|
-
export {};
|
|
1
|
+
import { childReporter, createPublicRuntimeObservabilityEmitter, emit, emitAgentFinish, emitAgentStart, emitGateFinish, emitGateStart, emitNodeFinish, emitNodeOutputRecorded, emitNodeStart, emitWorkflowFinish, emitWorkflowPlanned, emitWorkflowStarted, runtimeNodeActorDescriptor, runtimeSystemId } from "./events.js";
|
|
2
|
+
export { childReporter, createPublicRuntimeObservabilityEmitter, emit, emitAgentFinish, emitAgentStart, emitGateFinish, emitGateStart, emitNodeFinish, emitNodeOutputRecorded, emitNodeStart, emitWorkflowFinish, emitWorkflowPlanned, emitWorkflowStarted, runtimeNodeActorDescriptor, runtimeSystemId };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import "./contract.js";
|
|
2
|
-
import "./gates.js";
|
|
3
|
-
import "./registry.js";
|
|
4
|
-
import "./orchestrator.js";
|
|
5
|
-
export {};
|
|
1
|
+
import { forKind } from "./contract.js";
|
|
2
|
+
import { parseGateJson } from "./gates.js";
|
|
3
|
+
import { evaluateGate, gateRegistry } from "./registry.js";
|
|
4
|
+
import { evaluateNodeGates } from "./orchestrator.js";
|
|
5
|
+
export { evaluateGate, evaluateNodeGates, forKind, gateRegistry, parseGateJson };
|
|
@@ -106,4 +106,4 @@ function hasNonEmptyEvidence(value) {
|
|
|
106
106
|
return Array.isArray(value) && value.filter((item) => typeof item === "string" && item.trim()).length > 0;
|
|
107
107
|
}
|
|
108
108
|
//#endregion
|
|
109
|
-
export { evaluateAcceptanceGate };
|
|
109
|
+
export { acceptanceUnmetCriteria, evaluateAcceptanceGate };
|
|
@@ -20,7 +20,7 @@ function hookEnv(hook, context) {
|
|
|
20
20
|
};
|
|
21
21
|
}
|
|
22
22
|
function commandHookEnvEntries(hook, context) {
|
|
23
|
-
return [
|
|
23
|
+
return [.../* @__PURE__ */ new Set([...context.hookPolicy.envPassthrough, ...hook.env?.passthrough ?? []])].flatMap(commandHookEnvEntry);
|
|
24
24
|
}
|
|
25
25
|
function commandHookEnvEntry(name) {
|
|
26
26
|
const value = process.env[name];
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import "./hooks.js";
|
|
2
|
-
export {};
|
|
1
|
+
import { dispatchHooks } from "./hooks.js";
|
|
2
|
+
export { dispatchHooks };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import "./json-validation.js";
|
|
2
|
-
export {};
|
|
1
|
+
import { normalizeJsonSource, parseJsonObject, parseRuntimeOutput, readJsonSchemaSource, readOptionalFile, validateJsonSchemaSource } from "./json-validation.js";
|
|
2
|
+
export { normalizeJsonSource, parseJsonObject, parseRuntimeOutput, readJsonSchemaSource, readOptionalFile, validateJsonSchemaSource };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import "./open-pull-request.js";
|
|
2
|
-
export {};
|
|
1
|
+
import { executeOpenPullRequestBuiltin, openPullRequestProgram } from "./open-pull-request.js";
|
|
2
|
+
export { executeOpenPullRequestBuiltin, openPullRequestProgram };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import "./parallel-node.js";
|
|
2
|
-
export {};
|
|
1
|
+
import { executeParallelNode } from "./parallel-node.js";
|
|
2
|
+
export { executeParallelNode };
|
package/dist/runtime/retry.js
CHANGED
|
@@ -132,7 +132,7 @@ function computeReadyNodeIds(input) {
|
|
|
132
132
|
const completedIds = new Set((input.completed ?? []).map((r) => r.nodeId));
|
|
133
133
|
const runningIds = new Set(input.running ?? []);
|
|
134
134
|
const blockedIds = new Set(input.blocked ?? []);
|
|
135
|
-
const settled = new Set([...completedIds, ...runningIds]);
|
|
135
|
+
const settled = /* @__PURE__ */ new Set([...completedIds, ...runningIds]);
|
|
136
136
|
return orderedNodes(input.nodes).filter((node) => !(settled.has(node.id) || blockedIds.has(node.id))).filter((node) => node.needs.every((needId) => {
|
|
137
137
|
const result = (input.completed ?? []).find((r) => r.nodeId === needId);
|
|
138
138
|
if (result === void 0) return false;
|
|
@@ -21,4 +21,4 @@ const BacklogServiceLive = Layer.succeed(BacklogService, { run: (args, cwd) => E
|
|
|
21
21
|
try: () => execa("backlog", [...args], { cwd })
|
|
22
22
|
}).pipe(Effect.map((result) => result.stdout)) });
|
|
23
23
|
//#endregion
|
|
24
|
-
export { BacklogService, BacklogServiceLive };
|
|
24
|
+
export { BacklogCommandError, BacklogService, BacklogServiceLive };
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { Context, Effect, Layer } from "effect";
|
|
2
|
-
import simpleGit
|
|
2
|
+
import simpleGit from "simple-git";
|
|
3
3
|
//#region src/runtime/services/drain-merge-git-service.ts
|
|
4
4
|
var DrainMergeGitService = class extends Context.Service()("DrainMergeGitService") {};
|
|
5
5
|
const DrainMergeGitServiceLive = Layer.succeed(DrainMergeGitService, { create: (baseDir) => Effect.sync(() => {
|
|
6
|
-
const git = simpleGit
|
|
6
|
+
const git = simpleGit({ baseDir });
|
|
7
7
|
return { raw: (args) => Effect.tryPromise(() => git.raw(args)) };
|
|
8
8
|
}) });
|
|
9
9
|
//#endregion
|
|
@@ -93,4 +93,4 @@ function errorMessage(error) {
|
|
|
93
93
|
return error instanceof Error ? error.message : String(error);
|
|
94
94
|
}
|
|
95
95
|
//#endregion
|
|
96
|
-
export { backlogTicketCompletionStoreEffect, completeTicket, conservativeLayerAJudge };
|
|
96
|
+
export { TicketCompletionError, backlogTicketCompletionStoreEffect, completeTicket, conservativeLayerAJudge };
|
|
@@ -21,7 +21,7 @@ function sequenceTicketBatchesEffect(graph, ticketIds = dependencyGraphNodeIds(g
|
|
|
21
21
|
function scopedTicketIds(graph, rootId) {
|
|
22
22
|
if (!rootId) return dependencyGraphNodeIds(graph.dependencyGraph).sort(compareTaskIds);
|
|
23
23
|
if (!dependencyGraphHasNode(graph.dependencyGraph, rootId)) return [];
|
|
24
|
-
const ids = new Set([rootId]);
|
|
24
|
+
const ids = /* @__PURE__ */ new Set([rootId]);
|
|
25
25
|
const visit = (id) => {
|
|
26
26
|
for (const child of graph.childrenByParentId.get(id) ?? []) {
|
|
27
27
|
ids.add(child.id);
|
|
@@ -71,4 +71,4 @@ function compareTasks(a, b) {
|
|
|
71
71
|
return compareBacklogTasks(a, b);
|
|
72
72
|
}
|
|
73
73
|
//#endregion
|
|
74
|
-
export { buildTicketGraphEffect, compareTaskIds, predecessorIds, scopedTicketIds, sequenceTicketBatchesEffect };
|
|
74
|
+
export { TicketGraphError, buildTicketGraphEffect, compareTaskIds, predecessorIds, scopedTicketIds, sequenceTicketBatchesEffect };
|
package/docs/operator-guide.md
CHANGED
|
@@ -236,6 +236,7 @@ momokaya:
|
|
|
236
236
|
gitCredentialsSecretName: <git-credentials-secret-name>
|
|
237
237
|
githubAuthSecretName: <github-auth-secret-name>
|
|
238
238
|
imagePullSecretName: <image-pull-secret-name>
|
|
239
|
+
npmRegistryAuthSecretName: <npm-registry-auth-secret-name> # optional
|
|
239
240
|
brokerAuth:
|
|
240
241
|
secretName: <broker-api-key-secret-name>
|
|
241
242
|
secretKey: api-key
|
|
@@ -334,6 +335,12 @@ Expected namespace resources:
|
|
|
334
335
|
- The GitHub CLI auth Secret named by `submit.githubAuthSecretName` with key
|
|
335
336
|
`hosts.yml`; this Secret is for `gh` and pull request delivery, not git
|
|
336
337
|
clone/fetch/push authentication
|
|
338
|
+
- Optional: the private-registry auth Secret named by
|
|
339
|
+
`submit.npmRegistryAuthSecretName` with key `npmrc`, mounted at
|
|
340
|
+
`/root/.npmrc`; lets `.moka/bootstrap.sh`'s dependency install step (e.g.
|
|
341
|
+
`nub ci`) authenticate to private-scoped package registries, e.g. GitHub
|
|
342
|
+
Packages. Absent by default — bootstrap then only has public-registry
|
|
343
|
+
access, matching current behavior
|
|
337
344
|
- A pipeline-console event sink reachable from the pod
|
|
338
345
|
|
|
339
346
|
Credential issuance and rotation are owned by the cluster/infra layer, not by
|
package/package.json
CHANGED
|
@@ -32,6 +32,8 @@
|
|
|
32
32
|
"devDependencies": {
|
|
33
33
|
"@biomejs/biome": "2.4.15",
|
|
34
34
|
"@effect/vitest": "^4.0.0-beta.90",
|
|
35
|
+
"@mpsuesser/oxlint-plugin-effect": "0.3.0",
|
|
36
|
+
"@oisin-ee/oxlint-config": "1.0.0",
|
|
35
37
|
"@semantic-release/commit-analyzer": "^13.0.1",
|
|
36
38
|
"@semantic-release/exec": "^7.1.0",
|
|
37
39
|
"@semantic-release/github": "^12.0.8",
|
|
@@ -42,6 +44,9 @@
|
|
|
42
44
|
"@typescript/native-preview": "7.0.0-dev.20260629.1",
|
|
43
45
|
"drizzle-kit": "0.31.10",
|
|
44
46
|
"jscpd": "^4.0.5",
|
|
47
|
+
"oxfmt": "^0.56.0",
|
|
48
|
+
"oxlint": "^1.71.0",
|
|
49
|
+
"oxlint-tsgolint": "^0.23.0",
|
|
45
50
|
"semantic-release": "^25.0.3",
|
|
46
51
|
"tsdown": "^0.22.0",
|
|
47
52
|
"typescript": "rc",
|
|
@@ -125,6 +130,7 @@
|
|
|
125
130
|
"test:image": "mkdir -p /tmp/pipeline-test && printf '{}' > /tmp/pipeline-test/payload.json && printf 'kind: pipeline-schedule\\nversion: 1\\nschedule_id: smoke\\ngenerated_at: 2026-06-10T00:00:00.000Z\\nsource_entrypoint: custom\\ntask: smoke\\nroot_workflow: root\\nworkflows:\\n root:\\n nodes:\\n - id: smoke\\n kind: command\\n command: [true]\\n' > /tmp/pipeline-test/schedule.yaml && printf '{\"nodeId\":\"smoke\"}' > /tmp/pipeline-test/task.json && printf 'test-token' > /tmp/pipeline-test/event-token && docker build -t pipeline-runner:test . && docker run --rm -v /tmp/pipeline-test/payload.json:/etc/pipeline/payload.json:ro -v /tmp/pipeline-test/schedule.yaml:/etc/pipeline/schedule.yaml:ro -v /tmp/pipeline-test/task.json:/etc/pipeline/task.json:ro -v /tmp/pipeline-test/event-token:/etc/pipeline/event-auth/token:ro pipeline-runner:test runner-command --payload-file /etc/pipeline/payload.json --schedule-file /etc/pipeline/schedule.yaml; test $? -eq 64",
|
|
126
131
|
"test:dogfood": "vitest run tests/dogfood-installed.test.ts",
|
|
127
132
|
"test:live-runners": "PIPELINE_LIVE_RUNNERS=1 vitest run tests/dogfood-live-runners.test.ts",
|
|
133
|
+
"local-orbstack:migrate": "nub scripts/local-orbstack/migrate-postgres.ts",
|
|
128
134
|
"typecheck": "tsc --noEmit",
|
|
129
135
|
"build": "nub run build:cli",
|
|
130
136
|
"check": "ultracite check",
|
|
@@ -132,7 +138,7 @@
|
|
|
132
138
|
"prepack": "nub run build:cli"
|
|
133
139
|
},
|
|
134
140
|
"type": "module",
|
|
135
|
-
"version": "3.
|
|
141
|
+
"version": "3.20.0",
|
|
136
142
|
"description": "Config-driven multi-agent pipeline runner for repository work",
|
|
137
143
|
"main": "./dist/index.js",
|
|
138
144
|
"types": "./dist/index.d.ts",
|