@xn-intenton-z2a/agentic-lib 7.1.88 → 7.1.89
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/.github/workflows/agentic-lib-init.yml +47 -0
- package/.github/workflows/agentic-lib-schedule.yml +25 -2
- package/.github/workflows/agentic-lib-workflow.yml +36 -0
- package/package.json +1 -1
- package/src/seeds/missions/markdown-compiler.md +33 -0
- package/src/seeds/missions/ray-tracer.md +31 -0
- package/src/seeds/zero-package.json +1 -1
|
@@ -39,6 +39,10 @@ on:
|
|
|
39
39
|
type: string
|
|
40
40
|
required: false
|
|
41
41
|
default: ""
|
|
42
|
+
profile:
|
|
43
|
+
type: string
|
|
44
|
+
required: false
|
|
45
|
+
default: ""
|
|
42
46
|
workflow_dispatch:
|
|
43
47
|
inputs:
|
|
44
48
|
mode:
|
|
@@ -71,6 +75,9 @@ on:
|
|
|
71
75
|
- cron-engine
|
|
72
76
|
- owl-ontology
|
|
73
77
|
- time-series-lab
|
|
78
|
+
- c64-emulator
|
|
79
|
+
- ray-tracer
|
|
80
|
+
- markdown-compiler
|
|
74
81
|
- empty
|
|
75
82
|
mission-text:
|
|
76
83
|
description: "Freeform mission text for MISSION.md (overrides mission-seed if provided)"
|
|
@@ -99,6 +106,16 @@ on:
|
|
|
99
106
|
- gpt-5-mini
|
|
100
107
|
- claude-sonnet-4
|
|
101
108
|
- gpt-4.1
|
|
109
|
+
profile:
|
|
110
|
+
description: "Tuning profile (leave empty to keep current)"
|
|
111
|
+
type: choice
|
|
112
|
+
required: false
|
|
113
|
+
default: ""
|
|
114
|
+
options:
|
|
115
|
+
- ""
|
|
116
|
+
- min
|
|
117
|
+
- recommended
|
|
118
|
+
- max
|
|
102
119
|
|
|
103
120
|
permissions: write-all
|
|
104
121
|
|
|
@@ -122,6 +139,8 @@ jobs:
|
|
|
122
139
|
echo "schedule=${SCHEDULE}" >> $GITHUB_OUTPUT
|
|
123
140
|
MODEL='${{ inputs.model }}'
|
|
124
141
|
echo "model=${MODEL:-gpt-5-mini}" >> $GITHUB_OUTPUT
|
|
142
|
+
PROFILE='${{ inputs.profile }}'
|
|
143
|
+
echo "profile=${PROFILE}" >> $GITHUB_OUTPUT
|
|
125
144
|
outputs:
|
|
126
145
|
mode: ${{ steps.normalise.outputs.mode }}
|
|
127
146
|
dry-run: ${{ steps.normalise.outputs.dry-run }}
|
|
@@ -129,6 +148,7 @@ jobs:
|
|
|
129
148
|
mission-text: ${{ steps.normalise.outputs.mission-text }}
|
|
130
149
|
schedule: ${{ steps.normalise.outputs.schedule }}
|
|
131
150
|
model: ${{ steps.normalise.outputs.model }}
|
|
151
|
+
profile: ${{ steps.normalise.outputs.profile }}
|
|
132
152
|
|
|
133
153
|
init:
|
|
134
154
|
needs: params
|
|
@@ -200,6 +220,33 @@ jobs:
|
|
|
200
220
|
|
|
201
221
|
- run: npm test
|
|
202
222
|
|
|
223
|
+
- name: Update model and profile (if requested)
|
|
224
|
+
if: github.repository != 'xn-intenton-z2a/agentic-lib' && needs.params.outputs.dry-run != 'true' && (needs.params.outputs.model != '' || needs.params.outputs.profile != '')
|
|
225
|
+
uses: actions/github-script@v8
|
|
226
|
+
with:
|
|
227
|
+
script: |
|
|
228
|
+
const fs = require('fs');
|
|
229
|
+
const model = '${{ needs.params.outputs.model }}';
|
|
230
|
+
const profile = '${{ needs.params.outputs.profile }}';
|
|
231
|
+
const tomlPath = 'agentic-lib.toml';
|
|
232
|
+
if (!fs.existsSync(tomlPath)) return;
|
|
233
|
+
let toml = fs.readFileSync(tomlPath, 'utf8');
|
|
234
|
+
if (model) {
|
|
235
|
+
const modelRegex = /(\[tuning\][^\[]*?)(^\s*model\s*=\s*"[^"]*")/m;
|
|
236
|
+
if (modelRegex.test(toml)) {
|
|
237
|
+
toml = toml.replace(modelRegex, `$1model = "${model}"`);
|
|
238
|
+
core.info(`Updated [tuning].model to: ${model}`);
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
if (profile) {
|
|
242
|
+
const profileRegex = /(\[tuning\][^\[]*?)(^\s*profile\s*=\s*"[^"]*")/m;
|
|
243
|
+
if (profileRegex.test(toml)) {
|
|
244
|
+
toml = toml.replace(profileRegex, `$1profile = "${profile}"`);
|
|
245
|
+
core.info(`Updated [tuning].profile to: ${profile}`);
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
fs.writeFileSync(tomlPath, toml);
|
|
249
|
+
|
|
203
250
|
- name: Update schedule (if requested)
|
|
204
251
|
if: github.repository != 'xn-intenton-z2a/agentic-lib' && needs.params.outputs.schedule != '' && needs.params.outputs.dry-run != 'true'
|
|
205
252
|
uses: actions/github-script@v8
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
# No trigger changes needed — uses workflow_call and workflow_dispatch only.
|
|
9
9
|
|
|
10
10
|
name: agentic-lib-schedule
|
|
11
|
-
run-name: "agentic-lib-schedule -> ${{ inputs.frequency }} (${{ inputs.model }})"
|
|
11
|
+
run-name: "agentic-lib-schedule -> ${{ inputs.frequency }} (${{ inputs.model }}${{ inputs.profile && format(', profile={0}', inputs.profile) || '' }})"
|
|
12
12
|
|
|
13
13
|
on:
|
|
14
14
|
workflow_call:
|
|
@@ -22,6 +22,11 @@ on:
|
|
|
22
22
|
required: false
|
|
23
23
|
type: string
|
|
24
24
|
default: "gpt-5-mini"
|
|
25
|
+
profile:
|
|
26
|
+
description: "Tuning profile"
|
|
27
|
+
required: false
|
|
28
|
+
type: string
|
|
29
|
+
default: ""
|
|
25
30
|
dry-run:
|
|
26
31
|
description: "Skip commit and push"
|
|
27
32
|
required: false
|
|
@@ -48,6 +53,16 @@ on:
|
|
|
48
53
|
- gpt-5-mini
|
|
49
54
|
- claude-sonnet-4
|
|
50
55
|
- gpt-4.1
|
|
56
|
+
profile:
|
|
57
|
+
description: "Tuning profile"
|
|
58
|
+
required: false
|
|
59
|
+
type: choice
|
|
60
|
+
default: ""
|
|
61
|
+
options:
|
|
62
|
+
- ""
|
|
63
|
+
- min
|
|
64
|
+
- recommended
|
|
65
|
+
- max
|
|
51
66
|
dry-run:
|
|
52
67
|
description: "Skip commit and push"
|
|
53
68
|
type: boolean
|
|
@@ -76,6 +91,7 @@ jobs:
|
|
|
76
91
|
const fs = require('fs');
|
|
77
92
|
const frequency = '${{ inputs.frequency }}';
|
|
78
93
|
const model = '${{ inputs.model || 'gpt-5-mini' }}';
|
|
94
|
+
const profile = '${{ inputs.profile }}';
|
|
79
95
|
const workflowPath = '.github/workflows/agentic-lib-workflow.yml';
|
|
80
96
|
const tomlPath = 'agentic-lib.toml';
|
|
81
97
|
|
|
@@ -139,8 +155,15 @@ jobs:
|
|
|
139
155
|
toml = toml.replace(scheduleSupervisorRegex, `$1supervisor = "${frequency}"`);
|
|
140
156
|
}
|
|
141
157
|
|
|
158
|
+
if (profile) {
|
|
159
|
+
const profileRegex = /(\[tuning\][^\[]*?)(^\s*profile\s*=\s*"[^"]*")/m;
|
|
160
|
+
if (profileRegex.test(toml)) {
|
|
161
|
+
toml = toml.replace(profileRegex, `$1profile = "${profile}"`);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
|
|
142
165
|
fs.writeFileSync(tomlPath, toml);
|
|
143
|
-
core.info(`Updated agentic-lib.toml: model=${model}, supervisor=${frequency}`);
|
|
166
|
+
core.info(`Updated agentic-lib.toml: model=${model}, supervisor=${frequency}${profile ? ', profile=' + profile : ''}`);
|
|
144
167
|
} else {
|
|
145
168
|
core.warning('agentic-lib.toml not found — skipping config update');
|
|
146
169
|
}
|
|
@@ -24,6 +24,10 @@ on:
|
|
|
24
24
|
type: string
|
|
25
25
|
required: false
|
|
26
26
|
default: "gpt-5-mini"
|
|
27
|
+
profile:
|
|
28
|
+
type: string
|
|
29
|
+
required: false
|
|
30
|
+
default: ""
|
|
27
31
|
mode:
|
|
28
32
|
type: string
|
|
29
33
|
required: false
|
|
@@ -47,6 +51,16 @@ on:
|
|
|
47
51
|
- gpt-5-mini
|
|
48
52
|
- claude-sonnet-4
|
|
49
53
|
- gpt-4.1
|
|
54
|
+
profile:
|
|
55
|
+
description: "Tuning profile"
|
|
56
|
+
type: choice
|
|
57
|
+
required: false
|
|
58
|
+
default: ""
|
|
59
|
+
options:
|
|
60
|
+
- ""
|
|
61
|
+
- min
|
|
62
|
+
- recommended
|
|
63
|
+
- max
|
|
50
64
|
mode:
|
|
51
65
|
description: "Run mode"
|
|
52
66
|
type: choice
|
|
@@ -115,6 +129,8 @@ jobs:
|
|
|
115
129
|
run: |
|
|
116
130
|
MODEL='${{ inputs.model }}'
|
|
117
131
|
echo "model=${MODEL:-gpt-5-mini}" >> $GITHUB_OUTPUT
|
|
132
|
+
PROFILE='${{ inputs.profile }}'
|
|
133
|
+
echo "profile=${PROFILE}" >> $GITHUB_OUTPUT
|
|
118
134
|
MODE='${{ inputs.mode }}'
|
|
119
135
|
echo "mode=${MODE:-full}" >> $GITHUB_OUTPUT
|
|
120
136
|
echo "message=${{ inputs.message }}" >> $GITHUB_OUTPUT
|
|
@@ -137,6 +153,7 @@ jobs:
|
|
|
137
153
|
echo "config-path=${CONFIG:-${{ env.configPath }}}" >> $GITHUB_OUTPUT
|
|
138
154
|
outputs:
|
|
139
155
|
model: ${{ steps.normalise.outputs.model }}
|
|
156
|
+
profile: ${{ steps.normalise.outputs.profile }}
|
|
140
157
|
mode: ${{ steps.normalise.outputs.mode }}
|
|
141
158
|
message: ${{ steps.normalise.outputs.message }}
|
|
142
159
|
issue-number: ${{ steps.normalise.outputs.issue-number }}
|
|
@@ -330,6 +347,23 @@ jobs:
|
|
|
330
347
|
working-directory: .github/agentic-lib/actions/agentic-step
|
|
331
348
|
run: npm ci
|
|
332
349
|
|
|
350
|
+
- name: Apply profile and model to config
|
|
351
|
+
if: needs.params.outputs.profile != '' || needs.params.outputs.model != 'gpt-5-mini'
|
|
352
|
+
run: |
|
|
353
|
+
CONFIG="${{ needs.params.outputs.config-path }}"
|
|
354
|
+
PROFILE="${{ needs.params.outputs.profile }}"
|
|
355
|
+
MODEL="${{ needs.params.outputs.model }}"
|
|
356
|
+
if [ -f "$CONFIG" ]; then
|
|
357
|
+
if [ -n "$PROFILE" ]; then
|
|
358
|
+
sed -i "s/^profile = \"[^\"]*\"/profile = \"${PROFILE}\"/" "$CONFIG"
|
|
359
|
+
echo "Updated [tuning].profile to: ${PROFILE}"
|
|
360
|
+
fi
|
|
361
|
+
if [ -n "$MODEL" ] && [ "$MODEL" != "gpt-5-mini" ]; then
|
|
362
|
+
sed -i "s/^model = \"[^\"]*\"/model = \"${MODEL}\"/" "$CONFIG"
|
|
363
|
+
echo "Updated [tuning].model to: ${MODEL}"
|
|
364
|
+
fi
|
|
365
|
+
fi
|
|
366
|
+
|
|
333
367
|
- name: Load config
|
|
334
368
|
id: config
|
|
335
369
|
run: |
|
|
@@ -961,6 +995,7 @@ jobs:
|
|
|
961
995
|
echo "## agentic-lib-workflow run summary" >> $GITHUB_STEP_SUMMARY
|
|
962
996
|
echo "- Mode: ${{ needs.params.outputs.mode }}" >> $GITHUB_STEP_SUMMARY
|
|
963
997
|
echo "- Model: ${{ needs.params.outputs.model }}" >> $GITHUB_STEP_SUMMARY
|
|
998
|
+
echo "- Profile: ${{ needs.params.outputs.profile || '(from config)' }}" >> $GITHUB_STEP_SUMMARY
|
|
964
999
|
echo "- Dry-run: ${{ needs.params.outputs.dry-run }}" >> $GITHUB_STEP_SUMMARY
|
|
965
1000
|
echo "- Website: [${SITE_URL}](${SITE_URL})" >> $GITHUB_STEP_SUMMARY
|
|
966
1001
|
|
|
@@ -972,4 +1007,5 @@ jobs:
|
|
|
972
1007
|
with:
|
|
973
1008
|
frequency: ${{ needs.params.outputs.schedule }}
|
|
974
1009
|
model: ${{ needs.params.outputs.model }}
|
|
1010
|
+
profile: ${{ needs.params.outputs.profile }}
|
|
975
1011
|
secrets: inherit
|
package/package.json
CHANGED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Mission
|
|
2
|
+
|
|
3
|
+
Build a Markdown-to-HTML compiler library that converts GitHub Flavored Markdown (GFM) to
|
|
4
|
+
semantic HTML.
|
|
5
|
+
|
|
6
|
+
The library should progressively implement parsing and rendering for:
|
|
7
|
+
1. Headings (h1-h6 via `#` markers) and paragraphs
|
|
8
|
+
2. Inline formatting: bold (`**`), italic (`*`), code (`` ` ``), strikethrough (`~~`)
|
|
9
|
+
3. Links `[text](url)` and images ``
|
|
10
|
+
4. Ordered and unordered lists (including nested lists)
|
|
11
|
+
5. Code blocks (fenced with ``` and language annotation)
|
|
12
|
+
6. Blockquotes (nested `>`)
|
|
13
|
+
7. Tables (GFM pipe syntax with alignment)
|
|
14
|
+
8. Horizontal rules (`---`, `***`, `___`)
|
|
15
|
+
9. Task lists (`- [ ]`, `- [x]`)
|
|
16
|
+
10. Auto-linked URLs and HTML entity escaping
|
|
17
|
+
|
|
18
|
+
## Technical Requirements
|
|
19
|
+
|
|
20
|
+
- Pure JavaScript, no external Markdown parsing libraries
|
|
21
|
+
- Two-pass architecture: tokeniser/lexer pass, then renderer pass
|
|
22
|
+
- XSS-safe: all user content must be HTML-escaped before insertion
|
|
23
|
+
- Exported as both CommonJS and ESM
|
|
24
|
+
|
|
25
|
+
## Acceptance Criteria
|
|
26
|
+
|
|
27
|
+
- `compile(markdown)` returns an HTML string
|
|
28
|
+
- `tokenize(markdown)` returns an array of token objects (for inspection/testing)
|
|
29
|
+
- Handles all 10 feature areas listed above
|
|
30
|
+
- Passes a test suite of at least 30 input/output pairs covering edge cases
|
|
31
|
+
- Nested constructs work: bold inside links, links inside lists, code inside blockquotes
|
|
32
|
+
- A sample document is compiled and saved to `docs/examples/sample.html`
|
|
33
|
+
- Output validates as well-formed HTML (no unclosed tags)
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# Mission
|
|
2
|
+
|
|
3
|
+
Build a ray tracer library that renders 3D scenes to PPM image files.
|
|
4
|
+
|
|
5
|
+
The library should progressively implement:
|
|
6
|
+
1. Ray-sphere intersection and basic shading
|
|
7
|
+
2. Multiple objects (spheres, planes) with diffuse lighting
|
|
8
|
+
3. Shadows and ambient occlusion
|
|
9
|
+
4. Reflective surfaces with recursive ray bouncing
|
|
10
|
+
5. Refractive materials (glass, water) with Snell's law
|
|
11
|
+
6. A scene description format (JSON) for defining cameras, lights, and objects
|
|
12
|
+
7. Anti-aliasing via supersampling
|
|
13
|
+
8. Texture mapping (checkerboard, procedural noise)
|
|
14
|
+
|
|
15
|
+
## Technical Requirements
|
|
16
|
+
|
|
17
|
+
- Pure JavaScript, no native dependencies
|
|
18
|
+
- Output PPM (P3) format — simple text-based image format
|
|
19
|
+
- Vector3 class for all geometric operations
|
|
20
|
+
- Configurable resolution and ray depth
|
|
21
|
+
- Deterministic output (no random sampling unless seeded)
|
|
22
|
+
|
|
23
|
+
## Acceptance Criteria
|
|
24
|
+
|
|
25
|
+
- `renderScene(scene)` returns a PPM string for a given scene description
|
|
26
|
+
- `parseScene(json)` loads a scene from a JSON string
|
|
27
|
+
- Renders a scene with 3+ spheres, a plane, and a point light in under 10 seconds (640x480)
|
|
28
|
+
- At least one sphere is reflective and one is refractive
|
|
29
|
+
- Unit tests verify ray-sphere intersection, reflection vectors, and Snell's law
|
|
30
|
+
- A sample scene JSON file is included in `docs/examples/`
|
|
31
|
+
- Output PPM can be viewed in any image viewer (validated by checking header format)
|