aios-core 3.7.0 → 3.9.1
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/.aios-core/core/session/context-detector.js +3 -0
- package/.aios-core/core/session/context-loader.js +154 -0
- package/.aios-core/data/learned-patterns.yaml +3 -0
- package/.aios-core/data/workflow-patterns.yaml +347 -3
- package/.aios-core/development/agents/dev.md +6 -0
- package/.aios-core/development/agents/squad-creator.md +30 -0
- package/.aios-core/development/scripts/squad/squad-analyzer.js +638 -0
- package/.aios-core/development/scripts/squad/squad-extender.js +871 -0
- package/.aios-core/development/scripts/squad/squad-generator.js +107 -19
- package/.aios-core/development/scripts/squad/squad-migrator.js +3 -5
- package/.aios-core/development/scripts/squad/squad-validator.js +98 -0
- package/.aios-core/development/tasks/next.md +294 -0
- package/.aios-core/development/tasks/patterns.md +334 -0
- package/.aios-core/development/tasks/squad-creator-analyze.md +315 -0
- package/.aios-core/development/tasks/squad-creator-create.md +26 -3
- package/.aios-core/development/tasks/squad-creator-extend.md +411 -0
- package/.aios-core/development/tasks/squad-creator-validate.md +9 -1
- package/.aios-core/development/tasks/waves.md +205 -0
- package/.aios-core/development/templates/squad/agent-template.md +69 -0
- package/.aios-core/development/templates/squad/checklist-template.md +82 -0
- package/.aios-core/development/templates/squad/data-template.yaml +105 -0
- package/.aios-core/development/templates/squad/script-template.js +179 -0
- package/.aios-core/development/templates/squad/task-template.md +125 -0
- package/.aios-core/development/templates/squad/template-template.md +97 -0
- package/.aios-core/development/templates/squad/tool-template.js +103 -0
- package/.aios-core/development/templates/squad/workflow-template.yaml +108 -0
- package/.aios-core/infrastructure/scripts/test-generator.js +8 -8
- package/.aios-core/infrastructure/scripts/test-quality-assessment.js +5 -5
- package/.aios-core/infrastructure/scripts/test-utilities.js +3 -3
- package/.aios-core/install-manifest.yaml +97 -33
- package/.aios-core/quality/metrics-collector.js +27 -0
- package/.aios-core/scripts/session-context-loader.js +13 -254
- package/.aios-core/scripts/test-template-system.js +6 -6
- package/.aios-core/utils/aios-validator.js +25 -0
- package/.aios-core/workflow-intelligence/__tests__/confidence-scorer.test.js +334 -0
- package/.aios-core/workflow-intelligence/__tests__/integration.test.js +337 -0
- package/.aios-core/workflow-intelligence/__tests__/suggestion-engine.test.js +431 -0
- package/.aios-core/workflow-intelligence/__tests__/wave-analyzer.test.js +458 -0
- package/.aios-core/workflow-intelligence/__tests__/workflow-registry.test.js +302 -0
- package/.aios-core/workflow-intelligence/engine/confidence-scorer.js +305 -0
- package/.aios-core/workflow-intelligence/engine/output-formatter.js +285 -0
- package/.aios-core/workflow-intelligence/engine/suggestion-engine.js +603 -0
- package/.aios-core/workflow-intelligence/engine/wave-analyzer.js +676 -0
- package/.aios-core/workflow-intelligence/index.js +327 -0
- package/.aios-core/workflow-intelligence/learning/capture-hook.js +147 -0
- package/.aios-core/workflow-intelligence/learning/index.js +230 -0
- package/.aios-core/workflow-intelligence/learning/pattern-capture.js +340 -0
- package/.aios-core/workflow-intelligence/learning/pattern-store.js +498 -0
- package/.aios-core/workflow-intelligence/learning/pattern-validator.js +309 -0
- package/.aios-core/workflow-intelligence/registry/workflow-registry.js +358 -0
- package/package.json +1 -1
- package/src/installer/brownfield-upgrader.js +1 -1
- package/bin/aios-init.backup-v1.1.4.js +0 -352
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
# {{COMPONENTNAME}} Workflow
|
|
2
|
+
#
|
|
3
|
+
# {{DESCRIPTION}}
|
|
4
|
+
#
|
|
5
|
+
# Created: {{CREATEDAT}}
|
|
6
|
+
# Story: {{STORYID}}
|
|
7
|
+
|
|
8
|
+
name: {{COMPONENTNAME}}
|
|
9
|
+
version: 1.0.0
|
|
10
|
+
description: {{DESCRIPTION}}
|
|
11
|
+
squad: {{SQUADNAME}}
|
|
12
|
+
|
|
13
|
+
# Metadata
|
|
14
|
+
metadata:
|
|
15
|
+
created: {{CREATEDAT}}
|
|
16
|
+
author: squad-creator
|
|
17
|
+
tags:
|
|
18
|
+
- workflow
|
|
19
|
+
- {{SQUADNAME}}
|
|
20
|
+
|
|
21
|
+
# Trigger conditions
|
|
22
|
+
triggers:
|
|
23
|
+
- type: manual
|
|
24
|
+
command: "*{{COMPONENTNAME}}"
|
|
25
|
+
# - type: event
|
|
26
|
+
# event: some-event-name
|
|
27
|
+
# - type: schedule
|
|
28
|
+
# cron: "0 0 * * *"
|
|
29
|
+
|
|
30
|
+
# Input parameters
|
|
31
|
+
inputs:
|
|
32
|
+
- name: param1
|
|
33
|
+
type: string
|
|
34
|
+
required: true
|
|
35
|
+
description: "Description of parameter 1"
|
|
36
|
+
- name: param2
|
|
37
|
+
type: string
|
|
38
|
+
required: false
|
|
39
|
+
default: "default-value"
|
|
40
|
+
description: "Description of parameter 2"
|
|
41
|
+
|
|
42
|
+
# Workflow steps
|
|
43
|
+
steps:
|
|
44
|
+
- id: step-1
|
|
45
|
+
name: "Step 1: Initialize"
|
|
46
|
+
description: "Initialize the workflow"
|
|
47
|
+
action: task
|
|
48
|
+
task: task-name-1
|
|
49
|
+
inputs:
|
|
50
|
+
param: "{{inputs.param1}}"
|
|
51
|
+
on_error: abort
|
|
52
|
+
|
|
53
|
+
- id: step-2
|
|
54
|
+
name: "Step 2: Process"
|
|
55
|
+
description: "Main processing step"
|
|
56
|
+
action: task
|
|
57
|
+
task: task-name-2
|
|
58
|
+
depends_on:
|
|
59
|
+
- step-1
|
|
60
|
+
inputs:
|
|
61
|
+
data: "{{steps.step-1.output}}"
|
|
62
|
+
on_error: retry
|
|
63
|
+
retry:
|
|
64
|
+
max_attempts: 3
|
|
65
|
+
delay: 1000
|
|
66
|
+
|
|
67
|
+
- id: step-3
|
|
68
|
+
name: "Step 3: Finalize"
|
|
69
|
+
description: "Finalize the workflow"
|
|
70
|
+
action: task
|
|
71
|
+
task: task-name-3
|
|
72
|
+
depends_on:
|
|
73
|
+
- step-2
|
|
74
|
+
condition: "{{steps.step-2.success}}"
|
|
75
|
+
|
|
76
|
+
# Conditional branches (optional)
|
|
77
|
+
# branches:
|
|
78
|
+
# - condition: "{{steps.step-2.output.type == 'a'}}"
|
|
79
|
+
# steps:
|
|
80
|
+
# - id: branch-a-step
|
|
81
|
+
# name: "Branch A Step"
|
|
82
|
+
# action: task
|
|
83
|
+
# task: branch-a-task
|
|
84
|
+
|
|
85
|
+
# Output definition
|
|
86
|
+
outputs:
|
|
87
|
+
- name: result
|
|
88
|
+
from: "{{steps.step-3.output}}"
|
|
89
|
+
description: "Final workflow result"
|
|
90
|
+
|
|
91
|
+
# Completion handlers
|
|
92
|
+
completion:
|
|
93
|
+
on_success:
|
|
94
|
+
message: "Workflow '{{COMPONENTNAME}}' completed successfully"
|
|
95
|
+
notify: false
|
|
96
|
+
on_failure:
|
|
97
|
+
message: "Workflow '{{COMPONENTNAME}}' failed"
|
|
98
|
+
notify: true
|
|
99
|
+
rollback: true
|
|
100
|
+
|
|
101
|
+
# Validation
|
|
102
|
+
validation:
|
|
103
|
+
pre_run:
|
|
104
|
+
- "Check all required inputs are provided"
|
|
105
|
+
- "Validate input formats"
|
|
106
|
+
post_run:
|
|
107
|
+
- "Verify output is valid"
|
|
108
|
+
- "Log completion metrics"
|
|
@@ -36,7 +36,7 @@ class TestGenerator {
|
|
|
36
36
|
console.log(chalk.green('✅ Test generator initialized'));
|
|
37
37
|
return true;
|
|
38
38
|
|
|
39
|
-
} catch (
|
|
39
|
+
} catch (error) {
|
|
40
40
|
console.error(chalk.red(`Failed to initialize test generator: ${error.message}`));
|
|
41
41
|
throw error;
|
|
42
42
|
}
|
|
@@ -67,7 +67,7 @@ class TestGenerator {
|
|
|
67
67
|
|
|
68
68
|
return processedContent;
|
|
69
69
|
|
|
70
|
-
} catch (
|
|
70
|
+
} catch (error) {
|
|
71
71
|
this.updateGenerationStats(false, Date.now() - startTime);
|
|
72
72
|
console.error(chalk.red(`Failed to generate test for ${component.name}: ${error.message}`));
|
|
73
73
|
throw error;
|
|
@@ -95,7 +95,7 @@ class TestGenerator {
|
|
|
95
95
|
test_count: testFile.test_count,
|
|
96
96
|
});
|
|
97
97
|
|
|
98
|
-
} catch (
|
|
98
|
+
} catch (error) {
|
|
99
99
|
errors.push({
|
|
100
100
|
file_path: testFile.file_path,
|
|
101
101
|
test_type: testFile.test_type,
|
|
@@ -167,7 +167,7 @@ class TestGenerator {
|
|
|
167
167
|
enhancedContent = this.injectSetupTeardown(enhancedContent, setupTeardown);
|
|
168
168
|
}
|
|
169
169
|
|
|
170
|
-
} catch (
|
|
170
|
+
} catch (error) {
|
|
171
171
|
console.warn(chalk.yellow(`Failed to enhance test content: ${error.message}`));
|
|
172
172
|
// Return base content if enhancement fails
|
|
173
173
|
}
|
|
@@ -221,7 +221,7 @@ class TestGenerator {
|
|
|
221
221
|
analysis.configuration = this.extractTaskConfig(content);
|
|
222
222
|
}
|
|
223
223
|
|
|
224
|
-
} catch (
|
|
224
|
+
} catch (error) {
|
|
225
225
|
console.warn(chalk.yellow(`Failed to analyze component ${component.id}: ${error.message}`));
|
|
226
226
|
}
|
|
227
227
|
|
|
@@ -547,7 +547,7 @@ ${content}`;
|
|
|
547
547
|
throw new Error('Unbalanced brackets in generated test');
|
|
548
548
|
}
|
|
549
549
|
|
|
550
|
-
} catch (
|
|
550
|
+
} catch (error) {
|
|
551
551
|
console.warn(chalk.yellow(`Test syntax validation warning: ${error.message}`));
|
|
552
552
|
}
|
|
553
553
|
}
|
|
@@ -723,7 +723,7 @@ ${content}`;
|
|
|
723
723
|
try {
|
|
724
724
|
const yaml = require('js-yaml');
|
|
725
725
|
return yaml.load(yamlMatch[1]);
|
|
726
|
-
} catch
|
|
726
|
+
} catch {
|
|
727
727
|
return null;
|
|
728
728
|
}
|
|
729
729
|
}
|
|
@@ -734,7 +734,7 @@ ${content}`;
|
|
|
734
734
|
try {
|
|
735
735
|
const yaml = require('js-yaml');
|
|
736
736
|
return yaml.load(content);
|
|
737
|
-
} catch
|
|
737
|
+
} catch {
|
|
738
738
|
return null;
|
|
739
739
|
}
|
|
740
740
|
}
|
|
@@ -29,7 +29,7 @@ class TestQualityAssessment {
|
|
|
29
29
|
console.log(chalk.green('✅ Test quality assessment initialized'));
|
|
30
30
|
return true;
|
|
31
31
|
|
|
32
|
-
} catch (
|
|
32
|
+
} catch (error) {
|
|
33
33
|
console.error(chalk.red(`Failed to initialize test quality assessment: ${error.message}`));
|
|
34
34
|
throw error;
|
|
35
35
|
}
|
|
@@ -81,7 +81,7 @@ class TestQualityAssessment {
|
|
|
81
81
|
|
|
82
82
|
return assessment;
|
|
83
83
|
|
|
84
|
-
} catch (
|
|
84
|
+
} catch (error) {
|
|
85
85
|
console.error(chalk.red(`Failed to assess test quality for ${testFilePath}: ${error.message}`));
|
|
86
86
|
throw error;
|
|
87
87
|
}
|
|
@@ -117,7 +117,7 @@ class TestQualityAssessment {
|
|
|
117
117
|
allIssues.push(...assessment.issues);
|
|
118
118
|
qualityRatings[assessment.quality_rating]++;
|
|
119
119
|
|
|
120
|
-
} catch (
|
|
120
|
+
} catch (error) {
|
|
121
121
|
console.warn(chalk.yellow(`Failed to assess ${testFile}: ${error.message}`));
|
|
122
122
|
}
|
|
123
123
|
}
|
|
@@ -985,7 +985,7 @@ class TestQualityAssessment {
|
|
|
985
985
|
const data = JSON.parse(await fs.readFile(historyFile, 'utf-8'));
|
|
986
986
|
this.qualityHistory = data.quality_history || [];
|
|
987
987
|
}
|
|
988
|
-
} catch
|
|
988
|
+
} catch {
|
|
989
989
|
// No existing data, start fresh
|
|
990
990
|
}
|
|
991
991
|
}
|
|
@@ -1015,7 +1015,7 @@ class TestQualityAssessment {
|
|
|
1015
1015
|
|
|
1016
1016
|
console.log(chalk.gray(`Quality assessment saved: ${assessmentFile}`));
|
|
1017
1017
|
|
|
1018
|
-
} catch (
|
|
1018
|
+
} catch (error) {
|
|
1019
1019
|
console.warn(chalk.yellow(`Failed to save quality assessment: ${error.message}`));
|
|
1020
1020
|
}
|
|
1021
1021
|
}
|
|
@@ -41,7 +41,7 @@ async function countIntegrationReferences(utilityName) {
|
|
|
41
41
|
{ shell: '/bin/bash' },
|
|
42
42
|
);
|
|
43
43
|
totalCount += parseInt(stdout.trim()) || 0;
|
|
44
|
-
} catch
|
|
44
|
+
} catch {
|
|
45
45
|
// Directory doesn't exist or grep failed - not a problem
|
|
46
46
|
}
|
|
47
47
|
}
|
|
@@ -98,7 +98,7 @@ async function testUtility(utilityFile) {
|
|
|
98
98
|
: 'Keep but document usage';
|
|
99
99
|
}
|
|
100
100
|
|
|
101
|
-
} catch (
|
|
101
|
+
} catch (error) {
|
|
102
102
|
result.errors.push(error.message);
|
|
103
103
|
|
|
104
104
|
// Classify error type
|
|
@@ -119,7 +119,7 @@ async function testUtility(utilityFile) {
|
|
|
119
119
|
// Count integration even if broken
|
|
120
120
|
try {
|
|
121
121
|
result.integrationCount = await countIntegrationReferences(utilityFile);
|
|
122
|
-
} catch
|
|
122
|
+
} catch {
|
|
123
123
|
// Ignore counting errors
|
|
124
124
|
}
|
|
125
125
|
}
|
|
@@ -7,10 +7,10 @@
|
|
|
7
7
|
# - SHA256 hashes for change detection
|
|
8
8
|
# - File types for categorization
|
|
9
9
|
#
|
|
10
|
-
version: 3.
|
|
11
|
-
generated_at: "2025-12-
|
|
10
|
+
version: 3.9.1
|
|
11
|
+
generated_at: "2025-12-26T23:36:47.885Z"
|
|
12
12
|
generator: scripts/generate-install-manifest.js
|
|
13
|
-
file_count:
|
|
13
|
+
file_count: 595
|
|
14
14
|
files:
|
|
15
15
|
- path: cli/commands/generate/index.js
|
|
16
16
|
hash: sha256:36f8e38ab767fa5478d8dabac548c66dc2c0fc521c216e954ac33fcea0ba597b
|
|
@@ -329,13 +329,13 @@ files:
|
|
|
329
329
|
type: core
|
|
330
330
|
size: 9178
|
|
331
331
|
- path: core/session/context-detector.js
|
|
332
|
-
hash: sha256:
|
|
332
|
+
hash: sha256:e76b2a1ae649b2780bfe94259d1f35e9bdd4a3dbde3a4e6f5c610cb1cb553ecb
|
|
333
333
|
type: core
|
|
334
|
-
size:
|
|
334
|
+
size: 7217
|
|
335
335
|
- path: core/session/context-loader.js
|
|
336
|
-
hash: sha256:
|
|
336
|
+
hash: sha256:eaef1e3a11feb2d355c5dc8fc2813ae095e27911cdf1261e5d003b22be16d8f0
|
|
337
337
|
type: core
|
|
338
|
-
size:
|
|
338
|
+
size: 13729
|
|
339
339
|
- path: core/utils/output-formatter.js
|
|
340
340
|
hash: sha256:9c386d8b0232f92887dc6f8d32671444a5857b6c848c84b561eedef27a178470
|
|
341
341
|
type: core
|
|
@@ -356,14 +356,18 @@ files:
|
|
|
356
356
|
hash: sha256:21138a86582b713c2106973907bbf4a5ce4e3192dadd832122ac9c6294d0efb1
|
|
357
357
|
type: data
|
|
358
358
|
size: 34868
|
|
359
|
+
- path: data/learned-patterns.yaml
|
|
360
|
+
hash: sha256:24ac0b160615583a0ff783d3da8af80b7f94191575d6db2054ec8e10a3f945dc
|
|
361
|
+
type: data
|
|
362
|
+
size: 68
|
|
359
363
|
- path: data/technical-preferences.md
|
|
360
364
|
hash: sha256:6d1111823aefaca138dfaa3661139ae57db0ec9841046617e5024a24e532f570
|
|
361
365
|
type: data
|
|
362
366
|
size: 64
|
|
363
367
|
- path: data/workflow-patterns.yaml
|
|
364
|
-
hash: sha256:
|
|
368
|
+
hash: sha256:e43d4622473a9a7ffa119c17f154d37ae5b1c4a07335826514d6694e200f2d11
|
|
365
369
|
type: data
|
|
366
|
-
size:
|
|
370
|
+
size: 19713
|
|
367
371
|
- path: development/agent-teams/team-all.yaml
|
|
368
372
|
hash: sha256:368efa25930f89d33ee4178c7b77871ad2ca1437ca56376233b0c375a2cb311c
|
|
369
373
|
type: development
|
|
@@ -401,9 +405,9 @@ files:
|
|
|
401
405
|
type: agent
|
|
402
406
|
size: 20268
|
|
403
407
|
- path: development/agents/dev.md
|
|
404
|
-
hash: sha256:
|
|
408
|
+
hash: sha256:b2fc2c28bb871f710546b8e7c6d29cb38966e518be15970fb5073fe39c13f3d5
|
|
405
409
|
type: agent
|
|
406
|
-
size:
|
|
410
|
+
size: 18222
|
|
407
411
|
- path: development/agents/devops.md
|
|
408
412
|
hash: sha256:0c7ea6fb80b5758d978003f17aa6c5ba8ca1a5433ac0c53b1dd131e7ecae18a5
|
|
409
413
|
type: agent
|
|
@@ -425,9 +429,9 @@ files:
|
|
|
425
429
|
type: agent
|
|
426
430
|
size: 9866
|
|
427
431
|
- path: development/agents/squad-creator.md
|
|
428
|
-
hash: sha256:
|
|
432
|
+
hash: sha256:51f829162b81693bf34e010718a81f3aa484336f6488e2c7655d2cf5798e79fc
|
|
429
433
|
type: agent
|
|
430
|
-
size:
|
|
434
|
+
size: 11770
|
|
431
435
|
- path: development/agents/ux-design-expert.md
|
|
432
436
|
hash: sha256:ce2f28bbd7350f1ca7d1b01ae26924928e496314afb551cafb55604233117954
|
|
433
437
|
type: agent
|
|
@@ -512,6 +516,10 @@ files:
|
|
|
512
516
|
hash: sha256:55e0226c3baffe16fd24f3d19179326c43e8dc525697c0b5c972cf15825f7c14
|
|
513
517
|
type: script
|
|
514
518
|
size: 3244
|
|
519
|
+
- path: development/scripts/squad/squad-analyzer.js
|
|
520
|
+
hash: sha256:30100571f7d46705b60432fc9e56a19852786d1b3b5a77354e247519b8ca8682
|
|
521
|
+
type: script
|
|
522
|
+
size: 18148
|
|
515
523
|
- path: development/scripts/squad/squad-designer.js
|
|
516
524
|
hash: sha256:101cbb7d6ded0d6f991b29ac63dfee2c7bb86cbc8c4fefef728b7d12c3352829
|
|
517
525
|
type: script
|
|
@@ -520,26 +528,30 @@ files:
|
|
|
520
528
|
hash: sha256:a62dd5d40ef24426ffdabdcbe0a0a3a7e7e2b1757eba9749a41d3fd4c0e690f8
|
|
521
529
|
type: script
|
|
522
530
|
size: 15335
|
|
531
|
+
- path: development/scripts/squad/squad-extender.js
|
|
532
|
+
hash: sha256:ceab4df7d9708449aff28eb2b5cbf57f11b2c93196280c814bf02787e7db22f3
|
|
533
|
+
type: script
|
|
534
|
+
size: 20638
|
|
523
535
|
- path: development/scripts/squad/squad-generator.js
|
|
524
|
-
hash: sha256:
|
|
536
|
+
hash: sha256:fa83979eeeac361713e8f99bfec6ac9f9dc9d8d4107ecf809cd3b7370a4de79c
|
|
525
537
|
type: script
|
|
526
|
-
size:
|
|
538
|
+
size: 44048
|
|
527
539
|
- path: development/scripts/squad/squad-loader.js
|
|
528
540
|
hash: sha256:7093b9457c93da6845722bf7eac660164963d5007c459afae2149340a7979f1f
|
|
529
541
|
type: script
|
|
530
542
|
size: 10549
|
|
531
543
|
- path: development/scripts/squad/squad-migrator.js
|
|
532
|
-
hash: sha256:
|
|
544
|
+
hash: sha256:7aa7c77f252853faa3230898f37f987713c02a21937da69bf0f0da4074884b4a
|
|
533
545
|
type: script
|
|
534
|
-
size:
|
|
546
|
+
size: 19517
|
|
535
547
|
- path: development/scripts/squad/squad-publisher.js
|
|
536
548
|
hash: sha256:329c00fb9d1085675a319e8314a5be9e1ee92c617691c47041f58d994982e029
|
|
537
549
|
type: script
|
|
538
550
|
size: 18724
|
|
539
551
|
- path: development/scripts/squad/squad-validator.js
|
|
540
|
-
hash: sha256:
|
|
552
|
+
hash: sha256:90f7b1d6f9b072718a7029afe5c238b66c6b880ee18d6c416244dca5d9a6bfa1
|
|
541
553
|
type: script
|
|
542
|
-
size:
|
|
554
|
+
size: 23034
|
|
543
555
|
- path: development/scripts/story-index-generator.js
|
|
544
556
|
hash: sha256:5c9bf1339857e25b20875193c6dd42ac6c829491c0f46ba26bf07652aff6ed8b
|
|
545
557
|
type: script
|
|
@@ -908,6 +920,14 @@ files:
|
|
|
908
920
|
hash: sha256:091a4236aaf2ef93f6f394b99dc43cbedccbd9a864d55f4992a50dd4684bc97f
|
|
909
921
|
type: task
|
|
910
922
|
size: 11422
|
|
923
|
+
- path: development/tasks/next.md
|
|
924
|
+
hash: sha256:53f4311ff6797342701c870b9552884815537dde8cb4936a0b3b5bf53b820f32
|
|
925
|
+
type: task
|
|
926
|
+
size: 6550
|
|
927
|
+
- path: development/tasks/patterns.md
|
|
928
|
+
hash: sha256:447ea50e9c7483d4dd9f88750aee95d459a20385c1c6baea41d93ac3090aa1f8
|
|
929
|
+
type: task
|
|
930
|
+
size: 7372
|
|
911
931
|
- path: development/tasks/po-backlog-add.md
|
|
912
932
|
hash: sha256:6d13427b0f323cd27a612ac1504807f66e9aad88ec2ff417ba09ecb0b5b6b850
|
|
913
933
|
type: task
|
|
@@ -1032,10 +1052,14 @@ files:
|
|
|
1032
1052
|
hash: sha256:f2a2f314a11af481d48991112c871d65e1def7bb3c9a283b661b67a1f939ac9b
|
|
1033
1053
|
type: task
|
|
1034
1054
|
size: 18062
|
|
1055
|
+
- path: development/tasks/squad-creator-analyze.md
|
|
1056
|
+
hash: sha256:5e1c24c1474e77a517b266c862a915d4b5c632340bb7ea426b5ac50ee53273e0
|
|
1057
|
+
type: task
|
|
1058
|
+
size: 7040
|
|
1035
1059
|
- path: development/tasks/squad-creator-create.md
|
|
1036
|
-
hash: sha256:
|
|
1060
|
+
hash: sha256:65f50ac890b671b9321ff18156de02d45b4b5075d3037fa847a5bfe304e7e662
|
|
1037
1061
|
type: task
|
|
1038
|
-
size:
|
|
1062
|
+
size: 8447
|
|
1039
1063
|
- path: development/tasks/squad-creator-design.md
|
|
1040
1064
|
hash: sha256:47bcc27f3d3bfa81e567d009b50ac278db386fda48e5a60a3cce7643ef2362bc
|
|
1041
1065
|
type: task
|
|
@@ -1044,6 +1068,10 @@ files:
|
|
|
1044
1068
|
hash: sha256:909088d7b585fbb8b465e0b0238ab49546c51876a6752a30f7bf7bf1bf22ef24
|
|
1045
1069
|
type: task
|
|
1046
1070
|
size: 3856
|
|
1071
|
+
- path: development/tasks/squad-creator-extend.md
|
|
1072
|
+
hash: sha256:ba5fbc0d4c1512f22790e80efc0660f2af2673a243d3c6d6568bbc76c54d1eef
|
|
1073
|
+
type: task
|
|
1074
|
+
size: 10219
|
|
1047
1075
|
- path: development/tasks/squad-creator-list.md
|
|
1048
1076
|
hash: sha256:c0b52c5a8a79b3ed757789e633f42a5458bac18bbcf1aa544fc1f5295151b446
|
|
1049
1077
|
type: task
|
|
@@ -1061,9 +1089,9 @@ files:
|
|
|
1061
1089
|
type: task
|
|
1062
1090
|
size: 8633
|
|
1063
1091
|
- path: development/tasks/squad-creator-validate.md
|
|
1064
|
-
hash: sha256:
|
|
1092
|
+
hash: sha256:e4dc8af3ac29ca91998f1db3c70a8ae5a2380f4131dcd635a34eb7ffa24d3b0a
|
|
1065
1093
|
type: task
|
|
1066
|
-
size:
|
|
1094
|
+
size: 5065
|
|
1067
1095
|
- path: development/tasks/sync-documentation.md
|
|
1068
1096
|
hash: sha256:caa2077e7a5bbbba9269b04e878b7772a71422ed6fd138447fe5cfb7345f96fb
|
|
1069
1097
|
type: task
|
|
@@ -1104,6 +1132,10 @@ files:
|
|
|
1104
1132
|
hash: sha256:7ff03b62614edeb2a9c2bab9681a56ce97cffc59af3bd51054b9dafb1c99701f
|
|
1105
1133
|
type: task
|
|
1106
1134
|
size: 14320
|
|
1135
|
+
- path: development/tasks/waves.md
|
|
1136
|
+
hash: sha256:364b955b3315f1621a27ea26ff1459467a19c87781ac714e387fb616aeb336e6
|
|
1137
|
+
type: task
|
|
1138
|
+
size: 4686
|
|
1107
1139
|
- path: development/templates/service-template/__tests__/index.test.ts.hbs
|
|
1108
1140
|
hash: sha256:04090b95bc0b606448c161d8e698fcf4d5c7da2517a5ac65663554a54c5acf91
|
|
1109
1141
|
type: template
|
|
@@ -1140,6 +1172,38 @@ files:
|
|
|
1140
1172
|
hash: sha256:2338ab2e1ade619bf33a2c8f22b149402b513c05a6d1d8a805c5273c7233d151
|
|
1141
1173
|
type: template
|
|
1142
1174
|
size: 2516
|
|
1175
|
+
- path: development/templates/squad/agent-template.md
|
|
1176
|
+
hash: sha256:b8ba4621f0bf03bf3612a683cebaa52e246cba19fb81197493ec4d682a1db14b
|
|
1177
|
+
type: template
|
|
1178
|
+
size: 1432
|
|
1179
|
+
- path: development/templates/squad/checklist-template.md
|
|
1180
|
+
hash: sha256:5c962f20d7d56ef8800f60dc32f8105b2669311664cfd330301f812dc67934af
|
|
1181
|
+
type: template
|
|
1182
|
+
size: 1317
|
|
1183
|
+
- path: development/templates/squad/data-template.yaml
|
|
1184
|
+
hash: sha256:d228821b39c7135e19f49405c10cae7ac43f5ffcd946d6363f053420a3a3019f
|
|
1185
|
+
type: template
|
|
1186
|
+
size: 2121
|
|
1187
|
+
- path: development/templates/squad/script-template.js
|
|
1188
|
+
hash: sha256:2d568171ef0c7ed2822d2b1d81a5f0d02c16bd2a2fb11665c8608dd7da7fc323
|
|
1189
|
+
type: template
|
|
1190
|
+
size: 3375
|
|
1191
|
+
- path: development/templates/squad/task-template.md
|
|
1192
|
+
hash: sha256:3f337082a14cd33dd4876d5dc487d0ec069dad5f54aeaac9853b2a13051a70db
|
|
1193
|
+
type: template
|
|
1194
|
+
size: 1882
|
|
1195
|
+
- path: development/templates/squad/template-template.md
|
|
1196
|
+
hash: sha256:b3f13da1cd377d18d3202bd8998fd9f26ad56b5da4b63e316cd01578998b7f55
|
|
1197
|
+
type: template
|
|
1198
|
+
size: 1497
|
|
1199
|
+
- path: development/templates/squad/tool-template.js
|
|
1200
|
+
hash: sha256:31e026003459be51451d0ca6905847bab2d9e397d92dc9b521b563516d27b5cf
|
|
1201
|
+
type: template
|
|
1202
|
+
size: 1796
|
|
1203
|
+
- path: development/templates/squad/workflow-template.yaml
|
|
1204
|
+
hash: sha256:837991039c9dcb77ad4ded82035da96eac70ac2c4fd208833ace470a3ec32c0e
|
|
1205
|
+
type: template
|
|
1206
|
+
size: 2199
|
|
1143
1207
|
- path: development/workflows/brownfield-fullstack.yaml
|
|
1144
1208
|
hash: sha256:e54b5ecf6fffd1351bad125c91be89b262773361785d1f0ee19a7dc2fcdf8822
|
|
1145
1209
|
type: workflow
|
|
@@ -1593,21 +1657,21 @@ files:
|
|
|
1593
1657
|
type: script
|
|
1594
1658
|
size: 8334
|
|
1595
1659
|
- path: infrastructure/scripts/test-generator.js
|
|
1596
|
-
hash: sha256:
|
|
1660
|
+
hash: sha256:90485b00c0b9e490f2394ff0fb456ea5a5614ca2431d9df55d95b54213b15184
|
|
1597
1661
|
type: script
|
|
1598
|
-
size:
|
|
1662
|
+
size: 24945
|
|
1599
1663
|
- path: infrastructure/scripts/test-quality-assessment.js
|
|
1600
|
-
hash: sha256:
|
|
1664
|
+
hash: sha256:300699a7a5003ef1f18b4e865f761a8e76d0b82e001f0ba17317ef05d41c79db
|
|
1601
1665
|
type: script
|
|
1602
|
-
size:
|
|
1666
|
+
size: 36898
|
|
1603
1667
|
- path: infrastructure/scripts/test-utilities-fast.js
|
|
1604
1668
|
hash: sha256:70d87a74dac153c65d622afa4d62816e41d8d81eee6d42e1c0e498999bec7c40
|
|
1605
1669
|
type: script
|
|
1606
1670
|
size: 3743
|
|
1607
1671
|
- path: infrastructure/scripts/test-utilities.js
|
|
1608
|
-
hash: sha256:
|
|
1672
|
+
hash: sha256:da7c868b105892e3995ed6e6517188a79b8f62a079a61d4d38242c4f357c9d75
|
|
1609
1673
|
type: script
|
|
1610
|
-
size:
|
|
1674
|
+
size: 5870
|
|
1611
1675
|
- path: infrastructure/scripts/tool-resolver.js
|
|
1612
1676
|
hash: sha256:94a5ab46dc1939d87fbb741619d8013ce17c5eae1e18ccdc78707eac2c4c927b
|
|
1613
1677
|
type: script
|
|
@@ -2305,13 +2369,13 @@ files:
|
|
|
2305
2369
|
type: script
|
|
2306
2370
|
size: 4527
|
|
2307
2371
|
- path: scripts/session-context-loader.js
|
|
2308
|
-
hash: sha256:
|
|
2372
|
+
hash: sha256:2581477ca682c6788fc57759b7fc697ffbcaab0a2c1c0cd6eb4f9ad228bb1020
|
|
2309
2373
|
type: script
|
|
2310
|
-
size:
|
|
2374
|
+
size: 1583
|
|
2311
2375
|
- path: scripts/test-template-system.js
|
|
2312
|
-
hash: sha256:
|
|
2376
|
+
hash: sha256:87465ac02b079166479b9d50fe6e12a101bcaa81d47f1aace9b346e264c04712
|
|
2313
2377
|
type: script
|
|
2314
|
-
size:
|
|
2378
|
+
size: 26029
|
|
2315
2379
|
- path: scripts/validate-phase1.ps1
|
|
2316
2380
|
hash: sha256:2f694151ae90af1a9cb8fe890037a51e60115ff8edf636704e8f11e7ac23b23a
|
|
2317
2381
|
type: script
|
|
@@ -279,6 +279,10 @@ class MetricsCollector {
|
|
|
279
279
|
|
|
280
280
|
const metrics = await this.load();
|
|
281
281
|
|
|
282
|
+
// Enforce retention policy before adding new entries (Story SQS-10 nitpick)
|
|
283
|
+
// This prevents unbounded growth of history array
|
|
284
|
+
await this._enforceRetentionPolicy(metrics);
|
|
285
|
+
|
|
282
286
|
const runRecord = {
|
|
283
287
|
timestamp: new Date().toISOString(),
|
|
284
288
|
layer,
|
|
@@ -519,6 +523,29 @@ class MetricsCollector {
|
|
|
519
523
|
return removedCount;
|
|
520
524
|
}
|
|
521
525
|
|
|
526
|
+
/**
|
|
527
|
+
* Enforce retention policy inline (called before adding new entries)
|
|
528
|
+
* This prevents unbounded growth of the history array.
|
|
529
|
+
* @private
|
|
530
|
+
* @param {Object} metrics - Metrics object to clean
|
|
531
|
+
* @returns {Promise<void>}
|
|
532
|
+
* @see CodeRabbit nitpick: Enforce retention policy to prevent unbounded growth
|
|
533
|
+
*/
|
|
534
|
+
async _enforceRetentionPolicy(metrics) {
|
|
535
|
+
const retentionMs = (metrics.retentionDays || this.retentionDays) * 24 * 60 * 60 * 1000;
|
|
536
|
+
const cutoffTimestamp = Date.now() - retentionMs;
|
|
537
|
+
|
|
538
|
+
const originalCount = metrics.history.length;
|
|
539
|
+
metrics.history = metrics.history.filter(
|
|
540
|
+
(entry) => new Date(entry.timestamp).getTime() > cutoffTimestamp,
|
|
541
|
+
);
|
|
542
|
+
|
|
543
|
+
const removedCount = originalCount - metrics.history.length;
|
|
544
|
+
if (removedCount > 0) {
|
|
545
|
+
console.log(`[metrics] Retention policy: removed ${removedCount} old entries (> ${metrics.retentionDays || this.retentionDays} days)`);
|
|
546
|
+
}
|
|
547
|
+
}
|
|
548
|
+
|
|
522
549
|
/**
|
|
523
550
|
* Get history for a specific layer
|
|
524
551
|
* @param {number} layer - Layer number
|