feat(ms-ai-architect): playground v3 command catalog (24 commands)

Step 4/17 av Playground v3-leveransen.

CATALOG-konstant med alle 24 commands per kanonisk archetype-routing-tabell.
Driver:
  - Step 5/8: skjema-render via input_fields[]
  - Step 9: katalog-UI gruppert på category
  - Step 11: parser-routing via report_archetype
  - Step 12: renderer-routing via renderer-feltet
  - __buildCommand: pipeline-string-bygging per command (Step 8)

Per command-entry:
  { id, category, label, description, argument_hint, calls_agent, kb_files,
    produces_report, report_archetype, report_root_class, renderer,
    input_fields[] }

input_fields støtter: text, textarea, select, multiSelect, boolean, number.
Felles felter har from='shared' + shared_path (oppslag mot state.shared.*);
lokale felter har from='local' og lagres i project.reports[id].input.

SHARED-shorthand-objekt (9 felles felter brukt på tvers — sektor, virksomhet,
sky-plattform, lisens, AI-tjenester, dataklassifisering, DPIA-praksis, AI-budsjett,
regulatoriske krav). Sikrer eksakt samme label/type på tvers av commands som
deler felt.

Kategori-fordeling per canonical routing-tabell:
  regulatory(6): classify, requirements, transparency, frimpact, conformity, dpia
  security(3): security, ros, review
  economy(2): cost, license
  documentation(6): migrate, adr, summary, poc, utredning, compare
  tool(7): architect, help, research, diagram, onboard, generate-skills, export

Verktøy-commands har produces_report=false og null for archetype/root/renderer
— Step 11/12 hopper over dem.

Verify-asserts (i nettleser-konsoll):
  window.__CATALOG.commands.length === 24
  window.__CATALOG.commands.filter(c => c.produces_report).length === 17
  window.__CATALOG.commands.find(c => c.id === 'classify').report_archetype === 'aiact'

Eksponerte globals: __CATALOG, __SHARED_FIELDS, __FIELD_TYPES.

Plan: .claude/projects/2026-05-03-playground-v3-architecture/plan.md (Step 4)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
Kjell Tore Guttormsen 2026-05-03 18:03:16 +02:00
commit ab8affa5d8

View file

