@agent-relay/factory 0.1.37 → 0.1.39

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 (132) hide show
  1. package/README.md +110 -11
  2. package/dist/cli/fleet.d.ts +6 -0
  3. package/dist/cli/fleet.d.ts.map +1 -1
  4. package/dist/cli/fleet.js +74 -4
  5. package/dist/cli/fleet.js.map +1 -1
  6. package/dist/config/schema.d.ts +52 -0
  7. package/dist/config/schema.d.ts.map +1 -1
  8. package/dist/config/schema.js +9 -0
  9. package/dist/config/schema.js.map +1 -1
  10. package/dist/dispatch/templates.d.ts +2 -0
  11. package/dist/dispatch/templates.d.ts.map +1 -1
  12. package/dist/dispatch/templates.js +7 -0
  13. package/dist/dispatch/templates.js.map +1 -1
  14. package/dist/dispatch/test-guidance.d.ts +19 -0
  15. package/dist/dispatch/test-guidance.d.ts.map +1 -0
  16. package/dist/dispatch/test-guidance.js +180 -0
  17. package/dist/dispatch/test-guidance.js.map +1 -0
  18. package/dist/featuremap/check.d.ts +19 -0
  19. package/dist/featuremap/check.d.ts.map +1 -0
  20. package/dist/featuremap/check.js +81 -0
  21. package/dist/featuremap/check.js.map +1 -0
  22. package/dist/featuremap/index.d.ts +5 -0
  23. package/dist/featuremap/index.d.ts.map +1 -0
  24. package/dist/featuremap/index.js +3 -0
  25. package/dist/featuremap/index.js.map +1 -0
  26. package/dist/featuremap/validate.d.ts +55 -0
  27. package/dist/featuremap/validate.d.ts.map +1 -0
  28. package/dist/featuremap/validate.js +205 -0
  29. package/dist/featuremap/validate.js.map +1 -0
  30. package/dist/fleet/internal-fleet-client.d.ts.map +1 -1
  31. package/dist/fleet/internal-fleet-client.js +13 -0
  32. package/dist/fleet/internal-fleet-client.js.map +1 -1
  33. package/dist/fleet/relay-fleet-client.d.ts +1 -0
  34. package/dist/fleet/relay-fleet-client.d.ts.map +1 -1
  35. package/dist/fleet/relay-fleet-client.js +4 -0
  36. package/dist/fleet/relay-fleet-client.js.map +1 -1
  37. package/dist/github/repo-identity.d.ts +8 -0
  38. package/dist/github/repo-identity.d.ts.map +1 -0
  39. package/dist/github/repo-identity.js +28 -0
  40. package/dist/github/repo-identity.js.map +1 -0
  41. package/dist/github/standalone-babysitter.d.ts +1 -0
  42. package/dist/github/standalone-babysitter.d.ts.map +1 -1
  43. package/dist/github/standalone-babysitter.js +16 -1
  44. package/dist/github/standalone-babysitter.js.map +1 -1
  45. package/dist/hosted/index.d.ts +5 -0
  46. package/dist/hosted/index.d.ts.map +1 -0
  47. package/dist/hosted/index.js +3 -0
  48. package/dist/hosted/index.js.map +1 -0
  49. package/dist/hosted/orchestrator.d.ts +12 -0
  50. package/dist/hosted/orchestrator.d.ts.map +1 -0
  51. package/dist/hosted/orchestrator.js +513 -0
  52. package/dist/hosted/orchestrator.js.map +1 -0
  53. package/dist/hosted/state-store.d.ts +48 -0
  54. package/dist/hosted/state-store.d.ts.map +1 -0
  55. package/dist/hosted/state-store.js +210 -0
  56. package/dist/hosted/state-store.js.map +1 -0
  57. package/dist/hosted/types.d.ts +173 -0
  58. package/dist/hosted/types.d.ts.map +1 -0
  59. package/dist/hosted/types.js +2 -0
  60. package/dist/hosted/types.js.map +1 -0
  61. package/dist/index.d.ts +8 -7
  62. package/dist/index.d.ts.map +1 -1
  63. package/dist/index.js +4 -3
  64. package/dist/index.js.map +1 -1
  65. package/dist/mount/relayfile-cloud-mount-client.d.ts +20 -2
  66. package/dist/mount/relayfile-cloud-mount-client.d.ts.map +1 -1
  67. package/dist/mount/relayfile-cloud-mount-client.js +209 -22
  68. package/dist/mount/relayfile-cloud-mount-client.js.map +1 -1
  69. package/dist/mount/relayfile-github-connection-write.d.ts.map +1 -1
  70. package/dist/mount/relayfile-github-connection-write.js +4 -2
  71. package/dist/mount/relayfile-github-connection-write.js.map +1 -1
  72. package/dist/orchestrator/batch-tracker.d.ts +24 -2
  73. package/dist/orchestrator/batch-tracker.d.ts.map +1 -1
  74. package/dist/orchestrator/batch-tracker.js +70 -5
  75. package/dist/orchestrator/batch-tracker.js.map +1 -1
  76. package/dist/orchestrator/coalesced-task-queue.d.ts +19 -0
  77. package/dist/orchestrator/coalesced-task-queue.d.ts.map +1 -0
  78. package/dist/orchestrator/coalesced-task-queue.js +85 -0
  79. package/dist/orchestrator/coalesced-task-queue.js.map +1 -0
  80. package/dist/orchestrator/dependencies.d.ts +21 -0
  81. package/dist/orchestrator/dependencies.d.ts.map +1 -0
  82. package/dist/orchestrator/dependencies.js +70 -0
  83. package/dist/orchestrator/dependencies.js.map +1 -0
  84. package/dist/orchestrator/factory.d.ts.map +1 -1
  85. package/dist/orchestrator/factory.js +1466 -224
  86. package/dist/orchestrator/factory.js.map +1 -1
  87. package/dist/orchestrator/index.d.ts +3 -0
  88. package/dist/orchestrator/index.d.ts.map +1 -1
  89. package/dist/orchestrator/index.js +1 -0
  90. package/dist/orchestrator/index.js.map +1 -1
  91. package/dist/ports/mount.d.ts +2 -0
  92. package/dist/ports/mount.d.ts.map +1 -1
  93. package/dist/ports/state.d.ts +66 -4
  94. package/dist/ports/state.d.ts.map +1 -1
  95. package/dist/ports/writeback.d.ts +3 -0
  96. package/dist/ports/writeback.d.ts.map +1 -1
  97. package/dist/state/file-state-store.d.ts +17 -3
  98. package/dist/state/file-state-store.d.ts.map +1 -1
  99. package/dist/state/file-state-store.js +204 -3
  100. package/dist/state/file-state-store.js.map +1 -1
  101. package/dist/state/in-memory-state-store.d.ts +14 -1
  102. package/dist/state/in-memory-state-store.d.ts.map +1 -1
  103. package/dist/state/in-memory-state-store.js +112 -1
  104. package/dist/state/in-memory-state-store.js.map +1 -1
  105. package/dist/subscriptions/index.d.ts +2 -0
  106. package/dist/subscriptions/index.d.ts.map +1 -1
  107. package/dist/subscriptions/index.js +1 -0
  108. package/dist/subscriptions/index.js.map +1 -1
  109. package/dist/subscriptions/slack-filter.d.ts +32 -0
  110. package/dist/subscriptions/slack-filter.d.ts.map +1 -0
  111. package/dist/subscriptions/slack-filter.js +62 -0
  112. package/dist/subscriptions/slack-filter.js.map +1 -0
  113. package/dist/subscriptions/specs.d.ts +2 -0
  114. package/dist/subscriptions/specs.d.ts.map +1 -1
  115. package/dist/subscriptions/specs.js +11 -0
  116. package/dist/subscriptions/specs.js.map +1 -1
  117. package/dist/triage/schema.d.ts +16 -16
  118. package/dist/types.d.ts +17 -0
  119. package/dist/types.d.ts.map +1 -1
  120. package/dist/writeback/github.d.ts +4 -0
  121. package/dist/writeback/github.d.ts.map +1 -1
  122. package/dist/writeback/github.js +95 -0
  123. package/dist/writeback/github.js.map +1 -1
  124. package/dist/writeback/index.d.ts +2 -0
  125. package/dist/writeback/index.d.ts.map +1 -1
  126. package/dist/writeback/index.js +1 -0
  127. package/dist/writeback/index.js.map +1 -1
  128. package/dist/writeback/mount-health.d.ts +15 -0
  129. package/dist/writeback/mount-health.d.ts.map +1 -0
  130. package/dist/writeback/mount-health.js +15 -0
  131. package/dist/writeback/mount-health.js.map +1 -0
  132. package/package.json +13 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-guidance.js","sourceRoot":"","sources":["../../src/dispatch/test-guidance.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import { type FeatureLocationDriftAdvisory } from './validate.js';
