@tagma/sdk 0.7.3 → 0.7.5
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/README.md +85 -57
- package/dist/approval.d.ts +2 -12
- package/dist/approval.d.ts.map +1 -1
- package/dist/approval.js +1 -90
- package/dist/approval.js.map +1 -1
- package/dist/bootstrap.d.ts +1 -1
- package/dist/bootstrap.d.ts.map +1 -1
- package/dist/completions/file-exists.js +1 -1
- package/dist/completions/file-exists.js.map +1 -1
- package/dist/completions/output-check.d.ts.map +1 -1
- package/dist/completions/output-check.js +17 -4
- package/dist/completions/output-check.js.map +1 -1
- package/dist/config.d.ts +4 -4
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +2 -2
- package/dist/config.js.map +1 -1
- package/dist/dataflow.d.ts +3 -0
- package/dist/dataflow.d.ts.map +1 -0
- package/dist/dataflow.js +2 -0
- package/dist/dataflow.js.map +1 -0
- package/dist/drivers/opencode.d.ts.map +1 -1
- package/dist/drivers/opencode.js +23 -71
- package/dist/drivers/opencode.js.map +1 -1
- package/dist/engine.d.ts +5 -56
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +7 -297
- package/dist/engine.js.map +1 -1
- package/dist/index.d.ts +4 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -4
- package/dist/index.js.map +1 -1
- package/dist/logger.d.ts +2 -60
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +1 -153
- package/dist/logger.js.map +1 -1
- package/dist/middlewares/static-context.d.ts.map +1 -1
- package/dist/middlewares/static-context.js +1 -2
- package/dist/middlewares/static-context.js.map +1 -1
- package/dist/pipeline-runner.d.ts.map +1 -1
- package/dist/pipeline-runner.js +2 -2
- package/dist/pipeline-runner.js.map +1 -1
- package/dist/plugins.d.ts +2 -2
- package/dist/plugins.d.ts.map +1 -1
- package/dist/plugins.js +1 -1
- package/dist/plugins.js.map +1 -1
- package/dist/runner.d.ts +1 -35
- package/dist/runner.d.ts.map +1 -1
- package/dist/runner.js +1 -610
- package/dist/runner.js.map +1 -1
- package/dist/runtime/adapters/stdin-approval.d.ts +2 -0
- package/dist/runtime/adapters/stdin-approval.d.ts.map +1 -0
- package/dist/runtime/adapters/stdin-approval.js +2 -0
- package/dist/runtime/adapters/stdin-approval.js.map +1 -0
- package/dist/runtime/adapters/websocket-approval.d.ts +2 -0
- package/dist/runtime/adapters/websocket-approval.d.ts.map +1 -0
- package/dist/runtime/adapters/websocket-approval.js +2 -0
- package/dist/runtime/adapters/websocket-approval.js.map +1 -0
- package/dist/runtime/bun-process-runner.d.ts +2 -0
- package/dist/runtime/bun-process-runner.d.ts.map +1 -0
- package/dist/runtime/bun-process-runner.js +2 -0
- package/dist/runtime/bun-process-runner.js.map +1 -0
- package/dist/runtime.d.ts +2 -8
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +1 -7
- package/dist/runtime.js.map +1 -1
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.js +3 -4
- package/dist/schema.js.map +1 -1
- package/dist/tagma.d.ts +3 -4
- package/dist/tagma.d.ts.map +1 -1
- package/dist/tagma.js +2 -3
- package/dist/tagma.js.map +1 -1
- package/dist/triggers/file.d.ts.map +1 -1
- package/dist/triggers/file.js +74 -108
- package/dist/triggers/file.js.map +1 -1
- package/dist/triggers/manual.d.ts.map +1 -1
- package/dist/triggers/manual.js +1 -2
- package/dist/triggers/manual.js.map +1 -1
- package/dist/types.d.ts +1 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -12
- package/dist/types.js.map +1 -1
- package/dist/utils-api.d.ts +1 -1
- package/dist/utils-api.d.ts.map +1 -1
- package/dist/utils-api.js +1 -1
- package/dist/utils-api.js.map +1 -1
- package/dist/validate-raw.d.ts.map +1 -1
- package/dist/validate-raw.js +5 -12
- package/dist/validate-raw.js.map +1 -1
- package/package.json +20 -22
- package/dist/adapters/stdin-approval.d.ts +0 -6
- package/dist/adapters/stdin-approval.d.ts.map +0 -1
- package/dist/adapters/stdin-approval.js +0 -90
- package/dist/adapters/stdin-approval.js.map +0 -1
- package/dist/adapters/websocket-approval.d.ts +0 -28
- package/dist/adapters/websocket-approval.d.ts.map +0 -1
- package/dist/adapters/websocket-approval.js +0 -147
- package/dist/adapters/websocket-approval.js.map +0 -1
- package/dist/core/dataflow.d.ts +0 -23
- package/dist/core/dataflow.d.ts.map +0 -1
- package/dist/core/dataflow.js +0 -99
- package/dist/core/dataflow.js.map +0 -1
- package/dist/core/log-prune.d.ts +0 -16
- package/dist/core/log-prune.d.ts.map +0 -1
- package/dist/core/log-prune.js +0 -34
- package/dist/core/log-prune.js.map +0 -1
- package/dist/core/preflight.d.ts +0 -13
- package/dist/core/preflight.d.ts.map +0 -1
- package/dist/core/preflight.js +0 -61
- package/dist/core/preflight.js.map +0 -1
- package/dist/core/run-context.d.ts +0 -55
- package/dist/core/run-context.d.ts.map +0 -1
- package/dist/core/run-context.js +0 -158
- package/dist/core/run-context.js.map +0 -1
- package/dist/core/run-state.d.ts +0 -25
- package/dist/core/run-state.d.ts.map +0 -1
- package/dist/core/run-state.js +0 -93
- package/dist/core/run-state.js.map +0 -1
- package/dist/core/scheduler.d.ts +0 -13
- package/dist/core/scheduler.d.ts.map +0 -1
- package/dist/core/scheduler.js +0 -35
- package/dist/core/scheduler.js.map +0 -1
- package/dist/core/task-executor.d.ts +0 -13
- package/dist/core/task-executor.d.ts.map +0 -1
- package/dist/core/task-executor.js +0 -601
- package/dist/core/task-executor.js.map +0 -1
- package/dist/core/trigger-errors.d.ts +0 -9
- package/dist/core/trigger-errors.d.ts.map +0 -1
- package/dist/core/trigger-errors.js +0 -15
- package/dist/core/trigger-errors.js.map +0 -1
- package/dist/dag.d.ts +0 -45
- package/dist/dag.d.ts.map +0 -1
- package/dist/dag.js +0 -177
- package/dist/dag.js.map +0 -1
- package/dist/hooks.d.ts +0 -73
- package/dist/hooks.d.ts.map +0 -1
- package/dist/hooks.js +0 -106
- package/dist/hooks.js.map +0 -1
- package/dist/pipeline-definition.d.ts +0 -3
- package/dist/pipeline-definition.d.ts.map +0 -1
- package/dist/pipeline-definition.js +0 -4
- package/dist/pipeline-definition.js.map +0 -1
- package/dist/ports.d.ts +0 -196
- package/dist/ports.d.ts.map +0 -1
- package/dist/ports.js +0 -688
- package/dist/ports.js.map +0 -1
- package/dist/prompt-doc.d.ts +0 -70
- package/dist/prompt-doc.d.ts.map +0 -1
- package/dist/prompt-doc.js +0 -154
- package/dist/prompt-doc.js.map +0 -1
- package/dist/registry.d.ts +0 -67
- package/dist/registry.d.ts.map +0 -1
- package/dist/registry.js +0 -293
- package/dist/registry.js.map +0 -1
- package/dist/task-ref.d.ts +0 -55
- package/dist/task-ref.d.ts.map +0 -1
- package/dist/task-ref.js +0 -103
- package/dist/task-ref.js.map +0 -1
- package/dist/utils.d.ts +0 -13
- package/dist/utils.d.ts.map +0 -1
- package/dist/utils.js +0 -177
- package/dist/utils.js.map +0 -1
- package/src/adapters/stdin-approval.ts +0 -106
- package/src/adapters/websocket-approval.ts +0 -224
- package/src/approval.ts +0 -131
- package/src/bootstrap.ts +0 -55
- package/src/completions/exit-code.ts +0 -34
- package/src/completions/file-exists.ts +0 -66
- package/src/completions/output-check.test.ts +0 -50
- package/src/completions/output-check.ts +0 -92
- package/src/config-ops.test.ts +0 -70
- package/src/config-ops.ts +0 -328
- package/src/config.ts +0 -26
- package/src/core/dataflow.test.ts +0 -166
- package/src/core/dataflow.ts +0 -161
- package/src/core/log-prune.test.ts +0 -58
- package/src/core/log-prune.ts +0 -43
- package/src/core/preflight.test.ts +0 -49
- package/src/core/preflight.ts +0 -89
- package/src/core/run-context.test.ts +0 -256
- package/src/core/run-context.ts +0 -211
- package/src/core/run-state.test.ts +0 -98
- package/src/core/run-state.ts +0 -122
- package/src/core/scheduler.test.ts +0 -83
- package/src/core/scheduler.ts +0 -42
- package/src/core/task-executor.ts +0 -743
- package/src/core/trigger-errors.ts +0 -15
- package/src/dag.test.ts +0 -56
- package/src/dag.ts +0 -245
- package/src/drivers/opencode.ts +0 -410
- package/src/engine-ports-mixed.test.ts +0 -156
- package/src/engine-ports.test.ts +0 -166
- package/src/engine-task-type.test.ts +0 -56
- package/src/engine.ts +0 -458
- package/src/hooks.ts +0 -193
- package/src/index.ts +0 -33
- package/src/logger.ts +0 -182
- package/src/middlewares/static-context.ts +0 -49
- package/src/pipeline-definition.ts +0 -5
- package/src/pipeline-runner.test.ts +0 -91
- package/src/pipeline-runner.ts +0 -194
- package/src/plugin-registry.test.ts +0 -382
- package/src/plugins.ts +0 -21
- package/src/ports.test.ts +0 -678
- package/src/ports.ts +0 -925
- package/src/prompt-doc.test.ts +0 -174
- package/src/prompt-doc.ts +0 -169
- package/src/registry.ts +0 -353
- package/src/runner.test.ts +0 -142
- package/src/runner.ts +0 -666
- package/src/runtime.ts +0 -20
- package/src/schema-ports.test.ts +0 -172
- package/src/schema.test.ts +0 -213
- package/src/schema.ts +0 -379
- package/src/tagma.test.ts +0 -155
- package/src/tagma.ts +0 -62
- package/src/task-ref.test.ts +0 -401
- package/src/task-ref.ts +0 -121
- package/src/triggers/file.ts +0 -164
- package/src/triggers/manual.ts +0 -86
- package/src/types.ts +0 -18
- package/src/utils-api.ts +0 -8
- package/src/utils.test.ts +0 -28
- package/src/utils.ts +0 -203
- package/src/validate-raw-plugin-types.test.ts +0 -60
- package/src/validate-raw-ports.test.ts +0 -136
- package/src/validate-raw.ts +0 -852
- package/src/yaml-compiler.test.ts +0 -108
- package/src/yaml-compiler.ts +0 -110
- package/src/yaml.ts +0 -11
package/dist/registry.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"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"}
|
package/dist/task-ref.d.ts
DELETED
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
import type { PipelineConfig, RawPipelineConfig } from './types';
|
|
2
|
-
/**
|
|
3
|
-
* D8: task and track ids must match this pattern. No dots: the `.` is the
|
|
4
|
-
* qualified-id separator ("trackId.taskId"), so allowing it inside either
|
|
5
|
-
* part would make qid parsing ambiguous and break every resolver below.
|
|
6
|
-
*/
|
|
7
|
-
export declare const TASK_ID_RE: RegExp;
|
|
8
|
-
export declare function isValidTaskId(id: unknown): id is string;
|
|
9
|
-
/** Canonical qualified form used throughout the engine. */
|
|
10
|
-
export declare function qualifyTaskId(trackId: string, taskId: string): string;
|
|
11
|
-
/** Does the reference already include a track prefix? */
|
|
12
|
-
export declare function isQualifiedRef(ref: string): boolean;
|
|
13
|
-
/**
|
|
14
|
-
* Sentinel stored in `TaskIndex.bareToQualified` when a bare task id is
|
|
15
|
-
* shared by more than one track, making it unresolvable without a prefix.
|
|
16
|
-
* Exposed so callers that want to inspect the index directly know what to
|
|
17
|
-
* look for — but prefer `resolveTaskRef` which returns a typed `kind`.
|
|
18
|
-
*/
|
|
19
|
-
export declare const AMBIGUOUS = "__ambiguous__";
|
|
20
|
-
export interface TaskIndex {
|
|
21
|
-
/** All fully-qualified ids ("trackId.taskId") present in the config. */
|
|
22
|
-
readonly allQualified: ReadonlySet<string>;
|
|
23
|
-
/** bare taskId → qid, or the {@link AMBIGUOUS} sentinel. */
|
|
24
|
-
readonly bareToQualified: ReadonlyMap<string, string>;
|
|
25
|
-
}
|
|
26
|
-
/**
|
|
27
|
-
* Build the index used by {@link resolveTaskRef}. Tolerant of partially
|
|
28
|
-
* malformed configs: tracks or tasks missing an `id` are skipped so the
|
|
29
|
-
* editor can call this during real-time validation on in-progress edits.
|
|
30
|
-
*/
|
|
31
|
-
export declare function buildTaskIndex(config: RawPipelineConfig | PipelineConfig): TaskIndex;
|
|
32
|
-
export type RefResolution = {
|
|
33
|
-
readonly kind: 'resolved';
|
|
34
|
-
readonly qid: string;
|
|
35
|
-
} | {
|
|
36
|
-
readonly kind: 'ambiguous';
|
|
37
|
-
readonly ref: string;
|
|
38
|
-
} | {
|
|
39
|
-
readonly kind: 'not_found';
|
|
40
|
-
readonly ref: string;
|
|
41
|
-
};
|
|
42
|
-
/**
|
|
43
|
-
* Resolve a dependency / continue_from reference to a canonical qid.
|
|
44
|
-
*
|
|
45
|
-
* 1. If the ref already contains a `.`, treat it as fully qualified —
|
|
46
|
-
* return `resolved` when the qid exists, `not_found` otherwise.
|
|
47
|
-
* 2. Otherwise, prefer the same-track shorthand (`fromTrackId.ref`).
|
|
48
|
-
* 3. Fall back to a global bare lookup. Returns `ambiguous` when more
|
|
49
|
-
* than one track has a task with that bare name.
|
|
50
|
-
*
|
|
51
|
-
* Callers decide the policy: `buildDag` throws on non-resolved, `buildRawDag`
|
|
52
|
-
* skips silently, `validateRaw` emits a structured ValidationError.
|
|
53
|
-
*/
|
|
54
|
-
export declare function resolveTaskRef(ref: string, fromTrackId: string, index: TaskIndex): RefResolution;
|
|
55
|
-
//# sourceMappingURL=task-ref.d.ts.map
|
package/dist/task-ref.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"task-ref.d.ts","sourceRoot":"","sources":["../src/task-ref.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAEjE;;;;GAIG;AACH,eAAO,MAAM,UAAU,QAA8B,CAAC;AAEtD,wBAAgB,aAAa,CAAC,EAAE,EAAE,OAAO,GAAG,EAAE,IAAI,MAAM,CAEvD;AAED,2DAA2D;AAC3D,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAErE;AAED,yDAAyD;AACzD,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAEnD;AAED;;;;;GAKG;AACH,eAAO,MAAM,SAAS,kBAAkB,CAAC;AAEzC,MAAM,WAAW,SAAS;IACxB,wEAAwE;IACxE,QAAQ,CAAC,YAAY,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC3C,4DAA4D;IAC5D,QAAQ,CAAC,eAAe,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACvD;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,iBAAiB,GAAG,cAAc,GAAG,SAAS,CAkBpF;AAED,MAAM,MAAM,aAAa,GACrB;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GACnD;IAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GACpD;IAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC;AAEzD;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,MAAM,EACX,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,SAAS,GACf,aAAa,CAcf"}
|
package/dist/task-ref.js
DELETED
|
@@ -1,103 +0,0 @@
|
|
|
1
|
-
// ═══ Task reference resolution — single source of truth ═══
|
|
2
|
-
//
|
|
3
|
-
// Before this module existed, four sites each carried their own copy of the
|
|
4
|
-
// "what is a valid id" + "how do I resolve a bare / same-track-shorthand /
|
|
5
|
-
// fully qualified ref" logic:
|
|
6
|
-
//
|
|
7
|
-
// - dag.ts/buildDag (threw on unresolved, threw on ambiguous)
|
|
8
|
-
// - dag.ts/buildRawDag (silently skipped unresolved and ambiguous)
|
|
9
|
-
// - validate-raw.ts (reported both as errors, with different wording)
|
|
10
|
-
// - engine.ts/resolveRefInDag (returned null on ambiguous)
|
|
11
|
-
//
|
|
12
|
-
// In addition, the editor shipped its own regex for id validation in
|
|
13
|
-
// `shared/config-id.ts` and a test-local copy in `config-id-generation.test.ts`,
|
|
14
|
-
// creating multiple places where the character set could drift from the
|
|
15
|
-
// validator. Bugs observed downstream (silent context loss when two tracks
|
|
16
|
-
// happened to share a bare task name; editor-generated ids occasionally
|
|
17
|
-
// failing SDK validate-raw) all traced back to this duplication.
|
|
18
|
-
//
|
|
19
|
-
// Callers now build a TaskIndex once and use `resolveTaskRef` to classify
|
|
20
|
-
// each reference, then decide themselves whether to throw / warn / skip —
|
|
21
|
-
// instead of re-implementing the index build and the lookup logic.
|
|
22
|
-
/**
|
|
23
|
-
* D8: task and track ids must match this pattern. No dots: the `.` is the
|
|
24
|
-
* qualified-id separator ("trackId.taskId"), so allowing it inside either
|
|
25
|
-
* part would make qid parsing ambiguous and break every resolver below.
|
|
26
|
-
*/
|
|
27
|
-
export const TASK_ID_RE = /^[A-Za-z_][A-Za-z0-9_-]*$/;
|
|
28
|
-
export function isValidTaskId(id) {
|
|
29
|
-
return typeof id === 'string' && TASK_ID_RE.test(id);
|
|
30
|
-
}
|
|
31
|
-
/** Canonical qualified form used throughout the engine. */
|
|
32
|
-
export function qualifyTaskId(trackId, taskId) {
|
|
33
|
-
return `${trackId}.${taskId}`;
|
|
34
|
-
}
|
|
35
|
-
/** Does the reference already include a track prefix? */
|
|
36
|
-
export function isQualifiedRef(ref) {
|
|
37
|
-
return ref.includes('.');
|
|
38
|
-
}
|
|
39
|
-
/**
|
|
40
|
-
* Sentinel stored in `TaskIndex.bareToQualified` when a bare task id is
|
|
41
|
-
* shared by more than one track, making it unresolvable without a prefix.
|
|
42
|
-
* Exposed so callers that want to inspect the index directly know what to
|
|
43
|
-
* look for — but prefer `resolveTaskRef` which returns a typed `kind`.
|
|
44
|
-
*/
|
|
45
|
-
export const AMBIGUOUS = '__ambiguous__';
|
|
46
|
-
/**
|
|
47
|
-
* Build the index used by {@link resolveTaskRef}. Tolerant of partially
|
|
48
|
-
* malformed configs: tracks or tasks missing an `id` are skipped so the
|
|
49
|
-
* editor can call this during real-time validation on in-progress edits.
|
|
50
|
-
*/
|
|
51
|
-
export function buildTaskIndex(config) {
|
|
52
|
-
const allQualified = new Set();
|
|
53
|
-
const bareToQualified = new Map();
|
|
54
|
-
for (const track of config.tracks ?? []) {
|
|
55
|
-
if (!track?.id)
|
|
56
|
-
continue;
|
|
57
|
-
if (!Array.isArray(track.tasks))
|
|
58
|
-
continue;
|
|
59
|
-
for (const task of track.tasks ?? []) {
|
|
60
|
-
if (!task?.id)
|
|
61
|
-
continue;
|
|
62
|
-
const qid = qualifyTaskId(track.id, task.id);
|
|
63
|
-
allQualified.add(qid);
|
|
64
|
-
if (bareToQualified.has(task.id)) {
|
|
65
|
-
bareToQualified.set(task.id, AMBIGUOUS);
|
|
66
|
-
}
|
|
67
|
-
else {
|
|
68
|
-
bareToQualified.set(task.id, qid);
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
return { allQualified, bareToQualified };
|
|
73
|
-
}
|
|
74
|
-
/**
|
|
75
|
-
* Resolve a dependency / continue_from reference to a canonical qid.
|
|
76
|
-
*
|
|
77
|
-
* 1. If the ref already contains a `.`, treat it as fully qualified —
|
|
78
|
-
* return `resolved` when the qid exists, `not_found` otherwise.
|
|
79
|
-
* 2. Otherwise, prefer the same-track shorthand (`fromTrackId.ref`).
|
|
80
|
-
* 3. Fall back to a global bare lookup. Returns `ambiguous` when more
|
|
81
|
-
* than one track has a task with that bare name.
|
|
82
|
-
*
|
|
83
|
-
* Callers decide the policy: `buildDag` throws on non-resolved, `buildRawDag`
|
|
84
|
-
* skips silently, `validateRaw` emits a structured ValidationError.
|
|
85
|
-
*/
|
|
86
|
-
export function resolveTaskRef(ref, fromTrackId, index) {
|
|
87
|
-
if (isQualifiedRef(ref)) {
|
|
88
|
-
return index.allQualified.has(ref)
|
|
89
|
-
? { kind: 'resolved', qid: ref }
|
|
90
|
-
: { kind: 'not_found', ref };
|
|
91
|
-
}
|
|
92
|
-
const sameTrack = qualifyTaskId(fromTrackId, ref);
|
|
93
|
-
if (index.allQualified.has(sameTrack)) {
|
|
94
|
-
return { kind: 'resolved', qid: sameTrack };
|
|
95
|
-
}
|
|
96
|
-
const global = index.bareToQualified.get(ref);
|
|
97
|
-
if (global === AMBIGUOUS)
|
|
98
|
-
return { kind: 'ambiguous', ref };
|
|
99
|
-
if (global !== undefined)
|
|
100
|
-
return { kind: 'resolved', qid: global };
|
|
101
|
-
return { kind: 'not_found', ref };
|
|
102
|
-
}
|
|
103
|
-
//# sourceMappingURL=task-ref.js.map
|
package/dist/task-ref.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"task-ref.js","sourceRoot":"","sources":["../src/task-ref.ts"],"names":[],"mappings":"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"}
|
package/dist/utils.d.ts
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
export declare function parseDuration(input: string): number;
|
|
2
|
-
export declare function validatePath(filePath: string, projectRoot: string): string;
|
|
3
|
-
export declare function generateRunId(): string;
|
|
4
|
-
export declare function truncateForName(text: string, maxLen?: number): string;
|
|
5
|
-
export declare function nowISO(): string;
|
|
6
|
-
export declare function shellArgs(command: string): readonly string[];
|
|
7
|
-
/**
|
|
8
|
-
* Convert an args array to shell-wrapped args suitable for Bun.spawn.
|
|
9
|
-
* Each arg is quoted as needed, then joined and passed through shellArgs.
|
|
10
|
-
*/
|
|
11
|
-
export declare function shellArgsFromArray(args: readonly string[]): readonly string[];
|
|
12
|
-
export declare function _resetShellCache(): void;
|
|
13
|
-
//# sourceMappingURL=utils.d.ts.map
|
package/dist/utils.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAMA,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAmBnD;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAkE1E;AAED,wBAAgB,aAAa,IAAI,MAAM,CAItC;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,SAAK,GAAG,MAAM,CAMjE;AAED,wBAAgB,MAAM,IAAI,MAAM,CAE/B;AAwDD,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAU5D;AAcD;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,MAAM,EAAE,CAE7E;AAGD,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC"}
|
package/dist/utils.js
DELETED
|
@@ -1,177 +0,0 @@
|
|
|
1
|
-
import { isAbsolute, resolve, relative, parse as parsePath, sep } from 'path';
|
|
2
|
-
import { realpathSync, lstatSync, existsSync } from 'fs';
|
|
3
|
-
import { randomBytes } from 'crypto';
|
|
4
|
-
const DURATION_RE = /^(\d*\.?\d+)\s*(s|m|h|d)$/;
|
|
5
|
-
export function parseDuration(input) {
|
|
6
|
-
const match = DURATION_RE.exec(input.trim());
|
|
7
|
-
if (!match) {
|
|
8
|
-
throw new Error(`Invalid duration format: "${input}". Expected format: <number>(s|m|h|d)`);
|
|
9
|
-
}
|
|
10
|
-
const value = parseFloat(match[1]);
|
|
11
|
-
const unit = match[2];
|
|
12
|
-
switch (unit) {
|
|
13
|
-
case 's':
|
|
14
|
-
return value * 1000;
|
|
15
|
-
case 'm':
|
|
16
|
-
return value * 60_000;
|
|
17
|
-
case 'h':
|
|
18
|
-
return value * 3_600_000;
|
|
19
|
-
case 'd':
|
|
20
|
-
return value * 86_400_000;
|
|
21
|
-
default:
|
|
22
|
-
throw new Error(`Unknown duration unit: "${unit}"`);
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
export function validatePath(filePath, projectRoot) {
|
|
26
|
-
const resolved = resolve(projectRoot, filePath);
|
|
27
|
-
// D2: Cross-drive check (Windows) — path.relative('C:\\root', 'D:\\x') returns
|
|
28
|
-
// 'D:\\x' which does NOT start with '..', so a pure relative check would wrongly
|
|
29
|
-
// allow cross-drive paths. Reject them explicitly before any further comparison.
|
|
30
|
-
if (parsePath(projectRoot).root !== parsePath(resolved).root) {
|
|
31
|
-
throw new Error(`Security: path "${filePath}" is on a different drive than the project root "${projectRoot}".`);
|
|
32
|
-
}
|
|
33
|
-
const rel = relative(projectRoot, resolved);
|
|
34
|
-
if (rel === '..' || rel.startsWith(`..${sep}`) || isAbsolute(rel)) {
|
|
35
|
-
throw new Error(`Security: path "${filePath}" escapes project root. ` +
|
|
36
|
-
`All file references must be within "${projectRoot}".`);
|
|
37
|
-
}
|
|
38
|
-
// D1: Resolve symlinks and re-validate so a symlink whose string path is
|
|
39
|
-
// inside the project root but whose target lies outside is rejected.
|
|
40
|
-
// Only resolve if the path exists on disk; at parse time the file may not
|
|
41
|
-
// yet exist (e.g. a future output path), so we skip realpath for absent paths.
|
|
42
|
-
if (existsSync(resolved)) {
|
|
43
|
-
// Reject the entry outright if it is itself a symlink — callers that want
|
|
44
|
-
// to allow symlinks within the tree can pass pre-resolved paths.
|
|
45
|
-
try {
|
|
46
|
-
const stat = lstatSync(resolved);
|
|
47
|
-
if (stat.isSymbolicLink()) {
|
|
48
|
-
throw new Error(`Security: path "${filePath}" is a symbolic link. Symbolic links are not allowed within the project root.`);
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
catch (err) {
|
|
52
|
-
if (err.code !== 'ENOENT')
|
|
53
|
-
throw err;
|
|
54
|
-
}
|
|
55
|
-
// Also verify the real (fully resolved) path stays within the project root.
|
|
56
|
-
let real;
|
|
57
|
-
try {
|
|
58
|
-
real = realpathSync.native(resolved);
|
|
59
|
-
}
|
|
60
|
-
catch {
|
|
61
|
-
real = resolved; // path vanished between existsSync and realpathSync — skip
|
|
62
|
-
}
|
|
63
|
-
const realRoot = (() => {
|
|
64
|
-
try {
|
|
65
|
-
return realpathSync.native(projectRoot);
|
|
66
|
-
}
|
|
67
|
-
catch {
|
|
68
|
-
return projectRoot;
|
|
69
|
-
}
|
|
70
|
-
})();
|
|
71
|
-
if (parsePath(realRoot).root !== parsePath(real).root) {
|
|
72
|
-
throw new Error(`Security: resolved path "${real}" is on a different drive than the project root "${realRoot}".`);
|
|
73
|
-
}
|
|
74
|
-
const realRel = relative(realRoot, real);
|
|
75
|
-
if (realRel === '..' || realRel.startsWith(`..${sep}`) || isAbsolute(realRel)) {
|
|
76
|
-
throw new Error(`Security: path "${filePath}" resolves via symlink to "${real}" which escapes project root "${realRoot}".`);
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
return resolved;
|
|
80
|
-
}
|
|
81
|
-
export function generateRunId() {
|
|
82
|
-
const ts = Date.now().toString(36);
|
|
83
|
-
const rand = randomBytes(6).toString('hex');
|
|
84
|
-
return `run_${ts}_${rand}`;
|
|
85
|
-
}
|
|
86
|
-
export function truncateForName(text, maxLen = 40) {
|
|
87
|
-
const first = text.split('\n')[0].trim();
|
|
88
|
-
// Guard: if the first line is empty (e.g. prompt is all whitespace/newlines),
|
|
89
|
-
// fall back to the raw text trimmed rather than silently producing an empty name.
|
|
90
|
-
if (!first)
|
|
91
|
-
return text.trim().slice(0, maxLen) || '...';
|
|
92
|
-
return first.length > maxLen ? first.slice(0, maxLen) + '...' : first;
|
|
93
|
-
}
|
|
94
|
-
export function nowISO() {
|
|
95
|
-
return new Date().toISOString();
|
|
96
|
-
}
|
|
97
|
-
// ═══ Platform-aware shell ═══
|
|
98
|
-
//
|
|
99
|
-
// Resolution order:
|
|
100
|
-
// 1. Env override: PIPELINE_SHELL="bash" or PIPELINE_SHELL="cmd" etc.
|
|
101
|
-
// 2. Windows: prefer sh (Git Bash / MSYS2) if on PATH, fall back to cmd.exe
|
|
102
|
-
// 3. Unix: sh
|
|
103
|
-
//
|
|
104
|
-
// Resolution is cached once on first call to avoid repeated PATH lookups.
|
|
105
|
-
const IS_WINDOWS = process.platform === 'win32';
|
|
106
|
-
let resolvedShell = null;
|
|
107
|
-
function detectShell() {
|
|
108
|
-
// Env override takes precedence
|
|
109
|
-
const override = process.env.PIPELINE_SHELL;
|
|
110
|
-
if (override) {
|
|
111
|
-
const kind = override;
|
|
112
|
-
return { kind, path: override };
|
|
113
|
-
}
|
|
114
|
-
if (!IS_WINDOWS) {
|
|
115
|
-
return { kind: 'sh', path: 'sh' };
|
|
116
|
-
}
|
|
117
|
-
// Windows: probe PATH for sh (bundled with Git for Windows / MSYS2)
|
|
118
|
-
const pathEnv = process.env.PATH ?? '';
|
|
119
|
-
const pathExt = (process.env.PATHEXT ?? '.EXE;.CMD;.BAT').split(';');
|
|
120
|
-
const dirs = pathEnv.split(';').filter(Boolean);
|
|
121
|
-
for (const dir of dirs) {
|
|
122
|
-
for (const ext of ['', ...pathExt]) {
|
|
123
|
-
const candidate = `${dir}\\sh${ext}`;
|
|
124
|
-
try {
|
|
125
|
-
if (Bun.file(candidate).size > 0) {
|
|
126
|
-
return { kind: 'sh', path: candidate };
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
catch {
|
|
130
|
-
/* ignore */
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
// Fallback: cmd.exe (always present on Windows)
|
|
135
|
-
const systemRoot = process.env.SystemRoot ?? 'C:\\Windows';
|
|
136
|
-
return { kind: 'cmd', path: `${systemRoot}\\System32\\cmd.exe` };
|
|
137
|
-
}
|
|
138
|
-
function getShell() {
|
|
139
|
-
if (!resolvedShell)
|
|
140
|
-
resolvedShell = detectShell();
|
|
141
|
-
return resolvedShell;
|
|
142
|
-
}
|
|
143
|
-
export function shellArgs(command) {
|
|
144
|
-
const sh = getShell();
|
|
145
|
-
if (sh.kind === 'cmd') {
|
|
146
|
-
return [sh.path, '/c', command];
|
|
147
|
-
}
|
|
148
|
-
if (sh.kind === 'powershell') {
|
|
149
|
-
return [sh.path, '-Command', command];
|
|
150
|
-
}
|
|
151
|
-
// sh or bash
|
|
152
|
-
return [sh.path, '-c', command];
|
|
153
|
-
}
|
|
154
|
-
/** Quote a single argument for inclusion in a shell command string. */
|
|
155
|
-
function quoteArg(arg) {
|
|
156
|
-
if (!/[\s"'\\<>|&;`$!^%]/.test(arg))
|
|
157
|
-
return arg;
|
|
158
|
-
if (IS_WINDOWS) {
|
|
159
|
-
// On Windows (cmd.exe), double-quote and escape embedded quotes + backslashes
|
|
160
|
-
return '"' + arg.replace(/\\/g, '\\\\').replace(/"/g, '\\"') + '"';
|
|
161
|
-
}
|
|
162
|
-
// On Unix, use single quotes to prevent $variable expansion.
|
|
163
|
-
// Escape embedded single quotes via the '\'' idiom.
|
|
164
|
-
return "'" + arg.replace(/'/g, "'\\''") + "'";
|
|
165
|
-
}
|
|
166
|
-
/**
|
|
167
|
-
* Convert an args array to shell-wrapped args suitable for Bun.spawn.
|
|
168
|
-
* Each arg is quoted as needed, then joined and passed through shellArgs.
|
|
169
|
-
*/
|
|
170
|
-
export function shellArgsFromArray(args) {
|
|
171
|
-
return shellArgs(args.map(quoteArg).join(' '));
|
|
172
|
-
}
|
|
173
|
-
// For tests: allow resetting the cached shell detection
|
|
174
|
-
export function _resetShellCache() {
|
|
175
|
-
resolvedShell = null;
|
|
176
|
-
}
|
|
177
|
-
//# sourceMappingURL=utils.js.map
|
package/dist/utils.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,106 +0,0 @@
|
|
|
1
|
-
import * as readline from 'readline';
|
|
2
|
-
import type { ApprovalGateway, ApprovalRequest } from '../approval';
|
|
3
|
-
|
|
4
|
-
// ═══ CLI Stdin Adapter ═══
|
|
5
|
-
//
|
|
6
|
-
// Subscribes to the gateway's 'requested' events, prompts the user on stdout,
|
|
7
|
-
// reads a line from stdin, and calls gateway.resolve(). Handles at most one
|
|
8
|
-
// prompt at a time — additional requests queue up.
|
|
9
|
-
|
|
10
|
-
export interface StdinApprovalAdapter {
|
|
11
|
-
readonly detach: () => void;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
export function attachStdinApprovalAdapter(gateway: ApprovalGateway): StdinApprovalAdapter {
|
|
15
|
-
const queue: ApprovalRequest[] = [];
|
|
16
|
-
let processing = false;
|
|
17
|
-
let rl: readline.Interface | null = null;
|
|
18
|
-
|
|
19
|
-
function ensureReadline(): readline.Interface {
|
|
20
|
-
if (!rl) {
|
|
21
|
-
rl = readline.createInterface({ input: process.stdin, terminal: false });
|
|
22
|
-
}
|
|
23
|
-
return rl;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
function readOneLine(): Promise<string> {
|
|
27
|
-
return new Promise((resolvePromise) => {
|
|
28
|
-
const reader = ensureReadline();
|
|
29
|
-
const handler = (line: string): void => {
|
|
30
|
-
reader.off('line', handler);
|
|
31
|
-
resolvePromise(line);
|
|
32
|
-
};
|
|
33
|
-
reader.on('line', handler);
|
|
34
|
-
});
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
async function processNext(): Promise<void> {
|
|
38
|
-
if (processing) return;
|
|
39
|
-
processing = true;
|
|
40
|
-
try {
|
|
41
|
-
while (queue.length > 0) {
|
|
42
|
-
const req = queue.shift()!;
|
|
43
|
-
// If the request was already resolved by another path while queued, skip it.
|
|
44
|
-
if (!gateway.pending().some((p) => p.id === req.id)) continue;
|
|
45
|
-
|
|
46
|
-
process.stdout.write(
|
|
47
|
-
`\n[APPROVAL REQUIRED] ${req.message}\n` +
|
|
48
|
-
` id: ${req.id}\n` +
|
|
49
|
-
` task: ${req.taskId}${req.trackId ? ` (track: ${req.trackId})` : ''}\n` +
|
|
50
|
-
` approve / reject > `,
|
|
51
|
-
);
|
|
52
|
-
|
|
53
|
-
const input = (await readOneLine()).trim().toLowerCase();
|
|
54
|
-
|
|
55
|
-
const approveAliases = new Set(['approve', 'yes', 'y', 'ok', 'true', '1']);
|
|
56
|
-
const rejectAliases = new Set(['reject', 'no', 'n', 'deny', 'false', '0']);
|
|
57
|
-
|
|
58
|
-
if (approveAliases.has(input)) {
|
|
59
|
-
gateway.resolve(req.id, { outcome: 'approved', actor: 'cli' });
|
|
60
|
-
} else if (rejectAliases.has(input)) {
|
|
61
|
-
gateway.resolve(req.id, {
|
|
62
|
-
outcome: 'rejected',
|
|
63
|
-
actor: 'cli',
|
|
64
|
-
reason: 'user rejected via CLI',
|
|
65
|
-
});
|
|
66
|
-
} else {
|
|
67
|
-
process.stdout.write(` unrecognized input "${input}" — treating as rejection\n`);
|
|
68
|
-
gateway.resolve(req.id, {
|
|
69
|
-
outcome: 'rejected',
|
|
70
|
-
actor: 'cli',
|
|
71
|
-
reason: `unrecognized CLI input: ${input}`,
|
|
72
|
-
});
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
} finally {
|
|
76
|
-
processing = false;
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
const unsubscribe = gateway.subscribe((event) => {
|
|
81
|
-
switch (event.type) {
|
|
82
|
-
case 'requested':
|
|
83
|
-
queue.push(event.request);
|
|
84
|
-
void processNext();
|
|
85
|
-
return;
|
|
86
|
-
case 'resolved':
|
|
87
|
-
case 'expired':
|
|
88
|
-
case 'aborted': {
|
|
89
|
-
// Drop from queue if it's still waiting its turn.
|
|
90
|
-
const idx = queue.findIndex((r) => r.id === event.request.id);
|
|
91
|
-
if (idx >= 0) queue.splice(idx, 1);
|
|
92
|
-
return;
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
});
|
|
96
|
-
|
|
97
|
-
return {
|
|
98
|
-
detach: () => {
|
|
99
|
-
unsubscribe();
|
|
100
|
-
if (rl) {
|
|
101
|
-
rl.close();
|
|
102
|
-
rl = null;
|
|
103
|
-
}
|
|
104
|
-
},
|
|
105
|
-
};
|
|
106
|
-
}
|