@ -488,6 +488,557 @@
window.__importState = importState;
window.__MIGRATIONS = MIGRATIONS;
// ============================================================
// COMMAND CATALOG (Step 4)
// ============================================================
//
// Kanonisk single-source-of-truth for alle 24 commands. Driver:
// - Step 5/8: skjema-render via input_fields[]
// - Step 9: katalog-UI gruppert på category
// - Step 11: parser-routing via report_archetype
// - Step 12: renderer-routing via renderer-feltet
// - __buildCommand: pipeline-string-bygging per command
//
// Felles-state-felter har from='shared' + shared_path='group.field'
// (oppslag mot state.shared.<group>.<field>). Lokale felter har
// from='local' og lagres i project.reports[id].input.
//
// Verktøy-commands (architect, help, research, diagram, onboard,
// generate-skills, export) har produces_report=false og null for
// archetype/root/renderer — Step 11/12 hopper over dem.
const FIELD_TYPES = {
TEXT: 'text',
TEXTAREA: 'textarea',
SELECT: 'select',
MULTI_SELECT: 'multiSelect',
BOOLEAN: 'boolean',
NUMBER: 'number'
};
// Felles felt-shorthands. Holder CATALOG kompakt og sikrer at samme
// felles-felt har eksakt samme label/type på tvers av alle commands
// som bruker det.
const SHARED = {
organisation_name: { id: 'organisation_name', label: 'Virksomhet', type: 'text', from: 'shared', shared_path: 'organization.name' },
sector: { id: 'sector', label: 'Sektor', type: 'select', from: 'shared', shared_path: 'organization.sector', options: ['Statlig', 'Kommunal', 'Fylkeskommune', 'Helseforetak', 'Undervisning', 'Annet'] },
regulatory_requirements: { id: 'regulatory_requirements', label: 'Regulatoriske krav', type: 'multiSelect', from: 'shared', shared_path: 'organization.regulatory_requirements', options: ['Personopplysningsloven/GDPR', 'Sikkerhetsloven', 'Arkivloven', 'Forvaltningsloven', 'Offentleglova', 'Helseregisterloven', 'Annet'] },
cloud_platform: { id: 'cloud_platform', label: 'Skyplattform', type: 'multiSelect', from: 'shared', shared_path: 'technology.cloud_platform', options: ['Azure', 'M365', 'Power Platform', 'On-prem', 'Hybrid', 'Annet'] },
license_type: { id: 'license_type', label: 'Lisenstype', type: 'select', from: 'shared', shared_path: 'technology.license_type', options: ['E3', 'E5', 'F1/F3', 'A3/A5', 'G3/G5', 'Annet'] },
ai_services_in_use: { id: 'ai_services_in_use', label: 'AI-tjenester i bruk', type: 'multiSelect', from: 'shared', shared_path: 'technology.ai_services_in_use', options: ['Azure OpenAI', 'Copilot for M365', 'Copilot Studio', 'AI Builder', 'Azure AI Search', 'Azure AI Services', 'Ingen', 'Annet'] },
data_classification: { id: 'data_classification', label: 'Dataklassifisering', type: 'multiSelect', from: 'shared', shared_path: 'security.data_classification', options: ['Åpen', 'Intern', 'Fortrolig', 'Strengt fortrolig', 'Hemmelig'] },
dpia_practice: { id: 'dpia_practice', label: 'DPIA-praksis i organisasjonen', type: 'select', from: 'shared', shared_path: 'security.dpia_practice', options: ['Systematisk', 'Ad hoc', 'Ikke etablert', 'Usikker'] },
annual_ai_budget: { id: 'annual_ai_budget', label: 'Årlig AI-budsjett', type: 'select', from: 'shared', shared_path: 'architecture.annual_ai_budget', options: ['<500k', '500k-2M', '2M-10M', '>10M', 'Ikke definert'] }
};
const PLATFORMS = ['Azure AI Foundry', 'Copilot Studio', 'M365 Copilot', 'Power Automate', 'AI Builder', 'Azure OpenAI', 'Azure AI Search', 'Annet'];
const RISK_LEVELS = ['minimal', 'limited', 'high', 'forbidden', 'ukjent'];
const ORG_ROLES = ['provider', 'deployer', 'distributor', 'importer', 'usikker'];
const CATALOG = {
version: '1.0',
generated_for_schema: SCHEMA_VERSION,
categories: [
{ id: 'regulatory', label: 'Regulatorisk', count: 6 },
{ id: 'security', label: 'Sikkerhet', count: 3 },
{ id: 'economy', label: 'Økonomi', count: 2 },
{ id: 'documentation', label: 'Dokumentasjon', count: 6 },
{ id: 'tool', label: 'Verktøy', count: 7 }
],
commands: [
// ===== REGULATORY (6) =====
{
id: 'classify',
category: 'regulatory',
label: 'EU AI Act — Klassifisering',
description: 'Klassifiser AI-system etter EU AI Act-risikonivå (forbidden/high/limited/minimal) og bestem rolle.',
argument_hint: '[system-beskrivelse]',
calls_agent: 'ai-act-assessor',
kb_files: ['ai-act-classification-methodology.md', 'ai-act-annex-iii-checklist.md', 'ai-act-compliance-guide.md'],
produces_report: true,
report_archetype: 'aiact',
report_root_class: 'pyramide',
renderer: 'renderAiActPyramid',
input_fields: [
SHARED.organisation_name,
SHARED.sector,
{ id: 'system_name', label: 'Systemnavn', type: 'text', from: 'local' },
{ id: 'system_description', label: 'Systembeskrivelse', type: 'textarea', from: 'local' },
{ id: 'users', label: 'Brukere', type: 'text', from: 'local' },
{ id: 'interaction_type', label: 'Interaksjonstype', type: 'select', from: 'local', options: ['chatbot', 'beslutningsstøtte', 'automatisering', 'anbefaling', 'annet'] },
{ id: 'data_sources', label: 'Datakilder', type: 'textarea', from: 'local' },
{ id: 'risk_level_assumption', label: 'Risk-level (forhåndsvurdering)', type: 'select', from: 'local', options: RISK_LEVELS }
]
},
{
id: 'requirements',
category: 'regulatory',
label: 'EU AI Act — Krav per risiko + rolle',
description: 'Konkrete AI Act-forpliktelser basert på klassifisering og rolle (provider/deployer).',
argument_hint: '[system-beskrivelse el. klassifisering]',
calls_agent: 'ai-act-assessor',
kb_files: ['ai-act-provider-obligations.md', 'ai-act-deployer-obligations.md', 'ai-act-microsoft-tools-mapping.md'],
produces_report: true,
report_archetype: 'requirements-list',
report_root_class: 'findings',
renderer: 'renderRequirements',
input_fields: [
SHARED.organisation_name,
SHARED.sector,
{ id: 'system_name', label: 'Systemnavn', type: 'text', from: 'local' },
{ id: 'system_description', label: 'Systembeskrivelse', type: 'textarea', from: 'local' },
{ id: 'risk_classification', label: 'Risikoklassifisering', type: 'select', from: 'local', options: RISK_LEVELS },
{ id: 'org_role', label: 'Rolle', type: 'select', from: 'local', options: ORG_ROLES }
]
},
{
id: 'transparency',
category: 'regulatory',
label: 'Transparensnotis (Art. 13/50)',
description: 'Generer Art. 13/50-transparensnotis på norsk for AI-system.',
argument_hint: '[system-beskrivelse]',
calls_agent: 'ai-act-assessor',
kb_files: ['ai-act-transparency-notices.md'],
produces_report: true,
report_archetype: 'text-document',
report_root_class: 'markdown-fallback',
renderer: 'renderTransparency',
input_fields: [
SHARED.organisation_name,
SHARED.sector,
{ id: 'system_name', label: 'Systemnavn', type: 'text', from: 'local' },
{ id: 'system_description', label: 'Systembeskrivelse', type: 'textarea', from: 'local' },
{ id: 'interaction_type', label: 'Interaksjonstype', type: 'select', from: 'local', options: ['chatbot', 'beslutningsstøtte', 'automatisering', 'anbefaling', 'annet'] },
{ id: 'target_audience', label: 'Målgruppe', type: 'text', from: 'local' },
{ id: 'risk_classification', label: 'Risikoklassifisering', type: 'select', from: 'local', options: RISK_LEVELS }
]
},
{
id: 'frimpact',
category: 'regulatory',
label: 'FRIA (Art. 27)',
description: 'Fundamental Rights Impact Assessment — obligatorisk for offentlig sektor som deployer.',
argument_hint: '[system-beskrivelse]',
calls_agent: 'ai-act-assessor',
kb_files: ['ai-act-fria-template.md', 'ai-act-deployer-obligations.md'],
produces_report: true,
report_archetype: 'fria',
report_root_class: 'rights-matrix',
renderer: 'renderFria',
input_fields: [
SHARED.organisation_name,
SHARED.sector,
{ id: 'system_name', label: 'Systemnavn', type: 'text', from: 'local' },
{ id: 'system_description', label: 'Systembeskrivelse', type: 'textarea', from: 'local' },
{ id: 'affected_groups', label: 'Berørte grupper', type: 'textarea', from: 'local' },
{ id: 'decisions_affected', label: 'Beslutninger som påvirkes', type: 'textarea', from: 'local' },
{ id: 'risk_classification', label: 'Risikoklassifisering', type: 'select', from: 'local', options: RISK_LEVELS }
]
},
{
id: 'conformity',
category: 'regulatory',
label: 'Samsvarsvurdering (Art. 43)',
description: 'Annex IV-sjekkliste og EU-erklæring for høyrisiko AI-systemer.',
argument_hint: '[system-beskrivelse]',
calls_agent: 'ai-act-assessor',
kb_files: ['ai-act-conformity-assessment.md', 'ai-act-provider-obligations.md'],
produces_report: true,
report_archetype: 'conformity-checklist',
report_root_class: 'findings',
renderer: 'renderConformity',
input_fields: [
SHARED.organisation_name,
SHARED.sector,
{ id: 'system_name', label: 'Systemnavn', type: 'text', from: 'local' },
{ id: 'system_description', label: 'Systembeskrivelse', type: 'textarea', from: 'local' },
{ id: 'risk_classification', label: 'Risikoklassifisering', type: 'select', from: 'local', options: RISK_LEVELS },
{ id: 'org_role', label: 'Rolle', type: 'select', from: 'local', options: ORG_ROLES },
{ id: 'existing_documentation', label: 'Eksisterende dokumentasjon', type: 'textarea', from: 'local' }
]
},
{
id: 'dpia',
category: 'regulatory',
label: 'DPIA / PVK',
description: 'Personvernkonsekvensvurdering for AI-system med risikomatrise og tiltakstabell.',
argument_hint: '[system-beskrivelse]',
calls_agent: 'dpia-agent',
kb_files: ['dpia-norwegian-methodology-ai.md', 'gdpr-compliance-ai-systems.md', 'ai-impact-assessment-framework.md'],
produces_report: true,
report_archetype: 'matrix-risk',
report_root_class: 'matrix',
renderer: 'renderDpia',
input_fields: [
SHARED.organisation_name,
SHARED.sector,
SHARED.dpia_practice,
{ id: 'system_name', label: 'Systemnavn', type: 'text', from: 'local' },
{ id: 'system_description', label: 'Systembeskrivelse', type: 'textarea', from: 'local' },
{ id: 'personal_data_types', label: 'Typer personopplysninger', type: 'textarea', from: 'local' },
{ id: 'data_subjects', label: 'Registrerte (data subjects)', type: 'text', from: 'local' },
{ id: 'legal_basis', label: 'Behandlingsgrunnlag (GDPR Art. 6)', type: 'select', from: 'local', options: ['Samtykke', 'Avtale', 'Rettslig forpliktelse', 'Vitale interesser', 'Allmenn interesse', 'Berettiget interesse'] },
{ id: 'data_sources', label: 'Datakilder', type: 'textarea', from: 'local' }
]
},
// ===== SECURITY (3) =====
{
id: 'security',
category: 'security',
label: 'Sikkerhetsvurdering (6×5)',
description: 'Sikkerhetsvurdering på 6 dimensjoner med 1-5 score, OWASP LLM Top 10.',
argument_hint: '[plattform] for [bruksscenario]',
calls_agent: 'security-assessment-agent',
kb_files: ['security-scoring-rubrics-6x5.md', 'ai-security-scoring-framework.md', 'ai-threat-modeling-stride.md'],
produces_report: true,
report_archetype: 'matrix-risk-6x5',
report_root_class: 'matrix',
renderer: 'renderSecurity',
input_fields: [
SHARED.organisation_name,
SHARED.sector,
SHARED.cloud_platform,
SHARED.data_classification,
{ id: 'platform', label: 'Plattform', type: 'select', from: 'local', options: PLATFORMS },
{ id: 'use_case', label: 'Bruksscenario', type: 'textarea', from: 'local' },
{ id: 'citizen_facing', label: 'Eksponert for innbyggere?', type: 'boolean', from: 'local' },
{ id: 'data_sources', label: 'Datakilder', type: 'textarea', from: 'local' }
]
},
{
id: 'ros',
category: 'security',
label: 'ROS-analyse (NS 5814 / ISO 31000)',
description: 'Risiko- og sårbarhetsanalyse med 7 dimensjoner og 49-trussel-bibliotek.',
argument_hint: '[system-beskrivelse] [--quick]',
calls_agent: 'ros-analysis-agent',
kb_files: ['ros-ai-threat-library.md', 'ros-scoring-rubrics-7x5.md', 'ros-methodology-ns5814-iso31000.md'],
produces_report: true,
report_archetype: 'matrix-risk',
report_root_class: 'matrix',
renderer: 'renderRos',
input_fields: [
SHARED.organisation_name,
SHARED.sector,
{ id: 'system_name', label: 'Systemnavn', type: 'text', from: 'local' },
{ id: 'system_description', label: 'Systembeskrivelse', type: 'textarea', from: 'local' },
{ id: 'complexity', label: 'Kompleksitet', type: 'select', from: 'local', options: ['ENKEL', 'MIDDELS', 'KOMPLEKS'] },
{ id: 'quick_mode', label: 'Hurtig-modus (mal A)', type: 'boolean', from: 'local' }
]
},
{
id: 'review',
category: 'security',
label: 'Arkitekturgjennomgang',
description: 'Gjennomgang mot Digdir, AI Act, NSM, Schrems II og norsk offentlig sektor-krav.',
argument_hint: '[arkitektur el. kontekst]',
calls_agent: 'architecture-review-agent',
kb_files: ['decision-trees.md', 'security.md', 'public-sector-checklist.md'],
produces_report: true,
report_archetype: 'findings',
report_root_class: 'findings',
renderer: 'renderReview',
input_fields: [
SHARED.organisation_name,
SHARED.sector,
{ id: 'architecture_description', label: 'Arkitekturbeskrivelse', type: 'textarea', from: 'local' },
{ id: 'review_stage', label: 'Stadium', type: 'select', from: 'local', options: ['Pre-implementering', 'POC', 'Produksjon'] }
]
},
// ===== ECONOMY (2) =====
{
id: 'cost',
category: 'economy',
label: 'Kostnadsestimat (P10/P50/P90 NOK)',
description: 'Kostnadsestimering med konfidensgradering og TCO-sammenligning.',
argument_hint: '[plattform] med [antall brukere], [volum/dag]',
calls_agent: 'cost-estimation-agent',
kb_files: ['deterministic-cost-calculation-model.md', 'azure-ai-foundry-cost-governance.md', 'cost-models.md'],
produces_report: true,
report_archetype: 'cost-distribution',
report_root_class: 'distribution',
renderer: 'renderCost',
input_fields: [
SHARED.organisation_name,
SHARED.license_type,
SHARED.cloud_platform,
{ id: 'platform', label: 'Plattform', type: 'select', from: 'local', options: PLATFORMS },
{ id: 'users', label: 'Antall brukere', type: 'number', from: 'local' },
{ id: 'volume_per_day', label: 'Volum per dag (transaksjoner/forespørsler)', type: 'text', from: 'local' },
{ id: 'region', label: 'Region', type: 'select', from: 'local', options: ['Norge (Norway East/West)', 'EU/EØS', 'Globalt'] }
]
},
{
id: 'license',
category: 'economy',
label: 'Lisens → AI-kapabiliteter',
description: 'Map lisenstype mot inkluderte AI-kapabiliteter og identifiser gap.',
argument_hint: '[lisenstype]',
calls_agent: 'license-mapper-agent',
kb_files: ['licensing-matrix.md'],
produces_report: true,
report_archetype: 'capability',
report_root_class: 'capability-matrix',
renderer: 'renderLicense',
input_fields: [
SHARED.organisation_name,
SHARED.license_type,
SHARED.ai_services_in_use,
{ id: 'license_types', label: 'Lisenser å vurdere', type: 'multiSelect', from: 'local', options: ['E3', 'E5', 'F1/F3', 'A3/A5', 'G3/G5', 'Copilot for M365', 'Power Platform Premium'] }
]
},
// ===== DOCUMENTATION (6) =====
{
id: 'migrate',
category: 'documentation',
label: 'Migreringsplan',
description: 'Plan for migrasjon mellom Microsoft AI-plattformer.',
argument_hint: 'fra [kilde] til [mål]',
calls_agent: null,
kb_files: ['migration-patterns.md'],
produces_report: true,
report_archetype: 'phased-plan',
report_root_class: 'aiact-timeline',
renderer: 'renderMigrate',
input_fields: [
SHARED.organisation_name,
{ id: 'source_platform', label: 'Fra (kildeplattform)', type: 'select', from: 'local', options: PLATFORMS },
{ id: 'target_platform', label: 'Til (målplattform)', type: 'select', from: 'local', options: PLATFORMS },
{ id: 'system_description', label: 'Systembeskrivelse', type: 'textarea', from: 'local' },
{ id: 'timeline_weeks', label: 'Tidslinje (uker)', type: 'number', from: 'local' }
]
},
{
id: 'adr',
category: 'documentation',
label: 'ADR (MADR v3.0)',
description: 'Architecture Decision Record i MADR v3.0-format.',
argument_hint: '[valgfritt: tittel]',
calls_agent: 'adr-writer-agent',
kb_files: ['adr-template.md'],
produces_report: true,
report_archetype: 'markdown',
report_root_class: 'markdown-fallback',
renderer: 'renderAdr',
input_fields: [
SHARED.organisation_name,
{ id: 'decision_title', label: 'Beslutningstittel', type: 'text', from: 'local' },
{ id: 'decision_context', label: 'Kontekst', type: 'textarea', from: 'local' },
{ id: 'alternatives', label: 'Alternativer vurdert', type: 'textarea', from: 'local' },
{ id: 'decision', label: 'Valgt løsning', type: 'textarea', from: 'local' }
]
},
{
id: 'summary',
category: 'documentation',
label: 'Teknisk sammendrag + beslutningsnotat',
description: 'Aggregerer .work/-rapporter til teknisk sammendrag og beslutningsnotat.',
argument_hint: '[løsningsnavn]',
calls_agent: 'summary-agent',
kb_files: [],
produces_report: true,
report_archetype: 'verdict',
report_root_class: 'verdict-block',
renderer: 'renderSummary',
input_fields: [
SHARED.organisation_name,
{ id: 'solution_name', label: 'Løsningsnavn', type: 'text', from: 'local' }
]
},
{
id: 'poc',
category: 'documentation',
label: 'POC-plan',
description: 'POC-plan med suksesskriterier, tidslinje, risiko og Go/No-Go.',
argument_hint: '[plattform] for [use case]',
calls_agent: null,
kb_files: ['poc-template.md'],
produces_report: true,
report_archetype: 'phased-plan',
report_root_class: 'pipeline-cockpit',
renderer: 'renderPoc',
input_fields: [
SHARED.organisation_name,
SHARED.sector,
SHARED.annual_ai_budget,
{ id: 'platform', label: 'Plattform', type: 'select', from: 'local', options: PLATFORMS },
{ id: 'use_case', label: 'Use case', type: 'textarea', from: 'local' },
{ id: 'team_size', label: 'Team-størrelse', type: 'number', from: 'local' },
{ id: 'team_level', label: 'Team-nivå', type: 'select', from: 'local', options: ['Junior', 'Mid', 'Senior', 'Mixed'] },
{ id: 'timeline_weeks', label: 'Tidslinje (uker)', type: 'number', from: 'local' },
{ id: 'stakeholders', label: 'Interessenter', type: 'textarea', from: 'local' }
]
},
{
id: 'utredning',
category: 'documentation',
label: 'AI-arkitekturutredning (off. sektor)',
description: 'Full S0S9 arkitekturutredning for norsk offentlig sektor.',
argument_hint: '[scenario]',
calls_agent: null,
kb_files: ['ai-utredning-template.md'],
produces_report: true,
report_archetype: 'markdown',
report_root_class: 'markdown-fallback',
renderer: 'renderUtredning',
input_fields: [
SHARED.organisation_name,
SHARED.sector,
SHARED.regulatory_requirements,
{ id: 'scenario_name', label: 'Scenario-navn', type: 'text', from: 'local' },
{ id: 'scenario_description', label: 'Scenario-beskrivelse', type: 'textarea', from: 'local' },
{ id: 'system_description', label: 'Systembeskrivelse', type: 'textarea', from: 'local' }
]
},
{
id: 'compare',
category: 'documentation',
label: 'Sammenlign plattformer',
description: 'Side-by-side sammenligning av Microsoft AI-plattformer for et use case.',
argument_hint: '[plattform A] vs [plattform B] for [use case]',
calls_agent: 'research-agent',
kb_files: ['decision-trees.md'],
produces_report: true,
report_archetype: 'comparison',
report_root_class: 'diff',
renderer: 'renderCompare',
input_fields: [
SHARED.organisation_name,
{ id: 'platform_a', label: 'Plattform A', type: 'select', from: 'local', options: PLATFORMS },
{ id: 'platform_b', label: 'Plattform B', type: 'select', from: 'local', options: PLATFORMS },
{ id: 'use_case', label: 'Use case', type: 'textarea', from: 'local' }
]
},
// ===== TOOL (7) — ingen rapport, kun skjema + output-kopiering =====
{
id: 'architect',
category: 'tool',
label: 'Start Cosmo-rådgivning',
description: 'Start strukturert AI-arkitekturrådgivning med Cosmo Skyberg-persona.',
argument_hint: '[beskriv ditt forretningsproblem]',
calls_agent: null,
kb_files: [],
produces_report: false,
report_archetype: null,
report_root_class: null,
renderer: null,
input_fields: [
SHARED.organisation_name,
SHARED.sector,
{ id: 'business_problem', label: 'Forretningsproblem', type: 'textarea', from: 'local' }
]
},
{
id: 'help',
category: 'tool',
label: 'Hjelp',
description: 'Vis kommando-/agent-/KB-oversikt eller detaljer for et emne.',
argument_hint: '[emne for detaljer]',
calls_agent: null,
kb_files: [],
produces_report: false,
report_archetype: null,
report_root_class: null,
renderer: null,
input_fields: [
{ id: 'topic', label: 'Emne (valgfritt)', type: 'text', from: 'local' }
]
},
{
id: 'research',
category: 'tool',
label: 'Plattform-research',
description: 'Siste-nytt-research for en Microsoft AI-plattform.',
argument_hint: '[plattformnavn] [tidsperiode]',
calls_agent: 'research-agent',
kb_files: [],
produces_report: false,
report_archetype: null,
report_root_class: null,
renderer: null,
input_fields: [
{ id: 'platform', label: 'Plattform', type: 'select', from: 'local', options: PLATFORMS },
{ id: 'time_period', label: 'Tidsperiode', type: 'select', from: 'local', options: ['siste uke', 'siste måned', 'siste kvartal', 'siste år'] }
]
},
{
id: 'diagram',
category: 'tool',
label: 'Generer arkitekturdiagram',
description: 'Generer arkitekturdiagram med Imagen 3 (mcp-image).',
argument_hint: '[type] for [scenario]',
calls_agent: 'diagram-generation-agent',
kb_files: ['diagram-prompt-templates.md'],
produces_report: false,
report_archetype: null,
report_root_class: null,
renderer: null,
input_fields: [
{ id: 'diagram_type', label: 'Diagramtype', type: 'select', from: 'local', options: ['arkitektur', 'sikkerhet', 'dataflyt', 'problem', 'roadmap'] },
{ id: 'scenario', label: 'Scenario', type: 'text', from: 'local' },
{ id: 'component_list', label: 'Komponenter (valgfritt)', type: 'textarea', from: 'local' }
]
},
{
id: 'onboard',
category: 'tool',
label: 'Onboard plugin',
description: 'Onboard pluginen med virksomhetsspesifikk kontekst (5-fase intervju).',
argument_hint: '[--status]',
calls_agent: 'onboarding-agent',
kb_files: [],
produces_report: false,
report_archetype: null,
report_root_class: null,
renderer: null,
input_fields: [
{ id: 'status_only', label: 'Bare vis status', type: 'boolean', from: 'local' }
]
},
{
id: 'generate-skills',
category: 'tool',
label: 'Generer KB-filer (batch)',
description: 'Generer kunnskapsfiler med MCP-research i batch.',
argument_hint: '[antall]',
calls_agent: null,
kb_files: [],
produces_report: false,
report_archetype: null,
report_root_class: null,
renderer: null,
input_fields: [
{ id: 'count', label: 'Antall filer å generere', type: 'number', from: 'local' }
]
},
{
id: 'export',
category: 'tool',
label: 'Eksporter til PDF',
description: 'Eksporter et arkitekturdokument til PDF.',
argument_hint: '[filsti til markdown]',
calls_agent: null,
kb_files: [],
produces_report: false,
report_archetype: null,
report_root_class: null,
renderer: null,
input_fields: [
{ id: 'file_path', label: 'Filsti til markdown', type: 'text', from: 'local' }
]
}
]
};
// Eksponer for Step 5/8/9/11/12 og DevTools.
window.__CATALOG = CATALOG;
window.__SHARED_FIELDS = SHARED;
window.__FIELD_TYPES = FIELD_TYPES;
// Auto-bootstrap. Kjør så snart DOM er parsed; vi er på slutten av <body>
// så DOM er allerede klar.
bootstrap().catch(function (err) {