@givolt/i3-composer-agent 1.0.1 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agents/plugins/marketplace.json +1 -1
- package/.claude/commands/{build.md → i3-build.md} +10 -10
- package/.claude/commands/{code-simplify.md → i3-code-simplify.md} +2 -2
- package/.claude/commands/{constraints.md → i3-constraints.md} +4 -4
- package/.claude/commands/{plan.md → i3-plan.md} +1 -1
- package/.claude/commands/{review.md → i3-review.md} +3 -3
- package/.claude/commands/{ship.md → i3-ship.md} +4 -4
- package/.claude/commands/{spec.md → i3-spec.md} +1 -1
- package/.claude/commands/{test.md → i3-test.md} +2 -2
- package/.claude/commands/{webperf.md → i3-webperf.md} +1 -1
- package/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +1 -1
- package/.codex-plugin/plugin.json +1 -1
- package/.gemini/commands/{build.toml → i3-build.toml} +10 -10
- package/.gemini/commands/{code-simplify.toml → i3-code-simplify.toml} +2 -2
- package/.gemini/commands/{constraints.toml → i3-constraints.toml} +4 -4
- package/.gemini/commands/{planning.toml → i3-planning.toml} +1 -1
- package/{commands/review.toml → .gemini/commands/i3-review.toml} +3 -3
- package/.gemini/commands/{ship.toml → i3-ship.toml} +4 -4
- package/.gemini/commands/{spec.toml → i3-spec.toml} +1 -1
- package/{commands/test.toml → .gemini/commands/i3-test.toml} +2 -2
- package/.gemini/commands/{webperf.toml → i3-webperf.toml} +1 -1
- package/README.md +72 -69
- package/agents/code-reviewer.md +2 -2
- package/agents/security-auditor.md +1 -1
- package/agents/test-engineer.md +1 -1
- package/agents/web-performance-auditor.md +3 -3
- package/bin/agent-targets.json +11 -0
- package/bin/asset-fingerprint.cjs +38 -0
- package/bin/cleanup-backups.cjs +16 -0
- package/bin/i3-composer-agent.cjs +29 -14
- package/bin/install.cjs +81 -19
- package/bin/native-content.cjs +29 -0
- package/bin/wizard.cjs +2 -1
- package/commands/{build.toml → i3-build.toml} +10 -10
- package/commands/{code-simplify.toml → i3-code-simplify.toml} +2 -2
- package/commands/{constraints.toml → i3-constraints.toml} +4 -4
- package/commands/{planning.toml → i3-planning.toml} +1 -1
- package/{.gemini/commands/review.toml → commands/i3-review.toml} +3 -3
- package/commands/{ship.toml → i3-ship.toml} +4 -4
- package/commands/{spec.toml → i3-spec.toml} +1 -1
- package/{.gemini/commands/test.toml → commands/i3-test.toml} +2 -2
- package/commands/{webperf.toml → i3-webperf.toml} +1 -1
- package/docs/adoption-guide.md +35 -35
- package/docs/agents.md +12 -12
- package/docs/antigravity-setup.md +14 -14
- package/docs/codebuddy-setup.md +27 -18
- package/docs/codex-setup.md +6 -6
- package/docs/commandcode-setup.md +5 -5
- package/docs/copilot-cli-setup.md +5 -5
- package/docs/copilot-setup.md +22 -22
- package/docs/cursor-setup.md +22 -22
- package/docs/gemini-cli-setup.md +26 -26
- package/docs/getting-started.md +36 -38
- package/docs/opencode-setup.md +31 -31
- package/docs/windsurf-setup.md +7 -7
- package/docs/workbuddy-setup.md +92 -0
- package/hooks/SDD-CACHE.md +3 -3
- package/hooks/SIMPLIFY-IGNORE.md +2 -2
- package/hooks/session-start-test.sh +1 -1
- package/hooks/session-start.sh +3 -3
- package/package.json +36 -20
- package/plugin.json +1 -1
- package/references/accessibility-checklist.md +1 -1
- package/references/definition-of-done.md +7 -7
- package/references/observability-checklist.md +3 -3
- package/references/orchestration-patterns.md +17 -17
- package/references/performance-checklist.md +2 -2
- package/references/security-checklist.md +1 -1
- package/references/testing-patterns.md +1 -1
- package/skills/{api-and-interface-design → i3-api-and-interface-design}/SKILL.md +2 -2
- package/skills/{browser-testing-with-devtools → i3-browser-testing-with-devtools}/SKILL.md +1 -1
- package/skills/{ci-cd-and-automation → i3-ci-cd-and-automation}/SKILL.md +2 -2
- package/skills/{code-review-and-quality → i3-code-review-and-quality}/SKILL.md +5 -5
- package/skills/{code-simplification → i3-code-simplification}/SKILL.md +1 -1
- package/skills/{constraint-driven-development → i3-constraint-driven-development}/SKILL.md +15 -15
- package/skills/{context-engineering → i3-context-engineering}/SKILL.md +1 -1
- package/skills/{debugging-and-error-recovery → i3-debugging-and-error-recovery}/SKILL.md +2 -2
- package/skills/{deprecation-and-migration → i3-deprecation-and-migration}/SKILL.md +2 -2
- package/skills/{documentation-and-adrs → i3-documentation-and-adrs}/SKILL.md +1 -1
- package/skills/{doubt-driven-development → i3-doubt-driven-development}/SKILL.md +8 -8
- package/skills/{frontend-ui-engineering → i3-frontend-ui-engineering}/SKILL.md +1 -1
- package/skills/{git-workflow-and-versioning → i3-git-workflow-and-versioning}/SKILL.md +4 -4
- package/skills/{idea-refine → i3-idea-refine}/SKILL.md +2 -2
- package/skills/{idea-refine → i3-idea-refine}/scripts/idea-refine.sh +1 -1
- package/skills/{incremental-implementation → i3-incremental-implementation}/SKILL.md +3 -3
- package/skills/{interview-me → i3-interview-me}/SKILL.md +12 -12
- package/skills/{observability-and-instrumentation → i3-observability-and-instrumentation}/SKILL.md +5 -5
- package/skills/{performance-optimization → i3-performance-optimization}/SKILL.md +1 -1
- package/skills/{performance-optimization → i3-performance-optimization}/references/optimization-patterns.md +1 -1
- package/skills/{planning-and-task-breakdown → i3-planning-and-task-breakdown}/SKILL.md +2 -2
- package/skills/{security-and-hardening → i3-security-and-hardening}/SKILL.md +3 -3
- package/skills/{security-and-hardening → i3-security-and-hardening}/references/hardening-patterns.md +1 -1
- package/skills/{shipping-and-launch → i3-shipping-and-launch}/SKILL.md +2 -2
- package/skills/{source-driven-development → i3-source-driven-development}/SKILL.md +2 -2
- package/skills/{spec-driven-development → i3-spec-driven-development}/SKILL.md +7 -7
- package/skills/{test-driven-development → i3-test-driven-development}/SKILL.md +2 -2
- package/skills/{using-agent-skills → i3-using-agent-skills}/SKILL.md +67 -67
- package/CHANGELOG.md +0 -34
- package/NOTICE.md +0 -14
- package/docs/advanced-per-agent-configuration.md +0 -70
- package/docs/comparison.md +0 -131
- package/docs/developer-onboarding.md +0 -116
- package/docs/skill-anatomy.md +0 -203
- package/evals/README.md +0 -101
- package/evals/cases/api-and-interface-design.json +0 -45
- package/evals/cases/browser-testing-with-devtools.json +0 -44
- package/evals/cases/ci-cd-and-automation.json +0 -45
- package/evals/cases/code-review-and-quality.json +0 -49
- package/evals/cases/code-simplification.json +0 -45
- package/evals/cases/constraint-driven-development.json +0 -79
- package/evals/cases/context-engineering.json +0 -44
- package/evals/cases/debugging-and-error-recovery.json +0 -58
- package/evals/cases/deprecation-and-migration.json +0 -52
- package/evals/cases/documentation-and-adrs.json +0 -44
- package/evals/cases/doubt-driven-development.json +0 -43
- package/evals/cases/frontend-ui-engineering.json +0 -52
- package/evals/cases/git-workflow-and-versioning.json +0 -47
- package/evals/cases/idea-refine.json +0 -43
- package/evals/cases/incremental-implementation.json +0 -57
- package/evals/cases/interview-me.json +0 -42
- package/evals/cases/observability-and-instrumentation.json +0 -44
- package/evals/cases/performance-optimization.json +0 -53
- package/evals/cases/planning-and-task-breakdown.json +0 -45
- package/evals/cases/security-and-hardening.json +0 -53
- package/evals/cases/shipping-and-launch.json +0 -56
- package/evals/cases/source-driven-development.json +0 -44
- package/evals/cases/spec-driven-development.json +0 -72
- package/evals/cases/test-driven-development.json +0 -73
- package/evals/cases/using-agent-skills.json +0 -44
- package/evals/fixtures/api-and-interface-design/service-brief.md +0 -19
- package/evals/fixtures/browser-testing-with-devtools/README.md +0 -5
- package/evals/fixtures/browser-testing-with-devtools/index.html +0 -24
- package/evals/fixtures/browser-testing-with-devtools/server.js +0 -15
- package/evals/fixtures/ci-cd-and-automation/package.json +0 -8
- package/evals/fixtures/ci-cd-and-automation/src/slug.js +0 -3
- package/evals/fixtures/ci-cd-and-automation/test/slug.test.js +0 -9
- package/evals/fixtures/code-review-and-quality/user-search.diff +0 -16
- package/evals/fixtures/code-simplification/config-parser.js +0 -46
- package/evals/fixtures/code-simplification/config-parser.test.js +0 -15
- package/evals/fixtures/context-engineering/context-audit.md +0 -15
- package/evals/fixtures/debugging-and-error-recovery/pagination.js +0 -8
- package/evals/fixtures/debugging-and-error-recovery/pagination.test.js +0 -9
- package/evals/fixtures/debugging-and-error-recovery/time-pressure.md +0 -6
- package/evals/fixtures/deprecation-and-migration/api-inventory.md +0 -9
- package/evals/fixtures/documentation-and-adrs/decision-context.md +0 -16
- package/evals/fixtures/doubt-driven-development/migration-plan.md +0 -19
- package/evals/fixtures/frontend-ui-engineering/Button.tsx +0 -7
- package/evals/fixtures/frontend-ui-engineering/design-system.md +0 -11
- package/evals/fixtures/git-workflow-and-versioning/.eval/working-tree.patch +0 -21
- package/evals/fixtures/git-workflow-and-versioning/app.js +0 -7
- package/evals/fixtures/git-workflow-and-versioning/app.test.js +0 -9
- package/evals/fixtures/incremental-implementation/reports.js +0 -7
- package/evals/fixtures/incremental-implementation/reports.test.js +0 -12
- package/evals/fixtures/incremental-implementation/tasks/plan.md +0 -8
- package/evals/fixtures/incremental-implementation-pressure/draft-export.js +0 -17
- package/evals/fixtures/incremental-implementation-pressure/scenario.md +0 -9
- package/evals/fixtures/observability-and-instrumentation/operations.md +0 -11
- package/evals/fixtures/observability-and-instrumentation/payment-retry.js +0 -14
- package/evals/fixtures/performance-optimization/benchmark.js +0 -15
- package/evals/fixtures/performance-optimization/products.js +0 -14
- package/evals/fixtures/planning-and-task-breakdown/notifications-spec.md +0 -18
- package/evals/fixtures/security-and-hardening/webhook.js +0 -11
- package/evals/fixtures/security-and-hardening/webhook.test.js +0 -13
- package/evals/fixtures/shipping-and-launch/authority-pressure.md +0 -6
- package/evals/fixtures/shipping-and-launch/launch-status.md +0 -11
- package/evals/fixtures/source-driven-development/framework-task.md +0 -10
- package/evals/fixtures/spec-driven-development/billing-brief.md +0 -16
- package/evals/fixtures/spec-driven-development-decomposition/portal-brief.md +0 -22
- package/evals/fixtures/test-driven-development/BUG.md +0 -10
- package/evals/fixtures/test-driven-development/README.md +0 -28
- package/evals/fixtures/test-driven-development/package.json +0 -9
- package/evals/fixtures/test-driven-development/src/split.js +0 -8
- package/evals/fixtures/test-driven-development/test/split.test.js +0 -13
- package/evals/fixtures/test-driven-development-ecosystem/README.md +0 -9
- package/evals/fixtures/test-driven-development-ecosystem/ledger.py +0 -15
- package/evals/fixtures/test-driven-development-ecosystem/test_ledger.py +0 -19
- package/evals/fixtures/using-agent-skills/incident.md +0 -6
- package/evals/plugin/code-review-fires/graders/off-by-one.md +0 -7
- package/evals/plugin/code-review-fires/graders/severity-labels.md +0 -4
- package/evals/plugin/code-review-fires/graders/skill-fired.md +0 -5
- package/evals/plugin/code-review-fires/prompt.md +0 -31
- package/evals/plugin/code-review-stays-quiet/graders/not-fired.md +0 -8
- package/evals/plugin/code-review-stays-quiet/graders/tdd-fired.md +0 -6
- package/evals/plugin/code-review-stays-quiet/prompt.md +0 -8
- package/evals/plugin/code-review-stays-quiet-on-commit-message/graders/not-fired.md +0 -8
- package/evals/plugin/code-review-stays-quiet-on-commit-message/prompt.md +0 -25
- package/evals/skill-impact.md +0 -6
- package/rebrand/INSTALLATION-SPEC.md +0 -46
- package/rebrand/MAINTENANCE.md +0 -113
- package/rebrand/NOTICE.md +0 -14
- package/rebrand/PR-WORKFLOW.md +0 -34
- package/rebrand/UNIFICATION-SPEC.md +0 -33
- package/rebrand/VALIDATION.md +0 -32
- package/rebrand/VERSIONING.md +0 -33
- package/rebrand/apply.cjs +0 -194
- package/rebrand/brand.json +0 -13
- package/rebrand/catalog.cjs +0 -56
- package/rebrand/fork-patches.json +0 -12
- package/rebrand/overlay/.github/workflows/test-plugin-install.yml +0 -177
- package/rebrand/overlay/CHANGELOG.md +0 -34
- package/rebrand/overlay/bin/agent-targets.json +0 -726
- package/rebrand/overlay/bin/i3-composer-agent.cjs +0 -190
- package/rebrand/overlay/bin/install.cjs +0 -164
- package/rebrand/overlay/bin/skills-registry.LICENSE +0 -21
- package/rebrand/overlay/bin/wizard.cjs +0 -66
- package/rebrand/overlay/scripts/validate-brand.cjs +0 -44
- package/rebrand/overlay/tests/bundle.test.cjs +0 -85
- package/rebrand/overlay/tests/installer.test.cjs +0 -193
- package/rebrand/package.template.json +0 -82
- package/rebrand/rebrand.sh +0 -4
- package/rebrand/record-upstream.cjs +0 -37
- package/rebrand/templates/README.md +0 -124
- package/rebrand/templates/codebuddy-setup.md +0 -88
- package/rebrand/templates/codex-setup.md +0 -45
- package/rebrand/tests/pipeline.test.cjs +0 -185
- package/rebrand/upstream.json +0 -171
- package/scripts/floor-guard-reference-test.js +0 -291
- package/scripts/lib/skill-lint-test.js +0 -650
- package/scripts/lib/skill-lint.js +0 -584
- package/scripts/run-evals-test.js +0 -623
- package/scripts/run-evals.js +0 -638
- package/scripts/validate-artifact-paths-test.js +0 -179
- package/scripts/validate-artifact-paths.js +0 -128
- package/scripts/validate-brand.cjs +0 -44
- package/scripts/validate-commands-test.js +0 -216
- package/scripts/validate-commands.js +0 -222
- package/scripts/validate-reference-links-test.js +0 -495
- package/scripts/validate-reference-links.js +0 -187
- package/scripts/validate-skills.js +0 -69
- package/scripts/validate-versions-test.js +0 -32
- package/scripts/validate-versions.js +0 -35
- package/tests/bundle.test.cjs +0 -85
- package/tests/installer.test.cjs +0 -193
- /package/skills/{constraint-driven-development → i3-constraint-driven-development}/references/floor-guard.md +0 -0
- /package/skills/{idea-refine → i3-idea-refine}/examples.md +0 -0
- /package/skills/{idea-refine → i3-idea-refine}/frameworks.md +0 -0
- /package/skills/{idea-refine → i3-idea-refine}/refinement-criteria.md +0 -0
package/rebrand/apply.cjs
DELETED
|
@@ -1,194 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
'use strict';
|
|
3
|
-
|
|
4
|
-
const fs = require('node:fs');
|
|
5
|
-
const path = require('node:path');
|
|
6
|
-
const { spawnSync } = require('node:child_process');
|
|
7
|
-
const { validateCatalog, frontmatter } = require('./catalog.cjs');
|
|
8
|
-
const brand = require('./brand.json');
|
|
9
|
-
const upstream = require('./upstream.json');
|
|
10
|
-
const root = path.resolve(__dirname, '..');
|
|
11
|
-
const mode = process.argv[2];
|
|
12
|
-
if (!['--apply', '--check'].includes(mode)) {
|
|
13
|
-
console.error('Usage: node rebrand/apply.cjs --apply | --check');
|
|
14
|
-
process.exit(1);
|
|
15
|
-
}
|
|
16
|
-
if (mode === '--apply') {
|
|
17
|
-
const branch = spawnSync('git', ['-C', root, 'branch', '--show-current'], { encoding: 'utf8' });
|
|
18
|
-
if (branch.status === 0 && branch.stdout.trim() === brand.sourceBranch) {
|
|
19
|
-
console.error(`Refusing to transform the source branch ${brand.sourceBranch}; create a release candidate first.`);
|
|
20
|
-
process.exit(1);
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
const inventory = validateCatalog(root, upstream);
|
|
24
|
-
const packageFile = path.join(root, 'package.json');
|
|
25
|
-
if (fs.existsSync(packageFile) && JSON.parse(fs.readFileSync(packageFile, 'utf8')).name !== brand.npmName) {
|
|
26
|
-
console.error('Upstream package.json now exists; explicitly adapt the distribution overlay before replaying.');
|
|
27
|
-
process.exit(1);
|
|
28
|
-
}
|
|
29
|
-
const changes = new Map();
|
|
30
|
-
function update(relative, content) {
|
|
31
|
-
const file = path.join(root, relative);
|
|
32
|
-
if (!fs.existsSync(file) || fs.readFileSync(file, 'utf8') !== content) changes.set(relative, content);
|
|
33
|
-
}
|
|
34
|
-
function transform(content, relative) {
|
|
35
|
-
const head = /^skills\/[^/]+\/SKILL\.md$/.test(relative) ? frontmatter(content) : '';
|
|
36
|
-
content = content.slice(head.length);
|
|
37
|
-
// Agent Skills is also the name of an independent specification.
|
|
38
|
-
const standard = '__I3_AGENT_SKILLS_STANDARD__';
|
|
39
|
-
let result = content
|
|
40
|
-
.replace('agents working on the [`addyosmani/agent-skills`](https://github.com/addyosmani/agent-skills) repository itself',
|
|
41
|
-
'agents working on the i3 Composer Agent repository itself, derived from [`addyosmani/agent-skills`](https://github.com/addyosmani/agent-skills)')
|
|
42
|
-
.replace(/Agent Skills(?=\s+(?:specification|spec\b|format\b|standard\b))/g, standard)
|
|
43
|
-
.replaceAll('addy-agent-skills', brand.name)
|
|
44
|
-
.replaceAll('agent-skills@addy-agent-skills', `${brand.name}@${brand.name}`)
|
|
45
|
-
.replaceAll('agent-skills@agent-skills', `${brand.name}@${brand.name}`)
|
|
46
|
-
.replaceAll('agent-skills:', `${brand.name}:`)
|
|
47
|
-
.replaceAll('/path/to/agent-skills', `/path/to/${brand.name}`)
|
|
48
|
-
.replaceAll('./agent-skills', `./${brand.name}`)
|
|
49
|
-
.replace(/(?<![\w/.-])agent-skills(?![\w-])/g, brand.name)
|
|
50
|
-
.replaceAll('Agent Skills', brand.displayName)
|
|
51
|
-
.replaceAll(standard, 'Agent Skills');
|
|
52
|
-
if (relative.startsWith('docs/')) {
|
|
53
|
-
result = result.split('\n').map(line => {
|
|
54
|
-
if (/^\s*git clone https:\/\/github\.com\/addyosmani\/agent-skills(?:\.git)?\s*$/.test(line)) {
|
|
55
|
-
return `${line.match(/^\s*/)[0]}npx ${brand.npmName} --extract --dir ./${brand.name}`;
|
|
56
|
-
}
|
|
57
|
-
if (/^\s*(?:npx |codex |copilot |cmd |agy |gemini |\/plugin )/.test(line)) {
|
|
58
|
-
return line.replaceAll('https://github.com/addyosmani/agent-skills.git', `/path/to/${brand.name}`)
|
|
59
|
-
.replaceAll('https://github.com/addyosmani/agent-skills', `/path/to/${brand.name}`)
|
|
60
|
-
.replaceAll('addyosmani/agent-skills', `/path/to/${brand.name}`);
|
|
61
|
-
}
|
|
62
|
-
return line;
|
|
63
|
-
}).join('\n');
|
|
64
|
-
result = result
|
|
65
|
-
.replace(/^cmd skills add \/path\/to\/i3-composer-agent@main[^\n]*$/gm,
|
|
66
|
-
'# Branch selectors apply to Git sources; prepared npm bundles have no Git history.')
|
|
67
|
-
.replaceAll('Clone the repository', 'Prepare the plugin bundle')
|
|
68
|
-
.replaceAll('Clone this repository', 'Prepare the plugin bundle')
|
|
69
|
-
.replaceAll('Install from the remote repository', 'Install from a prepared local bundle')
|
|
70
|
-
.replaceAll('npx skills add addyosmani/agent-skills', `npx skills add /path/to/${brand.name}`)
|
|
71
|
-
.replaceAll('plugin marketplace add addyosmani/agent-skills', `plugin marketplace add /path/to/${brand.name}`)
|
|
72
|
-
.replaceAll('~/.gemini/config/plugins/agent-skills/', `~/.gemini/config/plugins/${brand.name}/`)
|
|
73
|
-
.replaceAll('.cursor/rules/agent-skills.mdc', `.cursor/rules/${brand.name}.mdc`)
|
|
74
|
-
.replace(/\[[^\]]+\]\(https:\/\/github\.com\/addyosmani\/agent-skills\/issues\/(\d+)\)/g,
|
|
75
|
-
(_, issue) => `[upstream agent-skills #${issue}](https://github.com/addyosmani/agent-skills/issues/${issue})`);
|
|
76
|
-
}
|
|
77
|
-
return head + result;
|
|
78
|
-
}
|
|
79
|
-
const skipDirectories = new Set(['.git', 'node_modules', 'rebrand', 'dist', 'tests', 'bin']);
|
|
80
|
-
const skipFiles = new Set(['LICENSE', 'NOTICE.md', 'CHANGELOG.md', 'package.json', 'README.md', 'evals/README.md', 'evals/skill-impact.md', 'docs/comparison.md', 'scripts/validate-brand.cjs', 'scripts/lib/skill-lint.js', 'scripts/lib/skill-lint-test.js']);
|
|
81
|
-
function walk(directory, prefix = '') {
|
|
82
|
-
for (const entry of fs.readdirSync(directory, { withFileTypes: true })) {
|
|
83
|
-
const relative = prefix ? `${prefix}/${entry.name}` : entry.name;
|
|
84
|
-
if (entry.isDirectory()) {
|
|
85
|
-
if (!skipDirectories.has(entry.name) && !relative.startsWith('evals/results')) walk(path.join(directory, entry.name), relative);
|
|
86
|
-
} else if (entry.isFile() && !skipFiles.has(relative) && /\.(?:md|js|cjs|sh|toml|yml)$/.test(entry.name)) {
|
|
87
|
-
const original = fs.readFileSync(path.join(root, relative), 'utf8');
|
|
88
|
-
update(relative, transform(original, relative));
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
walk(root);
|
|
93
|
-
for (const patch of require('./fork-patches.json')) {
|
|
94
|
-
if (path.isAbsolute(patch.file) || patch.file.split(/[\\/]/).includes('..')) throw new Error('Patch must stay inside this Agent repository.');
|
|
95
|
-
const original = (changes.get(patch.file) ?? fs.readFileSync(path.join(root, patch.file), 'utf8')).replace(/\r\n/g, '\n');
|
|
96
|
-
if (original.includes(patch.to)) continue;
|
|
97
|
-
if (!original.includes(patch.from)) throw new Error(`Upstream changed ${patch.file}; review the fork patch before proceeding.`);
|
|
98
|
-
update(patch.file, original.replace(patch.from, patch.to));
|
|
99
|
-
}
|
|
100
|
-
const comparisonPath = 'docs/comparison.md';
|
|
101
|
-
const comparison = fs.readFileSync(path.join(root, comparisonPath), 'utf8');
|
|
102
|
-
if (!comparison.includes('> **Upstream research:**')) {
|
|
103
|
-
const note = `> **Upstream research:** This comparison is retained from Addy Osmani's \`agent-skills\` at commit \`${brand.upstreamCommit}\`. Its experiments describe the upstream project; they are not independent evaluations of ${brand.displayName}.\n\n`;
|
|
104
|
-
update(comparisonPath, comparison.replace('# How agent-skills compares\n\n', '# How agent-skills compares\n\n' + note));
|
|
105
|
-
}
|
|
106
|
-
for (const relative of ['plugin.json', '.claude-plugin/plugin.json', '.codex-plugin/plugin.json']) {
|
|
107
|
-
const manifest = JSON.parse(fs.readFileSync(path.join(root, relative), 'utf8'));
|
|
108
|
-
manifest.name = brand.name;
|
|
109
|
-
manifest.version = brand.releaseVersion;
|
|
110
|
-
manifest.description = brand.description;
|
|
111
|
-
if (manifest.author) manifest.author = { name: brand.maintainer };
|
|
112
|
-
manifest.homepage = brand.repository;
|
|
113
|
-
manifest.repository = brand.repository;
|
|
114
|
-
if (manifest.interface) {
|
|
115
|
-
manifest.interface.displayName = brand.displayName;
|
|
116
|
-
manifest.interface.developerName = brand.maintainer;
|
|
117
|
-
manifest.interface.shortDescription = 'Engineering workflow skills';
|
|
118
|
-
manifest.interface.longDescription = `${brand.displayName} packages ${inventory.skills.length} engineering skills from Addy Osmani's Agent Skills, covering requirements, planning, implementation, testing, review, and shipping.`;
|
|
119
|
-
manifest.interface.defaultPrompt = manifest.interface.defaultPrompt.map(prompt => prompt.replaceAll('Agent Skills', brand.displayName));
|
|
120
|
-
}
|
|
121
|
-
update(relative, JSON.stringify(manifest, null, 2) + '\n');
|
|
122
|
-
}
|
|
123
|
-
for (const relative of ['.claude-plugin/marketplace.json', '.agents/plugins/marketplace.json']) {
|
|
124
|
-
const manifest = JSON.parse(fs.readFileSync(path.join(root, relative), 'utf8'));
|
|
125
|
-
manifest.name = brand.name;
|
|
126
|
-
if (manifest.version) manifest.version = brand.releaseVersion;
|
|
127
|
-
if (manifest.description) manifest.description = brand.description;
|
|
128
|
-
if (manifest.owner) manifest.owner = { name: brand.maintainer };
|
|
129
|
-
if (manifest.interface) manifest.interface.displayName = brand.displayName;
|
|
130
|
-
for (const plugin of manifest.plugins) {
|
|
131
|
-
plugin.name = brand.name;
|
|
132
|
-
plugin.version = brand.releaseVersion;
|
|
133
|
-
plugin.description = brand.description;
|
|
134
|
-
plugin.source = relative.startsWith('.agents/') ? { source: 'local', path: './' } : './';
|
|
135
|
-
plugin.homepage = brand.repository;
|
|
136
|
-
}
|
|
137
|
-
update(relative, JSON.stringify(manifest, null, 2) + '\n');
|
|
138
|
-
}
|
|
139
|
-
function overlay(directory, prefix = '') {
|
|
140
|
-
for (const entry of fs.readdirSync(directory, { withFileTypes: true })) {
|
|
141
|
-
const relative = prefix ? `${prefix}/${entry.name}` : entry.name;
|
|
142
|
-
if (relative === '.github' && !fs.existsSync(path.join(root, '.github'))) continue;
|
|
143
|
-
if (entry.isDirectory()) overlay(path.join(directory, entry.name), relative);
|
|
144
|
-
else if (entry.isFile()) update(relative, fs.readFileSync(path.join(directory, entry.name), 'utf8'));
|
|
145
|
-
else throw new Error(`Unsupported distribution overlay entry: ${relative}`);
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
overlay(path.join(__dirname, 'overlay'));
|
|
149
|
-
const ignoreFile = path.join(root, '.gitignore');
|
|
150
|
-
if (fs.existsSync(ignoreFile)) {
|
|
151
|
-
const original = fs.readFileSync(ignoreFile, 'utf8');
|
|
152
|
-
const entries = new Set(original.split(/\r?\n/));
|
|
153
|
-
const missing = ['dist/', '*.tgz', `${brand.name}/`].filter(entry => !entries.has(entry));
|
|
154
|
-
if (missing.length) update('.gitignore', original.replace(/\n?$/, '\n') + missing.join('\n') + '\n');
|
|
155
|
-
}
|
|
156
|
-
const pkg = JSON.parse(fs.readFileSync(path.join(__dirname, 'package.template.json'), 'utf8'));
|
|
157
|
-
pkg.name = brand.npmName;
|
|
158
|
-
pkg.version = brand.releaseVersion;
|
|
159
|
-
pkg.repository = { type: 'git', url: brand.repository + '.git' };
|
|
160
|
-
pkg.homepage = brand.repository + '#readme';
|
|
161
|
-
pkg.i3ComposerAgent.upstreamVersion = upstream.upstreamVersion;
|
|
162
|
-
pkg.i3ComposerAgent.upstreamCommit = upstream.upstreamCommit;
|
|
163
|
-
pkg.i3ComposerAgent.upstreamRepository = brand.upstream;
|
|
164
|
-
update('package.json', JSON.stringify(pkg, null, 2) + '\n');
|
|
165
|
-
update('NOTICE.md', fs.readFileSync(path.join(__dirname, 'NOTICE.md'), 'utf8'));
|
|
166
|
-
function description(relative) {
|
|
167
|
-
const head = fs.readFileSync(path.join(root, relative), 'utf8').match(/^---\r?\n([\s\S]*?)\r?\n---/)?.[1] || '';
|
|
168
|
-
return (head.match(/^description:\s*(.*)$/m)?.[1] || '').replace(/^["']|["']$/g, '').replaceAll('|', '\\|');
|
|
169
|
-
}
|
|
170
|
-
const values = {
|
|
171
|
-
RELEASE_VERSION: brand.releaseVersion,
|
|
172
|
-
UPSTREAM_VERSION: upstream.upstreamVersion,
|
|
173
|
-
SKILL_COUNT: inventory.skills.length,
|
|
174
|
-
COMMAND_COUNT: inventory.commands.length,
|
|
175
|
-
PERSONA_COUNT: inventory.personas.length,
|
|
176
|
-
SKILL_TABLE: inventory.skills.map(id => `| [${id}](skills/${id}/SKILL.md) | ${description(`skills/${id}/SKILL.md`)} |`).join('\n'),
|
|
177
|
-
COMMAND_TABLE: inventory.commands.map(id => `| /${brand.name}:${id} | ${description(`.claude/commands/${id}.md`)} |`).join('\n'),
|
|
178
|
-
};
|
|
179
|
-
for (const [relative, template] of [
|
|
180
|
-
['README.md', 'README.md'], ['docs/codex-setup.md', 'codex-setup.md'], ['docs/codebuddy-setup.md', 'codebuddy-setup.md'],
|
|
181
|
-
]) {
|
|
182
|
-
const content = fs.readFileSync(path.join(__dirname, 'templates', template), 'utf8').replace(/\{\{([A-Z_]+)\}\}/g, (_, key) => {
|
|
183
|
-
if (!(key in values)) throw new Error(`Unknown template variable: ${key}`);
|
|
184
|
-
return values[key];
|
|
185
|
-
});
|
|
186
|
-
update(relative, content);
|
|
187
|
-
}
|
|
188
|
-
if (mode === '--apply') for (const [relative, content] of changes) {
|
|
189
|
-
fs.mkdirSync(path.dirname(path.join(root, relative)), { recursive: true });
|
|
190
|
-
fs.writeFileSync(path.join(root, relative), content);
|
|
191
|
-
}
|
|
192
|
-
if (mode === '--apply') fs.chmodSync(path.join(root, 'bin/i3-composer-agent.cjs'), 0o755);
|
|
193
|
-
console.log(JSON.stringify({ mode, changedFiles: [...changes.keys()] }, null, 2));
|
|
194
|
-
if (mode === '--check' && changes.size) process.exitCode = 1;
|
package/rebrand/brand.json
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "i3-composer-agent",
|
|
3
|
-
"displayName": "i3 Composer Agent",
|
|
4
|
-
"npmName": "@givolt/i3-composer-agent",
|
|
5
|
-
"maintainer": "Givolt",
|
|
6
|
-
"upstream": "https://github.com/addyosmani/agent-skills",
|
|
7
|
-
"upstreamCommit": "1401c8b8030e023baeebb31781a6653fe8e93026",
|
|
8
|
-
"description": "Production-grade engineering skills for AI coding agents covering the development lifecycle from spec to ship.",
|
|
9
|
-
"repository": "https://github.com/49780522/i3-composer-agent",
|
|
10
|
-
"sourceBranch": "agent/source",
|
|
11
|
-
"releaseBranch": "main",
|
|
12
|
-
"releaseVersion": "1.0.1"
|
|
13
|
-
}
|
package/rebrand/catalog.cjs
DELETED
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
const fs = require('node:fs');
|
|
4
|
-
const path = require('node:path');
|
|
5
|
-
const crypto = require('node:crypto');
|
|
6
|
-
const assert = require('node:assert/strict');
|
|
7
|
-
const runtimeRoots = ['skills', 'references', 'agents', 'commands', '.claude/commands', '.gemini/commands', 'hooks', '.claude-plugin', '.codex-plugin', '.agents/plugins'];
|
|
8
|
-
const runtimeFiles = ['plugin.json', 'LICENSE'];
|
|
9
|
-
|
|
10
|
-
function frontmatter(content) {
|
|
11
|
-
const match = content.match(/^---\r?\n[\s\S]*?\r?\n---(?:\r?\n|$)/);
|
|
12
|
-
assert.ok(match, 'Skill must have YAML frontmatter');
|
|
13
|
-
return match[0];
|
|
14
|
-
}
|
|
15
|
-
function describe(files, read) {
|
|
16
|
-
files = files.filter(file => path.basename(file) !== '.DS_Store');
|
|
17
|
-
const select = pattern => files.filter(name => pattern.test(name)).sort();
|
|
18
|
-
const skillFiles = select(/^skills\/[^/]+\/SKILL\.md$/);
|
|
19
|
-
const skillFrontmatter = {};
|
|
20
|
-
for (const file of skillFiles) {
|
|
21
|
-
const id = file.split('/')[1];
|
|
22
|
-
const head = frontmatter(read(file));
|
|
23
|
-
const name = head.match(/^name:\s*["']?([^\s"']+)["']?\s*$/m)?.[1];
|
|
24
|
-
assert.equal(name, id, `${file}: unstable skill identifier`);
|
|
25
|
-
skillFrontmatter[id] = crypto.createHash('sha256').update(head.replace(/\r\n/g, '\n')).digest('hex');
|
|
26
|
-
}
|
|
27
|
-
return {
|
|
28
|
-
skills: skillFiles.map(file => file.split('/')[1]),
|
|
29
|
-
commands: select(/^\.claude\/commands\/[^/]+\.md$/).map(file => path.basename(file, '.md')),
|
|
30
|
-
personas: select(/^agents\/[^/]+\.md$/).map(file => path.basename(file, '.md')),
|
|
31
|
-
references: select(/^references\/[^/]+\.md$/),
|
|
32
|
-
runtimeFiles: files.filter(file => runtimeFiles.includes(file) || runtimeRoots.some(root => file.startsWith(root + '/'))).sort(),
|
|
33
|
-
skillFrontmatter,
|
|
34
|
-
};
|
|
35
|
-
}
|
|
36
|
-
function catalog(root) {
|
|
37
|
-
const files = [];
|
|
38
|
-
function walk(directory, prefix) {
|
|
39
|
-
for (const entry of fs.readdirSync(directory, { withFileTypes: true })) {
|
|
40
|
-
const relative = `${prefix}/${entry.name}`;
|
|
41
|
-
if (entry.isDirectory()) walk(path.join(directory, entry.name), relative);
|
|
42
|
-
else if (entry.isFile()) files.push(relative);
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
for (const name of runtimeRoots) if (fs.existsSync(path.join(root, name))) walk(path.join(root, name), name);
|
|
46
|
-
for (const name of runtimeFiles) if (fs.existsSync(path.join(root, name))) files.push(name);
|
|
47
|
-
return describe(files, file => fs.readFileSync(path.join(root, file), 'utf8'));
|
|
48
|
-
}
|
|
49
|
-
function validateCatalog(root, expected) {
|
|
50
|
-
const actual = catalog(root);
|
|
51
|
-
for (const field of ['skills', 'commands', 'personas', 'references', 'runtimeFiles', 'skillFrontmatter']) {
|
|
52
|
-
assert.deepEqual(actual[field], expected[field], `upstream preservation failed: ${field}`);
|
|
53
|
-
}
|
|
54
|
-
return actual;
|
|
55
|
-
}
|
|
56
|
-
module.exports = { runtimeRoots, runtimeFiles, frontmatter, describe, catalog, validateCatalog };
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
[
|
|
2
|
-
{
|
|
3
|
-
"file": "scripts/validate-versions.js",
|
|
4
|
-
"from": "const manifestPaths = [\n \"plugin.json\",",
|
|
5
|
-
"to": "const manifestPaths = [\n \"package.json\",\n \"plugin.json\","
|
|
6
|
-
},
|
|
7
|
-
{
|
|
8
|
-
"file": "scripts/validate-versions-test.js",
|
|
9
|
-
"from": "const manifestPaths = [\n \"plugin.json\",",
|
|
10
|
-
"to": "const manifestPaths = [\n \"package.json\",\n \"plugin.json\","
|
|
11
|
-
}
|
|
12
|
-
]
|
|
@@ -1,177 +0,0 @@
|
|
|
1
|
-
name: Test Plugin Installation
|
|
2
|
-
|
|
3
|
-
on:
|
|
4
|
-
push:
|
|
5
|
-
pull_request:
|
|
6
|
-
workflow_dispatch:
|
|
7
|
-
|
|
8
|
-
jobs:
|
|
9
|
-
validate-skills:
|
|
10
|
-
name: Validate skill content
|
|
11
|
-
runs-on: ubuntu-latest
|
|
12
|
-
steps:
|
|
13
|
-
- uses: actions/checkout@v6
|
|
14
|
-
with:
|
|
15
|
-
fetch-depth: 0
|
|
16
|
-
|
|
17
|
-
- name: Set up Node.js
|
|
18
|
-
uses: actions/setup-node@v6
|
|
19
|
-
with:
|
|
20
|
-
node-version: '24'
|
|
21
|
-
|
|
22
|
-
- name: Validate all skills
|
|
23
|
-
run: node scripts/validate-skills.js
|
|
24
|
-
|
|
25
|
-
- name: Test skill lint rules
|
|
26
|
-
run: node --test scripts/lib/skill-lint-test.js
|
|
27
|
-
|
|
28
|
-
- name: Validate manifest versions
|
|
29
|
-
run: node scripts/validate-versions.js
|
|
30
|
-
|
|
31
|
-
- name: Validate i3 Composer Agent identity and replay
|
|
32
|
-
run: |
|
|
33
|
-
node scripts/validate-brand.cjs
|
|
34
|
-
node rebrand/apply.cjs --check
|
|
35
|
-
|
|
36
|
-
- name: Test npm bundle CLI
|
|
37
|
-
run: node --test tests/*.test.cjs rebrand/tests/*.test.cjs
|
|
38
|
-
|
|
39
|
-
- name: Test manifest version validator
|
|
40
|
-
run: node --test scripts/validate-versions-test.js
|
|
41
|
-
|
|
42
|
-
- name: Test skill eval runner
|
|
43
|
-
run: node --test scripts/run-evals-test.js
|
|
44
|
-
|
|
45
|
-
- name: Run skill evals (trigger + routing)
|
|
46
|
-
run: node scripts/run-evals.js --min-rank1 95
|
|
47
|
-
|
|
48
|
-
- name: Validate references/ links in skills
|
|
49
|
-
run: node scripts/validate-reference-links.js
|
|
50
|
-
|
|
51
|
-
- name: Test reference-link validator
|
|
52
|
-
run: node --test scripts/validate-reference-links-test.js
|
|
53
|
-
|
|
54
|
-
- name: Test floor-guard reference
|
|
55
|
-
run: node --test scripts/floor-guard-reference-test.js
|
|
56
|
-
|
|
57
|
-
- name: Test session-start hook payload
|
|
58
|
-
run: bash hooks/session-start-test.sh
|
|
59
|
-
|
|
60
|
-
validate-commands:
|
|
61
|
-
name: Validate command parity and description sync
|
|
62
|
-
runs-on: ubuntu-latest
|
|
63
|
-
steps:
|
|
64
|
-
- uses: actions/checkout@v6
|
|
65
|
-
|
|
66
|
-
- name: Set up Node.js
|
|
67
|
-
uses: actions/setup-node@v6
|
|
68
|
-
with:
|
|
69
|
-
node-version: '24'
|
|
70
|
-
|
|
71
|
-
- name: Validate commands across all tool directories
|
|
72
|
-
run: node scripts/validate-commands.js
|
|
73
|
-
|
|
74
|
-
- name: Test command validator
|
|
75
|
-
run: node --test scripts/validate-commands-test.js
|
|
76
|
-
|
|
77
|
-
- name: Validate spec/plan/todo artifact paths
|
|
78
|
-
run: node scripts/validate-artifact-paths.js
|
|
79
|
-
|
|
80
|
-
- name: Test artifact-path validator
|
|
81
|
-
run: node --test scripts/validate-artifact-paths-test.js
|
|
82
|
-
|
|
83
|
-
# Ubuntu coverage stays in the existing jobs above, preserving their check names.
|
|
84
|
-
validate-platforms:
|
|
85
|
-
name: Validate tooling (${{ matrix.os }})
|
|
86
|
-
runs-on: ${{ matrix.os }}
|
|
87
|
-
strategy:
|
|
88
|
-
fail-fast: false
|
|
89
|
-
matrix:
|
|
90
|
-
os: [macos-latest, windows-latest]
|
|
91
|
-
steps:
|
|
92
|
-
- uses: actions/checkout@v6
|
|
93
|
-
with:
|
|
94
|
-
fetch-depth: 0
|
|
95
|
-
|
|
96
|
-
- name: Set up Node.js
|
|
97
|
-
uses: actions/setup-node@v6
|
|
98
|
-
with:
|
|
99
|
-
node-version: '24'
|
|
100
|
-
|
|
101
|
-
- name: Test validators and eval runner
|
|
102
|
-
run: >-
|
|
103
|
-
node --test
|
|
104
|
-
scripts/lib/skill-lint-test.js
|
|
105
|
-
scripts/validate-versions-test.js
|
|
106
|
-
scripts/run-evals-test.js
|
|
107
|
-
scripts/validate-reference-links-test.js
|
|
108
|
-
scripts/validate-commands-test.js
|
|
109
|
-
scripts/validate-artifact-paths-test.js
|
|
110
|
-
scripts/floor-guard-reference-test.js
|
|
111
|
-
tests/*.test.cjs
|
|
112
|
-
rebrand/tests/*.test.cjs
|
|
113
|
-
|
|
114
|
-
- name: Validate all skills
|
|
115
|
-
run: node scripts/validate-skills.js
|
|
116
|
-
|
|
117
|
-
- name: Validate manifest versions
|
|
118
|
-
run: node scripts/validate-versions.js
|
|
119
|
-
|
|
120
|
-
- name: Validate references/ links in skills
|
|
121
|
-
run: node scripts/validate-reference-links.js
|
|
122
|
-
|
|
123
|
-
- name: Validate commands across all tool directories
|
|
124
|
-
run: node scripts/validate-commands.js
|
|
125
|
-
|
|
126
|
-
- name: Validate spec/plan/todo artifact paths
|
|
127
|
-
run: node scripts/validate-artifact-paths.js
|
|
128
|
-
|
|
129
|
-
- name: Run skill evals (trigger + routing)
|
|
130
|
-
run: node scripts/run-evals.js --min-rank1 95
|
|
131
|
-
|
|
132
|
-
test-hooks:
|
|
133
|
-
name: Hook regression tests
|
|
134
|
-
runs-on: ubuntu-latest
|
|
135
|
-
steps:
|
|
136
|
-
- uses: actions/checkout@v6
|
|
137
|
-
|
|
138
|
-
- name: Test sdd-cache hooks (stubbed curl, no network)
|
|
139
|
-
run: bash hooks/sdd-cache-test.sh
|
|
140
|
-
|
|
141
|
-
- name: Test simplify-ignore hook
|
|
142
|
-
run: bash hooks/simplify-ignore-test.sh
|
|
143
|
-
|
|
144
|
-
validate:
|
|
145
|
-
name: Validate plugin structure
|
|
146
|
-
needs: [validate-skills, validate-commands, validate-platforms]
|
|
147
|
-
runs-on: ubuntu-latest
|
|
148
|
-
steps:
|
|
149
|
-
- uses: actions/checkout@v6
|
|
150
|
-
|
|
151
|
-
- name: Install Claude Code
|
|
152
|
-
run: npm install -g @anthropic-ai/claude-code
|
|
153
|
-
|
|
154
|
-
- name: Validate marketplace and plugin manifests
|
|
155
|
-
run: claude plugin validate .
|
|
156
|
-
|
|
157
|
-
test-install:
|
|
158
|
-
name: Test plugin installation
|
|
159
|
-
runs-on: ubuntu-latest
|
|
160
|
-
needs: validate
|
|
161
|
-
steps:
|
|
162
|
-
- uses: actions/checkout@v6
|
|
163
|
-
|
|
164
|
-
- name: Install Claude Code
|
|
165
|
-
run: npm install -g @anthropic-ai/claude-code
|
|
166
|
-
|
|
167
|
-
- name: Configure git to use HTTPS
|
|
168
|
-
run: git config --global url."https://github.com/".insteadOf "git@github.com:"
|
|
169
|
-
|
|
170
|
-
- name: Add marketplace
|
|
171
|
-
run: claude plugin marketplace add ./
|
|
172
|
-
|
|
173
|
-
- name: List marketplaces
|
|
174
|
-
run: claude plugin marketplace list
|
|
175
|
-
|
|
176
|
-
- name: Install plugin
|
|
177
|
-
run: claude plugin install i3-composer-agent@i3-composer-agent --scope user
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
# i3 Composer Agent changes
|
|
2
|
-
|
|
3
|
-
## 1.0.1 — 2026-10-07
|
|
4
|
-
|
|
5
|
-
Upstream baseline: agent-skills 0.6.12 at commit 1401c8b8030e023baeebb31781a6653fe8e93026.
|
|
6
|
-
|
|
7
|
-
### Fixed
|
|
8
|
-
|
|
9
|
-
- Restore the promised terminal installation wizard with multiple tool selection, project/global scope, a destination summary and confirmation.
|
|
10
|
-
- Install complete native skill files and shared references; include short lifecycle commands and personas for CodeBuddy and Claude Code.
|
|
11
|
-
- Protect existing assets with confirmed replacement, backups and rollback on installation failure.
|
|
12
|
-
- Retain complete plugin preparation with --prepare and existing explicit --dir calls.
|
|
13
|
-
|
|
14
|
-
## 1.0.0 — 2026-10-07
|
|
15
|
-
|
|
16
|
-
Upstream baseline: agent-skills 0.6.12 at commit 1401c8b8030e023baeebb31781a6653fe8e93026.
|
|
17
|
-
|
|
18
|
-
### Changed
|
|
19
|
-
|
|
20
|
-
- Start independent i3 release numbering. The upstream baseline remains 0.6.12; this replaces the unpublished 0.6.13 candidate.
|
|
21
|
-
- Display the i3 release and upstream baseline together in the README, CLI help, and bundle preparation output. Keep --version machine-readable.
|
|
22
|
-
- Include the upstream version, commit, and repository in package metadata.
|
|
23
|
-
- Maintain source changes on agent/source, generate and validate a branded candidate, then update main in this independent repository.
|
|
24
|
-
|
|
25
|
-
### Fixed
|
|
26
|
-
|
|
27
|
-
- Preserve complete reviewed runtime assets when replaying branding, including newly approved upstream skills and commands.
|
|
28
|
-
- Keep replay checks repeatable in npm bundles without repository CI files.
|
|
29
|
-
- Preserve branded ignore rules and exclude Finder metadata from runtime preservation checks.
|
|
30
|
-
|
|
31
|
-
## 0.6.12
|
|
32
|
-
|
|
33
|
-
- Publish the first i3 Composer Agent npm distribution based on agent-skills 0.6.12.
|
|
34
|
-
- Retain upstream skill IDs, command workflows, specialist personas, shared references, and MIT attribution.
|