@geraldmaron/construct 1.0.15 → 1.0.17
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 +19 -3
- package/bin/construct +376 -98
- package/bin/construct-postinstall.mjs +17 -2
- package/db/schema/010_cx_scores.sql +51 -0
- package/lib/cli-commands.mjs +333 -147
- package/lib/contracts/validate.mjs +20 -10
- package/lib/contracts/violation-log.mjs +27 -12
- package/lib/embedded-contract/audit.mjs +52 -0
- package/lib/embedded-contract/capability.mjs +179 -0
- package/lib/embedded-contract/contract-version.mjs +39 -0
- package/lib/embedded-contract/envelope.mjs +70 -0
- package/lib/embedded-contract/index.mjs +71 -0
- package/lib/embedded-contract/ingest.mjs +77 -0
- package/lib/embedded-contract/model-resolve.mjs +186 -0
- package/lib/embedded-contract/redaction.mjs +91 -0
- package/lib/embedded-contract/role-facts.mjs +66 -0
- package/lib/embedded-contract/triage.mjs +134 -0
- package/lib/embedded-contract/workflow-defs.mjs +125 -0
- package/lib/embedded-contract/workflow-invoke.mjs +218 -0
- package/lib/hooks/config-protection.mjs +12 -5
- package/lib/hooks/stop-notify.mjs +7 -0
- package/lib/init-unified.mjs +36 -26
- package/lib/install/first-invocation.mjs +5 -1
- package/lib/intake/classify.mjs +6 -0
- package/lib/intake/prepare.mjs +22 -4
- package/lib/intake/tables/rnd.mjs +33 -0
- package/lib/integrations/intake-integrations.mjs +28 -2
- package/lib/mcp/server.mjs +69 -0
- package/lib/mcp/tools/embedded-contract.mjs +77 -0
- package/lib/mcp/tools/telemetry.mjs +30 -0
- package/lib/model-router.mjs +40 -0
- package/lib/op-log.mjs +61 -0
- package/lib/orchestration-policy.mjs +15 -0
- package/lib/roles/catalog.mjs +26 -95
- package/lib/roles/gateway.mjs +30 -1
- package/lib/scheduler/index.mjs +24 -4
- package/lib/server/insights.mjs +12 -0
- package/lib/service-manager.mjs +33 -11
- package/lib/setup.mjs +73 -10
- package/lib/update.mjs +31 -3
- package/lib/upgrade.mjs +31 -4
- package/lib/validators/skills.mjs +21 -0
- package/package.json +9 -3
- package/personas/construct.md +2 -0
- package/platforms/claude/CLAUDE.md +43 -15
- package/scripts/sync-specialists.mjs +32 -5
- package/skills/ai/agent-dev.md +2 -0
- package/skills/ai/llm-security.md +2 -0
- package/skills/ai/ml-ops.md +2 -0
- package/skills/ai/orchestration-workflow.md +2 -0
- package/skills/ai/prompt-and-eval.md +2 -0
- package/skills/ai/prompt-optimizer.md +2 -0
- package/skills/ai/rag-system.md +2 -0
- package/skills/ai/trace-triage.md +36 -0
- package/skills/architecture/api-design.md +2 -0
- package/skills/architecture/caching.md +2 -0
- package/skills/architecture/cloud-native.md +2 -0
- package/skills/architecture/message-queue.md +2 -0
- package/skills/architecture/security-arch.md +2 -0
- package/skills/compliance/ai-disclosure.md +2 -0
- package/skills/compliance/data-privacy.md +2 -0
- package/skills/compliance/license-audit.md +2 -0
- package/skills/compliance/regulatory-review.md +2 -0
- package/skills/development/cpp.md +2 -0
- package/skills/development/go.md +2 -0
- package/skills/development/java.md +2 -0
- package/skills/development/kotlin.md +2 -0
- package/skills/development/mobile-crossplatform.md +2 -0
- package/skills/development/python.md +2 -0
- package/skills/development/rust.md +2 -0
- package/skills/development/shell.md +2 -0
- package/skills/development/swift.md +2 -0
- package/skills/development/typescript.md +2 -0
- package/skills/devops/ci-cd.md +2 -0
- package/skills/devops/containerization.md +2 -0
- package/skills/devops/cost-optimization.md +2 -0
- package/skills/devops/data-engineering.md +2 -0
- package/skills/devops/database.md +2 -0
- package/skills/devops/dependency-management.md +2 -0
- package/skills/devops/devsecops.md +2 -0
- package/skills/devops/git-workflow.md +2 -0
- package/skills/devops/incident-response.md +2 -0
- package/skills/devops/monorepo.md +2 -0
- package/skills/devops/observability.md +2 -0
- package/skills/devops/performance.md +2 -0
- package/skills/devops/testing.md +2 -0
- package/skills/docs/adr-workflow.md +2 -0
- package/skills/docs/backlog-proposal-workflow.md +2 -0
- package/skills/docs/customer-profile-workflow.md +2 -0
- package/skills/docs/document-ingest-workflow.md +2 -0
- package/skills/docs/evidence-ingest-workflow.md +2 -0
- package/skills/docs/init-docs.md +2 -0
- package/skills/docs/init-project.md +2 -0
- package/skills/docs/memo-and-decision-capture.md +45 -0
- package/skills/docs/prd-workflow.md +2 -0
- package/skills/docs/prfaq-workflow.md +2 -0
- package/skills/docs/product-intelligence-review.md +2 -0
- package/skills/docs/product-intelligence-workflow.md +2 -0
- package/skills/docs/product-signal-workflow.md +2 -0
- package/skills/docs/research-workflow.md +2 -0
- package/skills/docs/runbook-workflow.md +2 -0
- package/skills/docs/strategy-workflow.md +2 -0
- package/skills/docs/transcript-synthesis.md +43 -0
- package/skills/exploration/dependency-graph-reading.md +2 -0
- package/skills/exploration/repo-map.md +2 -0
- package/skills/exploration/tracer-bullet-method.md +2 -0
- package/skills/exploration/unknown-codebase-onboarding.md +2 -0
- package/skills/frameworks/django.md +2 -0
- package/skills/frameworks/nextjs.md +2 -0
- package/skills/frameworks/react.md +2 -0
- package/skills/frameworks/spring-boot.md +2 -0
- package/skills/frontend-design/accessibility.md +2 -0
- package/skills/frontend-design/component-patterns.md +2 -0
- package/skills/frontend-design/engineering.md +2 -0
- package/skills/frontend-design/screen-reader-testing.md +34 -0
- package/skills/frontend-design/state-management.md +2 -0
- package/skills/frontend-design/ui-aesthetics.md +2 -0
- package/skills/frontend-design/ux-principles.md +2 -0
- package/skills/operating/change-management.md +2 -0
- package/skills/operating/incident-response.md +2 -0
- package/skills/operating/oncall-rotation.md +2 -0
- package/skills/operating/orchestration-reference.md +2 -0
- package/skills/operating/raw-data-structuring.md +44 -0
- package/skills/operating/unstructured-triage.md +45 -0
- package/skills/quality-gates/premortem.md +37 -0
- package/skills/quality-gates/review-work.md +2 -0
- package/skills/quality-gates/verify-change.md +2 -0
- package/skills/quality-gates/verify-module.md +2 -0
- package/skills/quality-gates/verify-quality.md +2 -0
- package/skills/quality-gates/verify-security.md +2 -0
- package/skills/roles/architect.ai-systems.md +2 -0
- package/skills/roles/architect.data.md +2 -0
- package/skills/roles/architect.enterprise.md +2 -0
- package/skills/roles/architect.integration.md +2 -0
- package/skills/roles/architect.md +2 -0
- package/skills/roles/architect.platform.md +2 -0
- package/skills/roles/data-analyst.experiment.md +2 -0
- package/skills/roles/data-analyst.md +2 -0
- package/skills/roles/data-analyst.product-intelligence.md +2 -0
- package/skills/roles/data-analyst.product.md +2 -0
- package/skills/roles/data-analyst.telemetry.md +2 -0
- package/skills/roles/data-engineer.pipeline.md +2 -0
- package/skills/roles/data-engineer.vector-retrieval.md +2 -0
- package/skills/roles/data-engineer.warehouse.md +2 -0
- package/skills/roles/debugger.md +2 -0
- package/skills/roles/designer.accessibility.md +2 -0
- package/skills/roles/designer.md +2 -0
- package/skills/roles/engineer.ai.md +2 -0
- package/skills/roles/engineer.data.md +2 -0
- package/skills/roles/engineer.md +2 -0
- package/skills/roles/engineer.platform.md +2 -0
- package/skills/roles/operator.docs.md +2 -0
- package/skills/roles/operator.md +2 -0
- package/skills/roles/operator.release.md +2 -0
- package/skills/roles/operator.sre.md +2 -0
- package/skills/roles/orchestrator.md +2 -0
- package/skills/roles/product-manager.ai-product.md +2 -0
- package/skills/roles/product-manager.business-strategy.md +2 -0
- package/skills/roles/product-manager.enterprise.md +2 -0
- package/skills/roles/product-manager.growth.md +2 -0
- package/skills/roles/product-manager.md +2 -0
- package/skills/roles/product-manager.platform.md +2 -0
- package/skills/roles/product-manager.product.md +2 -0
- package/skills/roles/qa.ai-eval.md +2 -0
- package/skills/roles/qa.api-contract.md +2 -0
- package/skills/roles/qa.data-pipeline.md +2 -0
- package/skills/roles/qa.md +2 -0
- package/skills/roles/qa.test-automation.md +2 -0
- package/skills/roles/qa.web-ui.md +2 -0
- package/skills/roles/researcher.explorer.md +2 -0
- package/skills/roles/researcher.md +2 -0
- package/skills/roles/researcher.ux.md +2 -0
- package/skills/roles/reviewer.devil-advocate.md +2 -0
- package/skills/roles/reviewer.evaluator.md +2 -0
- package/skills/roles/reviewer.md +2 -0
- package/skills/roles/reviewer.trace.md +2 -0
- package/skills/roles/security.ai.md +2 -0
- package/skills/roles/security.appsec.md +2 -0
- package/skills/roles/security.cloud.md +2 -0
- package/skills/roles/security.legal-compliance.md +2 -0
- package/skills/roles/security.md +2 -0
- package/skills/roles/security.privacy.md +2 -0
- package/skills/roles/security.supply-chain.md +2 -0
- package/skills/security/blue-team.md +2 -0
- package/skills/security/code-audit.md +2 -0
- package/skills/security/pentest.md +2 -0
- package/skills/security/red-team.md +2 -0
- package/skills/security/threat-intel.md +2 -0
- package/skills/security/vuln-research.md +2 -0
- package/skills/strategy/competitive-landscape.md +2 -0
- package/skills/strategy/jobs-to-be-done.md +38 -0
- package/skills/strategy/market-research-methods.md +2 -0
- package/skills/strategy/narrative-arc.md +2 -0
- package/skills/strategy/pricing-positioning.md +2 -0
- package/skills/utility/clean-code.md +2 -0
- package/specialists/prompts/cx-engineer.md +1 -1
- package/specialists/registry.json +18 -9
- package/specialists/role-manifests.json +1 -1
|
@@ -34,6 +34,18 @@ const PKG_VERSION = (() => {
|
|
|
34
34
|
|
|
35
35
|
const log = (msg) => process.stdout.write(`[construct-postinstall] ${msg}\n`);
|
|
36
36
|
|
|
37
|
+
// Failures go to stderr as a prominent, actionable block so they are visible in
|
|
38
|
+
// npm output instead of scrolling past as a benign-looking line. The script
|
|
39
|
+
// stays exit-0 by design (see the staging catch): best-effort adapter staging
|
|
40
|
+
// must not hard-fail a consumer's `npm install` — the package is installed and
|
|
41
|
+
// usable, and `construct init` completes staging on demand.
|
|
42
|
+
|
|
43
|
+
const fail = (msg, hint) => {
|
|
44
|
+
process.stderr.write(`\n[construct-postinstall] WARNING: ${msg}\n`);
|
|
45
|
+
if (hint) process.stderr.write(`[construct-postinstall] -> ${hint}\n`);
|
|
46
|
+
process.stderr.write('\n');
|
|
47
|
+
};
|
|
48
|
+
|
|
37
49
|
if (process.env.CONSTRUCT_SKIP_POSTINSTALL === '1') {
|
|
38
50
|
log('skipping (CONSTRUCT_SKIP_POSTINSTALL=1)');
|
|
39
51
|
process.exit(0);
|
|
@@ -72,7 +84,7 @@ if (process.env.npm_config_global === 'true' || process.env.npm_config_global ==
|
|
|
72
84
|
stdio: 'inherit',
|
|
73
85
|
});
|
|
74
86
|
if (result.status !== 0) {
|
|
75
|
-
|
|
87
|
+
fail(`Global front-door sync failed (exit ${result.status}).`, 'Run `construct sync --global` to complete it.');
|
|
76
88
|
}
|
|
77
89
|
}
|
|
78
90
|
process.exit(0);
|
|
@@ -103,6 +115,9 @@ try {
|
|
|
103
115
|
log,
|
|
104
116
|
});
|
|
105
117
|
} catch (err) {
|
|
106
|
-
|
|
118
|
+
fail(`Adapter staging failed: ${err.message}`, 'The package is installed; run `npx construct init` in this project to complete setup.');
|
|
119
|
+
// Intentionally exit 0: staging is best-effort completion, and a non-zero exit
|
|
120
|
+
// here would fail the consumer's entire `npm install`. The failure is loud on
|
|
121
|
+
// stderr above and recoverable via `construct init`.
|
|
107
122
|
process.exit(0);
|
|
108
123
|
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
-- db/schema/010_cx_scores.sql — Per-trace quality score log + skill quality correlation view.
|
|
2
|
+
--
|
|
3
|
+
-- Backs `construct skills correlate-quality`. Producer: lib/mcp/tools/telemetry.mjs
|
|
4
|
+
-- cxScore() writes a row here when CONSTRUCT_DB_URL (or DATABASE_URL) is set.
|
|
5
|
+
-- Local JSONL/observation paths remain primary in solo mode; this table is
|
|
6
|
+
-- primary in team/enterprise mode where multiple agents share a session
|
|
7
|
+
-- timeline and the dashboard reads aggregate correlations.
|
|
8
|
+
|
|
9
|
+
create table if not exists construct_cx_scores (
|
|
10
|
+
id bigserial primary key,
|
|
11
|
+
ts timestamptz not null,
|
|
12
|
+
trace_id text not null,
|
|
13
|
+
session_id text,
|
|
14
|
+
agent_id text,
|
|
15
|
+
name text not null default 'quality',
|
|
16
|
+
value numeric not null,
|
|
17
|
+
comment text
|
|
18
|
+
);
|
|
19
|
+
|
|
20
|
+
create index if not exists construct_cx_scores_trace_idx
|
|
21
|
+
on construct_cx_scores (trace_id);
|
|
22
|
+
|
|
23
|
+
create index if not exists construct_cx_scores_session_ts_idx
|
|
24
|
+
on construct_cx_scores (session_id, ts desc);
|
|
25
|
+
|
|
26
|
+
create index if not exists construct_cx_scores_agent_ts_idx
|
|
27
|
+
on construct_cx_scores (agent_id, ts desc);
|
|
28
|
+
|
|
29
|
+
-- Skill quality correlation view: joins skill invocations and quality
|
|
30
|
+
-- scores by session_id so a reader can ask "for sessions where skill X was
|
|
31
|
+
-- invoked, what's the median / mean / p10 quality score?" The view is a
|
|
32
|
+
-- simple aggregate over the past 90 days; queries that need a longer
|
|
33
|
+
-- window can pull straight from the underlying tables. Materialised view
|
|
34
|
+
-- not used here because the correlation surface is small and the freshness
|
|
35
|
+
-- expectation is "current session" not "yesterday's batch."
|
|
36
|
+
|
|
37
|
+
create or replace view construct_skill_quality_correlation as
|
|
38
|
+
select
|
|
39
|
+
inv.skill_id,
|
|
40
|
+
count(distinct inv.session_id) as sessions,
|
|
41
|
+
count(distinct sc.id) as score_count,
|
|
42
|
+
round(avg(sc.value)::numeric, 3) as mean_score,
|
|
43
|
+
round((percentile_cont(0.5) within group (order by sc.value))::numeric, 3) as median_score,
|
|
44
|
+
round((percentile_cont(0.10) within group (order by sc.value))::numeric, 3) as p10_score,
|
|
45
|
+
round((percentile_cont(0.90) within group (order by sc.value))::numeric, 3) as p90_score,
|
|
46
|
+
max(sc.ts) as last_scored_at
|
|
47
|
+
from construct_skill_invocations inv
|
|
48
|
+
inner join construct_cx_scores sc on sc.session_id = inv.session_id
|
|
49
|
+
where inv.ts > now() - interval '90 days'
|
|
50
|
+
and sc.ts > now() - interval '90 days'
|
|
51
|
+
group by inv.skill_id;
|