trackops 1.0.1 → 2.0.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/README.md +292 -272
- package/bin/trackops.js +108 -50
- package/lib/config.js +267 -38
- package/lib/control.js +534 -480
- package/lib/env.js +244 -0
- package/lib/i18n.js +61 -53
- package/lib/init.js +170 -47
- package/lib/locale.js +63 -0
- package/lib/opera-bootstrap.js +1075 -0
- package/lib/opera.js +524 -125
- package/lib/preferences.js +74 -0
- package/lib/registry.js +27 -13
- package/lib/release.js +56 -0
- package/lib/resources.js +42 -0
- package/lib/runtime-state.js +144 -0
- package/lib/server.js +1004 -521
- package/lib/skills.js +148 -124
- package/lib/workspace.js +260 -0
- package/locales/en.json +418 -132
- package/locales/es.json +418 -132
- package/package.json +8 -9
- package/scripts/postinstall-locale.js +21 -0
- package/scripts/skills-marketplace-smoke.js +124 -0
- package/scripts/smoke-tests.js +570 -0
- package/scripts/sync-skill-version.js +21 -0
- package/scripts/validate-skill.js +89 -0
- package/skills/trackops/SKILL.md +89 -0
- package/skills/trackops/agents/openai.yaml +3 -0
- package/skills/trackops/references/activation.md +73 -0
- package/skills/trackops/references/troubleshooting.md +49 -0
- package/skills/trackops/references/workflow.md +26 -0
- package/skills/trackops/scripts/bootstrap-trackops.js +203 -0
- package/skills/trackops/skill.json +29 -0
- package/templates/opera/agent.md +10 -9
- package/templates/opera/architecture/dependency-graph.md +24 -0
- package/templates/opera/architecture/runtime-automation.md +24 -0
- package/templates/opera/architecture/runtime-operations.md +34 -0
- package/templates/opera/en/agent.md +27 -0
- package/templates/opera/en/architecture/dependency-graph.md +24 -0
- package/templates/opera/en/architecture/runtime-automation.md +24 -0
- package/templates/opera/en/architecture/runtime-operations.md +34 -0
- package/templates/opera/en/genesis.md +79 -0
- package/templates/opera/en/references/autonomy-and-recovery.md +23 -0
- package/templates/opera/en/references/opera-cycle.md +62 -0
- package/templates/opera/en/registry.md +28 -0
- package/templates/opera/en/reviews/delivery-audit.md +18 -0
- package/templates/opera/en/reviews/integration-audit.md +18 -0
- package/templates/opera/en/router.md +49 -0
- package/templates/opera/genesis.md +79 -94
- package/templates/opera/reviews/delivery-audit.md +18 -0
- package/templates/opera/reviews/integration-audit.md +18 -0
- package/templates/opera/router.md +15 -5
- package/templates/skills/changelog-updater/locales/en/SKILL.md +11 -0
- package/templates/skills/commiter/locales/en/SKILL.md +11 -0
- package/templates/skills/opera-contract-auditor/SKILL.md +38 -0
- package/templates/skills/opera-contract-auditor/locales/en/SKILL.md +38 -0
- package/templates/skills/opera-policy-guard/SKILL.md +26 -0
- package/templates/skills/opera-policy-guard/locales/en/SKILL.md +26 -0
- package/templates/skills/project-starter-skill/SKILL.md +89 -164
- package/templates/skills/project-starter-skill/locales/en/SKILL.md +104 -0
- package/ui/css/panels.css +956 -953
- package/ui/index.html +1 -1
- package/ui/js/api.js +211 -194
- package/ui/js/app.js +200 -199
- package/ui/js/i18n.js +14 -0
- package/ui/js/onboarding.js +439 -437
- package/ui/js/state.js +130 -129
- package/ui/js/utils.js +175 -172
- package/ui/js/views/board.js +255 -254
- package/ui/js/views/execution.js +256 -256
- package/ui/js/views/insights.js +340 -339
- package/ui/js/views/overview.js +366 -361
- package/ui/js/views/settings.js +340 -202
- package/ui/js/views/sidebar.js +131 -132
- package/ui/js/views/skills.js +163 -162
- package/ui/js/views/tasks.js +406 -405
- package/ui/js/views/topbar.js +239 -183
- package/templates/etapa/agent.md +0 -26
- package/templates/etapa/genesis.md +0 -94
- package/templates/etapa/references/autonomy-and-recovery.md +0 -117
- package/templates/etapa/references/etapa-cycle.md +0 -193
- package/templates/etapa/registry.md +0 -28
- package/templates/etapa/router.md +0 -39
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: "trackops"
|
|
3
|
+
description: "Global TrackOps skill that prepares your agent for local project orchestration and operational automation, ensures the runtime on first use, and guides per-project activation with optional OPERA."
|
|
4
|
+
metadata:
|
|
5
|
+
version: "2.0.0"
|
|
6
|
+
type: "global"
|
|
7
|
+
triggers:
|
|
8
|
+
- "install trackops"
|
|
9
|
+
- "skills.sh"
|
|
10
|
+
- "trackops init"
|
|
11
|
+
- "trackops opera install"
|
|
12
|
+
- "opera handoff"
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
# TrackOps
|
|
16
|
+
|
|
17
|
+
Use this skill in two layers.
|
|
18
|
+
|
|
19
|
+
## 1. Global skill layer
|
|
20
|
+
|
|
21
|
+
Install it with:
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
npx skills add Baxahaun/trackops
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
Before relying on the CLI, run:
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
node scripts/bootstrap-trackops.js
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
That bootstrap ensures the `trackops` runtime and records state in `~/.trackops/runtime.json`.
|
|
34
|
+
|
|
35
|
+
## 2. Local project layer
|
|
36
|
+
|
|
37
|
+
Inside a repository:
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
trackops init
|
|
41
|
+
trackops opera install
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
Core rules:
|
|
45
|
+
|
|
46
|
+
- treat the global skill install as non-invasive
|
|
47
|
+
- use `ops/contract/operating-contract.json` as the machine contract when it exists
|
|
48
|
+
- use `ops/project_control.json` as the operational source of truth for backlog and state
|
|
49
|
+
- use `ops/policy/autonomy.json` before approval-sensitive actions
|
|
50
|
+
- use `/.env` and `/.env.example` as the environment contract
|
|
51
|
+
- keep generated operational docs under `ops/`
|
|
52
|
+
- support `trackops locale get|set` and `trackops doctor locale` when language matters
|
|
53
|
+
|
|
54
|
+
## OPERA onboarding
|
|
55
|
+
|
|
56
|
+
OPERA no longer assumes every user is technical.
|
|
57
|
+
|
|
58
|
+
When OPERA starts, TrackOps classifies:
|
|
59
|
+
|
|
60
|
+
- user technical level
|
|
61
|
+
- current project state
|
|
62
|
+
- available documentation
|
|
63
|
+
|
|
64
|
+
Then it chooses one of two routes:
|
|
65
|
+
|
|
66
|
+
- `direct bootstrap`
|
|
67
|
+
for technical users and already-defined repositories
|
|
68
|
+
- `agent handoff`
|
|
69
|
+
for early ideas, non-technical users, or weak documentation
|
|
70
|
+
|
|
71
|
+
If TrackOps routes bootstrap to the agent:
|
|
72
|
+
|
|
73
|
+
- read `ops/bootstrap/agent-handoff.md`
|
|
74
|
+
- or print it with `trackops opera handoff --print`
|
|
75
|
+
- the agent must produce:
|
|
76
|
+
- `ops/bootstrap/intake.json`
|
|
77
|
+
- `ops/bootstrap/spec-dossier.md`
|
|
78
|
+
- `ops/bootstrap/open-questions.md` when important gaps remain
|
|
79
|
+
- then resume with:
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
trackops opera bootstrap --resume
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
Read references only when needed:
|
|
86
|
+
|
|
87
|
+
- `references/activation.md`
|
|
88
|
+
- `references/workflow.md`
|
|
89
|
+
- `references/troubleshooting.md`
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# Activation
|
|
2
|
+
|
|
3
|
+
## Global install
|
|
4
|
+
|
|
5
|
+
Install the marketplace skill:
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npx skills add Baxahaun/trackops
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
On first use, ensure the runtime with:
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
node scripts/bootstrap-trackops.js
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
The global skill must not create repository files by itself.
|
|
18
|
+
|
|
19
|
+
## Local activation
|
|
20
|
+
|
|
21
|
+
Inside a repository:
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
trackops init
|
|
25
|
+
trackops opera install
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
By default, `trackops init` creates a split workspace with:
|
|
29
|
+
|
|
30
|
+
- `app/`
|
|
31
|
+
- `ops/`
|
|
32
|
+
- `/.env`
|
|
33
|
+
- `/.env.example`
|
|
34
|
+
- `.trackops-workspace.json`
|
|
35
|
+
|
|
36
|
+
## OPERA routing
|
|
37
|
+
|
|
38
|
+
OPERA always starts by classifying:
|
|
39
|
+
|
|
40
|
+
- technical level
|
|
41
|
+
- project state
|
|
42
|
+
- documentation state
|
|
43
|
+
|
|
44
|
+
If the project is still early or the user is non-technical, TrackOps writes:
|
|
45
|
+
|
|
46
|
+
- `ops/bootstrap/agent-handoff.md`
|
|
47
|
+
- `ops/bootstrap/agent-handoff.json`
|
|
48
|
+
|
|
49
|
+
The agent then produces:
|
|
50
|
+
|
|
51
|
+
- `ops/bootstrap/intake.json`
|
|
52
|
+
- `ops/bootstrap/spec-dossier.md`
|
|
53
|
+
- `ops/bootstrap/open-questions.md` when needed
|
|
54
|
+
|
|
55
|
+
When the quality gate passes, OPERA compiles:
|
|
56
|
+
|
|
57
|
+
- `ops/contract/operating-contract.json`
|
|
58
|
+
- `ops/genesis.md`
|
|
59
|
+
- `ops/policy/autonomy.json`
|
|
60
|
+
|
|
61
|
+
Resume with:
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
trackops opera bootstrap --resume
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
Locale controls:
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
trackops locale get
|
|
71
|
+
trackops locale set en
|
|
72
|
+
trackops doctor locale
|
|
73
|
+
```
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# Troubleshooting
|
|
2
|
+
|
|
3
|
+
## Missing prerequisites
|
|
4
|
+
|
|
5
|
+
- Install Node 18+ if Node is missing or too old.
|
|
6
|
+
- Install a Node distribution that includes npm if npm is missing.
|
|
7
|
+
|
|
8
|
+
## Global install command failed
|
|
9
|
+
|
|
10
|
+
- Install from committed GitHub state:
|
|
11
|
+
`npx skills add Baxahaun/trackops`
|
|
12
|
+
- Then ensure the local runtime with:
|
|
13
|
+
`node scripts/bootstrap-trackops.js`
|
|
14
|
+
- If the install succeeded but the CLI still looks unavailable, confirm that `~/.trackops/runtime.json` exists.
|
|
15
|
+
|
|
16
|
+
## Runtime bootstrap failed
|
|
17
|
+
|
|
18
|
+
- Re-run `node scripts/bootstrap-trackops.js`.
|
|
19
|
+
- If npm global permissions fail, configure a user-writable npm prefix instead of using `sudo`.
|
|
20
|
+
|
|
21
|
+
## OPERA routed bootstrap to the agent
|
|
22
|
+
|
|
23
|
+
This is expected when:
|
|
24
|
+
|
|
25
|
+
- the user is non-technical
|
|
26
|
+
- the project is still in idea stage
|
|
27
|
+
- documentation is weak
|
|
28
|
+
|
|
29
|
+
Use:
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
trackops opera handoff --print
|
|
33
|
+
trackops opera bootstrap --resume
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## Resume does not complete
|
|
37
|
+
|
|
38
|
+
TrackOps will not invent missing context.
|
|
39
|
+
|
|
40
|
+
Check that both files exist and contain usable data:
|
|
41
|
+
|
|
42
|
+
- `ops/bootstrap/intake.json`
|
|
43
|
+
- `ops/bootstrap/spec-dossier.md`
|
|
44
|
+
|
|
45
|
+
## Environment looks inconsistent
|
|
46
|
+
|
|
47
|
+
- Run `trackops env status`.
|
|
48
|
+
- Run `trackops env sync`.
|
|
49
|
+
- If bridge mode is `copy`, do not edit `app/.env` directly.
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# Workflow
|
|
2
|
+
|
|
3
|
+
Once TrackOps is active in a repository:
|
|
4
|
+
|
|
5
|
+
1. Run `trackops status`.
|
|
6
|
+
2. Run `trackops next`.
|
|
7
|
+
3. Move task state with `trackops task ...`.
|
|
8
|
+
4. Run `trackops sync` after meaningful changes.
|
|
9
|
+
5. Run `trackops env status` when credentials matter.
|
|
10
|
+
|
|
11
|
+
Operational rules:
|
|
12
|
+
|
|
13
|
+
- In split workspaces, use `ops/project_control.json` as the source of truth.
|
|
14
|
+
- Generated operational docs live in `ops/`.
|
|
15
|
+
- Product code lives in `app/`.
|
|
16
|
+
- Real secrets live in `/.env`.
|
|
17
|
+
- Public environment contract lives in `/.env.example`.
|
|
18
|
+
- `app/.env` is only a compatibility bridge.
|
|
19
|
+
|
|
20
|
+
If OPERA is installed:
|
|
21
|
+
|
|
22
|
+
- `ops/contract/operating-contract.json` holds the machine contract.
|
|
23
|
+
- `ops/genesis.md` holds the compiled human view.
|
|
24
|
+
- `ops/policy/autonomy.json` holds the executable autonomy policy.
|
|
25
|
+
- `ops/bootstrap/` holds onboarding artifacts.
|
|
26
|
+
- `ops/.agent/hub/` and `ops/.agents/skills/` hold managed agent artifacts.
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
const fs = require("fs");
|
|
4
|
+
const os = require("os");
|
|
5
|
+
const path = require("path");
|
|
6
|
+
const { spawnSync } = require("child_process");
|
|
7
|
+
const runtimeState = require("../../../lib/runtime-state");
|
|
8
|
+
|
|
9
|
+
const EXIT_CODES = {
|
|
10
|
+
READY: 0,
|
|
11
|
+
PREREQ: 1,
|
|
12
|
+
INSTALL: 2,
|
|
13
|
+
UNVERIFIABLE: 3,
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
function getNpmCommand() {
|
|
17
|
+
return process.platform === "win32" ? "npm.cmd" : "npm";
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
function readSkillConfig() {
|
|
21
|
+
const skillFile = path.join(__dirname, "..", "skill.json");
|
|
22
|
+
return JSON.parse(fs.readFileSync(skillFile, "utf8"));
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
function getHomeDir() {
|
|
26
|
+
return process.env.TRACKOPS_BOOTSTRAP_HOME || os.homedir();
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
function getPrefixOverride() {
|
|
30
|
+
return process.env.TRACKOPS_BOOTSTRAP_PREFIX || null;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
function getInstallSource(config) {
|
|
34
|
+
return process.env.TRACKOPS_BOOTSTRAP_INSTALL_SOURCE || `${config.npmPackage}@${config.trackopsVersion}`;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
function parseMajor(version) {
|
|
38
|
+
const major = Number(String(version || "").split(".")[0]);
|
|
39
|
+
return Number.isFinite(major) ? major : null;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
function hasSupportedNode() {
|
|
43
|
+
const major = parseMajor(process.versions.node);
|
|
44
|
+
return major != null && major >= 18;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
function spawnChecked(command, args, extra = {}) {
|
|
48
|
+
const shell = process.platform === "win32" && /\.(cmd|bat)$/i.test(command);
|
|
49
|
+
return spawnSync(command, args, {
|
|
50
|
+
encoding: "utf8",
|
|
51
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
52
|
+
shell,
|
|
53
|
+
...extra,
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
function spawnNpm(args, extra = {}) {
|
|
58
|
+
return spawnSync(getNpmCommand(), args, {
|
|
59
|
+
encoding: "utf8",
|
|
60
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
61
|
+
shell: process.platform === "win32",
|
|
62
|
+
...extra,
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
function resolvePrefixExecutables(prefix) {
|
|
67
|
+
if (!prefix) return [];
|
|
68
|
+
if (process.platform === "win32") {
|
|
69
|
+
return [
|
|
70
|
+
path.join(prefix, "trackops.cmd"),
|
|
71
|
+
path.join(prefix, "trackops.exe"),
|
|
72
|
+
path.join(prefix, "trackops"),
|
|
73
|
+
];
|
|
74
|
+
}
|
|
75
|
+
return [path.join(prefix, "bin", "trackops")];
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
function buildVerificationTargets(prefix) {
|
|
79
|
+
const targets = [{ command: "trackops", via: "path" }];
|
|
80
|
+
for (const candidate of resolvePrefixExecutables(prefix)) {
|
|
81
|
+
targets.push({ command: candidate, via: "prefix" });
|
|
82
|
+
}
|
|
83
|
+
return targets;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
function readInstalledVersion(prefix) {
|
|
87
|
+
for (const target of buildVerificationTargets(prefix)) {
|
|
88
|
+
const result = spawnChecked(target.command, ["--version"]);
|
|
89
|
+
if (result.error || result.status !== 0) continue;
|
|
90
|
+
const version = String(result.stdout || "").trim();
|
|
91
|
+
if (version) {
|
|
92
|
+
return { version, command: target.command, via: target.via };
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
return null;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
function verifyRuntime(expectedVersion, prefix) {
|
|
99
|
+
const installed = readInstalledVersion(prefix);
|
|
100
|
+
if (!installed) {
|
|
101
|
+
return { ok: false, reason: "missing-command" };
|
|
102
|
+
}
|
|
103
|
+
if (installed.version !== expectedVersion) {
|
|
104
|
+
return { ok: false, reason: "version-drift", installed };
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
const help = spawnChecked(installed.command, ["help"]);
|
|
108
|
+
if (help.error || help.status !== 0) {
|
|
109
|
+
return { ok: false, reason: "help-failed", installed };
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
return { ok: true, installed };
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
function ensureNpmAvailable() {
|
|
116
|
+
const result = spawnNpm(["--version"]);
|
|
117
|
+
return !result.error && result.status === 0;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
function runInstall(config, prefix) {
|
|
121
|
+
const installSource = getInstallSource(config);
|
|
122
|
+
const args = ["install", "-g"];
|
|
123
|
+
if (prefix) {
|
|
124
|
+
args.push("--prefix", prefix);
|
|
125
|
+
}
|
|
126
|
+
args.push(installSource);
|
|
127
|
+
|
|
128
|
+
const result = spawnNpm(args);
|
|
129
|
+
return { ...result, installSource };
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
function writeRuntimeStamp(config, verification) {
|
|
133
|
+
const previous = runtimeState.readRuntimeState();
|
|
134
|
+
const payload = runtimeState.writeRuntimeState({
|
|
135
|
+
...previous,
|
|
136
|
+
skill: config.name,
|
|
137
|
+
skillVersion: config.skillVersion,
|
|
138
|
+
runtimePackage: config.npmPackage,
|
|
139
|
+
runtimeVersion: config.trackopsVersion,
|
|
140
|
+
bootstrapPolicy: config.bootstrapPolicy,
|
|
141
|
+
supportedAgentsV1: config.supportedAgentsV1,
|
|
142
|
+
verifiedAt: new Date().toISOString(),
|
|
143
|
+
verifiedWith: verification.installed.via,
|
|
144
|
+
executable: verification.installed.command,
|
|
145
|
+
});
|
|
146
|
+
return payload;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
function printInstallGuidance(prefix) {
|
|
150
|
+
if (prefix) {
|
|
151
|
+
console.error(`TrackOps was installed under the custom prefix '${prefix}'.`);
|
|
152
|
+
console.error("Use that prefix's executable or add it to PATH before trying again.");
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
console.error("TrackOps was installed but could not be executed from PATH.");
|
|
157
|
+
console.error("Add your npm global bin directory to PATH, reopen the terminal, and retry.");
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
async function main() {
|
|
161
|
+
const config = readSkillConfig();
|
|
162
|
+
const prefix = getPrefixOverride();
|
|
163
|
+
|
|
164
|
+
if (!hasSupportedNode()) {
|
|
165
|
+
console.error("TrackOps requires Node.js 18 or newer.");
|
|
166
|
+
process.exit(EXIT_CODES.PREREQ);
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
if (!ensureNpmAvailable()) {
|
|
170
|
+
console.error("npm is required to bootstrap the TrackOps runtime.");
|
|
171
|
+
process.exit(EXIT_CODES.PREREQ);
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
const current = verifyRuntime(config.trackopsVersion, prefix);
|
|
175
|
+
if (current.ok) {
|
|
176
|
+
await runtimeState.ensureGlobalLocale({ interactive: false });
|
|
177
|
+
writeRuntimeStamp(config, current);
|
|
178
|
+
console.log(`TrackOps runtime ${config.trackopsVersion} is already ready.`);
|
|
179
|
+
process.exit(EXIT_CODES.READY);
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
const install = runInstall(config, prefix);
|
|
183
|
+
if (install.error || install.status !== 0) {
|
|
184
|
+
console.error(`Failed to install ${install.installSource}.`);
|
|
185
|
+
if (install.stderr) {
|
|
186
|
+
console.error(install.stderr.trim());
|
|
187
|
+
}
|
|
188
|
+
process.exit(EXIT_CODES.INSTALL);
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
const verification = verifyRuntime(config.trackopsVersion, prefix);
|
|
192
|
+
if (!verification.ok) {
|
|
193
|
+
printInstallGuidance(prefix);
|
|
194
|
+
process.exit(EXIT_CODES.UNVERIFIABLE);
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
await runtimeState.ensureGlobalLocale({ interactive: false });
|
|
198
|
+
writeRuntimeStamp(config, verification);
|
|
199
|
+
console.log(`TrackOps runtime ${config.trackopsVersion} is ready.`);
|
|
200
|
+
process.exit(EXIT_CODES.READY);
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
main();
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "trackops",
|
|
3
|
+
"shortDescription": "Global TrackOps skill for local project orchestration, agent coordination, bilingual onboarding, and operational automation.",
|
|
4
|
+
"description": "Installs TrackOps as a global skill, ensures the runtime on first use, lets users choose Spanish or English, activates local project orchestration, and routes OPERA onboarding into either direct bootstrap or agent-led discovery.",
|
|
5
|
+
"skillVersion": "2.0.0",
|
|
6
|
+
"trackopsVersion": "2.0.0",
|
|
7
|
+
"npmPackage": "trackops",
|
|
8
|
+
"bootstrapPolicy": "first_use",
|
|
9
|
+
"supportedAgentsV1": [
|
|
10
|
+
"antigravity",
|
|
11
|
+
"claude-code",
|
|
12
|
+
"codex",
|
|
13
|
+
"cursor",
|
|
14
|
+
"gemini-cli",
|
|
15
|
+
"github-copilot",
|
|
16
|
+
"kiro-cli"
|
|
17
|
+
],
|
|
18
|
+
"distribution": {
|
|
19
|
+
"source": "Baxahaun/trackops",
|
|
20
|
+
"skill": "trackops",
|
|
21
|
+
"fullDepth": true
|
|
22
|
+
},
|
|
23
|
+
"repository": {
|
|
24
|
+
"provider": "github",
|
|
25
|
+
"owner": "Baxahaun",
|
|
26
|
+
"repo": "trackops",
|
|
27
|
+
"skillPath": "skills/trackops"
|
|
28
|
+
}
|
|
29
|
+
}
|
package/templates/opera/agent.md
CHANGED
|
@@ -4,23 +4,24 @@
|
|
|
4
4
|
Eres el agente principal del proyecto **{{PROJECT_NAME}}**. Operas bajo el protocolo O.P.E.R.A. v3.0.
|
|
5
5
|
|
|
6
6
|
## Fuente de Verdad
|
|
7
|
-
Tu fuente de verdad es `
|
|
8
|
-
|
|
7
|
+
Tu fuente de verdad de maquina es `ops/contract/operating-contract.json`.
|
|
8
|
+
Tu vista humana compilada es `ops/genesis.md`.
|
|
9
|
+
Para el seguimiento operativo y el estado del backlog, usa `ops/project_control.json`.
|
|
9
10
|
|
|
10
11
|
## Comportamiento
|
|
11
|
-
- Sigue las reglas
|
|
12
|
-
- Respeta
|
|
13
|
-
- Gestiona tareas y estados desde `project_control.json`.
|
|
14
|
-
- No edites manualmente `task_plan.md`, `progress.md` ni `findings.md`; se regeneran con `trackops sync`.
|
|
12
|
+
- Sigue las reglas definidas en `ops/contract/operating-contract.json` y reflejadas en `ops/genesis.md`.
|
|
13
|
+
- Respeta `ops/policy/autonomy.json` para determinar qué acciones puedes tomar sin aprobacion.
|
|
14
|
+
- Gestiona tareas y estados desde `ops/project_control.json`.
|
|
15
|
+
- No edites manualmente `ops/task_plan.md`, `ops/progress.md` ni `ops/findings.md`; se regeneran con `trackops sync`.
|
|
15
16
|
|
|
16
17
|
## Skills Disponibles
|
|
17
|
-
Consulta
|
|
18
|
+
Consulta `ops/.agents/skills/_registry.md` para ver las skills instaladas.
|
|
18
19
|
También puedes buscar nuevas skills con `trackops skill catalog`.
|
|
19
20
|
|
|
20
21
|
## Ciclo de Trabajo
|
|
21
22
|
1. Ejecuta `trackops status` al inicio de cada bloque de trabajo.
|
|
22
|
-
2. Consulta `genesis.md` para entender
|
|
23
|
+
2. Consulta `ops/contract/operating-contract.json` y `ops/genesis.md` para entender el contrato y su vista humana.
|
|
23
24
|
3. Usa `trackops next` para ver la siguiente cola priorizada.
|
|
24
25
|
4. Antes de implementar, marca la tarea con `trackops task start <task-id>`.
|
|
25
|
-
5. Usa el router (
|
|
26
|
+
5. Usa el router (`ops/.agent/hub/router.md`) para saber que skill aplicar.
|
|
26
27
|
6. Al terminar, pasa la tarea a `review`, `complete` o `block` y ejecuta `trackops sync`.
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# Dependency Graph
|
|
2
|
+
|
|
3
|
+
```mermaid
|
|
4
|
+
flowchart TD
|
|
5
|
+
A[Global runtime bootstrap] --> B[trackops init]
|
|
6
|
+
B --> C[trackops opera install]
|
|
7
|
+
C --> D{Routing}
|
|
8
|
+
D -->|direct_cli| E[Direct intake]
|
|
9
|
+
D -->|agent_handoff| F[agent-handoff.md/json]
|
|
10
|
+
F --> G[intake.json + spec-dossier.md]
|
|
11
|
+
E --> H[quality-report.json]
|
|
12
|
+
G --> H
|
|
13
|
+
H --> I[operating-contract.json]
|
|
14
|
+
I --> J[genesis.md]
|
|
15
|
+
I --> K[task_plan.md / progress.md / findings.md]
|
|
16
|
+
I --> L[dashboard + API state]
|
|
17
|
+
I --> M[env sync + policy enforcement]
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Notes
|
|
21
|
+
|
|
22
|
+
- `ops/project_control.json` is the operational source of truth for backlog and session state.
|
|
23
|
+
- `ops/contract/operating-contract.json` is the machine contract.
|
|
24
|
+
- `ops/genesis.md` is a compiled human view.
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# SOP - Runtime Automation
|
|
2
|
+
|
|
3
|
+
## Objective
|
|
4
|
+
|
|
5
|
+
Keep validation automatic on every relevant change.
|
|
6
|
+
|
|
7
|
+
## Trigger policy
|
|
8
|
+
|
|
9
|
+
- Validate on push to `develop` and `master`.
|
|
10
|
+
- Validate on pull requests targeting `develop` or `master`.
|
|
11
|
+
- Allow manual execution with workflow dispatch.
|
|
12
|
+
|
|
13
|
+
## Validation circuit
|
|
14
|
+
|
|
15
|
+
1. Install Node 18 and 20.
|
|
16
|
+
2. Install runtime dependencies.
|
|
17
|
+
3. Run `npm run release:check`.
|
|
18
|
+
4. Fail fast on any smoke, skill or packaging regression.
|
|
19
|
+
|
|
20
|
+
## Release hygiene
|
|
21
|
+
|
|
22
|
+
- Do not publish if `release:check` fails.
|
|
23
|
+
- Do not treat local runtime state as deployable proof.
|
|
24
|
+
- Re-run smoke after structural or locale changes.
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# SOP - Runtime Operations
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
|
|
5
|
+
Define the minimum operating procedure to keep a TrackOps + OPERA workspace healthy.
|
|
6
|
+
|
|
7
|
+
## Inputs
|
|
8
|
+
|
|
9
|
+
- `ops/project_control.json`
|
|
10
|
+
- `ops/contract/operating-contract.json`
|
|
11
|
+
- `ops/policy/autonomy.json`
|
|
12
|
+
- `ops/bootstrap/quality-report.json`
|
|
13
|
+
|
|
14
|
+
## Core checks
|
|
15
|
+
|
|
16
|
+
1. Run `trackops status`.
|
|
17
|
+
2. Run `trackops opera status`.
|
|
18
|
+
3. Run `trackops env status`.
|
|
19
|
+
4. Confirm `contract readiness` is not `hypothesis` for active delivery work.
|
|
20
|
+
5. Confirm `legacyStatus` is `supported`.
|
|
21
|
+
|
|
22
|
+
## Recovery path
|
|
23
|
+
|
|
24
|
+
1. If bootstrap is incomplete, run `trackops opera handoff --print`.
|
|
25
|
+
2. If discovery artifacts already exist, run `trackops opera bootstrap --resume`.
|
|
26
|
+
3. If operational docs drift, run `trackops sync`.
|
|
27
|
+
4. If managed artifacts drift, run `trackops opera upgrade --stable`.
|
|
28
|
+
|
|
29
|
+
## Exit criteria
|
|
30
|
+
|
|
31
|
+
- Runtime status is readable.
|
|
32
|
+
- OPERA status is readable.
|
|
33
|
+
- Contract and policy files exist.
|
|
34
|
+
- No critical blocker remains undocumented.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# Project Agent: {{PROJECT_NAME}}
|
|
2
|
+
|
|
3
|
+
## Identity
|
|
4
|
+
You are the primary agent for **{{PROJECT_NAME}}**. You operate under the O.P.E.R.A. v3.0 protocol.
|
|
5
|
+
|
|
6
|
+
## Source of Truth
|
|
7
|
+
Your machine source of truth is `ops/contract/operating-contract.json`.
|
|
8
|
+
Your compiled human view is `ops/genesis.md`.
|
|
9
|
+
For operational tracking and backlog state, use `ops/project_control.json`.
|
|
10
|
+
|
|
11
|
+
## Behavior
|
|
12
|
+
- Follow the rules defined in `ops/contract/operating-contract.json` and reflected in `ops/genesis.md`.
|
|
13
|
+
- Respect `ops/policy/autonomy.json` to determine which actions are allowed without approval.
|
|
14
|
+
- Manage tasks and states from `ops/project_control.json`.
|
|
15
|
+
- Do not edit `ops/task_plan.md`, `ops/progress.md`, or `ops/findings.md` manually; regenerate them with `trackops sync`.
|
|
16
|
+
|
|
17
|
+
## Available Skills
|
|
18
|
+
Check `ops/.agents/skills/_registry.md` to see installed skills.
|
|
19
|
+
You can also discover new skills with `trackops skill catalog`.
|
|
20
|
+
|
|
21
|
+
## Work Cycle
|
|
22
|
+
1. Run `trackops status` at the beginning of each work block.
|
|
23
|
+
2. Read `ops/contract/operating-contract.json` and `ops/genesis.md` to understand the contract and its human view.
|
|
24
|
+
3. Use `trackops next` to inspect the prioritized queue.
|
|
25
|
+
4. Before implementing, mark the task with `trackops task start <task-id>`.
|
|
26
|
+
5. Use the router in `ops/.agent/hub/router.md` to choose the right skill.
|
|
27
|
+
6. When you finish, move the task to `review`, `complete`, or `block`, then run `trackops sync`.
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# Dependency Graph
|
|
2
|
+
|
|
3
|
+
```mermaid
|
|
4
|
+
flowchart TD
|
|
5
|
+
A[Global runtime bootstrap] --> B[trackops init]
|
|
6
|
+
B --> C[trackops opera install]
|
|
7
|
+
C --> D{Routing}
|
|
8
|
+
D -->|direct_cli| E[Direct intake]
|
|
9
|
+
D -->|agent_handoff| F[agent-handoff.md/json]
|
|
10
|
+
F --> G[intake.json + spec-dossier.md]
|
|
11
|
+
E --> H[quality-report.json]
|
|
12
|
+
G --> H
|
|
13
|
+
H --> I[operating-contract.json]
|
|
14
|
+
I --> J[genesis.md]
|
|
15
|
+
I --> K[task_plan.md / progress.md / findings.md]
|
|
16
|
+
I --> L[dashboard + API state]
|
|
17
|
+
I --> M[env sync + policy enforcement]
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Notes
|
|
21
|
+
|
|
22
|
+
- `ops/project_control.json` is the operational source of truth for backlog and session state.
|
|
23
|
+
- `ops/contract/operating-contract.json` is the machine contract.
|
|
24
|
+
- `ops/genesis.md` is a compiled human view.
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# SOP - Runtime Automation
|
|
2
|
+
|
|
3
|
+
## Objective
|
|
4
|
+
|
|
5
|
+
Keep validation automatic on every relevant change.
|
|
6
|
+
|
|
7
|
+
## Trigger policy
|
|
8
|
+
|
|
9
|
+
- Validate on push to `develop` and `master`.
|
|
10
|
+
- Validate on pull requests targeting `develop` or `master`.
|
|
11
|
+
- Allow manual execution with workflow dispatch.
|
|
12
|
+
|
|
13
|
+
## Validation circuit
|
|
14
|
+
|
|
15
|
+
1. Install Node 18 and 20.
|
|
16
|
+
2. Install runtime dependencies.
|
|
17
|
+
3. Run `npm run release:check`.
|
|
18
|
+
4. Fail fast on any smoke, skill or packaging regression.
|
|
19
|
+
|
|
20
|
+
## Release hygiene
|
|
21
|
+
|
|
22
|
+
- Do not publish if `release:check` fails.
|
|
23
|
+
- Do not treat local runtime state as deployable proof.
|
|
24
|
+
- Re-run smoke after structural or locale changes.
|