@geraldmaron/construct 1.0.6 โ 1.0.8
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 +39 -34
- package/bin/construct +1403 -96
- package/commands/build/feature.md +1 -1
- package/commands/build/fix.md +1 -1
- package/commands/design/access.md +1 -1
- package/commands/design/flow.md +1 -1
- package/commands/design/ui.md +1 -1
- package/commands/measure/experiment.md +1 -1
- package/commands/measure/metrics.md +1 -1
- package/commands/measure/results.md +1 -1
- package/commands/plan/api.md +1 -1
- package/commands/plan/challenge.md +1 -1
- package/commands/plan/decide.md +1 -1
- package/commands/plan/feature.md +1 -1
- package/commands/plan/requirements.md +1 -1
- package/commands/remember/context.md +1 -1
- package/commands/remember/handoff.md +1 -1
- package/commands/remember/runbook.md +1 -1
- package/commands/review/code.md +1 -1
- package/commands/review/quality.md +1 -1
- package/commands/review/security.md +1 -1
- package/commands/ship/ready.md +1 -1
- package/commands/ship/release.md +1 -1
- package/commands/ship/status.md +1 -1
- package/commands/understand/docs.md +1 -1
- package/commands/understand/this.md +1 -1
- package/commands/understand/why.md +1 -1
- package/commands/work/clean.md +1 -1
- package/commands/work/drive.md +1 -1
- package/commands/work/optimize-prompts.md +2 -2
- package/commands/work/parallel-review.md +1 -1
- package/db/schema/007_tags.sql +30 -0
- package/db/schema/008_skill_usage.sql +24 -0
- package/db/schema/009_scheduler.sql +14 -0
- package/examples/internal/roles/architect/bad/clever-plan-without-contracts.md +1 -1
- package/examples/internal/roles/architect/golden/explicit-tradeoff-before-plan.md +1 -1
- package/examples/internal/roles/engineer/bad/speculative-abstraction.md +1 -1
- package/examples/internal/roles/engineer/golden/read-before-write.md +1 -1
- package/examples/internal/roles/qa/bad/coverage-theater.md +1 -1
- package/examples/internal/roles/qa/golden/regression-gate.md +1 -1
- package/examples/seed-observations/decisions.md +1 -1
- package/lib/audit-skills.mjs +3 -3
- package/lib/auto-docs.mjs +8 -8
- package/lib/boundary.mjs +126 -0
- package/lib/cache-strategy-google.js +26 -31
- package/lib/cli-commands.mjs +276 -122
- package/lib/comment-lint.mjs +139 -1
- package/lib/completions.mjs +1 -1
- package/lib/config/schema.mjs +15 -1
- package/lib/contracts/validate.mjs +371 -0
- package/lib/daemons/contract.mjs +210 -0
- package/lib/distill.mjs +22 -4
- package/lib/doc-stamp.mjs +48 -0
- package/lib/docs-verify.mjs +59 -6
- package/lib/doctor/cli.mjs +16 -1
- package/lib/doctor/index.mjs +3 -1
- package/lib/doctor/watchers/consistency.mjs +360 -0
- package/lib/doctor/watchers/mcp-protocol.mjs +232 -0
- package/lib/document-extract.mjs +420 -17
- package/lib/document-ingest.mjs +2 -0
- package/lib/embed/cli.mjs +124 -3
- package/lib/embed/daemon.mjs +43 -4
- package/lib/embed/docs-lifecycle.mjs +1 -1
- package/lib/embed/inbox.mjs +50 -3
- package/lib/embed/role-framing.mjs +3 -3
- package/lib/embed/scheduler.mjs +33 -5
- package/lib/env-config.mjs +9 -3
- package/lib/evaluator-optimizer.mjs +2 -3
- package/lib/extractors/calendar.mjs +173 -0
- package/lib/extractors/shared/drop-info.mjs +22 -0
- package/lib/extractors/transcript.mjs +0 -0
- package/lib/gates-audit.mjs +8 -2
- package/lib/git-hooks/prepare-commit-msg +1 -1
- package/lib/headhunt.mjs +2 -2
- package/lib/hooks/agent-tracker.mjs +6 -11
- package/lib/hooks/comment-lint.mjs +16 -0
- package/lib/hooks/guard-bash.mjs +35 -14
- package/lib/hooks/mcp-audit.mjs +14 -1
- package/lib/hooks/pre-compact.mjs +92 -5
- package/lib/hooks/pre-push-gate.mjs +41 -8
- package/lib/hooks/proactive-activation.mjs +0 -14
- package/lib/hooks/registry-sync.mjs +2 -2
- package/lib/hooks/rule-verifier.mjs +217 -0
- package/lib/hooks/session-optimize.mjs +2 -1
- package/lib/hooks/stop-notify.mjs +7 -6
- package/lib/host-capabilities.mjs +10 -1
- package/lib/hygiene/scan.mjs +141 -0
- package/lib/init-unified.mjs +73 -65
- package/lib/install/stage-project.mjs +4 -4
- package/lib/intake/classify.mjs +309 -58
- package/lib/intake/daemon.mjs +121 -0
- package/lib/intake/filesystem-queue.mjs +31 -6
- package/lib/intake/intake-config.mjs +2 -1
- package/lib/intake/postgres-queue.mjs +45 -3
- package/lib/intake/prepare.mjs +3 -1
- package/lib/intake/quarantine.mjs +205 -0
- package/lib/intake/session-prelude.mjs +7 -1
- package/lib/intake/traceability.mjs +90 -0
- package/lib/knowledge/postgres-search.mjs +132 -0
- package/lib/knowledge/research-store.mjs +2 -0
- package/lib/knowledge/search.mjs +14 -4
- package/lib/maintenance/cleanup.mjs +315 -0
- package/lib/mcp/memory-bridge.mjs +276 -0
- package/lib/mcp/server.mjs +11 -3
- package/lib/mcp/tools/skills.mjs +32 -11
- package/lib/mcp/tools/workflow.mjs +25 -0
- package/lib/mcp-catalog.json +12 -8
- package/lib/mcp-platform-config.mjs +16 -8
- package/lib/migrations/index.mjs +106 -0
- package/lib/migrations/v1-baseline.mjs +33 -0
- package/lib/model-registry.mjs +1 -1
- package/lib/observation-store.mjs +9 -4
- package/lib/opencode-runtime-plugin.mjs +1 -1
- package/lib/orchestration-policy.mjs +4 -4
- package/lib/outcomes/record.mjs +2 -0
- package/lib/overrides/resolver.mjs +3 -3
- package/lib/parity.mjs +4 -4
- package/lib/policy/engine.mjs +2 -2
- package/lib/profiles/lifecycle.mjs +1 -1
- package/lib/profiles/rebrand.mjs +46 -0
- package/lib/project-init-shared.mjs +12 -0
- package/lib/prompt-metadata.mjs +4 -4
- package/lib/provider-capabilities.js +20 -7
- package/lib/providers/auth-manager.mjs +58 -17
- package/lib/providers/circuit-breaker.mjs +14 -0
- package/lib/providers/contract.mjs +67 -3
- package/lib/providers/creds.mjs +219 -0
- package/lib/providers/scaffold.mjs +107 -0
- package/lib/reflect.mjs +49 -12
- package/lib/role-preload.mjs +5 -0
- package/lib/roles/catalog.mjs +1 -1
- package/lib/roles/manifest.mjs +2 -2
- package/lib/scheduler/index.mjs +112 -0
- package/lib/scheduler/solo.mjs +183 -0
- package/lib/server/index.mjs +29 -29
- package/lib/server/insights.mjs +14 -12
- package/lib/server/langfuse-login.mjs +58 -0
- package/lib/server/static/assets/index-ab25c707.js +1 -1
- package/lib/session-store.mjs +6 -4
- package/lib/setup.mjs +14 -3
- package/lib/{agent-contracts-enforce.mjs โ specialist-contracts-enforce.mjs} +4 -4
- package/lib/{agent-contracts.mjs โ specialist-contracts.mjs} +9 -8
- package/lib/{agents โ specialists}/postconditions.mjs +3 -3
- package/lib/{agents โ specialists}/schema.mjs +6 -6
- package/lib/status.mjs +13 -11
- package/lib/storage/backup.mjs +2 -2
- package/lib/tags/lifecycle.mjs +278 -0
- package/lib/tags/vocabulary.mjs +140 -0
- package/lib/telemetry/client.mjs +5 -1
- package/lib/telemetry/otel-tracer.mjs +184 -0
- package/lib/telemetry/skill-calls.mjs +73 -12
- package/lib/uninstall/uninstall.mjs +1 -1
- package/lib/update.mjs +1 -1
- package/lib/validator.mjs +57 -56
- package/lib/version.mjs +51 -0
- package/lib/worker/trace.mjs +5 -1
- package/lib/workflows/instantiate.mjs +320 -0
- package/package.json +16 -3
- package/personas/construct.md +5 -3
- package/platforms/claude/CLAUDE.md +1 -1
- package/rules/common/development-workflow.md +2 -1
- package/rules/common/no-fabrication.md +69 -0
- package/rules/common/review-before-change.md +58 -0
- package/scripts/{sync-agents.mjs โ sync-specialists.mjs} +171 -68
- package/skills/ai/prompt-optimizer.md +3 -3
- package/skills/exploration/dependency-graph-reading.md +98 -0
- package/skills/exploration/tracer-bullet-method.md +71 -0
- package/skills/exploration/unknown-codebase-onboarding.md +91 -0
- package/skills/operating/change-management.md +91 -0
- package/skills/operating/incident-response.md +75 -0
- package/skills/operating/oncall-rotation.md +95 -0
- package/skills/operating/orchestration-reference.md +2 -2
- package/skills/strategy/competitive-landscape.md +75 -0
- package/skills/strategy/market-research-methods.md +87 -0
- package/skills/strategy/narrative-arc.md +77 -0
- package/skills/strategy/pricing-positioning.md +94 -0
- package/specialists/contracts.json +1002 -0
- package/specialists/contracts.schema.json +83 -0
- package/specialists/policy-inventory.json +160 -0
- package/{agents โ specialists}/prompts/cx-accessibility.md +3 -1
- package/{agents โ specialists}/prompts/cx-ai-engineer.md +3 -1
- package/{agents โ specialists}/prompts/cx-architect.md +3 -1
- package/{agents โ specialists}/prompts/cx-business-strategist.md +3 -1
- package/{agents โ specialists}/prompts/cx-data-analyst.md +3 -1
- package/{agents โ specialists}/prompts/cx-data-engineer.md +3 -1
- package/{agents โ specialists}/prompts/cx-debugger.md +3 -1
- package/{agents โ specialists}/prompts/cx-designer.md +3 -1
- package/{agents โ specialists}/prompts/cx-devil-advocate.md +3 -1
- package/{agents โ specialists}/prompts/cx-docs-keeper.md +4 -2
- package/{agents โ specialists}/prompts/cx-engineer.md +4 -2
- package/{agents โ specialists}/prompts/cx-evaluator.md +3 -1
- package/{agents โ specialists}/prompts/cx-explorer.md +3 -1
- package/{agents โ specialists}/prompts/cx-legal-compliance.md +3 -1
- package/{agents โ specialists}/prompts/cx-operations.md +3 -1
- package/{agents โ specialists}/prompts/cx-orchestrator.md +4 -2
- package/{agents โ specialists}/prompts/cx-platform-engineer.md +3 -1
- package/{agents โ specialists}/prompts/cx-product-manager.md +3 -1
- package/{agents โ specialists}/prompts/cx-qa.md +3 -1
- package/{agents โ specialists}/prompts/cx-rd-lead.md +3 -1
- package/{agents โ specialists}/prompts/cx-release-manager.md +3 -1
- package/{agents โ specialists}/prompts/cx-researcher.md +3 -1
- package/{agents โ specialists}/prompts/cx-reviewer.md +4 -2
- package/{agents โ specialists}/prompts/cx-security.md +3 -1
- package/{agents โ specialists}/prompts/cx-sre.md +4 -2
- package/{agents โ specialists}/prompts/cx-test-automation.md +3 -1
- package/{agents โ specialists}/prompts/cx-trace-reviewer.md +5 -3
- package/{agents โ specialists}/prompts/cx-ux-researcher.md +3 -1
- package/{agents โ specialists}/registry.json +651 -418
- package/{agents โ specialists}/role-manifests.json +8 -8
- package/templates/docs/construct_guide.md +6 -6
- package/templates/docs/skill-artifact.md +1 -1
- package/templates/provider-scaffold/health.test.mjs +30 -0
- package/templates/provider-scaffold/index.mjs +48 -0
- package/templates/workflows/cross-team-handoff.yml +85 -0
- package/templates/workflows/engineering-onboarding.yml +77 -0
- package/templates/workflows/new-feature.yml +53 -0
- package/agents/contracts.json +0 -387
- /package/{agents โ specialists}/teams.json +0 -0
|
@@ -1,17 +1,34 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* lib/cache-strategy-google.js โ Google Gemini cache strategy.
|
|
2
|
+
* lib/cache-strategy-google.js โ Google Gemini cache strategy (agnostic skeleton).
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
4
|
+
* Gemini uses a resource-based cachedContent API rather than per-message
|
|
5
|
+
* annotations. Construct does not own that integration: this module exposes
|
|
6
|
+
* the same surface as the other cache-strategy adapters and resolves cached
|
|
7
|
+
* resources via a pluggable resolver. The default resolver returns null
|
|
8
|
+
* (no cached resource), which is the safe agnostic default โ callers will
|
|
9
|
+
* fall through to a fresh request. Provider plugins or operators can register
|
|
10
|
+
* a resolver via `setCachedContentResolver` to enable resource caching.
|
|
7
11
|
*/
|
|
8
12
|
import { estimateTokens } from './token-engine.js';
|
|
9
13
|
|
|
10
14
|
const GEMINI_CACHE_ENDPOINT = 'https://generativelanguage.googleapis.com/v1';
|
|
11
15
|
|
|
16
|
+
let cachedContentResolver = null;
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Register a resolver responsible for producing a cachedContent resource name
|
|
20
|
+
* for a given system prompt. Contract:
|
|
21
|
+
* resolver({ systemText, caps, apiKey, modelId }) -> Promise<string|null>
|
|
22
|
+
* Returning null means no cached resource is available; the annotation is
|
|
23
|
+
* omitted and the request proceeds without a cached prefix.
|
|
24
|
+
*/
|
|
25
|
+
export function setCachedContentResolver(resolver) {
|
|
26
|
+
cachedContentResolver = typeof resolver === 'function' ? resolver : null;
|
|
27
|
+
}
|
|
28
|
+
|
|
12
29
|
/**
|
|
13
|
-
* Annotate prompt structure for Google Gemini models.
|
|
14
|
-
*
|
|
30
|
+
* Annotate prompt structure for Google Gemini models. Returns the shared
|
|
31
|
+
* annotation shape that every cache-strategy adapter emits.
|
|
15
32
|
*
|
|
16
33
|
* @param {object} promptStructure - { system, messages }
|
|
17
34
|
* @param {object} caps - Provider capabilities
|
|
@@ -22,12 +39,10 @@ export async function annotate(promptStructure, caps, { apiKey, modelId } = {})
|
|
|
22
39
|
const { system, messages } = promptStructure || {};
|
|
23
40
|
|
|
24
41
|
let cachedContentName = null;
|
|
25
|
-
|
|
26
|
-
if (apiKey && system) {
|
|
42
|
+
if (cachedContentResolver && apiKey && system) {
|
|
27
43
|
try {
|
|
28
|
-
cachedContentName = await
|
|
29
|
-
} catch
|
|
30
|
-
}
|
|
44
|
+
cachedContentName = await cachedContentResolver({ systemText: system, caps, apiKey, modelId });
|
|
45
|
+
} catch { /* resolver failure is non-fatal โ fall through with no annotation */ }
|
|
31
46
|
}
|
|
32
47
|
|
|
33
48
|
return {
|
|
@@ -49,26 +64,6 @@ export async function annotate(promptStructure, caps, { apiKey, modelId } = {})
|
|
|
49
64
|
};
|
|
50
65
|
}
|
|
51
66
|
|
|
52
|
-
async function createCachedContent(systemText, caps, apiKey, modelId) {
|
|
53
|
-
// POST to https://generativelanguage.googleapis.com/v1/cachedContents
|
|
54
|
-
// Body: { model: 'gemini-1.5-pro', contents: [{ parts: [{ text: systemText }] }] }
|
|
55
|
-
// Returns: { name: 'cachedContents/abc123' }
|
|
56
|
-
|
|
57
|
-
const model = extractModelName(modelId);
|
|
58
|
-
const url = `${GEMINI_CACHE_ENDPOINT}/cachedContents?key=${apiKey}`;
|
|
59
|
-
|
|
60
|
-
// This is async but we don't want to block dispatch
|
|
61
|
-
// In production, this should be pre-cached
|
|
62
|
-
// For now, return null (defer to Phase C follow-up with live probing)
|
|
63
|
-
return null;
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
function extractModelName(modelId) {
|
|
67
|
-
const id = String(modelId || '').toLowerCase();
|
|
68
|
-
const match = id.match(/google\/(gemini-[^\/]+)/);
|
|
69
|
-
return match ? match[1] : 'gemini-1.5-pro';
|
|
70
|
-
}
|
|
71
|
-
|
|
72
67
|
export async function capabilities() {
|
|
73
68
|
return {
|
|
74
69
|
supportsAnnotations: false,
|
package/lib/cli-commands.mjs
CHANGED
|
@@ -199,14 +199,6 @@ export const CLI_COMMANDS = [
|
|
|
199
199
|
{ name: 'update', desc: 'Regenerate AUTO-managed regions' },
|
|
200
200
|
],
|
|
201
201
|
},
|
|
202
|
-
{
|
|
203
|
-
name: 'models',
|
|
204
|
-
emoji: '๐ง ',
|
|
205
|
-
category: 'Core',
|
|
206
|
-
core: true,
|
|
207
|
-
description: 'Manage AI model assignments',
|
|
208
|
-
usage: 'construct models [--apply|--poll]',
|
|
209
|
-
},
|
|
210
202
|
{
|
|
211
203
|
name: 'doctor',
|
|
212
204
|
emoji: '๐ฉบ',
|
|
@@ -273,145 +265,251 @@ export const CLI_COMMANDS = [
|
|
|
273
265
|
description: 'Task graph management',
|
|
274
266
|
usage: 'construct graph list|show|from-intake',
|
|
275
267
|
},
|
|
268
|
+
|
|
269
|
+
// โโ Models & Integrations โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
|
276
270
|
{
|
|
277
|
-
name: '
|
|
278
|
-
emoji: '
|
|
279
|
-
category: '
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
},
|
|
292
|
-
{
|
|
293
|
-
name: 'drop',
|
|
294
|
-
emoji: '๐ฅ',
|
|
295
|
-
category: 'Work',
|
|
296
|
-
core: false,
|
|
297
|
-
description: 'Ingest file from Downloads/Desktop',
|
|
298
|
-
usage: 'construct drop [--list]',
|
|
299
|
-
},
|
|
300
|
-
{
|
|
301
|
-
name: 'wireframe',
|
|
302
|
-
emoji: 'โ๏ธ',
|
|
303
|
-
category: 'Work',
|
|
304
|
-
core: false,
|
|
305
|
-
description: 'Generate wireframes from description',
|
|
306
|
-
usage: 'construct wireframe "<description>"',
|
|
307
|
-
},
|
|
308
|
-
{
|
|
309
|
-
name: 'bootstrap',
|
|
310
|
-
emoji: '๐ฑ',
|
|
311
|
-
category: 'Work',
|
|
312
|
-
core: false,
|
|
313
|
-
description: 'Import seed observations',
|
|
314
|
-
usage: 'construct bootstrap',
|
|
315
|
-
},
|
|
316
|
-
{
|
|
317
|
-
name: 'team',
|
|
318
|
-
emoji: '๐ฅ',
|
|
319
|
-
category: 'Work',
|
|
320
|
-
core: false,
|
|
321
|
-
description: 'Team review and templates',
|
|
322
|
-
usage: 'construct team review|templates',
|
|
271
|
+
name: 'models',
|
|
272
|
+
emoji: '๐ง ',
|
|
273
|
+
category: 'Models & Integrations',
|
|
274
|
+
description: 'Show or update model tier assignments',
|
|
275
|
+
usage: 'construct models [--poll|--apply|--reset|--tier=TIER|--set=MODEL|--prefer-free|--prefer-free-same-family]',
|
|
276
|
+
options: [
|
|
277
|
+
{ flag: '--poll', desc: 'Query OpenRouter for currently free models' },
|
|
278
|
+
{ flag: '--apply', desc: 'Auto-apply best free models and sync' },
|
|
279
|
+
{ flag: '--reset', desc: 'Remove model overrides, restore defaults' },
|
|
280
|
+
{ flag: '--tier=TIER', desc: 'Target tier: reasoning | standard | fast' },
|
|
281
|
+
{ flag: '--set=MODEL_ID',desc: 'Set specific model for the tier' },
|
|
282
|
+
{ flag: '--prefer-free', desc: 'When inferring sibling tiers, prefer free models where possible' },
|
|
283
|
+
{ flag: '--prefer-free-same-family', desc: 'Prefer free siblings only when they stay in the same provider family' },
|
|
284
|
+
],
|
|
323
285
|
},
|
|
324
|
-
|
|
325
|
-
// โโ Integrations โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
|
326
286
|
{
|
|
327
287
|
name: 'mcp',
|
|
328
288
|
emoji: '๐',
|
|
329
|
-
category: 'Integrations',
|
|
330
|
-
core: false,
|
|
289
|
+
category: 'Models & Integrations',
|
|
331
290
|
description: 'Manage MCP integrations',
|
|
332
|
-
usage: 'construct mcp list|add|remove',
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
description: 'Manage local Ollama models',
|
|
340
|
-
usage: 'construct ollama status|pull|test',
|
|
291
|
+
usage: 'construct mcp <list|add|remove|info> [name]',
|
|
292
|
+
subcommands: [
|
|
293
|
+
{ name: 'list', desc: 'Show all MCP integrations and status' },
|
|
294
|
+
{ name: 'add', desc: 'Add an MCP integration interactively' },
|
|
295
|
+
{ name: 'remove', desc: 'Remove an MCP integration' },
|
|
296
|
+
{ name: 'info', desc: 'Show setup details for an integration' },
|
|
297
|
+
],
|
|
341
298
|
},
|
|
342
299
|
{
|
|
343
300
|
name: 'plugin',
|
|
344
301
|
emoji: '๐งฉ',
|
|
345
|
-
category: 'Integrations',
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
302
|
+
category: 'Models & Integrations',
|
|
303
|
+
description: 'Manage external Construct plugin manifests',
|
|
304
|
+
usage: 'construct plugin <list|info|validate|init> [name]',
|
|
305
|
+
subcommands: [
|
|
306
|
+
{ name: 'list', desc: 'Show loaded plugins and manifest sources' },
|
|
307
|
+
{ name: 'info', desc: 'Show details for a plugin' },
|
|
308
|
+
{ name: 'validate', desc: 'Validate all discovered plugin manifests' },
|
|
309
|
+
{ name: 'init', desc: 'Create a starter plugin manifest in .cx/plugins/' },
|
|
310
|
+
],
|
|
349
311
|
},
|
|
350
312
|
{
|
|
351
313
|
name: 'hosts',
|
|
352
314
|
emoji: '๐ฅ๏ธ',
|
|
353
|
-
category: 'Integrations',
|
|
354
|
-
|
|
355
|
-
description: 'Check host capabilities',
|
|
315
|
+
category: 'Models & Integrations',
|
|
316
|
+
description: 'Show host support for Construct orchestration',
|
|
356
317
|
usage: 'construct hosts',
|
|
357
318
|
},
|
|
358
319
|
{
|
|
359
320
|
name: 'claude:allow',
|
|
360
321
|
emoji: '๐',
|
|
361
|
-
category: 'Integrations',
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
322
|
+
category: 'Models & Integrations',
|
|
323
|
+
description: 'Manage Claude Code `permissions.allow` from the outside (auto-classifier blocks the agent from editing it)',
|
|
324
|
+
usage: 'construct claude:allow <list|add|remove|check> [pattern...] [--apply]',
|
|
325
|
+
subcommands: [
|
|
326
|
+
{ name: 'list', desc: 'Print every allowlist entry' },
|
|
327
|
+
{ name: 'add', desc: 'Add one or more patterns (idempotent)' },
|
|
328
|
+
{ name: 'remove', desc: 'Remove patterns' },
|
|
329
|
+
{ name: 'check', desc: 'Detect branch-prefix gaps; `--apply` writes the suggestions' },
|
|
330
|
+
],
|
|
365
331
|
},
|
|
366
|
-
|
|
332
|
+
|
|
367
333
|
// โโ Observability โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
|
368
334
|
{
|
|
369
|
-
name: '
|
|
370
|
-
emoji: '
|
|
335
|
+
name: 'review',
|
|
336
|
+
emoji: '๐',
|
|
371
337
|
category: 'Observability',
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
338
|
+
description: 'Generate agent performance review from Langfuse trace backend',
|
|
339
|
+
usage: 'construct review [--days=N] [--agent=NAME] [--schedule]',
|
|
340
|
+
options: [
|
|
341
|
+
{ flag: '--days=N', desc: 'Review window in days (default: 30)' },
|
|
342
|
+
{ flag: '--agent=NAME', desc: 'Filter to a specific agent' },
|
|
343
|
+
{ flag: '--out=PATH', desc: 'Output directory' },
|
|
344
|
+
{ flag: '--json-only', desc: 'Write raw JSON only, skip markdown report' },
|
|
345
|
+
{ flag: '--schedule', desc: 'Schedule automatic weekly reviews' },
|
|
346
|
+
{ flag: '--cadence=CRON',desc: 'Cron expression for --schedule (default: Monday 9am)' },
|
|
347
|
+
],
|
|
375
348
|
},
|
|
376
349
|
{
|
|
377
|
-
name: '
|
|
378
|
-
emoji: '
|
|
350
|
+
name: 'optimize',
|
|
351
|
+
emoji: 'โ๏ธ',
|
|
379
352
|
category: 'Observability',
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
353
|
+
description: 'Prompt optimization using Langfuse trace quality scores',
|
|
354
|
+
usage: 'construct optimize <agent> [--dry-run] [--list]',
|
|
355
|
+
options: [
|
|
356
|
+
{ flag: '--dry-run', desc: 'Preview changes without applying' },
|
|
357
|
+
{ flag: '--list', desc: 'Show all agents with quality scores' },
|
|
358
|
+
{ flag: '--threshold=N', desc: 'Quality threshold to trigger optimization (default: 0.7)' },
|
|
359
|
+
{ flag: '--days=N', desc: 'Trace window in days (default: 7)' },
|
|
360
|
+
{ flag: '--min-traces=N', desc: 'Minimum traces required (default: 20)' },
|
|
361
|
+
],
|
|
383
362
|
},
|
|
384
363
|
{
|
|
385
|
-
name: '
|
|
386
|
-
emoji: '
|
|
364
|
+
name: 'telemetry-backfill',
|
|
365
|
+
emoji: '๐ฉน',
|
|
387
366
|
category: 'Observability',
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
367
|
+
description: 'Backfill sparse traces with observations (trace backend)',
|
|
368
|
+
usage: 'construct telemetry-backfill [--limit=N]',
|
|
369
|
+
options: [
|
|
370
|
+
{ flag: '--limit=N', desc: 'Maximum sparse traces to backfill (default: 10)' },
|
|
371
|
+
{ flag: '--best-effort', desc: 'Skip failures instead of exiting non-zero' },
|
|
372
|
+
],
|
|
391
373
|
},
|
|
392
374
|
{
|
|
393
|
-
name: '
|
|
394
|
-
emoji: '
|
|
375
|
+
name: 'eval-datasets',
|
|
376
|
+
emoji: '๐',
|
|
395
377
|
category: 'Observability',
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
378
|
+
description: 'Sync scored Langfuse traces into eval datasets for prompt regression testing',
|
|
379
|
+
usage: 'construct eval-datasets [--limit=N]',
|
|
380
|
+
options: [
|
|
381
|
+
{ flag: '--limit=N', desc: 'Maximum scored traces to sync (default: 100)' },
|
|
382
|
+
],
|
|
383
|
+
},
|
|
384
|
+
{
|
|
385
|
+
name: 'llm-judge',
|
|
386
|
+
emoji: 'โ๏ธ',
|
|
387
|
+
category: 'Observability',
|
|
388
|
+
description: 'Run LLM-as-a-judge evaluations on unscored traces for continuous quality feedback',
|
|
389
|
+
usage: 'construct llm-judge [--limit=N] [--model=NAME]',
|
|
390
|
+
options: [
|
|
391
|
+
{ flag: '--limit=N', desc: 'Maximum traces to evaluate (default: 10)' },
|
|
392
|
+
{ flag: '--model=NAME', desc: 'LLM model to use for evaluation (default: claude-3-5-sonnet-20241022)' },
|
|
393
|
+
],
|
|
394
|
+
},
|
|
395
|
+
{
|
|
396
|
+
name: 'efficiency',
|
|
397
|
+
emoji: '๐งฎ',
|
|
398
|
+
category: 'Observability',
|
|
399
|
+
description: 'Show read efficiency, repeated files, and context-budget guidance',
|
|
400
|
+
usage: 'construct efficiency [--json]',
|
|
401
|
+
options: [
|
|
402
|
+
{ flag: '--json', desc: 'Output raw JSON' },
|
|
403
|
+
],
|
|
399
404
|
},
|
|
400
405
|
{
|
|
401
406
|
name: 'evals',
|
|
402
407
|
emoji: '๐งช',
|
|
403
408
|
category: 'Observability',
|
|
409
|
+
description: 'Show evaluator catalog for prompt and agent experiments',
|
|
410
|
+
usage: 'construct evals [--json]',
|
|
411
|
+
options: [
|
|
412
|
+
{ flag: '--json', desc: 'Output raw JSON' },
|
|
413
|
+
],
|
|
414
|
+
},
|
|
415
|
+
{
|
|
416
|
+
name: 'cleanup',
|
|
417
|
+
emoji: '๐งน',
|
|
418
|
+
category: 'Diagnostics',
|
|
419
|
+
description: 'Release dev-agent memory pressure by cleaning stale helper and bridge processes',
|
|
420
|
+
usage: 'construct cleanup [--pressure-release] [--quiet]',
|
|
421
|
+
options: [
|
|
422
|
+
{ flag: '--pressure-release', desc: 'Also terminate stale cass index processes when swap is above threshold' },
|
|
423
|
+
{ flag: '--quiet', desc: 'Suppress per-process output and only act on the current policy' },
|
|
424
|
+
],
|
|
425
|
+
},
|
|
426
|
+
|
|
427
|
+
// โโ Teams & Audit โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
|
428
|
+
{
|
|
429
|
+
name: 'team',
|
|
430
|
+
emoji: '๐ฅ',
|
|
431
|
+
category: 'Work',
|
|
432
|
+
description: 'Team review and template listing',
|
|
433
|
+
usage: 'construct team <review|templates>',
|
|
434
|
+
subcommands: [
|
|
435
|
+
{ name: 'review', desc: 'Run telemetry-backed team performance review' },
|
|
436
|
+
{ name: 'templates', desc: 'List available team templates from specialists/teams.json' },
|
|
437
|
+
],
|
|
438
|
+
},
|
|
439
|
+
{
|
|
440
|
+
name: 'audit',
|
|
441
|
+
emoji: '๐',
|
|
442
|
+
category: 'Diagnostics',
|
|
443
|
+
description: 'Audit Construct internals and review the mutation trail',
|
|
444
|
+
usage: 'construct audit <skills|trail>',
|
|
445
|
+
subcommands: [
|
|
446
|
+
{ name: 'skills', desc: 'Audit skill files for stub headers, broken references, and missing content' },
|
|
447
|
+
{ name: 'trail', desc: 'Show the append-only audit trail of every mutation (agent, task, file, hash). Supports --verify, --agent, --tool, --since, --json.' },
|
|
448
|
+
],
|
|
449
|
+
},
|
|
450
|
+
{
|
|
451
|
+
name: 'doc',
|
|
452
|
+
emoji: '๐',
|
|
453
|
+
category: 'Diagnostics',
|
|
454
|
+
description: 'Verify or inspect auditability stamps on Construct-generated markdown files',
|
|
455
|
+
usage: 'construct doc <verify|install-hooks> [path] [--json]',
|
|
456
|
+
subcommands: [
|
|
457
|
+
{ name: 'verify', desc: 'Check body_hash stamps on one file or all .md files under a path. Exits non-zero if any fail.' },
|
|
458
|
+
{ name: 'install-hooks', desc: 'Install the prepare-commit-msg git hook into .git/hooks/ for AI provenance trailers.' },
|
|
459
|
+
],
|
|
460
|
+
},
|
|
461
|
+
{
|
|
462
|
+
name: 'bootstrap',
|
|
463
|
+
emoji: '๐ฑ',
|
|
464
|
+
category: 'Work',
|
|
465
|
+
description: 'Import seed observation corpus into local memory store for cold-start acceleration',
|
|
466
|
+
usage: 'construct bootstrap [--verbose]',
|
|
467
|
+
options: [
|
|
468
|
+
{ flag: '--verbose', desc: 'Print each observation imported or skipped' },
|
|
469
|
+
],
|
|
470
|
+
},
|
|
471
|
+
{
|
|
472
|
+
name: 'reflect',
|
|
473
|
+
emoji: '๐ช',
|
|
474
|
+
category: 'Work',
|
|
475
|
+
description: 'Capture improvement feedback from chat session and update Construct core',
|
|
476
|
+
usage: 'construct reflect [--target=<internal|how-tos|decisions>] [--summary=<text>]',
|
|
477
|
+
options: [
|
|
478
|
+
{ flag: '--target=<internal|how-tos|decisions>', desc: 'Knowledge subdir to store feedback (default: internal)' },
|
|
479
|
+
{ flag: '--summary=<text>', desc: 'Brief summary of the improvement feedback' },
|
|
480
|
+
],
|
|
481
|
+
},
|
|
482
|
+
{
|
|
483
|
+
name: 'memory',
|
|
484
|
+
emoji: '๐ก',
|
|
485
|
+
category: 'Work',
|
|
404
486
|
core: false,
|
|
405
|
-
description: '
|
|
406
|
-
usage: 'construct
|
|
487
|
+
description: 'Inspect memory layer',
|
|
488
|
+
usage: 'construct memory stats|consolidate',
|
|
407
489
|
},
|
|
408
490
|
{
|
|
409
|
-
name: '
|
|
410
|
-
emoji: '
|
|
411
|
-
category: '
|
|
491
|
+
name: 'drop',
|
|
492
|
+
emoji: '๐ฅ',
|
|
493
|
+
category: 'Work',
|
|
494
|
+
core: false,
|
|
495
|
+
description: 'Ingest file from Downloads/Desktop',
|
|
496
|
+
usage: 'construct drop [--list]',
|
|
497
|
+
},
|
|
498
|
+
{
|
|
499
|
+
name: 'wireframe',
|
|
500
|
+
emoji: 'โ๏ธ',
|
|
501
|
+
category: 'Work',
|
|
502
|
+
core: false,
|
|
503
|
+
description: 'Generate wireframes from description',
|
|
504
|
+
usage: 'construct wireframe "<description>"',
|
|
505
|
+
},
|
|
506
|
+
{
|
|
507
|
+
name: 'ollama',
|
|
508
|
+
emoji: '๐ฆ',
|
|
509
|
+
category: 'Integrations',
|
|
412
510
|
core: false,
|
|
413
|
-
description: '
|
|
414
|
-
usage: 'construct
|
|
511
|
+
description: 'Manage local Ollama models',
|
|
512
|
+
usage: 'construct ollama status|pull|test',
|
|
415
513
|
},
|
|
416
514
|
|
|
417
515
|
// โโ Advanced (hidden by default) โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
|
@@ -487,14 +585,6 @@ export const CLI_COMMANDS = [
|
|
|
487
585
|
description: 'Embed mode management',
|
|
488
586
|
usage: 'construct embed start|stop|status',
|
|
489
587
|
},
|
|
490
|
-
{
|
|
491
|
-
name: 'audit',
|
|
492
|
-
emoji: '๐',
|
|
493
|
-
category: 'Advanced',
|
|
494
|
-
core: false,
|
|
495
|
-
description: 'Audit Construct internals',
|
|
496
|
-
usage: 'construct audit skills|trail',
|
|
497
|
-
},
|
|
498
588
|
{
|
|
499
589
|
name: 'backup',
|
|
500
590
|
emoji: '๐พ',
|
|
@@ -527,14 +617,6 @@ export const CLI_COMMANDS = [
|
|
|
527
617
|
description: 'Show version',
|
|
528
618
|
usage: 'construct version | construct --version',
|
|
529
619
|
},
|
|
530
|
-
{
|
|
531
|
-
name: 'cleanup',
|
|
532
|
-
emoji: '๐งน',
|
|
533
|
-
category: 'Advanced',
|
|
534
|
-
core: false,
|
|
535
|
-
description: 'Clean stale processes',
|
|
536
|
-
usage: 'construct cleanup',
|
|
537
|
-
},
|
|
538
620
|
{
|
|
539
621
|
name: 'skills',
|
|
540
622
|
emoji: '๐ฏ',
|
|
@@ -559,6 +641,30 @@ export const CLI_COMMANDS = [
|
|
|
559
641
|
description: 'Audit policy gates',
|
|
560
642
|
usage: 'construct gates:audit',
|
|
561
643
|
},
|
|
644
|
+
{
|
|
645
|
+
name: 'policy',
|
|
646
|
+
emoji: '๐',
|
|
647
|
+
category: 'Advanced',
|
|
648
|
+
core: false,
|
|
649
|
+
description: 'Show active policy gates with enforcement details',
|
|
650
|
+
usage: 'construct policy show',
|
|
651
|
+
options: [
|
|
652
|
+
{ flag: '--json', desc: 'Output as JSON' },
|
|
653
|
+
],
|
|
654
|
+
},
|
|
655
|
+
{
|
|
656
|
+
name: 'ci',
|
|
657
|
+
emoji: 'โ๏ธ',
|
|
658
|
+
category: 'Advanced',
|
|
659
|
+
core: false,
|
|
660
|
+
description: 'Local CI mirror: run CI jobs locally or view recent run status',
|
|
661
|
+
usage: 'construct ci <preview|status|list>',
|
|
662
|
+
options: [
|
|
663
|
+
{ flag: '--job=<name>', desc: 'Run a single CI job by id or name fragment' },
|
|
664
|
+
{ flag: '--list', desc: 'List all jobs without running them' },
|
|
665
|
+
{ flag: '--full', desc: 'Include Docker/Trivy steps (requires Docker daemon)' },
|
|
666
|
+
],
|
|
667
|
+
},
|
|
562
668
|
{
|
|
563
669
|
name: 'provider',
|
|
564
670
|
emoji: '๐',
|
|
@@ -575,6 +681,54 @@ export const CLI_COMMANDS = [
|
|
|
575
681
|
description: 'Check auth status',
|
|
576
682
|
usage: 'construct auth:status',
|
|
577
683
|
},
|
|
684
|
+
{
|
|
685
|
+
name: 'tags',
|
|
686
|
+
emoji: '๐ท',
|
|
687
|
+
category: 'Work',
|
|
688
|
+
core: false,
|
|
689
|
+
description: 'Manage the controlled tag vocabulary (propose, add, deprecate, audit)',
|
|
690
|
+
usage: 'construct tags <audit|propose|add|deprecate|archive|list|proposed>',
|
|
691
|
+
},
|
|
692
|
+
{
|
|
693
|
+
name: 'scheduler',
|
|
694
|
+
emoji: 'โฐ',
|
|
695
|
+
category: 'Advanced',
|
|
696
|
+
core: false,
|
|
697
|
+
description: 'Manage scheduled background jobs (tag-mining, doc-hygiene, skill-rollup)',
|
|
698
|
+
usage: 'construct scheduler <list|run|runner>',
|
|
699
|
+
},
|
|
700
|
+
{
|
|
701
|
+
name: 'creds',
|
|
702
|
+
emoji: '๐',
|
|
703
|
+
category: 'Integrations',
|
|
704
|
+
core: false,
|
|
705
|
+
description: 'Manage provider credentials (set, rotate, revoke, list)',
|
|
706
|
+
usage: 'construct creds <list|set|rotate|revoke|test>',
|
|
707
|
+
},
|
|
708
|
+
{
|
|
709
|
+
name: 'providers',
|
|
710
|
+
emoji: '๐',
|
|
711
|
+
category: 'Integrations',
|
|
712
|
+
core: false,
|
|
713
|
+
description: 'Provider status, circuit-breaker reset, and resource discovery',
|
|
714
|
+
usage: 'construct providers <status|discover>',
|
|
715
|
+
},
|
|
716
|
+
{
|
|
717
|
+
name: 'workflow',
|
|
718
|
+
emoji: '๐',
|
|
719
|
+
category: 'Work',
|
|
720
|
+
core: false,
|
|
721
|
+
description: 'Instantiate workflow templates (PRD-to-review chains, onboarding, handoffs)',
|
|
722
|
+
usage: 'construct workflow <list|show|new>',
|
|
723
|
+
},
|
|
724
|
+
{
|
|
725
|
+
name: 'telemetry',
|
|
726
|
+
emoji: '๐',
|
|
727
|
+
category: 'Observability',
|
|
728
|
+
core: false,
|
|
729
|
+
description: 'Query telemetry traces and latency data',
|
|
730
|
+
usage: 'construct telemetry query <latency|top-slow|errors|trace>',
|
|
731
|
+
},
|
|
578
732
|
];
|
|
579
733
|
|
|
580
734
|
/** Flat list of all top-level command names (for completions). */
|