2
+ export interface CheckFeatureMapOptions {
3
+ rootDir?: string;
4
+ manifestPath?: string;
5
+ /** Git revision used to compute the PR diff and load the base manifest. */
6
+ baseRef?: string;
7
+ }
8
+ export interface FeatureMapCheckReport {
9
+ ok: true;
10
+ manifestPath: string;
11
+ categoryCount: number;
12
+ featureCount: number;
13
+ baseRef?: string;
14
+ mergeBase?: string;
15
+ advisories: FeatureLocationDriftAdvisory[];
16
+ }
17
+ /** Validate a checkout and, when requested, produce advisory PR drift flags. */
18
+ export declare function checkFeatureMap(options?: CheckFeatureMapOptions): Promise<FeatureMapCheckReport>;
19
+ //# sourceMappingURL=check.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../src/featuremap/check.ts"],"names":[],"mappings":"AAIA,OAAO,EAKL,KAAK,4BAA4B,EAClC,MAAM,YAAY,CAAA;AAInB,MAAM,WAAW,sBAAsB;IACrC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,2EAA2E;IAC3E,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,IAAI,CAAA;IACR,YAAY,EAAE,MAAM,CAAA;IACpB,aAAa,EAAE,MAAM,CAAA;IACrB,YAAY,EAAE,MAAM,CAAA;IACpB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,4BAA4B,EAAE,CAAA;CAC3C;AAED,gFAAgF;AAChF,wBAAsB,eAAe,CACnC,OAAO,GAAE,sBAA2B,GACnC,OAAO,CAAC,qBAAqB,CAAC,CA4ChC"}
@@ -0,0 +1,81 @@
1
+ import { execFile } from 'node:child_process';
2
+ import { isAbsolute, relative, resolve } from 'node:path';
3
+ import { promisify } from 'node:util';
4
+ import { FEATURE_MAP_MANIFEST_PATH, findFeatureLocationDrift, parseManifestFeatures, validateFeatureManifestFile, } from './validate.js';
5
+ const execFileAsync = promisify(execFile);
6
+ /** Validate a checkout and, when requested, produce advisory PR drift flags. */
7
+ export async function checkFeatureMap(options = {}) {
8
+ const rootDir = resolve(options.rootDir ?? process.cwd());
9
+ const requestedManifestPath = options.manifestPath ?? FEATURE_MAP_MANIFEST_PATH;
10
+ const absoluteManifestPath = isAbsolute(requestedManifestPath)
11
+ ? requestedManifestPath
12
+ : resolve(rootDir, requestedManifestPath);
13
+ const manifestPath = toRepositoryPath(relative(rootDir, absoluteManifestPath));
14
+ // validateFeatureManifestFile enforces that manifestPath resolves inside rootDir.
15
+ const validation = validateFeatureManifestFile({
16
+ rootDir,
17
+ manifestPath: absoluteManifestPath,
18
+ });
19
+ let advisories = [];
20
+ let mergeBase;
21
+ if (options.baseRef) {
22
+ mergeBase = (await git(rootDir, ['merge-base', options.baseRef, 'HEAD'])).trim();
23
+ const changedPaths = (await git(rootDir, [
24
+ 'diff',
25
+ '--name-only',
26
+ '--diff-filter=ACMRTUXB',
27
+ mergeBase,
28
+ '--',
29
+ ])).split(/\r?\n/u).map((value) => value.trim()).filter(Boolean);
30
+ const baseManifest = await gitFileAtRevision(rootDir, mergeBase, manifestPath);
31
+ if (baseManifest !== undefined) {
32
+ advisories = findFeatureLocationDrift(parseManifestFeatures(baseManifest), validation.features, changedPaths);
33
+ }
34
+ }
35
+ return {
36
+ ok: true,
37
+ manifestPath,
38
+ categoryCount: validation.categoryCount,
39
+ featureCount: validation.features.length,
40
+ ...(options.baseRef ? { baseRef: options.baseRef } : {}),
41
+ ...(mergeBase ? { mergeBase } : {}),
42
+ advisories,
43
+ };
44
+ }
45
+ async function git(rootDir, args) {
46
+ const { stdout } = await execFileAsync('git', ['-C', rootDir, ...args], {
47
+ encoding: 'utf8',
48
+ maxBuffer: 10 * 1024 * 1024,
49
+ timeout: 30_000,
50
+ env: { ...process.env, LC_ALL: 'C' },
51
+ });
52
+ return stdout;
53
+ }
54
+ async function gitFileAtRevision(rootDir, revision, path) {
55
+ if (!(await objectExistsAtRevision(rootDir, revision, path)))
56
+ return undefined;
57
+ return git(rootDir, ['show', `${revision}:${path}`]);
58
+ }
59
+ /** Exit-code probe, avoiding locale/version-fragile stderr matching for a missing object. */
60
+ async function objectExistsAtRevision(rootDir, revision, path) {
61
+ try {
62
+ await execFileAsync('git', ['-C', rootDir, 'cat-file', '-e', `${revision}:${path}`], {
63
+ encoding: 'utf8',
64
+ timeout: 30_000,
65
+ env: { ...process.env, LC_ALL: 'C' },
66
+ });
67
+ return true;
68
+ }
69
+ catch (error) {
70
+ const exitCode = typeof error === 'object' && error !== null && 'code' in error
71
+ ? error.code
72
+ : undefined;
73
+ if (typeof exitCode === 'number')
74
+ return false;
75
+ throw error;
76
+ }
77
+ }
78
+ function toRepositoryPath(path) {
79
+ return path.replaceAll('\\', '/');
80
+ }
81
+ //# sourceMappingURL=check.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check.js","sourceRoot":"","sources":["../../src/featuremap/check.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export { FEATURE_MAP_MANIFEST_PATH, featureLocations, findFeatureLocationDrift, parseManifestFeatures, validateFeatureManifest, validateFeatureManifestFile, } from './validate.js';
2
+ export type { FeatureCriticality, FeatureLocationDriftAdvisory, FeatureManifestValidation, ManifestFeature, ValidateFeatureManifestFileOptions, ValidateFeatureManifestOptions, } from './validate.js';
3
+ export { checkFeatureMap } from './check.js';
4
+ export type { CheckFeatureMapOptions, FeatureMapCheckReport } from './check.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/featuremap/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,yBAAyB,EACzB,gBAAgB,EAChB,wBAAwB,EACxB,qBAAqB,EACrB,uBAAuB,EACvB,2BAA2B,GAC5B,MAAM,YAAY,CAAA;AACnB,YAAY,EACV,kBAAkB,EAClB,4BAA4B,EAC5B,yBAAyB,EACzB,eAAe,EACf,kCAAkC,EAClC,8BAA8B,GAC/B,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AACzC,YAAY,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAA"}
@@ -0,0 +1,3 @@
1
+ export { FEATURE_MAP_MANIFEST_PATH, featureLocations, findFeatureLocationDrift, parseManifestFeatures, validateFeatureManifest, validateFeatureManifestFile, } from './validate.js';
2
+ export { checkFeatureMap } from './check.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/featuremap/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,yBAAyB,EACzB,gBAAgB,EAChB,wBAAwB,EACxB,qBAAqB,EACrB,uBAAuB,EACvB,2BAA2B,GAC5B,MAAM,YAAY,CAAA;AASnB,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA"}
@@ -0,0 +1,55 @@
1
+ export declare const FEATURE_MAP_MANIFEST_PATH = ".agentworkforce/features/manifest.yaml";
2
+ export type FeatureCriticality = 'critical' | 'hot' | 'standard';
3
+ export interface ManifestFeature {
4
+ id: string;
5
+ name: string;
6
+ cli?: string;
7
+ api?: string;
8
+ desc: string;
9
+ location: string;
10
+ tier: number;
11
+ criticality: FeatureCriticality;
12
+ }
13
+ export interface FeatureManifestValidation {
14
+ categoryCount: number;
15
+ features: ManifestFeature[];
16
+ }
17
+ export interface ValidateFeatureManifestOptions {
18
+ /** Repository root used to resolve and check every declared location. */
19
+ rootDir?: string;
20
+ /** Injectable existence probe for consumers that validate a virtual checkout. */
21
+ pathExists?: (path: string) => boolean;
22
+ }
23
+ export interface ValidateFeatureManifestFileOptions {
24
+ rootDir?: string;
25
+ manifestPath?: string;
26
+ pathExists?: (path: string) => boolean;
27
+ }
28
+ export interface FeatureLocationDriftAdvisory {
29
+ featureId: string;
30
+ featureName: string;
31
+ changedLocations: string[];
32
+ description: string;
33
+ verifyTier: number;
34
+ message: string;
35
+ }
36
+ /**
37
+ * Parse and structurally validate the checked-in feature manifest.
38
+ *
39
+ * This compatibility-shaped return value is also consumed by the deployed
40
+ * factory-feature-guardian agent. Disk location checks are intentionally kept
41
+ * in validateFeatureManifest so sandboxed consumers can supply their own probe.
42
+ */
43
+ export declare function parseManifestFeatures(raw: string): ManifestFeature[];
44
+ /** Validate manifest structure, unique IDs, catalog totals, and optional paths. */
45
+ export declare function validateFeatureManifest(raw: string, options?: ValidateFeatureManifestOptions): FeatureManifestValidation;
46
+ /** Read the conventional repository manifest and validate all declared paths. */
47
+ export declare function validateFeatureManifestFile(options?: ValidateFeatureManifestFileOptions): FeatureManifestValidation;
48
+ /** Split the manifest's comma-delimited location field into repository paths. */
49
+ export declare function featureLocations(feature: Pick<ManifestFeature, 'location'>): string[];
50
+ /**
51
+ * Return advisory flags for changed feature locations whose description, tier,
52
+ * and location were carried forward unchanged from the base manifest.
53
+ */
54
+ export declare function findFeatureLocationDrift(baseFeatures: readonly ManifestFeature[], headFeatures: readonly ManifestFeature[], changedPaths: readonly string[]): FeatureLocationDriftAdvisory[];
55
+ //# sourceMappingURL=validate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/featuremap/validate.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,yBAAyB,2CAA2C,CAAA;AAEjF,MAAM,MAAM,kBAAkB,GAAG,UAAU,GAAG,KAAK,GAAG,UAAU,CAAA;AAEhE,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,kBAAkB,CAAA;CAChC;AAED,MAAM,WAAW,yBAAyB;IACxC,aAAa,EAAE,MAAM,CAAA;IACrB,QAAQ,EAAE,eAAe,EAAE,CAAA;CAC5B;AAED,MAAM,WAAW,8BAA8B;IAC7C,yEAAyE;IACzE,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,iFAAiF;IACjF,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAA;CACvC;AAED,MAAM,WAAW,kCAAkC;IACjD,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAA;CACvC;AAED,MAAM,WAAW,4BAA4B;IAC3C,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE,MAAM,CAAA;IACnB,gBAAgB,EAAE,MAAM,EAAE,CAAA;IAC1B,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,MAAM,CAAA;CAChB;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,EAAE,CAEpE;AAED,mFAAmF;AACnF,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,8BAAmC,GAC3C,yBAAyB,CAqC3B;AAED,iFAAiF;AACjF,wBAAgB,2BAA2B,CACzC,OAAO,GAAE,kCAAuC,GAC/C,yBAAyB,CAmB3B;AAED,iFAAiF;AACjF,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,eAAe,EAAE,UAAU,CAAC,GAAG,MAAM,EAAE,CAErF;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,YAAY,EAAE,SAAS,eAAe,EAAE,EACxC,YAAY,EAAE,SAAS,eAAe,EAAE,EACxC,YAAY,EAAE,SAAS,MAAM,EAAE,GAC9B,4BAA4B,EAAE,CA6BhC"}
@@ -0,0 +1,205 @@
1
+ import { existsSync, readFileSync } from 'node:fs';
2
+ import { isAbsolute, relative, resolve } from 'node:path';
3
+ import { parse } from 'yaml';
4
+ export const FEATURE_MAP_MANIFEST_PATH = '.agentworkforce/features/manifest.yaml';
5
+ /**
6
+ * Parse and structurally validate the checked-in feature manifest.
7
+ *
8
+ * This compatibility-shaped return value is also consumed by the deployed
9
+ * factory-feature-guardian agent. Disk location checks are intentionally kept
10
+ * in validateFeatureManifest so sandboxed consumers can supply their own probe.
11
+ */
12
+ export function parseManifestFeatures(raw) {
13
+ return validateFeatureManifest(raw).features;
14
+ }
15
+ /** Validate manifest structure, unique IDs, catalog totals, and optional paths. */
16
+ export function validateFeatureManifest(raw, options = {}) {
17
+ const manifest = parseManifestYaml(raw);
18
+ const categories = requireRecord(manifest.categories, 'Manifest is missing categories');
19
+ const features = [];
20
+ const seenIds = new Set();
21
+ for (const [categoryId, inputCategory] of Object.entries(categories)) {
22
+ const category = requireRecord(inputCategory, `Manifest category ${categoryId} must be an object`);
23
+ const criticality = category.criticality;
24
+ if (!isCriticality(criticality)) {
25
+ throw new Error(`Manifest category ${categoryId} has invalid criticality`);
26
+ }
27
+ if (!Array.isArray(category.features)) {
28
+ throw new Error(`Manifest category ${categoryId} is missing a features array`);
29
+ }
30
+ for (const inputFeature of category.features) {
31
+ const feature = validateFeature(inputFeature, criticality);
32
+ if (seenIds.has(feature.id)) {
33
+ throw new Error(`Duplicate feature id in manifest: ${feature.id}`);
34
+ }
35
+ seenIds.add(feature.id);
36
+ features.push(feature);
37
+ }
38
+ }
39
+ if (features.length === 0)
40
+ throw new Error('Manifest parsed but contained no features');
41
+ validateCatalogSummary(manifest.catalog, Object.keys(categories).length, features);
42
+ if (options.rootDir !== undefined) {
43
+ validateFeatureLocations(features, options.rootDir, options.pathExists ?? existsSync);
44
+ }
45
+ return { categoryCount: Object.keys(categories).length, features };
46
+ }
47
+ /** Read the conventional repository manifest and validate all declared paths. */
48
+ export function validateFeatureManifestFile(options = {}) {
49
+ const rootDir = resolve(options.rootDir ?? process.cwd());
50
+ const manifestPath = options.manifestPath ?? FEATURE_MAP_MANIFEST_PATH;
51
+ const absoluteManifestPath = isAbsolute(manifestPath)
52
+ ? manifestPath
53
+ : resolve(rootDir, manifestPath);
54
+ const relativeManifestPath = relative(rootDir, absoluteManifestPath).replaceAll('\\', '/');
55
+ if (relativeManifestPath === '..' ||
56
+ relativeManifestPath.startsWith('../') ||
57
+ isAbsolute(relativeManifestPath)) {
58
+ throw new Error(`Feature manifest must be inside the repository root: ${absoluteManifestPath}`);
59
+ }
60
+ const raw = readFileSync(absoluteManifestPath, 'utf8');
61
+ return validateFeatureManifest(raw, {
62
+ rootDir,
63
+ ...(options.pathExists ? { pathExists: options.pathExists } : {}),
64
+ });
65
+ }
66
+ /** Split the manifest's comma-delimited location field into repository paths. */
67
+ export function featureLocations(feature) {
68
+ return feature.location.split(',').map((value) => value.trim()).filter(Boolean);
69
+ }
70
+ /**
71
+ * Return advisory flags for changed feature locations whose description, tier,
72
+ * and location were carried forward unchanged from the base manifest.
73
+ */
74
+ export function findFeatureLocationDrift(baseFeatures, headFeatures, changedPaths) {
75
+ const normalizedChanges = changedPaths.map(normalizeRepositoryPath).filter(Boolean);
76
+ const changedPathSet = new Set(normalizedChanges);
77
+ const headById = new Map(headFeatures.map((feature) => [feature.id, feature]));
78
+ const advisories = [];
79
+ for (const baseFeature of baseFeatures) {
80
+ const changedLocations = featureLocations(baseFeature).flatMap((location) => {
81
+ const normalizedLocation = normalizeRepositoryPath(location);
82
+ const touched = changedPathSet.has(normalizedLocation) ||
83
+ normalizedChanges.some((path) => path.startsWith(`${normalizedLocation}/`));
84
+ return touched ? [normalizedLocation] : [];
85
+ });
86
+ if (changedLocations.length === 0)
87
+ continue;
88
+ const headFeature = headById.get(baseFeature.id);
89
+ if (!headFeature || featureConfirmationChanged(baseFeature, headFeature))
90
+ continue;
91
+ advisories.push({
92
+ featureId: headFeature.id,
93
+ featureName: headFeature.name,
94
+ changedLocations,
95
+ description: headFeature.desc,
96
+ verifyTier: headFeature.tier,
97
+ message: `Re-confirm manifest feature ${headFeature.id}: changed ${changedLocations.join(', ')} but description and verify_tier were not updated`,
98
+ });
99
+ }
100
+ return advisories.sort((left, right) => left.featureId.localeCompare(right.featureId));
101
+ }
102
+ function parseManifestYaml(raw) {
103
+ try {
104
+ return requireRecord(parse(raw), 'Manifest root must be an object');
105
+ }
106
+ catch (error) {
107
+ if (error instanceof Error && error.message.startsWith('Manifest '))
108
+ throw error;
109
+ const message = error instanceof Error ? error.message : String(error);
110
+ throw new Error(`Manifest YAML is invalid: ${message}`);
111
+ }
112
+ }
113
+ function validateFeature(input, criticality) {
114
+ const record = input !== null && typeof input === 'object' && !Array.isArray(input)
115
+ ? input
116
+ : {};
117
+ const id = nonEmptyString(record.id);
118
+ const name = nonEmptyString(record.name);
119
+ const description = nonEmptyString(record.description);
120
+ const location = nonEmptyString(record.location);
121
+ if (!id || !name || !description || !location) {
122
+ throw new Error(`Incomplete manifest feature: ${JSON.stringify(input)}`);
123
+ }
124
+ const cli = nonEmptyString(record.cli);
125
+ const api = nonEmptyString(record.api);
126
+ if (!cli && !api) {
127
+ throw new Error(`Manifest feature ${id} has neither cli nor api`);
128
+ }
129
+ const verifyTier = record.verify_tier;
130
+ if (!Number.isInteger(verifyTier) || verifyTier < 1 || verifyTier > 6) {
131
+ throw new Error(`Manifest feature ${id} has invalid verify_tier`);
132
+ }
133
+ return {
134
+ id,
135
+ name,
136
+ ...(cli ? { cli } : {}),
137
+ ...(api ? { api } : {}),
138
+ desc: description,
139
+ location,
140
+ tier: verifyTier,
141
+ criticality,
142
+ };
143
+ }
144
+ function validateCatalogSummary(inputCatalog, categoryCount, features) {
145
+ const catalog = requireRecord(inputCatalog, 'Manifest is missing catalog');
146
+ const declaredCategories = catalogInteger(catalog.category_count, 'category_count');
147
+ const declaredFeatures = catalogInteger(catalog.feature_count, 'feature_count');
148
+ if (declaredCategories !== categoryCount || declaredFeatures !== features.length) {
149
+ throw new Error(`Manifest catalog mismatch: declared ${declaredCategories} categories/${declaredFeatures} features, parsed ${categoryCount}/${features.length}`);
150
+ }
151
+ const tierCounts = requireRecord(catalog.tier_counts, 'Manifest catalog is missing tier_counts');
152
+ for (let tier = 1; tier <= 6; tier += 1) {
153
+ const declared = catalogInteger(tierCounts[String(tier)], `tier ${tier}`);
154
+ const actual = features.filter((feature) => feature.tier === tier).length;
155
+ if (declared !== actual) {
156
+ throw new Error(`Manifest catalog tier ${tier} mismatch: declared ${declared}, parsed ${actual}`);
157
+ }
158
+ }
159
+ }
160
+ function validateFeatureLocations(features, rootDir, pathExists) {
161
+ for (const feature of features) {
162
+ const locations = featureLocations(feature);
163
+ if (locations.length === 0) {
164
+ throw new Error(`Manifest feature ${feature.id} has no valid locations`);
165
+ }
166
+ for (const location of locations) {
167
+ const absolutePath = isAbsolute(location) ? location : resolve(rootDir, location);
168
+ const relativePath = relative(rootDir, absolutePath).replaceAll('\\', '/');
169
+ if (relativePath === '..' || relativePath.startsWith('../') || isAbsolute(relativePath)) {
170
+ throw new Error(`Feature location must be inside the repository root for ${feature.id}: ${location}`);
171
+ }
172
+ if (!pathExists(absolutePath)) {
173
+ throw new Error(`Missing location for ${feature.id}: ${location}`);
174
+ }
175
+ }
176
+ }
177
+ }
178
+ function featureConfirmationChanged(base, head) {
179
+ return base.desc !== head.desc ||
180
+ base.tier !== head.tier ||
181
+ featureLocations(base).map(normalizeRepositoryPath).join('\n') !==
182
+ featureLocations(head).map(normalizeRepositoryPath).join('\n');
183
+ }
184
+ function normalizeRepositoryPath(path) {
185
+ return path.trim().replaceAll('\\', '/').replace(/^\.\//u, '').replace(/\/$/u, '');
186
+ }
187
+ function catalogInteger(value, label) {
188
+ if (!Number.isSafeInteger(value) || value < 0) {
189
+ throw new Error(`Manifest catalog is missing a valid ${label}`);
190
+ }
191
+ return value;
192
+ }
193
+ function requireRecord(value, message) {
194
+ if (value === null || typeof value !== 'object' || Array.isArray(value)) {
195
+ throw new Error(message);
196
+ }
197
+ return value;
198
+ }
199
+ function nonEmptyString(value) {
200
+ return typeof value === 'string' && value.trim().length > 0 ? value.trim() : undefined;
201
+ }
202
+ function isCriticality(value) {
203
+ return value === 'critical' || value === 'hot' || value === 'standard';
204
+ }
205
+ //# sourceMappingURL=validate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/featuremap/validate.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"internal-fleet-client.d.ts","sourceRoot":"","sources":["../../src/fleet/internal-fleet-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"internal-fleet-client.d.ts","sourceRoot":"","sources":["../../src/fleet/internal-fleet-client.ts"],"names":[],"mappings":"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"}
@@ -51,6 +51,7 @@ export class InternalFleetClient {
51
51
  #activeInjectedWaits = new Set();
52
52
  #injectedEventIds = [];
53
53
  #injectedEventIdSet = new Set();
54
+ #injectedByAgent = new Map();
54
55
  #failedDeliveries = new Map();
55
56
  #failedDeliveryIds = [];
56
57
  #exitedAgentNames = new Set();
@@ -281,12 +282,17 @@ export class InternalFleetClient {
281
282
  async waitForInjected(input, opts) {
282
283
  this.#ensureEventSubscription();
283
284
  const targetWasReady = this.#readyAgentNames.has(input.to);
285
+ const injectedSequenceAtSendStart = this.#injectedByAgent.get(input.to)?.sequence ?? 0;
284
286
  const result = await this.#client.sendMessage(messageInputFrom(input));
285
287
  const eventId = result.event_id;
286
288
  const targets = result.targets ?? [];
287
289
  if (this.#injectedEventIdSet.has(eventId)) {
288
290
  return { eventId, targets };
289
291
  }
292
+ const injectedDuringSend = this.#injectedByAgent.get(input.to);
293
+ if (injectedDuringSend && injectedDuringSend.sequence > injectedSequenceAtSendStart) {
294
+ return { eventId: injectedDuringSend.eventId, targets };
295
+ }
290
296
  return await new Promise((resolve, reject) => {
291
297
  const timeoutMs = opts?.timeoutMs ?? 30_000;
292
298
  const timeout = setTimeout(() => {
@@ -492,6 +498,13 @@ export class InternalFleetClient {
492
498
  }
493
499
  #resolveInjected(eventId, name) {
494
500
  rememberRecent(eventId, this.#injectedEventIds, this.#injectedEventIdSet);
501
+ if (name) {
502
+ const previous = this.#injectedByAgent.get(name);
503
+ this.#injectedByAgent.set(name, {
504
+ sequence: (previous?.sequence ?? 0) + 1,
505
+ eventId,
506
+ });
507
+ }
495
508
  const pending = this.#pendingInjected.get(eventId);
496
509
  if (pending) {
497
510
  this.#resolvePendingInjected(pending, eventId);