@debian777/kairos-mcp 3.3.0 → 3.3.1
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 +2 -2
- package/dist/.tsbuildinfo +1 -1
- package/dist/bootstrap.d.ts +2 -0
- package/dist/bootstrap.d.ts.map +1 -0
- package/dist/bootstrap.js +60 -0
- package/dist/bootstrap.js.map +1 -0
- package/dist/config.d.ts +13 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +18 -3
- package/dist/config.js.map +1 -1
- package/dist/embed-docs/mem/00000000-0000-0000-0000-000000002001.md +1 -1
- package/dist/embed-docs/mem/00000000-0000-0000-0000-000000002002.md +1 -1
- package/dist/http/http-api-dump.d.ts.map +1 -1
- package/dist/http/http-api-dump.js +1 -1
- package/dist/http/http-api-dump.js.map +1 -1
- package/dist/http/http-api-mint.d.ts.map +1 -1
- package/dist/http/http-api-mint.js +31 -4
- package/dist/http/http-api-mint.js.map +1 -1
- package/dist/http/http-api-next.d.ts.map +1 -1
- package/dist/http/http-api-next.js +2 -2
- package/dist/http/http-api-next.js.map +1 -1
- package/dist/http/http-api-snapshot.d.ts.map +1 -1
- package/dist/http/http-api-snapshot.js +0 -1
- package/dist/http/http-api-snapshot.js.map +1 -1
- package/dist/http/http-auth-callback.d.ts.map +1 -1
- package/dist/http/http-auth-callback.js +3 -2
- package/dist/http/http-auth-callback.js.map +1 -1
- package/dist/http/http-auth-middleware.d.ts +1 -0
- package/dist/http/http-auth-middleware.d.ts.map +1 -1
- package/dist/http/http-auth-middleware.js +2 -0
- package/dist/http/http-auth-middleware.js.map +1 -1
- package/dist/http/http-error-handlers.d.ts.map +1 -1
- package/dist/http/http-error-handlers.js +12 -1
- package/dist/http/http-error-handlers.js.map +1 -1
- package/dist/http/http-health-routes.d.ts.map +1 -1
- package/dist/http/http-health-routes.js +9 -6
- package/dist/http/http-health-routes.js.map +1 -1
- package/dist/http/http-mcp-handler.d.ts.map +1 -1
- package/dist/http/http-mcp-handler.js +44 -11
- package/dist/http/http-mcp-handler.js.map +1 -1
- package/dist/http/http-server-config.d.ts.map +1 -1
- package/dist/http/http-server-config.js +51 -1
- package/dist/http/http-server-config.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -10
- package/dist/index.js.map +1 -1
- package/dist/resources/docs-resources.js +1 -1
- package/dist/resources/docs-resources.js.map +1 -1
- package/dist/resources/prompt-resources.js +1 -1
- package/dist/resources/prompt-resources.js.map +1 -1
- package/dist/services/chain-utils.d.ts +0 -7
- package/dist/services/chain-utils.d.ts.map +1 -1
- package/dist/services/chain-utils.js +0 -6
- package/dist/services/chain-utils.js.map +1 -1
- package/dist/services/embedding/audit.d.ts +35 -0
- package/dist/services/embedding/audit.d.ts.map +1 -0
- package/dist/services/embedding/audit.js +146 -0
- package/dist/services/embedding/audit.js.map +1 -0
- package/dist/services/embedding/config.js +1 -1
- package/dist/services/embedding/config.js.map +1 -1
- package/dist/services/embedding/health.d.ts +5 -0
- package/dist/services/embedding/health.d.ts.map +1 -0
- package/dist/services/embedding/health.js +112 -0
- package/dist/services/embedding/health.js.map +1 -0
- package/dist/services/embedding/providers.d.ts.map +1 -1
- package/dist/services/embedding/providers.js +65 -1
- package/dist/services/embedding/providers.js.map +1 -1
- package/dist/services/embedding/service.d.ts +1 -0
- package/dist/services/embedding/service.d.ts.map +1 -1
- package/dist/services/embedding/service.js +94 -124
- package/dist/services/embedding/service.js.map +1 -1
- package/dist/services/memory/store-chain-default-handler.d.ts.map +1 -1
- package/dist/services/memory/store-chain-default-handler.js +7 -2
- package/dist/services/memory/store-chain-default-handler.js.map +1 -1
- package/dist/services/memory/store-chain-header-handler.d.ts.map +1 -1
- package/dist/services/memory/store-chain-header-handler.js +7 -2
- package/dist/services/memory/store-chain-header-handler.js.map +1 -1
- package/dist/services/memory/store-chain-helpers.js +1 -1
- package/dist/services/memory/store-chain-helpers.js.map +1 -1
- package/dist/services/memory/store-chain.js +1 -1
- package/dist/services/memory/store-chain.js.map +1 -1
- package/dist/services/memory/store-init.js +1 -1
- package/dist/services/memory/store-init.js.map +1 -1
- package/dist/services/memory/store-methods.js +1 -1
- package/dist/services/memory/store-methods.js.map +1 -1
- package/dist/services/memory/store.js +1 -1
- package/dist/services/memory/store.js.map +1 -1
- package/dist/services/memory-store.js +1 -1
- package/dist/services/memory-store.js.map +1 -1
- package/dist/services/metrics/anomaly-metrics.d.ts +3 -0
- package/dist/services/metrics/anomaly-metrics.d.ts.map +1 -0
- package/dist/services/metrics/anomaly-metrics.js +9 -0
- package/dist/services/metrics/anomaly-metrics.js.map +1 -0
- package/dist/services/proof-of-work-store.js +1 -1
- package/dist/services/proof-of-work-store.js.map +1 -1
- package/dist/services/qdrant/attest-propagation.d.ts.map +1 -1
- package/dist/services/qdrant/attest-propagation.js +5 -8
- package/dist/services/qdrant/attest-propagation.js.map +1 -1
- package/dist/services/qdrant/connection.js +1 -1
- package/dist/services/qdrant/connection.js.map +1 -1
- package/dist/services/qdrant/initialization.js +1 -1
- package/dist/services/qdrant/initialization.js.map +1 -1
- package/dist/services/qdrant/listing.js +1 -1
- package/dist/services/qdrant/listing.js.map +1 -1
- package/dist/services/qdrant/memory-retrieval.d.ts +21 -0
- package/dist/services/qdrant/memory-retrieval.d.ts.map +1 -1
- package/dist/services/qdrant/memory-retrieval.js +36 -18
- package/dist/services/qdrant/memory-retrieval.js.map +1 -1
- package/dist/services/qdrant/memory-store.js +1 -1
- package/dist/services/qdrant/memory-store.js.map +1 -1
- package/dist/services/qdrant/memory-updates.d.ts.map +1 -1
- package/dist/services/qdrant/memory-updates.js +35 -37
- package/dist/services/qdrant/memory-updates.js.map +1 -1
- package/dist/services/qdrant/quality.d.ts.map +1 -1
- package/dist/services/qdrant/quality.js +13 -27
- package/dist/services/qdrant/quality.js.map +1 -1
- package/dist/services/qdrant/resources.d.ts.map +1 -1
- package/dist/services/qdrant/resources.js +23 -8
- package/dist/services/qdrant/resources.js.map +1 -1
- package/dist/services/qdrant/search.js +1 -1
- package/dist/services/qdrant/search.js.map +1 -1
- package/dist/services/qdrant/service.js +1 -1
- package/dist/services/qdrant/service.js.map +1 -1
- package/dist/services/qdrant/utils.js +1 -1
- package/dist/services/qdrant/utils.js.map +1 -1
- package/dist/services/redis-cache.js +1 -1
- package/dist/services/redis-cache.js.map +1 -1
- package/dist/services/redis.d.ts +1 -0
- package/dist/services/redis.d.ts.map +1 -1
- package/dist/services/redis.js +20 -6
- package/dist/services/redis.js.map +1 -1
- package/dist/services/stats/model-stats.js +1 -1
- package/dist/services/stats/model-stats.js.map +1 -1
- package/dist/services/stats/protocol.js +1 -1
- package/dist/services/stats/protocol.js.map +1 -1
- package/dist/tools/kairos_attest.js +1 -1
- package/dist/tools/kairos_attest.js.map +1 -1
- package/dist/tools/kairos_mint.js +1 -1
- package/dist/tools/kairos_mint.js.map +1 -1
- package/dist/tools/kairos_search.d.ts.map +1 -1
- package/dist/tools/kairos_search.js +26 -13
- package/dist/tools/kairos_search.js.map +1 -1
- package/dist/ui/assets/{AccountPage-xcULo_Ht.js → AccountPage-kxmPtqQP.js} +1 -1
- package/dist/ui/assets/{ErrorAlert-Bp_BC2t_.js → ErrorAlert-ME7tEJ6X.js} +1 -1
- package/dist/ui/assets/{HomePage-YaKMlhFN.js → HomePage-DxiAsvs-.js} +1 -1
- package/dist/ui/assets/{KairosPage-DgO58pOn.js → KairosPage-BkqYs3-_.js} +1 -1
- package/dist/ui/assets/NotFoundPage-DyfbQ-6G.js +1 -0
- package/dist/ui/assets/{ProtocolDetailPage-D93cKbME.js → ProtocolDetailPage-DKaSVepL.js} +1 -1
- package/dist/ui/assets/{ProtocolEditPage-CCwQy6yl.js → ProtocolEditPage-D-aTavvx.js} +1 -1
- package/dist/ui/assets/{RenderedMarkdown-Dd_bDNwz.js → RenderedMarkdown-DjbuQlBl.js} +1 -1
- package/dist/ui/assets/{RunGuidedPage-CcTlI5HF.js → RunGuidedPage-BUD0MaGh.js} +1 -1
- package/dist/ui/assets/{RunsPage-BjSaeOq_.js → RunsPage-ctnsEF2U.js} +1 -1
- package/dist/ui/assets/{SkillBundlePage-D2cJwwA1.js → SkillBundlePage-CaWW5oGq.js} +1 -1
- package/dist/ui/assets/{index-BE1NYtLh.css → index-BAOM7Ima.css} +1 -1
- package/dist/ui/assets/{index-Dj9XLtnR.js → index-BrTmRWuA.js} +3 -3
- package/dist/ui/assets/{tiptap-BEg0BoNB.js → tiptap-kMFBDujG.js} +2 -2
- package/dist/ui/assets/{useProtocol-D_32bpf9.js → useProtocol-BruWpIzq.js} +1 -1
- package/dist/ui/assets/{useSpaces-DdE67BYD.js → useSpaces-BV6eUjY3.js} +1 -1
- package/dist/ui/assets/vendor-GiUVcjs7.js +33 -0
- package/dist/ui/index.html +4 -4
- package/dist/utils/qdrant-vector-management.js +1 -1
- package/dist/utils/qdrant-vector-management.js.map +1 -1
- package/dist/utils/structured-logger.d.ts +6 -1
- package/dist/utils/structured-logger.d.ts.map +1 -1
- package/dist/utils/structured-logger.js +103 -16
- package/dist/utils/structured-logger.js.map +1 -1
- package/dist/utils/tenant-context.d.ts +7 -0
- package/dist/utils/tenant-context.d.ts.map +1 -1
- package/dist/utils/tenant-context.js +20 -6
- package/dist/utils/tenant-context.js.map +1 -1
- package/package.json +10 -7
- package/dist/ui/assets/NotFoundPage-BnEJbefZ.js +0 -1
- package/dist/ui/assets/vendor-BxD5ItEO.js +0 -33
- package/dist/utils/logger.d.ts +0 -22
- package/dist/utils/logger.d.ts.map +0 -1
- package/dist/utils/logger.js +0 -63
- package/dist/utils/logger.js.map +0 -1
|
@@ -2,10 +2,11 @@ import { structuredLogger } from '../utils/structured-logger.js';
|
|
|
2
2
|
import { getToolDoc } from '../resources/embedded-mcp-resources.js';
|
|
3
3
|
import { redisCacheService } from '../services/redis-cache.js';
|
|
4
4
|
import { mcpToolCalls, mcpToolDuration, mcpToolErrors, mcpToolInputSize, mcpToolOutputSize } from '../services/metrics/mcp-metrics.js';
|
|
5
|
-
import { getTenantId, runWithOptionalSpaceAsync, getSpaceContextFromStorage } from '../utils/tenant-context.js';
|
|
5
|
+
import { getRequestIdFromStorage, getTenantId, runWithOptionalSpaceAsync, getSpaceContextFromStorage, getSpaceIdFromStorage } from '../utils/tenant-context.js';
|
|
6
6
|
import { SCORE_THRESHOLD, KAIROS_SEARCH_MAX_CHOICES, KAIROS_SEARCH_LIMIT_CAP, KAIROS_SEARCH_LIMIT_MIN, KAIROS_ENABLE_GROUP_COLLAPSE } from '../config.js';
|
|
7
7
|
import { createResults, generateUnifiedOutput } from './kairos_search_output.js';
|
|
8
8
|
import { searchInputSchema, searchOutputSchema } from './kairos_search_schema.js';
|
|
9
|
+
import { logSearchAnomaly } from '../services/embedding/audit.js';
|
|
9
10
|
const CREATION_PROTOCOL_UUID = '00000000-0000-0000-0000-000000002001';
|
|
10
11
|
const CREATION_PROTOCOL_URI = `kairos://mem/${CREATION_PROTOCOL_UUID}`;
|
|
11
12
|
const REFINING_PROTOCOL_UUID = '00000000-0000-0000-0000-000000002002';
|
|
@@ -56,12 +57,21 @@ async function searchAndBuildCandidates(memoryStore, query, enableGroupCollapse,
|
|
|
56
57
|
}
|
|
57
58
|
/** Core search: build candidates and return unified output. Used by executeSearch. */
|
|
58
59
|
async function doSearch(memoryStore, qdrantService, searchQuery, effectiveLimit) {
|
|
60
|
+
const tenantId = getTenantId();
|
|
61
|
+
const requestId = getRequestIdFromStorage();
|
|
59
62
|
const candidateMap = await searchAndBuildCandidates(memoryStore, searchQuery, KAIROS_ENABLE_GROUP_COLLAPSE, effectiveLimit);
|
|
60
63
|
let headCandidates = Array.from(candidateMap.values()).sort((a, b) => b.score - a.score);
|
|
61
64
|
if (headCandidates.length > effectiveLimit) {
|
|
62
65
|
headCandidates = headCandidates.slice(0, effectiveLimit);
|
|
63
66
|
}
|
|
64
67
|
const results = headCandidates.length > 0 ? createResults(headCandidates, SCORE_THRESHOLD) : [];
|
|
68
|
+
logSearchAnomaly({
|
|
69
|
+
tenantId,
|
|
70
|
+
requestId,
|
|
71
|
+
resultCount: results.length,
|
|
72
|
+
queryLength: searchQuery.length,
|
|
73
|
+
topScore: results[0]?.score ?? null
|
|
74
|
+
});
|
|
65
75
|
return generateUnifiedOutput(results, qdrantService, {
|
|
66
76
|
refiningUri: REFINING_PROTOCOL_URI,
|
|
67
77
|
refiningNextAction: REFINING_NEXT_ACTION,
|
|
@@ -75,20 +85,23 @@ async function doSearch(memoryStore, qdrantService, searchQuery, effectiveLimit)
|
|
|
75
85
|
*/
|
|
76
86
|
export async function executeSearch(memoryStore, qdrantService, input, options) {
|
|
77
87
|
const { query, space, space_id, max_choices } = input;
|
|
88
|
+
const spaceParam = space ?? space_id;
|
|
78
89
|
const effectiveLimit = Math.max(KAIROS_SEARCH_LIMIT_MIN, Math.min(KAIROS_SEARCH_LIMIT_CAP, max_choices ?? KAIROS_SEARCH_MAX_CHOICES));
|
|
79
90
|
const searchQuery = queryForSearch(query);
|
|
80
|
-
const
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
return
|
|
91
|
+
const runWithCache = async () => {
|
|
92
|
+
const effectiveSpaceId = spaceParam ?? getSpaceIdFromStorage();
|
|
93
|
+
const cacheKey = `begin:v3:${effectiveSpaceId}:${searchQuery}:${KAIROS_ENABLE_GROUP_COLLAPSE}:${effectiveLimit}`;
|
|
94
|
+
const cachedResult = await redisCacheService.get(cacheKey);
|
|
95
|
+
if (cachedResult) {
|
|
96
|
+
return searchOutputSchema.parse(JSON.parse(cachedResult));
|
|
97
|
+
}
|
|
98
|
+
const result = await doSearch(memoryStore, qdrantService, searchQuery, effectiveLimit);
|
|
99
|
+
await redisCacheService.set(cacheKey, JSON.stringify(result), 300);
|
|
100
|
+
return result;
|
|
101
|
+
};
|
|
102
|
+
return options?.runInSpace && spaceParam != null
|
|
103
|
+
? await options.runInSpace(runWithCache)
|
|
104
|
+
: await runWithCache();
|
|
92
105
|
}
|
|
93
106
|
/**
|
|
94
107
|
* Register kairos_search tool
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kairos_search.js","sourceRoot":"","sources":["../../src/tools/kairos_search.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,wCAAwC,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AACvI,OAAO,EAAE,WAAW,EAAE,yBAAyB,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"kairos_search.js","sourceRoot":"","sources":["../../src/tools/kairos_search.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{g as e,y as t}from"./vendor-
|
|
1
|
+
import{g as e,y as t}from"./vendor-GiUVcjs7.js";import{t as n}from"./react-BdWJx0XL.js";import"./tiptap-kMFBDujG.js";import{t as r}from"./api-D88c6lbH.js";async function i(){let e=await r(`/api/me`);if(!e.ok){let t=await e.json().catch(()=>({})),n=Error(t.message??e.statusText);throw n.statusCode=e.status,n}return e.json()}function a(){return e({queryKey:[`me`],queryFn:i,retry:!1})}var o=n();function s(){let{t:e}=t(),{data:n,isLoading:r,isError:i}=a();return r?(0,o.jsx)(`p`,{className:`text-[var(--color-text-muted)]`,children:e(`account.loading`)}):i||!n?(0,o.jsxs)(`div`,{children:[(0,o.jsx)(`h1`,{className:`text-[var(--color-text-heading)] text-2xl font-semibold mb-4`,children:e(`account.title`)}),(0,o.jsx)(`p`,{className:`text-[var(--color-text-muted)]`,children:e(`account.notSignedIn`)}),(0,o.jsx)(`a`,{href:`/auth/callback`,className:`mt-4 min-h-[44px] min-w-[44px] inline-flex items-center justify-center px-4 py-2 rounded-[var(--radius-md)] font-medium bg-[var(--color-primary)] text-white no-underline hover:bg-[var(--color-primary-hover)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--color-focus-ring)] focus-visible:outline-offset-2`,children:e(`account.signIn`)})]}):(0,o.jsxs)(`div`,{children:[(0,o.jsx)(`h1`,{className:`text-[var(--color-text-heading)] text-2xl font-semibold mb-6`,children:e(`account.title`)}),(0,o.jsx)(`p`,{className:`text-[var(--color-text-muted)] mb-6`,children:e(`account.intro`)}),(0,o.jsxs)(`div`,{className:`rounded-[var(--radius-md)] border border-[var(--color-border)] bg-[var(--color-surface-elevated)] p-6`,children:[(0,o.jsxs)(`div`,{className:`mb-4`,children:[(0,o.jsx)(`span`,{className:`block text-xs uppercase tracking-wider text-[var(--color-text-muted)] mb-1`,children:e(`account.name`)}),(0,o.jsx)(`span`,{className:`text-[var(--color-text-heading)]`,children:n.name??n.sub})]}),n.email&&(0,o.jsxs)(`div`,{className:`mb-4`,children:[(0,o.jsx)(`span`,{className:`block text-xs uppercase tracking-wider text-[var(--color-text-muted)] mb-1`,children:e(`account.email`)}),(0,o.jsx)(`span`,{className:`text-[var(--color-text-heading)]`,children:n.email})]}),(0,o.jsx)(`div`,{className:`mt-6 flex gap-2 flex-wrap`,children:(0,o.jsx)(`a`,{href:`/auth/logout`,className:`min-h-[44px] min-w-[44px] inline-flex items-center justify-center px-4 py-2 rounded-[var(--radius-md)] font-medium border border-[var(--color-border)] text-[var(--color-text)] bg-transparent no-underline hover:bg-[var(--color-surface-elevated)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--color-focus-ring)] focus-visible:outline-offset-2`,children:e(`account.logOut`)})})]})]})}export{s as AccountPage};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as e,y as t}from"./vendor-
|
|
1
|
+
import{a as e,y as t}from"./vendor-GiUVcjs7.js";import{t as n}from"./react-BdWJx0XL.js";var r=n();function i({message:n,nextAction:i,onRetry:a,showGoBack:o=!0,supportLink:s}){let{t:c}=t();return(0,r.jsxs)(`div`,{className:`p-4 rounded-[var(--radius-md)] border border-[var(--color-error)] bg-[var(--color-error-bg)]`,role:`alert`,children:[(0,r.jsx)(`h2`,{className:`text-base font-semibold text-[var(--color-error)] mb-2`,children:c(`error.title`)}),(0,r.jsx)(`p`,{className:`text-[var(--color-text)]`,children:n}),i&&(0,r.jsx)(`p`,{className:`mt-4 pt-4 border-t border-[var(--color-border)] font-medium`,children:i}),(0,r.jsxs)(`div`,{className:`flex flex-wrap gap-2 mt-4`,children:[a&&(0,r.jsx)(`button`,{type:`button`,onClick:a,className:`min-h-[44px] min-w-[44px] px-4 py-2 rounded-[var(--radius-md)] font-medium bg-[var(--color-primary)] text-white border-0 cursor-pointer hover:bg-[var(--color-primary-hover)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--color-focus-ring)] focus-visible:outline-offset-2`,children:c(`error.retry`)}),o&&(0,r.jsx)(e,{to:`/`,className:`min-h-[44px] min-w-[44px] inline-flex items-center justify-center px-4 py-2 rounded-[var(--radius-md)] font-medium border border-[var(--color-border)] text-[var(--color-text)] no-underline hover:bg-[var(--color-surface-elevated)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--color-focus-ring)] focus-visible:outline-offset-2`,children:c(`error.goBack`)}),s&&(0,r.jsx)(`a`,{href:s,target:`_blank`,rel:`noopener noreferrer`,className:`min-h-[44px] min-w-[44px] inline-flex items-center justify-center px-4 py-2 rounded-[var(--radius-md)] font-medium border border-[var(--color-border)] text-[var(--color-text)] no-underline hover:bg-[var(--color-surface-elevated)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--color-focus-ring)] focus-visible:outline-offset-2`,children:c(`error.support`)})]})]})}export{i as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as e,d as t,y as n}from"./vendor-
|
|
1
|
+
import{a as e,d as t,y as n}from"./vendor-GiUVcjs7.js";import{t as r}from"./react-BdWJx0XL.js";import"./tiptap-kMFBDujG.js";import{t as i}from"./useSpaces-BV6eUjY3.js";var a=r();function o(){let{t:r}=n(),o=t(),{data:s,isLoading:c,isError:l}=i(),u=e=>{e.preventDefault();let t=e.currentTarget.querySelector(`input[name="q"]`)?.value?.trim()??``;o(t?`/kairos?q=${encodeURIComponent(t)}`:`/kairos`)},d=s?.spaces??[],f=c||l||d.length===0;return(0,a.jsxs)(`div`,{children:[(0,a.jsx)(`h1`,{className:`text-[var(--color-text-heading)] text-2xl font-semibold mb-1`,children:r(`home.title`)}),(0,a.jsx)(`p`,{className:`text-sm text-[var(--color-text-muted)] mb-8`,children:r(`home.tagline`)}),(0,a.jsxs)(`form`,{onSubmit:u,className:`mb-8 max-w-xl`,"aria-label":r(`home.searchLabel`),children:[(0,a.jsx)(`label`,{htmlFor:`home-search-query`,className:`block font-medium text-[var(--color-text-heading)] mb-2`,children:r(`home.searchLabel`)}),(0,a.jsx)(`input`,{id:`home-search-query`,name:`q`,type:`search`,autoComplete:`off`,placeholder:r(`home.searchPlaceholder`),"aria-describedby":`home-search-hint`,className:`w-full min-h-[44px] px-4 py-2 border border-[var(--color-border)] rounded-[var(--radius-md)] text-[var(--color-text)] bg-[var(--color-surface)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--color-focus-ring)] focus-visible:outline-offset-2`}),(0,a.jsx)(`p`,{id:`home-search-hint`,className:`text-sm text-[var(--color-text-muted)] mt-2`,children:r(`home.searchHint`)})]}),(0,a.jsxs)(`div`,{className:`flex gap-4 flex-wrap mb-8`,"aria-label":r(`home.statsLabel`),children:[f&&d.length===0?(0,a.jsxs)(`div`,{className:`min-w-[7rem] rounded-[var(--radius-md)] border border-[var(--color-border)] bg-[var(--color-surface-elevated)] p-5`,children:[(0,a.jsx)(`span`,{className:`text-2xl font-semibold text-[var(--color-text-heading)]`,children:`—`}),(0,a.jsx)(`span`,{className:`block text-xs uppercase tracking-wide text-[var(--color-text-muted)] mt-1`,children:r(`home.stats.spacesLabel`)})]}):null,d.map(e=>(0,a.jsxs)(`div`,{className:`min-w-[7rem] rounded-[var(--radius-md)] border border-[var(--color-border)] bg-[var(--color-surface-elevated)] p-5`,children:[(0,a.jsx)(`span`,{className:`block font-semibold text-[var(--color-text-heading)]`,children:e.name}),(0,a.jsx)(`span`,{className:`block text-sm text-[var(--color-text-muted)] mt-1`,children:c?`—`:r(`home.stats.protocolCount`,{count:e.chain_count})})]},e.name))]}),(0,a.jsxs)(`p`,{className:`text-sm text-[var(--color-text-muted)]`,children:[r(`home.ctaPre`),` `,(0,a.jsx)(e,{to:`/kairos`,className:`text-[var(--color-primary)] font-medium underline hover:no-underline focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--color-focus-ring)] focus-visible:outline-offset-2`,children:r(`nav.kairos`)}),r(`home.ctaSuffix`)]})]})}export{o as HomePage};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as e}from"./rolldown-runtime-Dw2cE7zH.js";import{a as t,g as n,p as r,y as i}from"./vendor-BxD5ItEO.js";import{i as a,t as o}from"./react-BdWJx0XL.js";import"./tiptap-BEg0BoNB.js";import{t as s}from"./api-D88c6lbH.js";import{t as c}from"./useSpaces-DdE67BYD.js";import{t as l}from"./ErrorAlert-Bp_BC2t_.js";var u=e(a(),1);async function d(e){let t=await s(`/api/kairos_search`,{method:`POST`,body:JSON.stringify({query:e.trim()})});if(!t.ok){let e=await t.json().catch(()=>({}));throw Error(e.message??t.statusText)}return t.json()}function f(e,t){return n({queryKey:[`search`,e],queryFn:()=>d(e),enabled:t&&e.trim().length>0})}var p=o();function m(){return(0,p.jsx)(`ul`,{className:`list-none p-0 m-0 space-y-2`,role:`list`,"aria-hidden":`true`,children:[1,2,3].map(e=>(0,p.jsxs)(`li`,{className:`rounded-[var(--radius-md)] border border-[var(--color-border)] bg-[var(--color-surface-elevated)] p-4 flex justify-between items-start gap-4`,children:[(0,p.jsxs)(`div`,{className:`flex-1 min-w-0 space-y-2`,children:[(0,p.jsx)(`div`,{className:`h-5 w-3/4 rounded bg-[var(--color-border)] animate-pulse`}),(0,p.jsx)(`div`,{className:`h-4 w-1/2 rounded bg-[var(--color-border)] animate-pulse`}),(0,p.jsx)(`div`,{className:`h-5 w-16 rounded bg-[var(--color-border)] animate-pulse`})]}),(0,p.jsx)(`div`,{className:`h-10 w-20 rounded-[var(--radius-md)] bg-[var(--color-border)] animate-pulse flex-shrink-0`})]},e))})}var h={match:`bg-[#dcfce7] text-[#166534]`,refine:`bg-[#dbeafe] text-[#1e40af]`,create:`bg-[#fef3c7] text-[#92400e]`},g=`ABCDEFGHIJKLMNOPQRSTUVWXYZ`.split(``),_=`kairos://mem/`;function v(){let{t:e}=i(),[n,a]=r(),o=n.get(`q`)??``,[s,d]=(0,u.useState)(o),[v,y]=(0,u.useState)(o),[b,x]=(0,u.useState)(null),{data:S,isLoading:C,isError:w,error:T,refetch:E}=f(v,!!v),D=!v,{data:O,isLoading:k,isError:A,error:j,refetch:M}=c(D,{includeChainTitles:!0});(0,u.useEffect)(()=>{let e=n.get(`q`)??``;d(e),y(e)},[n]);let N=e=>{e.preventDefault(),y(s),a(s?{q:s}:{},{replace:!0})},P=S?.choices??[],F={match:0,refine:1,create:2},I=P.slice().sort((e,t)=>{let n=(F[e.role]??99)-(F[t.role]??99);if(n!==0)return n;let r=e.score??-1;return(t.score??-1)-r}),L=I.length>0?Math.max(...I.map(e=>e.score==null?0:e.score*100)):null,{browseChains:R,countsByLetter:z}=(0,u.useMemo)(()=>{let e=[];for(let t of O?.spaces??[])for(let n of t.chains??[])e.push({chain_id:n.chain_id,title:n.title,step_count:n.step_count});let t={};for(let e of g)t[e]=0;for(let n of e){let e=(n.title??``).trim().charAt(0).toUpperCase();g.includes(e)&&(t[e]=(t[e]??0)+1)}return{browseChains:e,countsByLetter:t}},[O?.spaces]),B=(0,u.useMemo)(()=>b?R.filter(e=>(e.title??``).trim().charAt(0).toUpperCase()===b):[],[R,b]);return(0,p.jsxs)(`div`,{children:[(0,p.jsx)(`h1`,{className:`text-[var(--color-text-heading)] text-2xl font-semibold mb-1`,children:e(`kairos.title`)}),(0,p.jsx)(`p`,{className:`text-sm text-[var(--color-text-muted)] mb-8`,children:e(`kairos.searchHint`)}),(0,p.jsxs)(`section`,{className:`mb-8`,"aria-labelledby":`browse-search-label`,children:[(0,p.jsx)(`h2`,{id:`browse-search-label`,className:`sr-only`,children:e(`kairos.searchLabel`)}),(0,p.jsxs)(`form`,{onSubmit:N,className:`mb-6 max-w-xl`,"aria-label":e(`kairos.searchLabel`),children:[(0,p.jsx)(`label`,{htmlFor:`kairos-search-query`,className:`block font-medium text-[var(--color-text-heading)] mb-2`,children:e(`kairos.searchLabel`)}),(0,p.jsx)(`input`,{id:`kairos-search-query`,type:`search`,value:s,onChange:e=>d(e.target.value),placeholder:e(`kairos.searchPlaceholder`),"aria-describedby":`kairos-search-hint`,className:`w-full min-h-[44px] px-4 py-2 border border-[var(--color-border)] rounded-[var(--radius-md)] text-[var(--color-text)] bg-[var(--color-surface)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--color-focus-ring)] focus-visible:outline-offset-2`}),(0,p.jsx)(`p`,{id:`kairos-search-hint`,className:`text-sm text-[var(--color-text-muted)] mt-2`,children:e(`kairos.searchHint`)}),(0,p.jsx)(`button`,{type:`submit`,className:`mt-3 min-h-[44px] min-w-[44px] px-4 py-2 rounded-[var(--radius-md)] font-medium bg-[var(--color-primary)] text-white border-0 cursor-pointer hover:bg-[var(--color-primary-hover)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--color-focus-ring)] focus-visible:outline-offset-2`,children:e(`kairos.search`)})]})]}),w&&(0,p.jsx)(l,{message:T instanceof Error?T.message:String(T),onRetry:()=>E(),showGoBack:!0}),D&&A&&(0,p.jsx)(l,{message:j instanceof Error?j.message:String(j),onRetry:()=>M(),showGoBack:!0}),C&&v&&(0,p.jsxs)(`div`,{className:`mb-4`,"aria-live":`polite`,"aria-busy":`true`,children:[(0,p.jsx)(`p`,{className:`sr-only`,children:e(`kairos.loading`)}),(0,p.jsx)(m,{})]}),D&&k&&(0,p.jsxs)(`div`,{className:`mb-4`,"aria-live":`polite`,"aria-busy":`true`,children:[(0,p.jsx)(`p`,{className:`sr-only`,children:e(`kairos.loading`)}),(0,p.jsx)(m,{})]}),!C&&!w&&!(D&&A)&&(0,p.jsx)(p.Fragment,{children:v?I.length===0?(0,p.jsxs)(`div`,{className:`rounded-[var(--radius-md)] border border-[var(--color-border)] bg-[var(--color-surface-elevated)] p-6`,role:`status`,"aria-live":`polite`,children:[(0,p.jsx)(`p`,{className:`text-[var(--color-text-muted)] mb-4`,children:e(`kairos.empty`)}),(0,p.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[(0,p.jsx)(t,{to:`/kairos`,className:`min-h-[44px] min-w-[44px] inline-flex items-center justify-center px-4 py-2 rounded-[var(--radius-md)] font-medium border border-[var(--color-border)] text-[var(--color-text)] no-underline hover:bg-[var(--color-surface-elevated)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--color-focus-ring)] focus-visible:outline-offset-2`,children:e(`kairos.refineSearch`)}),(0,p.jsx)(t,{to:`/protocols/new`,className:`min-h-[44px] min-w-[44px] inline-flex items-center justify-center px-4 py-2 rounded-[var(--radius-md)] font-medium bg-[var(--color-primary)] text-white border-0 no-underline hover:bg-[var(--color-primary-hover)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--color-focus-ring)] focus-visible:outline-offset-2`,children:e(`kairos.createNew`)})]})]}):v?(0,p.jsxs)(p.Fragment,{children:[I.length>0&&(0,p.jsx)(`p`,{id:`kairos-results-summary`,className:`text-sm text-[var(--color-text-muted)] mb-4`,"aria-live":`polite`,role:`status`,children:e(`kairos.foundMatches`,{count:I.length,top:L==null?0:Math.round(L)})}),(0,p.jsx)(`ul`,{className:`list-none p-0 m-0 space-y-2`,role:`list`,"aria-label":e(`kairos.resultsLabel`),children:I.map(n=>(0,p.jsxs)(`li`,{className:`rounded-[var(--radius-md)] border border-[var(--color-border)] bg-[var(--color-surface-elevated)] p-5 flex justify-between items-start gap-4`,children:[(0,p.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[(0,p.jsx)(`span`,{className:`font-medium text-[var(--color-text-heading)] block`,children:n.label}),(0,p.jsxs)(`div`,{className:`text-sm text-[var(--color-text-muted)] mt-1`,children:[n.chain_label??(n.role===`refine`?e(`kairos.refineMeta`):n.role===`create`?e(`kairos.createMeta`):``),n.score!=null&&` · ${e(`kairos.score`)}: ${Math.round(n.score*100)}%`,n.protocol_version&&` · ${e(`kairos.version`)}: ${n.protocol_version}`]}),(0,p.jsx)(`span`,{className:`inline-block mt-1 text-xs uppercase tracking-wide px-2 py-0.5 rounded ${h[n.role]??`bg-[var(--color-surface)] text-[var(--color-text-muted)]`}`,"aria-label":`Role: ${n.role}`,children:n.role}),n.tags?.length>0&&(0,p.jsx)(`div`,{className:`flex flex-wrap gap-1 mt-2`,"aria-label":e(`kairos.tagsLabel`),children:n.tags.slice(0,8).map(e=>(0,p.jsx)(`span`,{className:`inline-block text-xs px-2 py-0.5 rounded bg-[var(--color-surface)] border border-[var(--color-border)] text-[var(--color-text-muted)]`,children:e},e))})]}),(0,p.jsxs)(`div`,{className:`flex-shrink-0`,children:[n.role===`match`&&(0,p.jsx)(t,{to:`/protocols/${encodeURIComponent(n.uri)}`,"aria-label":e(`kairos.viewProtocol`,{title:n.label}),className:`min-h-[44px] min-w-[44px] inline-flex items-center justify-center px-4 py-2 rounded-[var(--radius-md)] font-medium bg-[var(--color-primary)] text-white no-underline hover:bg-[var(--color-primary-hover)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--color-focus-ring)] focus-visible:outline-offset-2`,children:e(`kairos.view`)}),n.role===`refine`&&(0,p.jsx)(t,{to:`/protocols/${encodeURIComponent(n.uri)}`,className:`min-h-[44px] min-w-[44px] inline-flex items-center justify-center px-4 py-2 rounded-[var(--radius-md)] font-medium bg-[var(--color-primary)] text-white no-underline hover:bg-[var(--color-primary-hover)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--color-focus-ring)] focus-visible:outline-offset-2`,children:e(`kairos.refineSearch`)}),n.role===`create`&&(0,p.jsx)(t,{to:`/protocols/new`,className:`min-h-[44px] min-w-[44px] inline-flex items-center justify-center px-4 py-2 rounded-[var(--radius-md)] font-medium bg-[var(--color-primary)] text-white no-underline hover:bg-[var(--color-primary-hover)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--color-focus-ring)] focus-visible:outline-offset-2`,children:e(`kairos.createNew`)})]})]},n.uri))})]}):null:(0,p.jsxs)(`section`,{"aria-labelledby":`browse-by-label-heading`,children:[(0,p.jsx)(`h2`,{id:`browse-by-label-heading`,className:`text-lg font-semibold text-[var(--color-text-heading)] mb-3`,children:e(`kairos.browseByLabel`)}),(0,p.jsx)(`p`,{className:`text-sm text-[var(--color-text-muted)] mb-4`,children:e(`kairos.browseByLetterHint`)}),!k&&(0,p.jsx)(`div`,{className:`flex flex-wrap gap-2 mb-4`,role:`group`,"aria-label":e(`kairos.browseByLabel`),children:g.map(t=>{let n=z[t]??0;return(0,p.jsxs)(`button`,{type:`button`,onClick:()=>x(e=>e===t?null:t),"aria-expanded":b===t,"aria-controls":`browse-letter-panel-${t}`,"aria-pressed":b===t,"aria-label":e(`kairos.letterCount`,{letter:t,count:n}),className:`min-h-[var(--layout-touch-target)] min-w-[var(--layout-touch-target)] inline-flex items-center justify-center rounded-[var(--radius-md)] border px-3 py-2 text-sm font-medium transition-colors focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--color-focus-ring)] focus-visible:outline-offset-2 ${b===t?`border-[var(--color-primary)] bg-[var(--color-surface-elevated)] text-[var(--color-primary)]`:`border-[var(--color-border)] bg-[var(--color-surface)] text-[var(--color-text)] hover:bg-[var(--color-surface-elevated)]`}`,children:[t,`: `,n]},t)})}),b&&!k&&(0,p.jsxs)(`div`,{id:`browse-letter-panel-${b}`,role:`region`,"aria-labelledby":`browse-letter-panel-heading`,"aria-live":`polite`,className:`rounded-[var(--radius-md)] border border-[var(--color-border)] bg-[var(--color-surface-elevated)] p-5`,children:[(0,p.jsx)(`h3`,{id:`browse-letter-panel-heading`,className:`text-base font-semibold text-[var(--color-text-heading)] mb-3`,children:e(`kairos.labelsStartingWith`,{letter:b})}),B.length===0?(0,p.jsx)(`p`,{className:`text-sm text-[var(--color-text-muted)]`,children:e(`kairos.noLabelsForLetter`)}):(0,p.jsx)(`ul`,{className:`list-none p-0 m-0 space-y-2`,role:`list`,"aria-label":e(`kairos.labelsStartingWith`,{letter:b}),children:B.map(n=>{let r=`${_}${n.chain_id}`;return(0,p.jsxs)(`li`,{className:`flex flex-wrap items-center justify-between gap-3 rounded-[var(--radius-sm)] border border-[var(--color-border)] bg-[var(--color-surface)] p-3`,children:[(0,p.jsx)(`span`,{className:`font-medium text-[var(--color-text-heading)]`,children:n.title}),(0,p.jsx)(t,{to:`/protocols/${encodeURIComponent(r)}`,"aria-label":e(`kairos.viewProtocol`,{title:n.title}),className:`min-h-[var(--layout-touch-target)] min-w-[var(--layout-touch-target)] inline-flex items-center justify-center px-4 py-2 rounded-[var(--radius-md)] font-medium bg-[var(--color-primary)] text-white no-underline hover:bg-[var(--color-primary-hover)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--color-focus-ring)] focus-visible:outline-offset-2`,children:e(`kairos.view`)})]},n.chain_id)})})]})]})})]})}export{v as KairosPage};
|
|
1
|
+
import{r as e}from"./rolldown-runtime-Dw2cE7zH.js";import{a as t,g as n,p as r,y as i}from"./vendor-GiUVcjs7.js";import{i as a,t as o}from"./react-BdWJx0XL.js";import"./tiptap-kMFBDujG.js";import{t as s}from"./api-D88c6lbH.js";import{t as c}from"./useSpaces-BV6eUjY3.js";import{t as l}from"./ErrorAlert-ME7tEJ6X.js";var u=e(a(),1);async function d(e){let t=await s(`/api/kairos_search`,{method:`POST`,body:JSON.stringify({query:e.trim()})});if(!t.ok){let e=await t.json().catch(()=>({}));throw Error(e.message??t.statusText)}return t.json()}function f(e,t){return n({queryKey:[`search`,e],queryFn:()=>d(e),enabled:t&&e.trim().length>0})}var p=o();function m(){return(0,p.jsx)(`ul`,{className:`list-none p-0 m-0 space-y-2`,role:`list`,"aria-hidden":`true`,children:[1,2,3].map(e=>(0,p.jsxs)(`li`,{className:`rounded-[var(--radius-md)] border border-[var(--color-border)] bg-[var(--color-surface-elevated)] p-4 flex justify-between items-start gap-4`,children:[(0,p.jsxs)(`div`,{className:`flex-1 min-w-0 space-y-2`,children:[(0,p.jsx)(`div`,{className:`h-5 w-3/4 rounded bg-[var(--color-border)] animate-pulse`}),(0,p.jsx)(`div`,{className:`h-4 w-1/2 rounded bg-[var(--color-border)] animate-pulse`}),(0,p.jsx)(`div`,{className:`h-5 w-16 rounded bg-[var(--color-border)] animate-pulse`})]}),(0,p.jsx)(`div`,{className:`h-10 w-20 rounded-[var(--radius-md)] bg-[var(--color-border)] animate-pulse flex-shrink-0`})]},e))})}var h={match:`bg-[#dcfce7] text-[#166534]`,refine:`bg-[#dbeafe] text-[#1e40af]`,create:`bg-[#fef3c7] text-[#92400e]`},g=`ABCDEFGHIJKLMNOPQRSTUVWXYZ`.split(``),_=`kairos://mem/`;function v(){let{t:e}=i(),[n,a]=r(),o=n.get(`q`)??``,[s,d]=(0,u.useState)(o),[v,y]=(0,u.useState)(o),[b,x]=(0,u.useState)(null),{data:S,isLoading:C,isError:w,error:T,refetch:E}=f(v,!!v),D=!v,{data:O,isLoading:k,isError:A,error:j,refetch:M}=c(D,{includeChainTitles:!0});(0,u.useEffect)(()=>{let e=n.get(`q`)??``;d(e),y(e)},[n]);let N=e=>{e.preventDefault(),y(s),a(s?{q:s}:{},{replace:!0})},P=S?.choices??[],F={match:0,refine:1,create:2},I=P.slice().sort((e,t)=>{let n=(F[e.role]??99)-(F[t.role]??99);if(n!==0)return n;let r=e.score??-1;return(t.score??-1)-r}),L=I.length>0?Math.max(...I.map(e=>e.score==null?0:e.score*100)):null,{browseChains:R,countsByLetter:z}=(0,u.useMemo)(()=>{let e=[];for(let t of O?.spaces??[])for(let n of t.chains??[])e.push({chain_id:n.chain_id,title:n.title,step_count:n.step_count});let t={};for(let e of g)t[e]=0;for(let n of e){let e=(n.title??``).trim().charAt(0).toUpperCase();g.includes(e)&&(t[e]=(t[e]??0)+1)}return{browseChains:e,countsByLetter:t}},[O?.spaces]),B=(0,u.useMemo)(()=>b?R.filter(e=>(e.title??``).trim().charAt(0).toUpperCase()===b):[],[R,b]);return(0,p.jsxs)(`div`,{children:[(0,p.jsx)(`h1`,{className:`text-[var(--color-text-heading)] text-2xl font-semibold mb-1`,children:e(`kairos.title`)}),(0,p.jsx)(`p`,{className:`text-sm text-[var(--color-text-muted)] mb-8`,children:e(`kairos.searchHint`)}),(0,p.jsxs)(`section`,{className:`mb-8`,"aria-labelledby":`browse-search-label`,children:[(0,p.jsx)(`h2`,{id:`browse-search-label`,className:`sr-only`,children:e(`kairos.searchLabel`)}),(0,p.jsxs)(`form`,{onSubmit:N,className:`mb-6 max-w-xl`,"aria-label":e(`kairos.searchLabel`),children:[(0,p.jsx)(`label`,{htmlFor:`kairos-search-query`,className:`block font-medium text-[var(--color-text-heading)] mb-2`,children:e(`kairos.searchLabel`)}),(0,p.jsx)(`input`,{id:`kairos-search-query`,type:`search`,value:s,onChange:e=>d(e.target.value),placeholder:e(`kairos.searchPlaceholder`),"aria-describedby":`kairos-search-hint`,className:`w-full min-h-[44px] px-4 py-2 border border-[var(--color-border)] rounded-[var(--radius-md)] text-[var(--color-text)] bg-[var(--color-surface)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--color-focus-ring)] focus-visible:outline-offset-2`}),(0,p.jsx)(`p`,{id:`kairos-search-hint`,className:`text-sm text-[var(--color-text-muted)] mt-2`,children:e(`kairos.searchHint`)}),(0,p.jsx)(`button`,{type:`submit`,className:`mt-3 min-h-[44px] min-w-[44px] px-4 py-2 rounded-[var(--radius-md)] font-medium bg-[var(--color-primary)] text-white border-0 cursor-pointer hover:bg-[var(--color-primary-hover)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--color-focus-ring)] focus-visible:outline-offset-2`,children:e(`kairos.search`)})]})]}),w&&(0,p.jsx)(l,{message:T instanceof Error?T.message:String(T),onRetry:()=>E(),showGoBack:!0}),D&&A&&(0,p.jsx)(l,{message:j instanceof Error?j.message:String(j),onRetry:()=>M(),showGoBack:!0}),C&&v&&(0,p.jsxs)(`div`,{className:`mb-4`,"aria-live":`polite`,"aria-busy":`true`,children:[(0,p.jsx)(`p`,{className:`sr-only`,children:e(`kairos.loading`)}),(0,p.jsx)(m,{})]}),D&&k&&(0,p.jsxs)(`div`,{className:`mb-4`,"aria-live":`polite`,"aria-busy":`true`,children:[(0,p.jsx)(`p`,{className:`sr-only`,children:e(`kairos.loading`)}),(0,p.jsx)(m,{})]}),!C&&!w&&!(D&&A)&&(0,p.jsx)(p.Fragment,{children:v?I.length===0?(0,p.jsxs)(`div`,{className:`rounded-[var(--radius-md)] border border-[var(--color-border)] bg-[var(--color-surface-elevated)] p-6`,role:`status`,"aria-live":`polite`,children:[(0,p.jsx)(`p`,{className:`text-[var(--color-text-muted)] mb-4`,children:e(`kairos.empty`)}),(0,p.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[(0,p.jsx)(t,{to:`/kairos`,className:`min-h-[44px] min-w-[44px] inline-flex items-center justify-center px-4 py-2 rounded-[var(--radius-md)] font-medium border border-[var(--color-border)] text-[var(--color-text)] no-underline hover:bg-[var(--color-surface-elevated)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--color-focus-ring)] focus-visible:outline-offset-2`,children:e(`kairos.refineSearch`)}),(0,p.jsx)(t,{to:`/protocols/new`,className:`min-h-[44px] min-w-[44px] inline-flex items-center justify-center px-4 py-2 rounded-[var(--radius-md)] font-medium bg-[var(--color-primary)] text-white border-0 no-underline hover:bg-[var(--color-primary-hover)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--color-focus-ring)] focus-visible:outline-offset-2`,children:e(`kairos.createNew`)})]})]}):v?(0,p.jsxs)(p.Fragment,{children:[I.length>0&&(0,p.jsx)(`p`,{id:`kairos-results-summary`,className:`text-sm text-[var(--color-text-muted)] mb-4`,"aria-live":`polite`,role:`status`,children:e(`kairos.foundMatches`,{count:I.length,top:L==null?0:Math.round(L)})}),(0,p.jsx)(`ul`,{className:`list-none p-0 m-0 space-y-2`,role:`list`,"aria-label":e(`kairos.resultsLabel`),children:I.map(n=>(0,p.jsxs)(`li`,{className:`rounded-[var(--radius-md)] border border-[var(--color-border)] bg-[var(--color-surface-elevated)] p-5 flex justify-between items-start gap-4`,children:[(0,p.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[(0,p.jsx)(`span`,{className:`font-medium text-[var(--color-text-heading)] block`,children:n.label}),(0,p.jsxs)(`div`,{className:`text-sm text-[var(--color-text-muted)] mt-1`,children:[n.chain_label??(n.role===`refine`?e(`kairos.refineMeta`):n.role===`create`?e(`kairos.createMeta`):``),n.score!=null&&` · ${e(`kairos.score`)}: ${Math.round(n.score*100)}%`,n.protocol_version&&` · ${e(`kairos.version`)}: ${n.protocol_version}`]}),(0,p.jsx)(`span`,{className:`inline-block mt-1 text-xs uppercase tracking-wide px-2 py-0.5 rounded ${h[n.role]??`bg-[var(--color-surface)] text-[var(--color-text-muted)]`}`,"aria-label":`Role: ${n.role}`,children:n.role}),n.tags?.length>0&&(0,p.jsx)(`div`,{className:`flex flex-wrap gap-1 mt-2`,"aria-label":e(`kairos.tagsLabel`),children:n.tags.slice(0,8).map(e=>(0,p.jsx)(`span`,{className:`inline-block text-xs px-2 py-0.5 rounded bg-[var(--color-surface)] border border-[var(--color-border)] text-[var(--color-text-muted)]`,children:e},e))})]}),(0,p.jsxs)(`div`,{className:`flex-shrink-0`,children:[n.role===`match`&&(0,p.jsx)(t,{to:`/protocols/${encodeURIComponent(n.uri)}`,"aria-label":e(`kairos.viewProtocol`,{title:n.label}),className:`min-h-[44px] min-w-[44px] inline-flex items-center justify-center px-4 py-2 rounded-[var(--radius-md)] font-medium bg-[var(--color-primary)] text-white no-underline hover:bg-[var(--color-primary-hover)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--color-focus-ring)] focus-visible:outline-offset-2`,children:e(`kairos.view`)}),n.role===`refine`&&(0,p.jsx)(t,{to:`/protocols/${encodeURIComponent(n.uri)}`,className:`min-h-[44px] min-w-[44px] inline-flex items-center justify-center px-4 py-2 rounded-[var(--radius-md)] font-medium bg-[var(--color-primary)] text-white no-underline hover:bg-[var(--color-primary-hover)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--color-focus-ring)] focus-visible:outline-offset-2`,children:e(`kairos.refineSearch`)}),n.role===`create`&&(0,p.jsx)(t,{to:`/protocols/new`,className:`min-h-[44px] min-w-[44px] inline-flex items-center justify-center px-4 py-2 rounded-[var(--radius-md)] font-medium bg-[var(--color-primary)] text-white no-underline hover:bg-[var(--color-primary-hover)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--color-focus-ring)] focus-visible:outline-offset-2`,children:e(`kairos.createNew`)})]})]},n.uri))})]}):null:(0,p.jsxs)(`section`,{"aria-labelledby":`browse-by-label-heading`,children:[(0,p.jsx)(`h2`,{id:`browse-by-label-heading`,className:`text-lg font-semibold text-[var(--color-text-heading)] mb-3`,children:e(`kairos.browseByLabel`)}),(0,p.jsx)(`p`,{className:`text-sm text-[var(--color-text-muted)] mb-4`,children:e(`kairos.browseByLetterHint`)}),!k&&(0,p.jsx)(`div`,{className:`flex flex-wrap gap-2 mb-4`,role:`group`,"aria-label":e(`kairos.browseByLabel`),children:g.map(t=>{let n=z[t]??0;return(0,p.jsxs)(`button`,{type:`button`,onClick:()=>x(e=>e===t?null:t),"aria-expanded":b===t,"aria-controls":`browse-letter-panel-${t}`,"aria-pressed":b===t,"aria-label":e(`kairos.letterCount`,{letter:t,count:n}),className:`min-h-[var(--layout-touch-target)] min-w-[var(--layout-touch-target)] inline-flex items-center justify-center rounded-[var(--radius-md)] border px-3 py-2 text-sm font-medium transition-colors focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--color-focus-ring)] focus-visible:outline-offset-2 ${b===t?`border-[var(--color-primary)] bg-[var(--color-surface-elevated)] text-[var(--color-primary)]`:`border-[var(--color-border)] bg-[var(--color-surface)] text-[var(--color-text)] hover:bg-[var(--color-surface-elevated)]`}`,children:[t,`: `,n]},t)})}),b&&!k&&(0,p.jsxs)(`div`,{id:`browse-letter-panel-${b}`,role:`region`,"aria-labelledby":`browse-letter-panel-heading`,"aria-live":`polite`,className:`rounded-[var(--radius-md)] border border-[var(--color-border)] bg-[var(--color-surface-elevated)] p-5`,children:[(0,p.jsx)(`h3`,{id:`browse-letter-panel-heading`,className:`text-base font-semibold text-[var(--color-text-heading)] mb-3`,children:e(`kairos.labelsStartingWith`,{letter:b})}),B.length===0?(0,p.jsx)(`p`,{className:`text-sm text-[var(--color-text-muted)]`,children:e(`kairos.noLabelsForLetter`)}):(0,p.jsx)(`ul`,{className:`list-none p-0 m-0 space-y-2`,role:`list`,"aria-label":e(`kairos.labelsStartingWith`,{letter:b}),children:B.map(n=>{let r=`${_}${n.chain_id}`;return(0,p.jsxs)(`li`,{className:`flex flex-wrap items-center justify-between gap-3 rounded-[var(--radius-sm)] border border-[var(--color-border)] bg-[var(--color-surface)] p-3`,children:[(0,p.jsx)(`span`,{className:`font-medium text-[var(--color-text-heading)]`,children:n.title}),(0,p.jsx)(t,{to:`/protocols/${encodeURIComponent(r)}`,"aria-label":e(`kairos.viewProtocol`,{title:n.title}),className:`min-h-[var(--layout-touch-target)] min-w-[var(--layout-touch-target)] inline-flex items-center justify-center px-4 py-2 rounded-[var(--radius-md)] font-medium bg-[var(--color-primary)] text-white no-underline hover:bg-[var(--color-primary-hover)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--color-focus-ring)] focus-visible:outline-offset-2`,children:e(`kairos.view`)})]},n.chain_id)})})]})]})})]})}export{v as KairosPage};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{y as e}from"./vendor-GiUVcjs7.js";import{t}from"./react-BdWJx0XL.js";import"./tiptap-kMFBDujG.js";import{t as n}from"./ErrorAlert-ME7tEJ6X.js";var r=t();function i(){let{t}=e();return(0,r.jsxs)(`div`,{children:[(0,r.jsx)(`h1`,{className:`text-[var(--color-text-heading)] text-2xl font-semibold mb-4`,children:t(`notFound.title`)}),(0,r.jsx)(n,{message:t(`notFound.message`),showGoBack:!0})]})}export{i as NotFoundPage};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as e}from"./rolldown-runtime-Dw2cE7zH.js";import{a as t,f as n,y as r}from"./vendor-BxD5ItEO.js";import{i,t as a}from"./react-BdWJx0XL.js";import"./tiptap-BEg0BoNB.js";import{i as o,n as s}from"./useProtocol-D_32bpf9.js";import{t as c}from"./RenderedMarkdown-Dd_bDNwz.js";var l=e(i(),1),u=a();function d({value:e,label:t,className:n}){let{t:i}=r(),[a,o]=(0,l.useState)(!1);return(0,u.jsx)(`button`,{type:`button`,onClick:(0,l.useCallback)(async()=>{try{await navigator.clipboard.writeText(e),o(!0),setTimeout(()=>o(!1),2e3)}catch{}},[e]),className:n,"aria-label":a?i(`run.copied`):t,title:t,children:i(a?`run.copied`:`run.copy`)})}var f={shell:`bg-[#fef3c7] text-[#92400e]`,mcp:`bg-[#dbeafe] text-[#1e40af]`,user_input:`bg-[#ede9fe] text-[#5b21b6]`,comment:`bg-[#e2e8f0] text-[#334155]`},p={shell:`Shell command`,mcp:`MCP tool call`,user_input:`User input`,comment:`Comment`};function m(){let{t:e}=r(),{uri:i}=n(),{data:a,isLoading:m,isError:h,error:g}=o(i?decodeURIComponent(i):void 0,!0),[_,v]=(0,l.useState)(null),[y,b]=(0,l.useState)(!1),x=(0,l.useRef)(null);if((0,l.useEffect)(()=>{if(!y)return;let e=e=>{x.current&&!x.current.contains(e.target)&&b(!1)};return document.addEventListener(`click`,e),()=>document.removeEventListener(`click`,e)},[y]),m&&!a)return(0,u.jsx)(`p`,{className:`text-[var(--color-text-muted)]`,children:e(`protocol.loading`)});if(h||!a)return(0,u.jsxs)(`div`,{role:`alert`,className:`p-4 rounded-[var(--radius-md)] bg-[var(--color-error-bg)] text-[var(--color-error)]`,children:[g instanceof Error?g.message:e(`protocol.notFound`),(0,u.jsx)(t,{to:`/`,className:`block mt-2 text-[var(--color-primary)] underline hover:no-underline focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--color-focus-ring)] focus-visible:outline-offset-2`,children:e(`notFound.goHome`)})]});let{title:S,steps:C,triggers:w,completion:T}=s(a.markdown_doc),E=()=>{let e=S.replace(/[^a-zA-Z0-9]+/g,`-`).replace(/^-|-$/g,``)||`protocol`,t=new Blob([a.markdown_doc],{type:`text/markdown;charset=utf-8`}),n=URL.createObjectURL(t),r=document.createElement(`a`);r.href=n,r.download=`${e}.md`,r.click(),URL.revokeObjectURL(n),b(!1)},D=()=>{let e=S.replace(/[^a-zA-Z0-9]+/g,`-`).replace(/^-|-$/g,``)||`protocol`,t=`# ${S}\n\n${a.markdown_doc}`,n=new Blob([t],{type:`text/markdown;charset=utf-8`}),r=URL.createObjectURL(n),i=document.createElement(`a`);i.href=r,i.download=`${e}-skill.md`,i.click(),URL.revokeObjectURL(r),b(!1)};return(0,u.jsxs)(`div`,{children:[(0,u.jsx)(`h1`,{className:`text-[var(--color-text-heading)] text-2xl font-semibold mb-3`,children:S}),(0,u.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2 mb-6`,children:[(0,u.jsxs)(`p`,{className:`text-sm text-[var(--color-text-muted)] m-0`,children:[(0,u.jsxs)(`span`,{className:`sr-only`,children:[e(`protocol.uri`),`: `]}),(0,u.jsx)(`code`,{className:`text-xs bg-[var(--color-surface-elevated)] px-2 py-0.5 rounded break-all`,children:a.uri}),(0,u.jsxs)(`span`,{className:`ml-2`,children:[`· `,e(`protocol.readOnly`)]})]}),(0,u.jsx)(d,{value:a.uri,label:e(`protocol.copyUri`),className:`min-h-[44px] min-w-[44px] inline-flex items-center justify-center px-3 py-1.5 text-sm font-medium rounded-[var(--radius-md)] border border-[var(--color-border)] text-[var(--color-text)] bg-[var(--color-surface)] hover:bg-[var(--color-surface-elevated)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--color-focus-ring)] focus-visible:outline-offset-2`}),(0,u.jsxs)(`div`,{className:`relative`,ref:x,children:[(0,u.jsx)(`button`,{type:`button`,onClick:()=>b(e=>!e),"aria-expanded":y,"aria-haspopup":`true`,"aria-label":e(`protocol.download`),className:`min-h-[44px] min-w-[44px] inline-flex items-center justify-center px-3 py-1.5 text-sm font-medium rounded-[var(--radius-md)] border border-[var(--color-border)] text-[var(--color-text)] bg-[var(--color-surface)] hover:bg-[var(--color-surface-elevated)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--color-focus-ring)] focus-visible:outline-offset-2`,children:e(`protocol.download`)}),y&&(0,u.jsxs)(`div`,{className:`absolute left-0 top-full z-10 mt-1 min-w-[12rem] rounded-[var(--radius-md)] border border-[var(--color-border)] bg-[var(--color-surface)] py-1 shadow-sm`,role:`menu`,children:[(0,u.jsxs)(`button`,{type:`button`,role:`menuitem`,onClick:E,className:`flex w-full min-h-[44px] items-center justify-between px-3 py-2 text-left text-sm text-[var(--color-text)] hover:bg-[var(--color-surface-elevated)] focus:bg-[var(--color-surface-elevated)] focus:outline-none`,children:[e(`protocol.downloadAsMarkdown`),(0,u.jsx)(`span`,{className:`text-[var(--color-text-muted)]`,children:`.md`})]}),(0,u.jsxs)(`button`,{type:`button`,role:`menuitem`,onClick:D,className:`flex w-full min-h-[44px] items-center justify-between px-3 py-2 text-left text-sm text-[var(--color-text)] hover:bg-[var(--color-surface-elevated)] focus:bg-[var(--color-surface-elevated)] focus:outline-none`,children:[e(`protocol.downloadAsSkill`),(0,u.jsx)(`span`,{className:`text-[var(--color-text-muted)]`,children:`.md`})]})]})]}),(0,u.jsx)(t,{to:`/protocols/${encodeURIComponent(a.uri)}/skill`,className:`min-h-[44px] min-w-[44px] inline-flex items-center justify-center px-3 py-1.5 text-sm font-medium rounded-[var(--radius-md)] border border-[var(--color-border)] text-[var(--color-text)] bg-[var(--color-surface)] no-underline hover:bg-[var(--color-surface-elevated)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--color-focus-ring)] focus-visible:outline-offset-2`,children:e(`protocol.editAsSkill`)})]}),(0,u.jsxs)(`div`,{className:`flex flex-wrap gap-2 mb-8`,children:[(0,u.jsx)(t,{to:`/protocols/${encodeURIComponent(a.uri)}/run`,className:`min-h-[44px] min-w-[44px] inline-flex items-center justify-center px-4 py-2 rounded-[var(--radius-md)] font-medium bg-[var(--color-primary)] text-white no-underline hover:bg-[var(--color-primary-hover)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--color-focus-ring)] focus-visible:outline-offset-2`,children:e(`protocol.runGuided`)}),(0,u.jsx)(t,{to:`/protocols/${encodeURIComponent(a.uri)}/edit`,className:`min-h-[44px] min-w-[44px] inline-flex items-center justify-center px-4 py-2 rounded-[var(--radius-md)] font-medium border border-[var(--color-border)] text-[var(--color-text)] no-underline hover:bg-[var(--color-surface-elevated)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--color-focus-ring)] focus-visible:outline-offset-2`,children:e(`protocol.edit`)}),(0,u.jsx)(t,{to:`/protocols/new`,className:`min-h-[44px] min-w-[44px] inline-flex items-center justify-center px-4 py-2 rounded-[var(--radius-md)] font-medium border border-[var(--color-border)] text-[var(--color-text)] no-underline hover:bg-[var(--color-surface-elevated)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--color-focus-ring)] focus-visible:outline-offset-2`,children:e(`protocol.duplicate`)})]}),(0,u.jsxs)(`section`,{"aria-labelledby":`steps-heading`,className:`mb-8`,children:[(0,u.jsx)(`h2`,{id:`steps-heading`,className:`text-lg font-semibold text-[var(--color-text-heading)] mb-2`,children:e(`protocol.steps`)}),(0,u.jsx)(`ul`,{className:`list-none p-0 m-0 rounded-[var(--radius-md)] border border-[var(--color-border)] bg-[var(--color-surface-elevated)] divide-y divide-[var(--color-border)]`,children:C.map((t,n)=>(0,u.jsxs)(`li`,{className:`p-5`,children:[(0,u.jsxs)(`div`,{className:`flex items-start justify-between gap-4`,children:[(0,u.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,u.jsxs)(`span`,{className:`block text-sm font-medium text-[var(--color-text)]`,children:[`Step `,n+1,`: `,t.label]}),(0,u.jsx)(`div`,{className:`text-sm text-[var(--color-text-muted)] mt-1 break-words`,children:t.summary}),(0,u.jsx)(`span`,{className:`inline-block mt-1 text-xs uppercase tracking-wide px-2 py-0.5 rounded ${f[t.type]??`bg-[var(--color-surface)] text-[var(--color-text-muted)]`}`,"aria-label":`Challenge type: ${p[t.type]??t.type}`,children:p[t.type]??t.type})]}),(0,u.jsxs)(`div`,{className:`flex items-center gap-2 flex-shrink-0`,children:[(0,u.jsx)(d,{value:t.body||t.summary,label:`${e(`run.copy`)} ${t.label}`,className:`min-h-[44px] min-w-[44px] inline-flex items-center justify-center px-3 py-1.5 text-sm font-medium rounded-[var(--radius-md)] border border-[var(--color-border)] text-[var(--color-text)] bg-[var(--color-surface)] hover:bg-[var(--color-surface-elevated)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--color-focus-ring)] focus-visible:outline-offset-2`}),t.body?(0,u.jsx)(`button`,{type:`button`,onClick:()=>v(_===n?null:n),"aria-expanded":_===n,"aria-controls":`step-detail-${n}`,id:`step-toggle-${n}`,className:`min-h-[44px] min-w-[44px] inline-flex items-center justify-center px-3 py-1.5 text-sm font-medium rounded-[var(--radius-md)] border border-[var(--color-border)] text-[var(--color-text)] bg-[var(--color-surface)] hover:bg-[var(--color-surface-elevated)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--color-focus-ring)] focus-visible:outline-offset-2`,children:e(_===n?`protocol.collapse`:`protocol.expand`)}):null]})]}),t.body?(0,u.jsx)(`div`,{id:`step-detail-${n}`,role:`region`,"aria-labelledby":`step-toggle-${n}`,hidden:_!==n,className:`mt-3 pt-3 border-t border-[var(--color-border)]`,children:(0,u.jsx)(c,{content:t.body})}):null]},n))})]}),w&&(0,u.jsxs)(`section`,{"aria-labelledby":`triggers-heading`,className:`mb-8`,children:[(0,u.jsx)(`h2`,{id:`triggers-heading`,className:`text-lg font-semibold text-[var(--color-text-heading)] mb-2`,children:e(`protocol.triggers`)}),(0,u.jsx)(`div`,{className:`rounded-[var(--radius-md)] border border-[var(--color-border)] bg-[var(--color-surface-elevated)] p-4`,children:(0,u.jsx)(c,{content:w})})]}),T&&(0,u.jsxs)(`section`,{"aria-labelledby":`completion-heading`,className:`mb-8`,children:[(0,u.jsx)(`h2`,{id:`completion-heading`,className:`text-lg font-semibold text-[var(--color-text-heading)] mb-2`,children:e(`protocol.completion`)}),(0,u.jsx)(`div`,{className:`rounded-[var(--radius-md)] border border-[var(--color-border)] bg-[var(--color-surface-elevated)] p-4`,children:(0,u.jsx)(c,{content:T})})]}),(0,u.jsxs)(`div`,{className:`rounded-[var(--radius-md)] border border-[var(--color-border)] bg-[var(--color-surface-elevated)] p-5 mt-8`,role:`region`,"aria-labelledby":`how-to-use-heading`,children:[(0,u.jsx)(`h2`,{id:`how-to-use-heading`,className:`text-base font-semibold text-[var(--color-text-heading)] mb-2`,children:e(`protocol.howToUse`)}),(0,u.jsx)(`p`,{className:`text-sm text-[var(--color-text-muted)] mb-2`,children:e(`protocol.howToUseInProduct`)}),(0,u.jsxs)(`p`,{className:`text-sm text-[var(--color-text-muted)]`,children:[e(`protocol.howToUseCopy`),` `,(0,u.jsx)(`a`,{href:`https://github.com/debian777/kairos-mcp#readme`,target:`_blank`,rel:`noopener noreferrer`,className:`text-[var(--color-primary)] underline hover:no-underline focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--color-focus-ring)] focus-visible:outline-offset-2`,children:e(`protocol.docsLink`)})]})]})]})}export{m as ProtocolDetailPage};
|
|
1
|
+
import{r as e}from"./rolldown-runtime-Dw2cE7zH.js";import{a as t,f as n,y as r}from"./vendor-GiUVcjs7.js";import{i,t as a}from"./react-BdWJx0XL.js";import"./tiptap-kMFBDujG.js";import{i as o,n as s}from"./useProtocol-BruWpIzq.js";import{t as c}from"./RenderedMarkdown-DjbuQlBl.js";var l=e(i(),1),u=a();function d({value:e,label:t,className:n}){let{t:i}=r(),[a,o]=(0,l.useState)(!1);return(0,u.jsx)(`button`,{type:`button`,onClick:(0,l.useCallback)(async()=>{try{await navigator.clipboard.writeText(e),o(!0),setTimeout(()=>o(!1),2e3)}catch{}},[e]),className:n,"aria-label":a?i(`run.copied`):t,title:t,children:i(a?`run.copied`:`run.copy`)})}var f={shell:`bg-[#fef3c7] text-[#92400e]`,mcp:`bg-[#dbeafe] text-[#1e40af]`,user_input:`bg-[#ede9fe] text-[#5b21b6]`,comment:`bg-[#e2e8f0] text-[#334155]`},p={shell:`Shell command`,mcp:`MCP tool call`,user_input:`User input`,comment:`Comment`};function m(){let{t:e}=r(),{uri:i}=n(),{data:a,isLoading:m,isError:h,error:g}=o(i?decodeURIComponent(i):void 0,!0),[_,v]=(0,l.useState)(null),[y,b]=(0,l.useState)(!1),x=(0,l.useRef)(null);if((0,l.useEffect)(()=>{if(!y)return;let e=e=>{x.current&&!x.current.contains(e.target)&&b(!1)};return document.addEventListener(`click`,e),()=>document.removeEventListener(`click`,e)},[y]),m&&!a)return(0,u.jsx)(`p`,{className:`text-[var(--color-text-muted)]`,children:e(`protocol.loading`)});if(h||!a)return(0,u.jsxs)(`div`,{role:`alert`,className:`p-4 rounded-[var(--radius-md)] bg-[var(--color-error-bg)] text-[var(--color-error)]`,children:[g instanceof Error?g.message:e(`protocol.notFound`),(0,u.jsx)(t,{to:`/`,className:`block mt-2 text-[var(--color-primary)] underline hover:no-underline focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--color-focus-ring)] focus-visible:outline-offset-2`,children:e(`notFound.goHome`)})]});let{title:S,steps:C,triggers:w,completion:T}=s(a.markdown_doc),E=()=>{let e=S.replace(/[^a-zA-Z0-9]+/g,`-`).replace(/^-|-$/g,``)||`protocol`,t=new Blob([a.markdown_doc],{type:`text/markdown;charset=utf-8`}),n=URL.createObjectURL(t),r=document.createElement(`a`);r.href=n,r.download=`${e}.md`,r.click(),URL.revokeObjectURL(n),b(!1)},D=()=>{let e=S.replace(/[^a-zA-Z0-9]+/g,`-`).replace(/^-|-$/g,``)||`protocol`,t=`# ${S}\n\n${a.markdown_doc}`,n=new Blob([t],{type:`text/markdown;charset=utf-8`}),r=URL.createObjectURL(n),i=document.createElement(`a`);i.href=r,i.download=`${e}-skill.md`,i.click(),URL.revokeObjectURL(r),b(!1)};return(0,u.jsxs)(`div`,{children:[(0,u.jsx)(`h1`,{className:`text-[var(--color-text-heading)] text-2xl font-semibold mb-3`,children:S}),(0,u.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2 mb-6`,children:[(0,u.jsxs)(`p`,{className:`text-sm text-[var(--color-text-muted)] m-0`,children:[(0,u.jsxs)(`span`,{className:`sr-only`,children:[e(`protocol.uri`),`: `]}),(0,u.jsx)(`code`,{className:`text-xs bg-[var(--color-surface-elevated)] px-2 py-0.5 rounded break-all`,children:a.uri}),(0,u.jsxs)(`span`,{className:`ml-2`,children:[`· `,e(`protocol.readOnly`)]})]}),(0,u.jsx)(d,{value:a.uri,label:e(`protocol.copyUri`),className:`min-h-[44px] min-w-[44px] inline-flex items-center justify-center px-3 py-1.5 text-sm font-medium rounded-[var(--radius-md)] border border-[var(--color-border)] text-[var(--color-text)] bg-[var(--color-surface)] hover:bg-[var(--color-surface-elevated)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--color-focus-ring)] focus-visible:outline-offset-2`}),(0,u.jsxs)(`div`,{className:`relative`,ref:x,children:[(0,u.jsx)(`button`,{type:`button`,onClick:()=>b(e=>!e),"aria-expanded":y,"aria-haspopup":`true`,"aria-label":e(`protocol.download`),className:`min-h-[44px] min-w-[44px] inline-flex items-center justify-center px-3 py-1.5 text-sm font-medium rounded-[var(--radius-md)] border border-[var(--color-border)] text-[var(--color-text)] bg-[var(--color-surface)] hover:bg-[var(--color-surface-elevated)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--color-focus-ring)] focus-visible:outline-offset-2`,children:e(`protocol.download`)}),y&&(0,u.jsxs)(`div`,{className:`absolute left-0 top-full z-10 mt-1 min-w-[12rem] rounded-[var(--radius-md)] border border-[var(--color-border)] bg-[var(--color-surface)] py-1 shadow-sm`,role:`menu`,children:[(0,u.jsxs)(`button`,{type:`button`,role:`menuitem`,onClick:E,className:`flex w-full min-h-[44px] items-center justify-between px-3 py-2 text-left text-sm text-[var(--color-text)] hover:bg-[var(--color-surface-elevated)] focus:bg-[var(--color-surface-elevated)] focus:outline-none`,children:[e(`protocol.downloadAsMarkdown`),(0,u.jsx)(`span`,{className:`text-[var(--color-text-muted)]`,children:`.md`})]}),(0,u.jsxs)(`button`,{type:`button`,role:`menuitem`,onClick:D,className:`flex w-full min-h-[44px] items-center justify-between px-3 py-2 text-left text-sm text-[var(--color-text)] hover:bg-[var(--color-surface-elevated)] focus:bg-[var(--color-surface-elevated)] focus:outline-none`,children:[e(`protocol.downloadAsSkill`),(0,u.jsx)(`span`,{className:`text-[var(--color-text-muted)]`,children:`.md`})]})]})]}),(0,u.jsx)(t,{to:`/protocols/${encodeURIComponent(a.uri)}/skill`,className:`min-h-[44px] min-w-[44px] inline-flex items-center justify-center px-3 py-1.5 text-sm font-medium rounded-[var(--radius-md)] border border-[var(--color-border)] text-[var(--color-text)] bg-[var(--color-surface)] no-underline hover:bg-[var(--color-surface-elevated)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--color-focus-ring)] focus-visible:outline-offset-2`,children:e(`protocol.editAsSkill`)})]}),(0,u.jsxs)(`div`,{className:`flex flex-wrap gap-2 mb-8`,children:[(0,u.jsx)(t,{to:`/protocols/${encodeURIComponent(a.uri)}/run`,className:`min-h-[44px] min-w-[44px] inline-flex items-center justify-center px-4 py-2 rounded-[var(--radius-md)] font-medium bg-[var(--color-primary)] text-white no-underline hover:bg-[var(--color-primary-hover)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--color-focus-ring)] focus-visible:outline-offset-2`,children:e(`protocol.runGuided`)}),(0,u.jsx)(t,{to:`/protocols/${encodeURIComponent(a.uri)}/edit`,className:`min-h-[44px] min-w-[44px] inline-flex items-center justify-center px-4 py-2 rounded-[var(--radius-md)] font-medium border border-[var(--color-border)] text-[var(--color-text)] no-underline hover:bg-[var(--color-surface-elevated)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--color-focus-ring)] focus-visible:outline-offset-2`,children:e(`protocol.edit`)}),(0,u.jsx)(t,{to:`/protocols/new`,className:`min-h-[44px] min-w-[44px] inline-flex items-center justify-center px-4 py-2 rounded-[var(--radius-md)] font-medium border border-[var(--color-border)] text-[var(--color-text)] no-underline hover:bg-[var(--color-surface-elevated)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--color-focus-ring)] focus-visible:outline-offset-2`,children:e(`protocol.duplicate`)})]}),(0,u.jsxs)(`section`,{"aria-labelledby":`steps-heading`,className:`mb-8`,children:[(0,u.jsx)(`h2`,{id:`steps-heading`,className:`text-lg font-semibold text-[var(--color-text-heading)] mb-2`,children:e(`protocol.steps`)}),(0,u.jsx)(`ul`,{className:`list-none p-0 m-0 rounded-[var(--radius-md)] border border-[var(--color-border)] bg-[var(--color-surface-elevated)] divide-y divide-[var(--color-border)]`,children:C.map((t,n)=>(0,u.jsxs)(`li`,{className:`p-5`,children:[(0,u.jsxs)(`div`,{className:`flex items-start justify-between gap-4`,children:[(0,u.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,u.jsxs)(`span`,{className:`block text-sm font-medium text-[var(--color-text)]`,children:[`Step `,n+1,`: `,t.label]}),(0,u.jsx)(`div`,{className:`text-sm text-[var(--color-text-muted)] mt-1 break-words`,children:t.summary}),(0,u.jsx)(`span`,{className:`inline-block mt-1 text-xs uppercase tracking-wide px-2 py-0.5 rounded ${f[t.type]??`bg-[var(--color-surface)] text-[var(--color-text-muted)]`}`,"aria-label":`Challenge type: ${p[t.type]??t.type}`,children:p[t.type]??t.type})]}),(0,u.jsxs)(`div`,{className:`flex items-center gap-2 flex-shrink-0`,children:[(0,u.jsx)(d,{value:t.body||t.summary,label:`${e(`run.copy`)} ${t.label}`,className:`min-h-[44px] min-w-[44px] inline-flex items-center justify-center px-3 py-1.5 text-sm font-medium rounded-[var(--radius-md)] border border-[var(--color-border)] text-[var(--color-text)] bg-[var(--color-surface)] hover:bg-[var(--color-surface-elevated)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--color-focus-ring)] focus-visible:outline-offset-2`}),t.body?(0,u.jsx)(`button`,{type:`button`,onClick:()=>v(_===n?null:n),"aria-expanded":_===n,"aria-controls":`step-detail-${n}`,id:`step-toggle-${n}`,className:`min-h-[44px] min-w-[44px] inline-flex items-center justify-center px-3 py-1.5 text-sm font-medium rounded-[var(--radius-md)] border border-[var(--color-border)] text-[var(--color-text)] bg-[var(--color-surface)] hover:bg-[var(--color-surface-elevated)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--color-focus-ring)] focus-visible:outline-offset-2`,children:e(_===n?`protocol.collapse`:`protocol.expand`)}):null]})]}),t.body?(0,u.jsx)(`div`,{id:`step-detail-${n}`,role:`region`,"aria-labelledby":`step-toggle-${n}`,hidden:_!==n,className:`mt-3 pt-3 border-t border-[var(--color-border)]`,children:(0,u.jsx)(c,{content:t.body})}):null]},n))})]}),w&&(0,u.jsxs)(`section`,{"aria-labelledby":`triggers-heading`,className:`mb-8`,children:[(0,u.jsx)(`h2`,{id:`triggers-heading`,className:`text-lg font-semibold text-[var(--color-text-heading)] mb-2`,children:e(`protocol.triggers`)}),(0,u.jsx)(`div`,{className:`rounded-[var(--radius-md)] border border-[var(--color-border)] bg-[var(--color-surface-elevated)] p-4`,children:(0,u.jsx)(c,{content:w})})]}),T&&(0,u.jsxs)(`section`,{"aria-labelledby":`completion-heading`,className:`mb-8`,children:[(0,u.jsx)(`h2`,{id:`completion-heading`,className:`text-lg font-semibold text-[var(--color-text-heading)] mb-2`,children:e(`protocol.completion`)}),(0,u.jsx)(`div`,{className:`rounded-[var(--radius-md)] border border-[var(--color-border)] bg-[var(--color-surface-elevated)] p-4`,children:(0,u.jsx)(c,{content:T})})]}),(0,u.jsxs)(`div`,{className:`rounded-[var(--radius-md)] border border-[var(--color-border)] bg-[var(--color-surface-elevated)] p-5 mt-8`,role:`region`,"aria-labelledby":`how-to-use-heading`,children:[(0,u.jsx)(`h2`,{id:`how-to-use-heading`,className:`text-base font-semibold text-[var(--color-text-heading)] mb-2`,children:e(`protocol.howToUse`)}),(0,u.jsx)(`p`,{className:`text-sm text-[var(--color-text-muted)] mb-2`,children:e(`protocol.howToUseInProduct`)}),(0,u.jsxs)(`p`,{className:`text-sm text-[var(--color-text-muted)]`,children:[e(`protocol.howToUseCopy`),` `,(0,u.jsx)(`a`,{href:`https://github.com/debian777/kairos-mcp#readme`,target:`_blank`,rel:`noopener noreferrer`,className:`text-[var(--color-primary)] underline hover:no-underline focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--color-focus-ring)] focus-visible:outline-offset-2`,children:e(`protocol.docsLink`)})]})]})]})}export{m as ProtocolDetailPage};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as e}from"./rolldown-runtime-Dw2cE7zH.js";import{a as t,d as n,f as r,t as i,y as a}from"./vendor-BxD5ItEO.js";import{i as o,t as s}from"./react-BdWJx0XL.js";import{a as c,c as l,i as u,l as d,n as f,o as p,r as m,s as h,t as g}from"./tiptap-BEg0BoNB.js";import{t as _}from"./api-D88c6lbH.js";import{i as v,n as y,r as b,t as x}from"./useProtocol-D_32bpf9.js";var S=e(o(),1),C=s(),w=`min-h-[11rem] px-4 py-3 text-sm leading-6 text-[var(--color-text)] focus:outline-none prose prose-sm max-w-none [&_table]:my-3 [&_table]:w-full [&_table]:border-collapse [&_th]:border [&_th]:border-[var(--color-border)] [&_th]:bg-[var(--color-surface-elevated)] [&_th]:px-2 [&_th]:py-1.5 [&_td]:border [&_td]:border-[var(--color-border)] [&_td]:px-2 [&_td]:py-1.5`;function T({children:e,className:t=`h-4 w-4`}){return(0,C.jsx)(`svg`,{"aria-hidden":`true`,viewBox:`0 0 16 16`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.5`,strokeLinecap:`round`,strokeLinejoin:`round`,className:t,children:e})}function E(){return(0,C.jsxs)(T,{children:[(0,C.jsx)(`circle`,{cx:`3`,cy:`4`,r:`1`,fill:`currentColor`,stroke:`none`}),(0,C.jsx)(`circle`,{cx:`3`,cy:`8`,r:`1`,fill:`currentColor`,stroke:`none`}),(0,C.jsx)(`circle`,{cx:`3`,cy:`12`,r:`1`,fill:`currentColor`,stroke:`none`}),(0,C.jsx)(`path`,{d:`M6 4h7`}),(0,C.jsx)(`path`,{d:`M6 8h7`}),(0,C.jsx)(`path`,{d:`M6 12h7`})]})}function D(){return(0,C.jsxs)(T,{children:[(0,C.jsx)(`path`,{d:`M6 10L4.5 11.5a2.5 2.5 0 1 1-3.5-3.5L2.5 6.5`}),(0,C.jsx)(`path`,{d:`M10 6l1.5-1.5a2.5 2.5 0 1 1 3.5 3.5L13.5 9.5`}),(0,C.jsx)(`path`,{d:`M5.5 10.5l5-5`})]})}function O(){return(0,C.jsxs)(T,{children:[(0,C.jsx)(`path`,{d:`M5.5 5.5A2.5 2.5 0 0 0 3 8v2.5h3V8H4.5`}),(0,C.jsx)(`path`,{d:`M11.5 5.5A2.5 2.5 0 0 0 9 8v2.5h3V8h-1.5`})]})}function k(){return(0,C.jsxs)(T,{children:[(0,C.jsx)(`path`,{d:`M6 5.5l2 5-2 5`}),(0,C.jsx)(`path`,{d:`M10 5.5l2 5-2 5`})]})}function A(){return(0,C.jsxs)(T,{children:[(0,C.jsx)(`path`,{d:`M6 4L2.5 8L6 12`}),(0,C.jsx)(`path`,{d:`M10 4l3.5 4L10 12`}),(0,C.jsx)(`path`,{d:`M8.75 3.5L7.25 12.5`})]})}function j(){return(0,C.jsxs)(T,{children:[(0,C.jsx)(`path`,{d:`M2 3h12v2H2V3z`}),(0,C.jsx)(`path`,{d:`M2 7h12v1H2V7z`}),(0,C.jsx)(`path`,{d:`M2 11h12v1H2v-1z`}),(0,C.jsx)(`path`,{d:`M2 15h12v1H2v-1z`}),(0,C.jsx)(`path`,{d:`M2 4v11`}),(0,C.jsx)(`path`,{d:`M6 4v11`}),(0,C.jsx)(`path`,{d:`M10 4v11`}),(0,C.jsx)(`path`,{d:`M14 4v11`})]})}function M({label:e,ariaLabel:t,active:n,onClick:r}){return(0,C.jsx)(`button`,{type:`button`,"aria-label":t,title:t,onClick:r,className:`inline-flex min-h-[36px] min-w-[36px] items-center justify-center rounded-[var(--radius-sm)] border px-3 text-xs font-medium transition-colors ${n?`border-[var(--color-primary)] bg-[var(--color-primary)] text-white`:`border-[var(--color-border)] bg-[var(--color-surface)] text-[var(--color-text-muted)] hover:bg-[var(--color-surface)] hover:text-[var(--color-text)]`}`,children:e})}function N({editor:e}){return e?(0,C.jsxs)(`div`,{className:`flex flex-wrap gap-2 border-b border-[var(--color-border)] bg-[var(--color-surface-elevated)] px-3 py-2`,children:[(0,C.jsx)(M,{label:(0,C.jsx)(`span`,{className:`text-base leading-none`,children:`¶`}),ariaLabel:`Paragraph`,active:e.isActive(`paragraph`),onClick:()=>e.chain().focus().setParagraph().run()}),(0,C.jsx)(M,{label:(0,C.jsx)(`strong`,{className:`text-sm font-semibold`,children:`B`}),ariaLabel:`Bold`,active:e.isActive(`bold`),onClick:()=>e.chain().focus().toggleBold().run()}),(0,C.jsx)(M,{label:(0,C.jsx)(`em`,{className:`text-sm`,children:`I`}),ariaLabel:`Italic`,active:e.isActive(`italic`),onClick:()=>e.chain().focus().toggleItalic().run()}),(0,C.jsx)(M,{label:(0,C.jsx)(E,{}),ariaLabel:`Bullet list`,active:e.isActive(`bulletList`),onClick:()=>e.chain().focus().toggleBulletList().run()}),(0,C.jsx)(M,{label:(0,C.jsx)(`span`,{className:`text-sm font-semibold`,children:`1.`}),ariaLabel:`Numbered list`,active:e.isActive(`orderedList`),onClick:()=>e.chain().focus().toggleOrderedList().run()}),(0,C.jsx)(M,{label:(0,C.jsx)(D,{}),ariaLabel:`Link`,active:e.isActive(`link`),onClick:()=>{let t=e.getAttributes(`link`).href,n=window.prompt(`Enter URL`,t??`https://`);if(n==null)return;let r=n.trim();if(!r){e.chain().focus().unsetLink().run();return}e.chain().focus().extendMarkRange(`link`).setLink({href:r}).run()}}),(0,C.jsx)(M,{label:(0,C.jsx)(O,{}),ariaLabel:`Quote`,active:e.isActive(`blockquote`),onClick:()=>e.chain().focus().toggleBlockquote().run()}),(0,C.jsx)(M,{label:(0,C.jsx)(k,{}),ariaLabel:`Inline code`,active:e.isActive(`code`),onClick:()=>e.chain().focus().toggleCode().run()}),(0,C.jsx)(M,{label:(0,C.jsx)(A,{}),ariaLabel:`Code block`,active:e.isActive(`codeBlock`),onClick:()=>e.chain().focus().toggleCodeBlock().run()}),(0,C.jsx)(M,{label:(0,C.jsx)(j,{}),ariaLabel:`Insert table`,active:e.isActive(`table`),onClick:()=>e.chain().focus().insertTable({rows:3,cols:3,withHeaderRow:!0}).run()})]}):null}function P({value:e,onChange:t,label:n,hint:r,id:i,contentKey:a}){let o=(0,S.useRef)(a),s=d({key:a??`default`,immediatelyRender:!1,extensions:[p.configure({heading:!1,link:!1}),h.configure({openOnClick:!1,autolink:!1}),g.configure({resizable:!1}),u,f,m,c],content:e,contentType:`markdown`,editorProps:{attributes:{class:w}},onUpdate:({editor:n})=>{let r=n.getMarkdown?.()??``;r!==e&&t(r)}});return(0,S.useEffect)(()=>{!s||a===o.current||(o.current=a,s.commands.setContent(e,!1,{contentType:`markdown`,preserveWhitespace:`full`}))},[a,e,s]),(0,C.jsxs)(`div`,{children:[n&&(0,C.jsx)(`label`,{htmlFor:i,className:`mb-2 block font-medium text-[var(--color-text-heading)]`,children:n}),(0,C.jsxs)(`div`,{className:`overflow-hidden rounded-[var(--radius-md)] border border-[var(--color-border)] bg-[var(--color-surface)]`,children:[(0,C.jsx)(N,{editor:s}),(0,C.jsx)(l,{editor:s})]}),r&&(0,C.jsx)(`p`,{className:`mt-2 text-sm text-[var(--color-text-muted)]`,children:r})]})}var F=i().min(1,`Protocol content is required`).refine(e=>e.includes(`# `),`Protocol must have an H1 title`).refine(e=>/(^|\n)##\s+Natural language triggers\b/i.test(e),`Include a "Natural language triggers" section (H2)`).refine(e=>/(^|\n)##\s+Completion rule\b/i.test(e),`Include a "Completion rule" section (H2)`),I={label:`Step`,bodyMarkdown:`What the user or agent does in this step.`,type:`comment`,comment:{min_length:10}},L=[`shell`,`mcp`,`user_input`,`comment`];function R(){let{t:e}=a(),{uri:i}=r(),o=n(),s=i?decodeURIComponent(i):void 0,c=!s,{data:l,isLoading:u}=v(s,!c),[d,f]=(0,S.useState)({protocolLabel:``,triggersMarkdown:``,steps:[{...I}],completionMarkdown:``}),[p,m]=(0,S.useState)(()=>String(Date.now())),[h,g]=(0,S.useState)(!1),[w,T]=(0,S.useState)(null),[E,D]=(0,S.useState)(null),O=(0,S.useRef)(null);(0,S.useEffect)(()=>{if(l?.markdown_doc)try{f(b(l.markdown_doc)),m(String(Date.now()))}catch{f({protocolLabel:l.label||`Protocol`,triggersMarkdown:``,steps:[{...I}],completionMarkdown:``})}},[l]);let k=e=>{let t=e.target.files?.[0];if(!t)return;let n=new FileReader;n.onload=()=>{let e=typeof n.result==`string`?n.result:``;try{f(b(e)),m(String(Date.now())),D(null),T(null)}catch{T(`Could not parse the uploaded file. Use valid protocol markdown.`)}},n.readAsText(t,`UTF-8`),e.target.value=``},A=(e,t)=>{f(n=>({...n,[e]:t}))},j=(e,t)=>{f(n=>({...n,steps:n.steps.map((n,r)=>r===e?typeof t==`function`?t(n):{...n,...t}:n)}))},M=()=>{f(e=>({...e,steps:[...e.steps,{...I,label:`Step ${e.steps.length+1}`}]}))},N=e=>{f(t=>({...t,steps:t.steps.filter((t,n)=>n!==e)}))},R=async e=>{e.preventDefault(),T(null),D(null);let t=x(d),n=F.safeParse(t);if(!n.success){D(n.error.errors[0]?.message??`Invalid`);return}g(!0);try{if(c){let e=await _(`/api/kairos_mint/raw`,{method:`POST`,headers:{"Content-Type":`text/markdown`},body:t});if(!e.ok){let t=await e.json().catch(()=>({}));throw Error(t.message??e.statusText)}let n=(await e.json()).items?.[0]?.uri;o(n?`/protocols/${encodeURIComponent(n)}`:`/`)}else{let e=await _(`/api/kairos_update`,{method:`POST`,body:JSON.stringify({uris:[s],markdown_doc:[t]})});if(!e.ok){let t=await e.json().catch(()=>({}));throw Error(t.message??e.statusText)}o(`/protocols/${encodeURIComponent(s)}`)}}catch(e){T(e instanceof Error?e.message:String(e))}finally{g(!1)}},z=(()=>{try{return y(x(d))}catch{return{title:d.protocolLabel||`Protocol`,steps:[],triggers:``,completion:``}}})();if(!c&&u&&!l)return(0,C.jsx)(`p`,{className:`text-[var(--color-text-muted)]`,children:e(`protocol.loading`)});let B={shell:e(`protocolEdit.challengeShell`),mcp:e(`protocolEdit.challengeMcp`),user_input:e(`protocolEdit.challengeUserInput`),comment:e(`protocolEdit.challengeComment`)};return(0,C.jsxs)(`div`,{children:[(0,C.jsx)(`h1`,{className:`mb-1 text-2xl font-semibold text-[var(--color-text-heading)]`,children:!c&&d.protocolLabel.trim()?d.protocolLabel.trim():e(c?`protocolEdit.newTitle`:`protocolEdit.editTitle`)}),(0,C.jsx)(`p`,{className:`mb-6 text-sm text-[var(--color-text-muted)]`,children:e(`protocolEdit.hint`)}),(0,C.jsxs)(`div`,{className:`mb-8 flex flex-wrap items-center justify-between gap-3 rounded-[var(--radius-md)] border border-[var(--color-border)] bg-[var(--color-surface-elevated)] p-5`,children:[(0,C.jsxs)(`div`,{children:[(0,C.jsx)(`div`,{className:`font-medium text-[var(--color-text-heading)]`,children:`Import existing content`}),(0,C.jsx)(`p`,{className:`mt-1 text-sm text-[var(--color-text-muted)]`,children:e(`protocolEdit.uploadHint`)})]}),(0,C.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[(0,C.jsx)(`input`,{ref:O,type:`file`,accept:`.md,text/markdown`,onChange:k,className:`sr-only`,id:`protocol-upload`,"aria-label":e(`protocolEdit.upload`)}),(0,C.jsx)(`button`,{type:`button`,onClick:()=>O.current?.click(),className:`min-h-[44px] min-w-[44px] inline-flex items-center justify-center rounded-[var(--radius-md)] border border-[var(--color-border)] bg-[var(--color-surface)] px-4 py-2 text-sm font-medium text-[var(--color-text)] hover:bg-[var(--color-surface-elevated)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--color-focus-ring)] focus-visible:outline-offset-2`,children:e(`protocolEdit.upload`)}),!c&&s&&(0,C.jsx)(t,{to:`/protocols/${encodeURIComponent(s)}/skill`,className:`min-h-[44px] min-w-[44px] inline-flex items-center justify-center rounded-[var(--radius-md)] border border-[var(--color-border)] bg-[var(--color-surface)] px-4 py-2 text-sm font-medium text-[var(--color-text)] no-underline hover:bg-[var(--color-surface-elevated)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--color-focus-ring)] focus-visible:outline-offset-2`,children:e(`protocol.editAsSkill`)})]})]}),(0,C.jsx)(`form`,{onSubmit:R,"aria-label":e(`protocolEdit.formLabel`),children:(0,C.jsxs)(`div`,{className:`mb-6 grid gap-6 xl:grid-cols-[1.6fr_1fr]`,children:[(0,C.jsxs)(`div`,{className:`space-y-6`,children:[(0,C.jsxs)(`div`,{children:[(0,C.jsx)(`label`,{htmlFor:`protocol-label`,className:`mb-2 block font-medium text-[var(--color-text-heading)]`,children:e(`protocolEdit.protocolLabel`)}),(0,C.jsx)(`input`,{id:`protocol-label`,type:`text`,value:d.protocolLabel,onChange:e=>A(`protocolLabel`,e.target.value),className:`min-h-[44px] w-full rounded-[var(--radius-md)] border border-[var(--color-border)] bg-[var(--color-surface)] px-4 py-3 text-sm text-[var(--color-text)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--color-focus-ring)] focus-visible:outline-offset-2`})]}),(0,C.jsx)(P,{label:e(`protocolEdit.triggersLabel`),hint:e(`protocolEdit.triggersHint`),value:d.triggersMarkdown,onChange:e=>A(`triggersMarkdown`,e),contentKey:p}),d.steps.map((t,n)=>(0,C.jsxs)(`div`,{className:`rounded-[var(--radius-md)] border border-[var(--color-border)] bg-[var(--color-surface-elevated)] p-5 space-y-5`,children:[(0,C.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-2`,children:[(0,C.jsxs)(`div`,{className:`text-sm text-[var(--color-text-muted)]`,children:[`Step `,n+1,t.label.trim()?`: ${t.label.trim()}`:``]}),(0,C.jsx)(`button`,{type:`button`,onClick:()=>N(n),disabled:d.steps.length<=1,className:`min-h-[44px] min-w-[44px] inline-flex items-center justify-center rounded-[var(--radius-md)] border border-[var(--color-border)] bg-[var(--color-surface)] px-4 py-2 text-sm font-medium text-[var(--color-text)] hover:bg-[var(--color-surface-elevated)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--color-focus-ring)] focus-visible:outline-offset-2 disabled:opacity-50`,children:e(`protocolEdit.removeStep`)})]}),(0,C.jsxs)(`div`,{children:[(0,C.jsx)(`label`,{className:`mb-2 block font-medium text-[var(--color-text-heading)]`,children:e(`protocolEdit.stepLabel`)}),(0,C.jsx)(`input`,{type:`text`,value:t.label,onChange:e=>j(n,{label:e.target.value}),className:`min-h-[44px] w-full rounded-[var(--radius-md)] border border-[var(--color-border)] bg-[var(--color-surface)] px-4 py-3 text-sm text-[var(--color-text)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--color-focus-ring)] focus-visible:outline-offset-2`})]}),(0,C.jsxs)(`div`,{children:[(0,C.jsx)(`div`,{className:`mb-2 font-medium text-[var(--color-text-heading)]`,children:e(`protocolEdit.challengeType`)}),(0,C.jsx)(`div`,{className:`flex flex-wrap gap-2`,children:L.map(e=>(0,C.jsx)(`button`,{type:`button`,"aria-pressed":t.type===e,onClick:()=>j(n,{type:e,shell:e===`shell`?{cmd:t.shell?.cmd??``}:void 0,mcp:e===`mcp`?{tool_name:t.mcp?.tool_name??``}:void 0,user_input:e===`user_input`?{prompt:t.user_input?.prompt??``}:void 0,comment:e===`comment`?{min_length:t.comment?.min_length??10}:void 0}),className:`min-h-[44px] rounded-[var(--radius-md)] px-4 text-sm font-medium ${t.type===e?`bg-[var(--color-primary)] text-white`:`border border-[var(--color-border)] bg-[var(--color-surface)] text-[var(--color-text)]`}`,children:B[e]},e))})]}),(0,C.jsx)(`div`,{children:(0,C.jsx)(P,{label:e(`protocolEdit.stepContent`),value:t.bodyMarkdown,onChange:e=>j(n,{bodyMarkdown:e}),contentKey:p})}),(0,C.jsxs)(`div`,{className:`rounded-[var(--radius-md)] border border-[var(--color-border)] bg-[var(--color-surface)] p-4`,children:[(0,C.jsx)(`div`,{className:`mb-3 text-sm font-medium text-[var(--color-text-heading)]`,children:`Challenge fields`}),(0,C.jsxs)(`div`,{className:`grid grid-cols-1 gap-3 sm:grid-cols-2`,children:[t.type===`shell`&&(0,C.jsxs)(`div`,{children:[(0,C.jsx)(`label`,{className:`mb-2 block text-sm font-medium text-[var(--color-text-heading)]`,children:e(`protocolEdit.shellCmd`)}),(0,C.jsx)(`input`,{type:`text`,value:t.shell?.cmd??``,onChange:e=>j(n,{shell:{cmd:e.target.value}}),className:`min-h-[44px] w-full rounded-[var(--radius-md)] border border-[var(--color-border)] bg-[var(--color-surface-elevated)] px-4 py-3 text-sm text-[var(--color-text)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--color-focus-ring)] focus-visible:outline-offset-2`})]}),t.type===`mcp`&&(0,C.jsxs)(`div`,{children:[(0,C.jsx)(`label`,{className:`mb-2 block text-sm font-medium text-[var(--color-text-heading)]`,children:e(`protocolEdit.mcpToolName`)}),(0,C.jsx)(`input`,{type:`text`,value:t.mcp?.tool_name??``,onChange:e=>j(n,{mcp:{tool_name:e.target.value}}),className:`min-h-[44px] w-full rounded-[var(--radius-md)] border border-[var(--color-border)] bg-[var(--color-surface-elevated)] px-4 py-3 text-sm text-[var(--color-text)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--color-focus-ring)] focus-visible:outline-offset-2`})]}),t.type===`user_input`&&(0,C.jsxs)(`div`,{children:[(0,C.jsx)(`label`,{className:`mb-2 block text-sm font-medium text-[var(--color-text-heading)]`,children:e(`protocolEdit.userInputPrompt`)}),(0,C.jsx)(`input`,{type:`text`,value:t.user_input?.prompt??``,onChange:e=>j(n,{user_input:{prompt:e.target.value}}),className:`min-h-[44px] w-full rounded-[var(--radius-md)] border border-[var(--color-border)] bg-[var(--color-surface-elevated)] px-4 py-3 text-sm text-[var(--color-text)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--color-focus-ring)] focus-visible:outline-offset-2`})]}),t.type===`comment`&&(0,C.jsxs)(`div`,{children:[(0,C.jsx)(`label`,{className:`mb-2 block text-sm font-medium text-[var(--color-text-heading)]`,children:e(`protocolEdit.commentMinLength`)}),(0,C.jsx)(`input`,{type:`number`,min:1,value:t.comment?.min_length??10,onChange:e=>j(n,{comment:{min_length:Math.max(1,parseInt(e.target.value,10)||10)}}),className:`min-h-[44px] w-full rounded-[var(--radius-md)] border border-[var(--color-border)] bg-[var(--color-surface-elevated)] px-4 py-3 text-sm text-[var(--color-text)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--color-focus-ring)] focus-visible:outline-offset-2`})]})]})]})]},n)),(0,C.jsx)(`button`,{type:`button`,onClick:M,className:`min-h-[44px] min-w-[44px] inline-flex items-center justify-center rounded-[var(--radius-md)] border border-[var(--color-border)] bg-[var(--color-surface)] px-4 py-2 text-sm font-medium text-[var(--color-text)] hover:bg-[var(--color-surface-elevated)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--color-focus-ring)] focus-visible:outline-offset-2`,children:e(`protocolEdit.addStep`)}),(0,C.jsx)(P,{label:e(`protocolEdit.completionLabel`),value:d.completionMarkdown,onChange:e=>A(`completionMarkdown`,e),contentKey:p}),E&&(0,C.jsx)(`p`,{className:`text-sm text-[var(--color-error)]`,role:`alert`,children:E}),w&&(0,C.jsx)(`div`,{className:`rounded-[var(--radius-md)] bg-[var(--color-error-bg)] p-4 text-[var(--color-error)]`,role:`alert`,children:w}),(0,C.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[(0,C.jsx)(`button`,{type:`submit`,disabled:h,className:`min-h-[44px] min-w-[44px] inline-flex items-center justify-center rounded-[var(--radius-md)] bg-[var(--color-primary)] px-4 py-2 font-medium text-white hover:bg-[var(--color-primary-hover)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--color-focus-ring)] focus-visible:outline-offset-2 disabled:opacity-60`,children:e(h?`protocolEdit.saving`:`protocolEdit.save`)}),(0,C.jsx)(t,{to:c?`/`:`/protocols/${encodeURIComponent(s)}`,className:`min-h-[44px] min-w-[44px] inline-flex items-center justify-center rounded-[var(--radius-md)] border border-[var(--color-border)] bg-[var(--color-surface)] px-4 py-2 font-medium text-[var(--color-text)] no-underline hover:bg-[var(--color-surface-elevated)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--color-focus-ring)] focus-visible:outline-offset-2`,children:e(`protocolEdit.cancel`)})]})]}),(0,C.jsx)(`div`,{"aria-label":e(`protocolEdit.previewLabel`),children:(0,C.jsxs)(`div`,{className:`rounded-[var(--radius-md)] border border-[var(--color-border)] bg-[var(--color-surface-elevated)] p-4`,children:[(0,C.jsx)(`div`,{className:`text-sm text-[var(--color-text-muted)]`,children:e(`protocolEdit.previewTitle`)}),(0,C.jsx)(`div`,{className:`mt-1 text-lg font-semibold text-[var(--color-text-heading)]`,children:z.title}),(0,C.jsxs)(`div`,{className:`mt-4`,children:[(0,C.jsx)(`div`,{className:`mb-2 text-sm font-medium text-[var(--color-text-heading)]`,children:e(`protocolEdit.previewSteps`)}),z.steps.length===0?(0,C.jsx)(`div`,{className:`text-sm text-[var(--color-text-muted)]`,children:e(`protocolEdit.previewNoSteps`)}):(0,C.jsx)(`ul`,{className:`m-0 list-none space-y-2 p-0`,children:z.steps.slice(0,20).map((e,t)=>(0,C.jsxs)(`li`,{className:`rounded-[var(--radius-sm)] border border-[var(--color-border)] bg-[var(--color-surface)] p-3`,children:[(0,C.jsx)(`div`,{className:`font-medium text-[var(--color-text-heading)]`,children:e.label}),(0,C.jsx)(`div`,{className:`mt-1 text-sm text-[var(--color-text-muted)]`,children:e.summary})]},`${e.label}:${t}`))})]}),(0,C.jsxs)(`div`,{className:`mt-4`,children:[(0,C.jsx)(`div`,{className:`mb-2 text-sm font-medium text-[var(--color-text-heading)]`,children:e(`protocolEdit.previewSections`)}),(0,C.jsxs)(`div`,{className:`text-sm text-[var(--color-text-muted)]`,children:[(0,C.jsxs)(`div`,{children:[(0,C.jsxs)(`strong`,{className:`text-[var(--color-text-heading)]`,children:[e(`protocol.triggers`),`:`]}),` `,z.triggers?e(`protocolEdit.present`):e(`protocolEdit.missing`)]}),(0,C.jsxs)(`div`,{className:`mt-1`,children:[(0,C.jsxs)(`strong`,{className:`text-[var(--color-text-heading)]`,children:[e(`protocol.completion`),`:`]}),` `,z.completion?e(`protocolEdit.present`):e(`protocolEdit.missing`)]})]})]})]})})]})})]})}export{R as ProtocolEditPage};
|
|
1
|
+
import{r as e}from"./rolldown-runtime-Dw2cE7zH.js";import{a as t,d as n,f as r,t as i,y as a}from"./vendor-GiUVcjs7.js";import{i as o,t as s}from"./react-BdWJx0XL.js";import{a as c,c as l,i as u,l as d,n as f,o as p,r as m,s as h,t as g}from"./tiptap-kMFBDujG.js";import{t as _}from"./api-D88c6lbH.js";import{i as v,n as y,r as b,t as x}from"./useProtocol-BruWpIzq.js";var S=e(o(),1),C=s(),w=`min-h-[11rem] px-4 py-3 text-sm leading-6 text-[var(--color-text)] focus:outline-none prose prose-sm max-w-none [&_table]:my-3 [&_table]:w-full [&_table]:border-collapse [&_th]:border [&_th]:border-[var(--color-border)] [&_th]:bg-[var(--color-surface-elevated)] [&_th]:px-2 [&_th]:py-1.5 [&_td]:border [&_td]:border-[var(--color-border)] [&_td]:px-2 [&_td]:py-1.5`;function T({children:e,className:t=`h-4 w-4`}){return(0,C.jsx)(`svg`,{"aria-hidden":`true`,viewBox:`0 0 16 16`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.5`,strokeLinecap:`round`,strokeLinejoin:`round`,className:t,children:e})}function E(){return(0,C.jsxs)(T,{children:[(0,C.jsx)(`circle`,{cx:`3`,cy:`4`,r:`1`,fill:`currentColor`,stroke:`none`}),(0,C.jsx)(`circle`,{cx:`3`,cy:`8`,r:`1`,fill:`currentColor`,stroke:`none`}),(0,C.jsx)(`circle`,{cx:`3`,cy:`12`,r:`1`,fill:`currentColor`,stroke:`none`}),(0,C.jsx)(`path`,{d:`M6 4h7`}),(0,C.jsx)(`path`,{d:`M6 8h7`}),(0,C.jsx)(`path`,{d:`M6 12h7`})]})}function D(){return(0,C.jsxs)(T,{children:[(0,C.jsx)(`path`,{d:`M6 10L4.5 11.5a2.5 2.5 0 1 1-3.5-3.5L2.5 6.5`}),(0,C.jsx)(`path`,{d:`M10 6l1.5-1.5a2.5 2.5 0 1 1 3.5 3.5L13.5 9.5`}),(0,C.jsx)(`path`,{d:`M5.5 10.5l5-5`})]})}function O(){return(0,C.jsxs)(T,{children:[(0,C.jsx)(`path`,{d:`M5.5 5.5A2.5 2.5 0 0 0 3 8v2.5h3V8H4.5`}),(0,C.jsx)(`path`,{d:`M11.5 5.5A2.5 2.5 0 0 0 9 8v2.5h3V8h-1.5`})]})}function k(){return(0,C.jsxs)(T,{children:[(0,C.jsx)(`path`,{d:`M6 5.5l2 5-2 5`}),(0,C.jsx)(`path`,{d:`M10 5.5l2 5-2 5`})]})}function A(){return(0,C.jsxs)(T,{children:[(0,C.jsx)(`path`,{d:`M6 4L2.5 8L6 12`}),(0,C.jsx)(`path`,{d:`M10 4l3.5 4L10 12`}),(0,C.jsx)(`path`,{d:`M8.75 3.5L7.25 12.5`})]})}function j(){return(0,C.jsxs)(T,{children:[(0,C.jsx)(`path`,{d:`M2 3h12v2H2V3z`}),(0,C.jsx)(`path`,{d:`M2 7h12v1H2V7z`}),(0,C.jsx)(`path`,{d:`M2 11h12v1H2v-1z`}),(0,C.jsx)(`path`,{d:`M2 15h12v1H2v-1z`}),(0,C.jsx)(`path`,{d:`M2 4v11`}),(0,C.jsx)(`path`,{d:`M6 4v11`}),(0,C.jsx)(`path`,{d:`M10 4v11`}),(0,C.jsx)(`path`,{d:`M14 4v11`})]})}function M({label:e,ariaLabel:t,active:n,onClick:r}){return(0,C.jsx)(`button`,{type:`button`,"aria-label":t,title:t,onClick:r,className:`inline-flex min-h-[36px] min-w-[36px] items-center justify-center rounded-[var(--radius-sm)] border px-3 text-xs font-medium transition-colors ${n?`border-[var(--color-primary)] bg-[var(--color-primary)] text-white`:`border-[var(--color-border)] bg-[var(--color-surface)] text-[var(--color-text-muted)] hover:bg-[var(--color-surface)] hover:text-[var(--color-text)]`}`,children:e})}function N({editor:e}){return e?(0,C.jsxs)(`div`,{className:`flex flex-wrap gap-2 border-b border-[var(--color-border)] bg-[var(--color-surface-elevated)] px-3 py-2`,children:[(0,C.jsx)(M,{label:(0,C.jsx)(`span`,{className:`text-base leading-none`,children:`¶`}),ariaLabel:`Paragraph`,active:e.isActive(`paragraph`),onClick:()=>e.chain().focus().setParagraph().run()}),(0,C.jsx)(M,{label:(0,C.jsx)(`strong`,{className:`text-sm font-semibold`,children:`B`}),ariaLabel:`Bold`,active:e.isActive(`bold`),onClick:()=>e.chain().focus().toggleBold().run()}),(0,C.jsx)(M,{label:(0,C.jsx)(`em`,{className:`text-sm`,children:`I`}),ariaLabel:`Italic`,active:e.isActive(`italic`),onClick:()=>e.chain().focus().toggleItalic().run()}),(0,C.jsx)(M,{label:(0,C.jsx)(E,{}),ariaLabel:`Bullet list`,active:e.isActive(`bulletList`),onClick:()=>e.chain().focus().toggleBulletList().run()}),(0,C.jsx)(M,{label:(0,C.jsx)(`span`,{className:`text-sm font-semibold`,children:`1.`}),ariaLabel:`Numbered list`,active:e.isActive(`orderedList`),onClick:()=>e.chain().focus().toggleOrderedList().run()}),(0,C.jsx)(M,{label:(0,C.jsx)(D,{}),ariaLabel:`Link`,active:e.isActive(`link`),onClick:()=>{let t=e.getAttributes(`link`).href,n=window.prompt(`Enter URL`,t??`https://`);if(n==null)return;let r=n.trim();if(!r){e.chain().focus().unsetLink().run();return}e.chain().focus().extendMarkRange(`link`).setLink({href:r}).run()}}),(0,C.jsx)(M,{label:(0,C.jsx)(O,{}),ariaLabel:`Quote`,active:e.isActive(`blockquote`),onClick:()=>e.chain().focus().toggleBlockquote().run()}),(0,C.jsx)(M,{label:(0,C.jsx)(k,{}),ariaLabel:`Inline code`,active:e.isActive(`code`),onClick:()=>e.chain().focus().toggleCode().run()}),(0,C.jsx)(M,{label:(0,C.jsx)(A,{}),ariaLabel:`Code block`,active:e.isActive(`codeBlock`),onClick:()=>e.chain().focus().toggleCodeBlock().run()}),(0,C.jsx)(M,{label:(0,C.jsx)(j,{}),ariaLabel:`Insert table`,active:e.isActive(`table`),onClick:()=>e.chain().focus().insertTable({rows:3,cols:3,withHeaderRow:!0}).run()})]}):null}function P({value:e,onChange:t,label:n,hint:r,id:i,contentKey:a}){let o=(0,S.useRef)(a),s=d({key:a??`default`,immediatelyRender:!1,extensions:[p.configure({heading:!1,link:!1}),h.configure({openOnClick:!1,autolink:!1}),g.configure({resizable:!1}),u,f,m,c],content:e,contentType:`markdown`,editorProps:{attributes:{class:w}},onUpdate:({editor:n})=>{let r=n.getMarkdown?.()??``;r!==e&&t(r)}});return(0,S.useEffect)(()=>{!s||a===o.current||(o.current=a,s.commands.setContent(e,!1,{contentType:`markdown`,preserveWhitespace:`full`}))},[a,e,s]),(0,C.jsxs)(`div`,{children:[n&&(0,C.jsx)(`label`,{htmlFor:i,className:`mb-2 block font-medium text-[var(--color-text-heading)]`,children:n}),(0,C.jsxs)(`div`,{className:`overflow-hidden rounded-[var(--radius-md)] border border-[var(--color-border)] bg-[var(--color-surface)]`,children:[(0,C.jsx)(N,{editor:s}),(0,C.jsx)(l,{editor:s})]}),r&&(0,C.jsx)(`p`,{className:`mt-2 text-sm text-[var(--color-text-muted)]`,children:r})]})}var F=i().min(1,`Protocol content is required`).refine(e=>e.includes(`# `),`Protocol must have an H1 title`).refine(e=>/(^|\n)##\s+Natural language triggers\b/i.test(e),`Include a "Natural language triggers" section (H2)`).refine(e=>/(^|\n)##\s+Completion rule\b/i.test(e),`Include a "Completion rule" section (H2)`),I={label:`Step`,bodyMarkdown:`What the user or agent does in this step.`,type:`comment`,comment:{min_length:10}},L=[`shell`,`mcp`,`user_input`,`comment`];function R(){let{t:e}=a(),{uri:i}=r(),o=n(),s=i?decodeURIComponent(i):void 0,c=!s,{data:l,isLoading:u}=v(s,!c),[d,f]=(0,S.useState)({protocolLabel:``,triggersMarkdown:``,steps:[{...I}],completionMarkdown:``}),[p,m]=(0,S.useState)(()=>String(Date.now())),[h,g]=(0,S.useState)(!1),[w,T]=(0,S.useState)(null),[E,D]=(0,S.useState)(null),O=(0,S.useRef)(null);(0,S.useEffect)(()=>{if(l?.markdown_doc)try{f(b(l.markdown_doc)),m(String(Date.now()))}catch{f({protocolLabel:l.label||`Protocol`,triggersMarkdown:``,steps:[{...I}],completionMarkdown:``})}},[l]);let k=e=>{let t=e.target.files?.[0];if(!t)return;let n=new FileReader;n.onload=()=>{let e=typeof n.result==`string`?n.result:``;try{f(b(e)),m(String(Date.now())),D(null),T(null)}catch{T(`Could not parse the uploaded file. Use valid protocol markdown.`)}},n.readAsText(t,`UTF-8`),e.target.value=``},A=(e,t)=>{f(n=>({...n,[e]:t}))},j=(e,t)=>{f(n=>({...n,steps:n.steps.map((n,r)=>r===e?typeof t==`function`?t(n):{...n,...t}:n)}))},M=()=>{f(e=>({...e,steps:[...e.steps,{...I,label:`Step ${e.steps.length+1}`}]}))},N=e=>{f(t=>({...t,steps:t.steps.filter((t,n)=>n!==e)}))},R=async e=>{e.preventDefault(),T(null),D(null);let t=x(d),n=F.safeParse(t);if(!n.success){D(n.error.errors[0]?.message??`Invalid`);return}g(!0);try{if(c){let e=await _(`/api/kairos_mint/raw`,{method:`POST`,headers:{"Content-Type":`text/markdown`},body:t});if(!e.ok){let t=await e.json().catch(()=>({}));throw Error(t.message??e.statusText)}let n=(await e.json()).items?.[0]?.uri;o(n?`/protocols/${encodeURIComponent(n)}`:`/`)}else{let e=await _(`/api/kairos_update`,{method:`POST`,body:JSON.stringify({uris:[s],markdown_doc:[t]})});if(!e.ok){let t=await e.json().catch(()=>({}));throw Error(t.message??e.statusText)}o(`/protocols/${encodeURIComponent(s)}`)}}catch(e){T(e instanceof Error?e.message:String(e))}finally{g(!1)}},z=(()=>{try{return y(x(d))}catch{return{title:d.protocolLabel||`Protocol`,steps:[],triggers:``,completion:``}}})();if(!c&&u&&!l)return(0,C.jsx)(`p`,{className:`text-[var(--color-text-muted)]`,children:e(`protocol.loading`)});let B={shell:e(`protocolEdit.challengeShell`),mcp:e(`protocolEdit.challengeMcp`),user_input:e(`protocolEdit.challengeUserInput`),comment:e(`protocolEdit.challengeComment`)};return(0,C.jsxs)(`div`,{children:[(0,C.jsx)(`h1`,{className:`mb-1 text-2xl font-semibold text-[var(--color-text-heading)]`,children:!c&&d.protocolLabel.trim()?d.protocolLabel.trim():e(c?`protocolEdit.newTitle`:`protocolEdit.editTitle`)}),(0,C.jsx)(`p`,{className:`mb-6 text-sm text-[var(--color-text-muted)]`,children:e(`protocolEdit.hint`)}),(0,C.jsxs)(`div`,{className:`mb-8 flex flex-wrap items-center justify-between gap-3 rounded-[var(--radius-md)] border border-[var(--color-border)] bg-[var(--color-surface-elevated)] p-5`,children:[(0,C.jsxs)(`div`,{children:[(0,C.jsx)(`div`,{className:`font-medium text-[var(--color-text-heading)]`,children:`Import existing content`}),(0,C.jsx)(`p`,{className:`mt-1 text-sm text-[var(--color-text-muted)]`,children:e(`protocolEdit.uploadHint`)})]}),(0,C.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[(0,C.jsx)(`input`,{ref:O,type:`file`,accept:`.md,text/markdown`,onChange:k,className:`sr-only`,id:`protocol-upload`,"aria-label":e(`protocolEdit.upload`)}),(0,C.jsx)(`button`,{type:`button`,onClick:()=>O.current?.click(),className:`min-h-[44px] min-w-[44px] inline-flex items-center justify-center rounded-[var(--radius-md)] border border-[var(--color-border)] bg-[var(--color-surface)] px-4 py-2 text-sm font-medium text-[var(--color-text)] hover:bg-[var(--color-surface-elevated)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--color-focus-ring)] focus-visible:outline-offset-2`,children:e(`protocolEdit.upload`)}),!c&&s&&(0,C.jsx)(t,{to:`/protocols/${encodeURIComponent(s)}/skill`,className:`min-h-[44px] min-w-[44px] inline-flex items-center justify-center rounded-[var(--radius-md)] border border-[var(--color-border)] bg-[var(--color-surface)] px-4 py-2 text-sm font-medium text-[var(--color-text)] no-underline hover:bg-[var(--color-surface-elevated)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--color-focus-ring)] focus-visible:outline-offset-2`,children:e(`protocol.editAsSkill`)})]})]}),(0,C.jsx)(`form`,{onSubmit:R,"aria-label":e(`protocolEdit.formLabel`),children:(0,C.jsxs)(`div`,{className:`mb-6 grid gap-6 xl:grid-cols-[1.6fr_1fr]`,children:[(0,C.jsxs)(`div`,{className:`space-y-6`,children:[(0,C.jsxs)(`div`,{children:[(0,C.jsx)(`label`,{htmlFor:`protocol-label`,className:`mb-2 block font-medium text-[var(--color-text-heading)]`,children:e(`protocolEdit.protocolLabel`)}),(0,C.jsx)(`input`,{id:`protocol-label`,type:`text`,value:d.protocolLabel,onChange:e=>A(`protocolLabel`,e.target.value),className:`min-h-[44px] w-full rounded-[var(--radius-md)] border border-[var(--color-border)] bg-[var(--color-surface)] px-4 py-3 text-sm text-[var(--color-text)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--color-focus-ring)] focus-visible:outline-offset-2`})]}),(0,C.jsx)(P,{label:e(`protocolEdit.triggersLabel`),hint:e(`protocolEdit.triggersHint`),value:d.triggersMarkdown,onChange:e=>A(`triggersMarkdown`,e),contentKey:p}),d.steps.map((t,n)=>(0,C.jsxs)(`div`,{className:`rounded-[var(--radius-md)] border border-[var(--color-border)] bg-[var(--color-surface-elevated)] p-5 space-y-5`,children:[(0,C.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-2`,children:[(0,C.jsxs)(`div`,{className:`text-sm text-[var(--color-text-muted)]`,children:[`Step `,n+1,t.label.trim()?`: ${t.label.trim()}`:``]}),(0,C.jsx)(`button`,{type:`button`,onClick:()=>N(n),disabled:d.steps.length<=1,className:`min-h-[44px] min-w-[44px] inline-flex items-center justify-center rounded-[var(--radius-md)] border border-[var(--color-border)] bg-[var(--color-surface)] px-4 py-2 text-sm font-medium text-[var(--color-text)] hover:bg-[var(--color-surface-elevated)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--color-focus-ring)] focus-visible:outline-offset-2 disabled:opacity-50`,children:e(`protocolEdit.removeStep`)})]}),(0,C.jsxs)(`div`,{children:[(0,C.jsx)(`label`,{className:`mb-2 block font-medium text-[var(--color-text-heading)]`,children:e(`protocolEdit.stepLabel`)}),(0,C.jsx)(`input`,{type:`text`,value:t.label,onChange:e=>j(n,{label:e.target.value}),className:`min-h-[44px] w-full rounded-[var(--radius-md)] border border-[var(--color-border)] bg-[var(--color-surface)] px-4 py-3 text-sm text-[var(--color-text)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--color-focus-ring)] focus-visible:outline-offset-2`})]}),(0,C.jsxs)(`div`,{children:[(0,C.jsx)(`div`,{className:`mb-2 font-medium text-[var(--color-text-heading)]`,children:e(`protocolEdit.challengeType`)}),(0,C.jsx)(`div`,{className:`flex flex-wrap gap-2`,children:L.map(e=>(0,C.jsx)(`button`,{type:`button`,"aria-pressed":t.type===e,onClick:()=>j(n,{type:e,shell:e===`shell`?{cmd:t.shell?.cmd??``}:void 0,mcp:e===`mcp`?{tool_name:t.mcp?.tool_name??``}:void 0,user_input:e===`user_input`?{prompt:t.user_input?.prompt??``}:void 0,comment:e===`comment`?{min_length:t.comment?.min_length??10}:void 0}),className:`min-h-[44px] rounded-[var(--radius-md)] px-4 text-sm font-medium ${t.type===e?`bg-[var(--color-primary)] text-white`:`border border-[var(--color-border)] bg-[var(--color-surface)] text-[var(--color-text)]`}`,children:B[e]},e))})]}),(0,C.jsx)(`div`,{children:(0,C.jsx)(P,{label:e(`protocolEdit.stepContent`),value:t.bodyMarkdown,onChange:e=>j(n,{bodyMarkdown:e}),contentKey:p})}),(0,C.jsxs)(`div`,{className:`rounded-[var(--radius-md)] border border-[var(--color-border)] bg-[var(--color-surface)] p-4`,children:[(0,C.jsx)(`div`,{className:`mb-3 text-sm font-medium text-[var(--color-text-heading)]`,children:`Challenge fields`}),(0,C.jsxs)(`div`,{className:`grid grid-cols-1 gap-3 sm:grid-cols-2`,children:[t.type===`shell`&&(0,C.jsxs)(`div`,{children:[(0,C.jsx)(`label`,{className:`mb-2 block text-sm font-medium text-[var(--color-text-heading)]`,children:e(`protocolEdit.shellCmd`)}),(0,C.jsx)(`input`,{type:`text`,value:t.shell?.cmd??``,onChange:e=>j(n,{shell:{cmd:e.target.value}}),className:`min-h-[44px] w-full rounded-[var(--radius-md)] border border-[var(--color-border)] bg-[var(--color-surface-elevated)] px-4 py-3 text-sm text-[var(--color-text)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--color-focus-ring)] focus-visible:outline-offset-2`})]}),t.type===`mcp`&&(0,C.jsxs)(`div`,{children:[(0,C.jsx)(`label`,{className:`mb-2 block text-sm font-medium text-[var(--color-text-heading)]`,children:e(`protocolEdit.mcpToolName`)}),(0,C.jsx)(`input`,{type:`text`,value:t.mcp?.tool_name??``,onChange:e=>j(n,{mcp:{tool_name:e.target.value}}),className:`min-h-[44px] w-full rounded-[var(--radius-md)] border border-[var(--color-border)] bg-[var(--color-surface-elevated)] px-4 py-3 text-sm text-[var(--color-text)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--color-focus-ring)] focus-visible:outline-offset-2`})]}),t.type===`user_input`&&(0,C.jsxs)(`div`,{children:[(0,C.jsx)(`label`,{className:`mb-2 block text-sm font-medium text-[var(--color-text-heading)]`,children:e(`protocolEdit.userInputPrompt`)}),(0,C.jsx)(`input`,{type:`text`,value:t.user_input?.prompt??``,onChange:e=>j(n,{user_input:{prompt:e.target.value}}),className:`min-h-[44px] w-full rounded-[var(--radius-md)] border border-[var(--color-border)] bg-[var(--color-surface-elevated)] px-4 py-3 text-sm text-[var(--color-text)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--color-focus-ring)] focus-visible:outline-offset-2`})]}),t.type===`comment`&&(0,C.jsxs)(`div`,{children:[(0,C.jsx)(`label`,{className:`mb-2 block text-sm font-medium text-[var(--color-text-heading)]`,children:e(`protocolEdit.commentMinLength`)}),(0,C.jsx)(`input`,{type:`number`,min:1,value:t.comment?.min_length??10,onChange:e=>j(n,{comment:{min_length:Math.max(1,parseInt(e.target.value,10)||10)}}),className:`min-h-[44px] w-full rounded-[var(--radius-md)] border border-[var(--color-border)] bg-[var(--color-surface-elevated)] px-4 py-3 text-sm text-[var(--color-text)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--color-focus-ring)] focus-visible:outline-offset-2`})]})]})]})]},n)),(0,C.jsx)(`button`,{type:`button`,onClick:M,className:`min-h-[44px] min-w-[44px] inline-flex items-center justify-center rounded-[var(--radius-md)] border border-[var(--color-border)] bg-[var(--color-surface)] px-4 py-2 text-sm font-medium text-[var(--color-text)] hover:bg-[var(--color-surface-elevated)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--color-focus-ring)] focus-visible:outline-offset-2`,children:e(`protocolEdit.addStep`)}),(0,C.jsx)(P,{label:e(`protocolEdit.completionLabel`),value:d.completionMarkdown,onChange:e=>A(`completionMarkdown`,e),contentKey:p}),E&&(0,C.jsx)(`p`,{className:`text-sm text-[var(--color-error)]`,role:`alert`,children:E}),w&&(0,C.jsx)(`div`,{className:`rounded-[var(--radius-md)] bg-[var(--color-error-bg)] p-4 text-[var(--color-error)]`,role:`alert`,children:w}),(0,C.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[(0,C.jsx)(`button`,{type:`submit`,disabled:h,className:`min-h-[44px] min-w-[44px] inline-flex items-center justify-center rounded-[var(--radius-md)] bg-[var(--color-primary)] px-4 py-2 font-medium text-white hover:bg-[var(--color-primary-hover)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--color-focus-ring)] focus-visible:outline-offset-2 disabled:opacity-60`,children:e(h?`protocolEdit.saving`:`protocolEdit.save`)}),(0,C.jsx)(t,{to:c?`/`:`/protocols/${encodeURIComponent(s)}`,className:`min-h-[44px] min-w-[44px] inline-flex items-center justify-center rounded-[var(--radius-md)] border border-[var(--color-border)] bg-[var(--color-surface)] px-4 py-2 font-medium text-[var(--color-text)] no-underline hover:bg-[var(--color-surface-elevated)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--color-focus-ring)] focus-visible:outline-offset-2`,children:e(`protocolEdit.cancel`)})]})]}),(0,C.jsx)(`div`,{"aria-label":e(`protocolEdit.previewLabel`),children:(0,C.jsxs)(`div`,{className:`rounded-[var(--radius-md)] border border-[var(--color-border)] bg-[var(--color-surface-elevated)] p-4`,children:[(0,C.jsx)(`div`,{className:`text-sm text-[var(--color-text-muted)]`,children:e(`protocolEdit.previewTitle`)}),(0,C.jsx)(`div`,{className:`mt-1 text-lg font-semibold text-[var(--color-text-heading)]`,children:z.title}),(0,C.jsxs)(`div`,{className:`mt-4`,children:[(0,C.jsx)(`div`,{className:`mb-2 text-sm font-medium text-[var(--color-text-heading)]`,children:e(`protocolEdit.previewSteps`)}),z.steps.length===0?(0,C.jsx)(`div`,{className:`text-sm text-[var(--color-text-muted)]`,children:e(`protocolEdit.previewNoSteps`)}):(0,C.jsx)(`ul`,{className:`m-0 list-none space-y-2 p-0`,children:z.steps.slice(0,20).map((e,t)=>(0,C.jsxs)(`li`,{className:`rounded-[var(--radius-sm)] border border-[var(--color-border)] bg-[var(--color-surface)] p-3`,children:[(0,C.jsx)(`div`,{className:`font-medium text-[var(--color-text-heading)]`,children:e.label}),(0,C.jsx)(`div`,{className:`mt-1 text-sm text-[var(--color-text-muted)]`,children:e.summary})]},`${e.label}:${t}`))})]}),(0,C.jsxs)(`div`,{className:`mt-4`,children:[(0,C.jsx)(`div`,{className:`mb-2 text-sm font-medium text-[var(--color-text-heading)]`,children:e(`protocolEdit.previewSections`)}),(0,C.jsxs)(`div`,{className:`text-sm text-[var(--color-text-muted)]`,children:[(0,C.jsxs)(`div`,{children:[(0,C.jsxs)(`strong`,{className:`text-[var(--color-text-heading)]`,children:[e(`protocol.triggers`),`:`]}),` `,z.triggers?e(`protocolEdit.present`):e(`protocolEdit.missing`)]}),(0,C.jsxs)(`div`,{className:`mt-1`,children:[(0,C.jsxs)(`strong`,{className:`text-[var(--color-text-heading)]`,children:[e(`protocol.completion`),`:`]}),` `,z.completion?e(`protocolEdit.present`):e(`protocolEdit.missing`)]})]})]})]})})]})})]})}export{R as ProtocolEditPage};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{n as e,r as t}from"./vendor-
|
|
1
|
+
import{n as e,r as t}from"./vendor-GiUVcjs7.js";import{t as n}from"./react-BdWJx0XL.js";var r=n(),i=`text-sm leading-6 text-[var(--color-text)] [&_p]:mt-0 [&_p:first-child]:mt-0 [&_p+p]:mt-3 [&_ul]:my-3 [&_ul]:pl-6 [&_ol]:my-3 [&_ol]:pl-6 [&_li]:my-0.5 [&_strong]:font-semibold [&_strong]:text-[var(--color-text-heading)] [&_code]:rounded [&_code]:bg-[var(--color-surface-elevated)] [&_code]:px-1.5 [&_code]:py-0.5 [&_code]:text-xs [&_code]:font-mono [&_pre]:my-3 [&_pre]:overflow-x-auto [&_pre]:rounded-[var(--radius-md)] [&_pre]:bg-[var(--color-surface-elevated)] [&_pre]:p-3 [&_pre]:text-sm [&_pre]:font-mono [&_pre]:whitespace-pre-wrap [&_pre_code]:bg-transparent [&_pre_code]:p-0 [&_pre_code]:text-inherit [&_a]:text-[var(--color-primary)] [&_a]:underline [&_a:hover]:no-underline [&_a:focus-visible]:outline [&_a:focus-visible]:outline-2 [&_a:focus-visible]:outline-[var(--color-focus-ring)] [&_a:focus-visible]:outline-offset-2 [&_blockquote]:border-l-4 [&_blockquote]:border-[var(--color-border)] [&_blockquote]:pl-4 [&_blockquote]:italic [&_blockquote]:text-[var(--color-text-muted)] [&_h1]:text-xl [&_h1]:font-semibold [&_h1]:text-[var(--color-text-heading)] [&_h1]:mt-4 [&_h1]:mb-2 [&_h2]:text-lg [&_h2]:font-semibold [&_h2]:text-[var(--color-text-heading)] [&_h2]:mt-4 [&_h2]:mb-2 [&_h3]:text-base [&_h3]:font-medium [&_h3]:text-[var(--color-text-heading)] [&_h3]:mt-3 [&_h3]:mb-1 [&_table]:my-4 [&_table]:w-full [&_table]:border-collapse [&_table]:text-left [&_th]:border [&_th]:border-[var(--color-border)] [&_th]:bg-[var(--color-surface-elevated)] [&_th]:px-3 [&_th]:py-2 [&_th]:font-semibold [&_th]:text-[var(--color-text-heading)] [&_td]:border [&_td]:border-[var(--color-border)] [&_td]:px-3 [&_td]:py-2 [&_tr]:border-b [&_tr]:border-[var(--color-border)] [&_tr:last-child]:border-b-0`;function a({content:n,className:a=``}){return n.trim()?(0,r.jsx)(`div`,{className:`${i} ${a}`.trim(),children:(0,r.jsx)(t,{remarkPlugins:[e],children:n})}):null}export{a as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as e}from"./rolldown-runtime-Dw2cE7zH.js";import{a as t,f as n,h as r,p as i,y as a}from"./vendor-BxD5ItEO.js";import{i as o,t as s}from"./react-BdWJx0XL.js";import"./tiptap-BEg0BoNB.js";import{t as c}from"./api-D88c6lbH.js";import{t as l}from"./ErrorAlert-Bp_BC2t_.js";import{t as u}from"./RenderedMarkdown-Dd_bDNwz.js";import{n as d,t as f}from"./useRunSession-CciNdgs6.js";var p=e(o(),1),m=s();function h(e){let t=e.trim();return t?JSON.parse(t):null}function g({challenge:e,disabled:t,onSubmit:n}){let{t:r}=a(),i=e.type,[o,s]=(0,p.useState)(0),[c,l]=(0,p.useState)(``),[u,d]=(0,p.useState)(``),f=e.mcp?.tool_name??``,[g,_]=(0,p.useState)(!0),[v,y]=(0,p.useState)(``),[b,x]=(0,p.useState)(``),S=e.user_input?.prompt??``,[C,w]=(0,p.useState)(``),T=e.comment?.min_length??10,[E,D]=(0,p.useState)(``),[O,k]=(0,p.useState)(null);(0,p.useEffect)(()=>{k(null),s(0),l(``),d(``),_(!0),y(``),x(``),w(``),D(``)},[i,f,S,T]);let A=(0,p.useMemo)(()=>i===`shell`?Number.isFinite(o):i===`mcp`?f.trim().length>0:i===`user_input`?C.trim().length>0:i===`comment`?E.trim().length>=T:!1,[i,o,f,C,E,T]);return(0,m.jsxs)(`form`,{onSubmit:e=>{if(e.preventDefault(),k(null),A)try{if(i===`shell`){n({type:i,shell:{exit_code:o,...c.trim()?{stdout:c}:{},...u.trim()?{stderr:u}:{}}});return}if(i===`mcp`){let e=h(v),t=h(b);n({type:i,mcp:{tool_name:f,...e===null?{}:{arguments:e},result:t,success:g}});return}if(i===`user_input`){n({type:i,user_input:{confirmation:C.trim(),timestamp:new Date().toISOString()}});return}if(i===`comment`){n({type:i,comment:{text:E.trim()}});return}}catch(e){k(e instanceof Error?e.message:String(e))}},"aria-label":r(`run.solutionFormLabel`),children:[O&&(0,m.jsx)(`div`,{className:`mb-4 p-4 rounded-[var(--radius-md)] bg-[var(--color-error-bg)] text-[var(--color-error)]`,role:`alert`,children:O}),i===`shell`&&(0,m.jsxs)(`div`,{className:`space-y-4`,children:[(0,m.jsxs)(`div`,{children:[(0,m.jsx)(`label`,{htmlFor:`run-shell-exit-code`,className:`block font-medium text-[var(--color-text-heading)] mb-2`,children:r(`run.shell.exitCode`)}),(0,m.jsx)(`input`,{id:`run-shell-exit-code`,type:`number`,inputMode:`numeric`,value:o,onChange:e=>s(Number(e.target.value)),className:`w-full min-h-[44px] px-4 py-2 border border-[var(--color-border)] rounded-[var(--radius-md)] text-[var(--color-text)] bg-[var(--color-surface)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--color-focus-ring)] focus-visible:outline-offset-2`,disabled:t,required:!0})]}),(0,m.jsxs)(`div`,{children:[(0,m.jsx)(`label`,{htmlFor:`run-shell-stdout`,className:`block font-medium text-[var(--color-text-heading)] mb-2`,children:r(`run.shell.stdout`)}),(0,m.jsx)(`textarea`,{id:`run-shell-stdout`,value:c,onChange:e=>l(e.target.value),className:`w-full min-h-[8rem] px-4 py-3 border border-[var(--color-border)] rounded-[var(--radius-md)] text-[var(--color-text)] bg-[var(--color-surface)] font-mono text-sm resize-y`,disabled:t})]}),(0,m.jsxs)(`div`,{children:[(0,m.jsx)(`label`,{htmlFor:`run-shell-stderr`,className:`block font-medium text-[var(--color-text-heading)] mb-2`,children:r(`run.shell.stderr`)}),(0,m.jsx)(`textarea`,{id:`run-shell-stderr`,value:u,onChange:e=>d(e.target.value),className:`w-full min-h-[6rem] px-4 py-3 border border-[var(--color-border)] rounded-[var(--radius-md)] text-[var(--color-text)] bg-[var(--color-surface)] font-mono text-sm resize-y`,disabled:t})]})]}),i===`mcp`&&(0,m.jsxs)(`div`,{className:`space-y-4`,children:[(0,m.jsxs)(`div`,{className:`rounded-[var(--radius-md)] border border-[var(--color-border)] bg-[var(--color-surface)] p-4`,children:[(0,m.jsx)(`div`,{className:`text-sm text-[var(--color-text-muted)]`,children:r(`run.mcp.toolName`)}),(0,m.jsx)(`div`,{className:`font-medium text-[var(--color-text-heading)] break-all`,children:f||r(`run.mcp.toolMissing`)})]}),(0,m.jsxs)(`label`,{className:`inline-flex items-center gap-2 min-h-[44px]`,children:[(0,m.jsx)(`input`,{type:`checkbox`,checked:g,onChange:e=>_(e.target.checked),disabled:t,className:`h-4 w-4`}),(0,m.jsx)(`span`,{className:`text-sm text-[var(--color-text)]`,children:r(`run.mcp.success`)})]}),(0,m.jsxs)(`div`,{children:[(0,m.jsx)(`label`,{htmlFor:`run-mcp-args`,className:`block font-medium text-[var(--color-text-heading)] mb-2`,children:r(`run.mcp.arguments`)}),(0,m.jsx)(`textarea`,{id:`run-mcp-args`,value:v,onChange:e=>y(e.target.value),placeholder:`{ "example": true }`,className:`w-full min-h-[6rem] px-4 py-3 border border-[var(--color-border)] rounded-[var(--radius-md)] text-[var(--color-text)] bg-[var(--color-surface)] font-mono text-sm resize-y`,disabled:t})]}),(0,m.jsxs)(`div`,{children:[(0,m.jsx)(`label`,{htmlFor:`run-mcp-result`,className:`block font-medium text-[var(--color-text-heading)] mb-2`,children:r(`run.mcp.result`)}),(0,m.jsx)(`textarea`,{id:`run-mcp-result`,value:b,onChange:e=>x(e.target.value),placeholder:`{ "ok": true }`,className:`w-full min-h-[10rem] px-4 py-3 border border-[var(--color-border)] rounded-[var(--radius-md)] text-[var(--color-text)] bg-[var(--color-surface)] font-mono text-sm resize-y`,disabled:t,required:!0})]})]}),i===`user_input`&&(0,m.jsxs)(`div`,{className:`space-y-4`,children:[(0,m.jsxs)(`div`,{className:`rounded-[var(--radius-md)] border border-[var(--color-border)] bg-[var(--color-surface)] p-4`,children:[(0,m.jsx)(`div`,{className:`text-sm text-[var(--color-text-muted)]`,children:r(`run.userInput.prompt`)}),(0,m.jsx)(`div`,{className:`font-medium text-[var(--color-text-heading)]`,children:S||r(`run.userInput.promptMissing`)})]}),(0,m.jsxs)(`div`,{children:[(0,m.jsx)(`label`,{htmlFor:`run-user-confirmation`,className:`block font-medium text-[var(--color-text-heading)] mb-2`,children:r(`run.userInput.confirmation`)}),(0,m.jsx)(`textarea`,{id:`run-user-confirmation`,value:C,onChange:e=>w(e.target.value),className:`w-full min-h-[6rem] px-4 py-3 border border-[var(--color-border)] rounded-[var(--radius-md)] text-[var(--color-text)] bg-[var(--color-surface)] resize-y`,disabled:t,required:!0})]})]}),i===`comment`&&(0,m.jsxs)(`div`,{className:`space-y-2`,children:[(0,m.jsxs)(`div`,{className:`text-sm text-[var(--color-text-muted)]`,children:[r(`run.comment.minLength`,{count:T}),` · `,r(`run.comment.count`,{count:E.length})]}),(0,m.jsxs)(`div`,{children:[(0,m.jsx)(`label`,{htmlFor:`run-comment-text`,className:`block font-medium text-[var(--color-text-heading)] mb-2`,children:r(`run.comment.text`)}),(0,m.jsx)(`textarea`,{id:`run-comment-text`,value:E,onChange:e=>D(e.target.value),className:`w-full min-h-[10rem] px-4 py-3 border border-[var(--color-border)] rounded-[var(--radius-md)] text-[var(--color-text)] bg-[var(--color-surface)] resize-y`,disabled:t,required:!0,"aria-invalid":E.trim().length>0&&E.trim().length<T})]})]}),(0,m.jsx)(`button`,{type:`submit`,disabled:t||!A,className:`mt-4 min-h-[44px] min-w-[44px] px-4 py-2 rounded-[var(--radius-md)] font-medium bg-[var(--color-primary)] text-white border-0 cursor-pointer disabled:opacity-60 disabled:cursor-not-allowed hover:bg-[var(--color-primary-hover)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--color-focus-ring)] focus-visible:outline-offset-2`,children:r(`run.submitStep`)})]})}function _({run:e,attestOutcome:t,setAttestOutcome:n,attestMessage:r,setAttestMessage:i,copyStatus:o,onCopy:s,onSubmitStep:c,onAttest:l,isNextPending:d,isBeginPending:f,isAttestPending:p}){let{t:h}=a();return(0,m.jsxs)(m.Fragment,{children:[e.status===`running`&&(0,m.jsx)(`div`,{className:`mb-4 flex items-center gap-2 text-sm text-[var(--color-text-muted)]`,role:`status`,"aria-live":`polite`,children:(0,m.jsx)(`span`,{className:`font-medium text-[var(--color-text-heading)]`,children:h(`run.stepperProgress`,{completed:e.history.length})})}),e.last_message&&(0,m.jsxs)(`div`,{className:`mb-4 p-4 rounded-[var(--radius-md)] border border-[var(--color-border)] bg-[var(--color-surface)]`,role:`status`,"aria-live":`polite`,children:[(0,m.jsx)(`div`,{className:`text-sm text-[var(--color-text-muted)]`,children:h(`run.serverMessage`)}),(0,m.jsx)(`div`,{className:`text-[var(--color-text)]`,children:e.last_message})]}),(0,m.jsxs)(`section`,{"aria-labelledby":`run-current-step`,className:`mb-6`,children:[(0,m.jsx)(`h2`,{id:`run-current-step`,className:`text-lg font-semibold text-[var(--color-text-heading)] mb-2`,children:h(`run.currentStep`)}),(0,m.jsx)(`div`,{className:`rounded-[var(--radius-md)] border border-[var(--color-border)] bg-[var(--color-surface-elevated)] p-4`,children:e.current_step?(0,m.jsxs)(m.Fragment,{children:[(0,m.jsxs)(`div`,{className:`text-sm text-[var(--color-text-muted)] mb-2`,children:[h(`run.stepUri`),`: `,(0,m.jsx)(`span`,{className:`font-mono break-all`,children:e.current_step.uri})]}),e.current_step.content?(0,m.jsx)(u,{content:e.current_step.content}):(0,m.jsx)(`p`,{className:`text-sm text-[var(--color-text-muted)] m-0`,children:h(`run.noStepContent`)})]}):(0,m.jsx)(`p`,{className:`text-sm text-[var(--color-text-muted)] m-0`,children:h(`run.noStepContent`)})})]}),(0,m.jsxs)(`section`,{"aria-labelledby":`run-challenge`,className:`mb-6`,children:[(0,m.jsx)(`h2`,{id:`run-challenge`,className:`text-lg font-semibold text-[var(--color-text-heading)] mb-2`,children:h(`run.challenge`)}),(0,m.jsxs)(`div`,{className:`rounded-[var(--radius-md)] border border-[var(--color-border)] bg-[var(--color-surface-elevated)] p-4`,children:[(0,m.jsxs)(`div`,{className:`flex items-start justify-between gap-4`,children:[(0,m.jsxs)(`div`,{children:[(0,m.jsx)(`div`,{className:`text-sm text-[var(--color-text-muted)]`,children:h(`run.challengeType`)}),(0,m.jsx)(`div`,{className:`font-medium text-[var(--color-text-heading)]`,children:e.challenge.type})]}),(0,m.jsxs)(`details`,{className:`text-sm`,children:[(0,m.jsx)(`summary`,{className:`cursor-pointer text-[var(--color-primary)]`,children:h(`run.advanced`)}),(0,m.jsxs)(`div`,{className:`mt-2 space-y-1 text-[var(--color-text-muted)]`,children:[e.challenge.nonce&&(0,m.jsxs)(`div`,{children:[h(`run.nonce`),`: `,(0,m.jsx)(`span`,{className:`font-mono break-all`,children:e.challenge.nonce})]}),e.challenge.proof_hash&&(0,m.jsxs)(`div`,{children:[h(`run.proofHash`),`: `,(0,m.jsx)(`span`,{className:`font-mono break-all`,children:e.challenge.proof_hash})]}),e.previous_proof_hash&&(0,m.jsxs)(`div`,{children:[h(`run.previousProofHash`),`: `,(0,m.jsx)(`span`,{className:`font-mono break-all`,children:e.previous_proof_hash})]})]})]})]}),e.challenge.description&&(0,m.jsx)(`p`,{className:`text-sm text-[var(--color-text-muted)] mt-3`,children:e.challenge.description}),e.challenge.type===`shell`&&e.challenge.shell?.cmd&&(0,m.jsxs)(`div`,{className:`mt-4 rounded-[var(--radius-md)] border border-[var(--color-border)] bg-[var(--color-surface)] p-4`,children:[(0,m.jsxs)(`div`,{className:`flex items-center justify-between gap-3`,children:[(0,m.jsxs)(`div`,{className:`min-w-0`,children:[(0,m.jsx)(`div`,{className:`text-sm text-[var(--color-text-muted)]`,children:h(`run.shell.command`)}),(0,m.jsx)(`div`,{className:`font-mono text-sm text-[var(--color-text)] break-all`,children:e.challenge.shell.cmd})]}),(0,m.jsx)(`button`,{type:`button`,onClick:()=>s(e.challenge.shell.cmd),className:`min-h-[44px] min-w-[44px] px-4 py-2 rounded-[var(--radius-md)] font-medium border border-[var(--color-border)] text-[var(--color-text)] bg-transparent flex-shrink-0 hover:bg-[var(--color-surface-elevated)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--color-focus-ring)] focus-visible:outline-offset-2`,children:h(`run.copy`)})]}),o&&(0,m.jsx)(`div`,{className:`text-xs text-[var(--color-text-muted)] mt-2`,children:o})]})]})]}),e.status!==`completed`&&e.status!==`ready_to_attest`&&(0,m.jsxs)(`section`,{"aria-labelledby":`run-solution`,className:`mb-6`,children:[(0,m.jsx)(`h2`,{id:`run-solution`,className:`text-lg font-semibold text-[var(--color-text-heading)] mb-2`,children:h(`run.solution`)}),(0,m.jsx)(`div`,{className:`rounded-[var(--radius-md)] border border-[var(--color-border)] bg-[var(--color-surface-elevated)] p-4`,children:(0,m.jsx)(g,{challenge:e.challenge,disabled:d||f,onSubmit:c})})]}),e.status===`ready_to_attest`&&(0,m.jsxs)(`section`,{"aria-labelledby":`run-attest`,className:`mb-6`,children:[(0,m.jsx)(`h2`,{id:`run-attest`,className:`text-lg font-semibold text-[var(--color-text-heading)] mb-2`,children:h(`run.attest.title`)}),(0,m.jsxs)(`div`,{className:`rounded-[var(--radius-md)] border border-[var(--color-border)] bg-[var(--color-surface-elevated)] p-4`,children:[(0,m.jsx)(`div`,{className:`text-sm text-[var(--color-text-muted)] mb-4`,children:h(`run.attest.subtitle`)}),(0,m.jsxs)(`div`,{className:`flex flex-wrap gap-4 mb-4`,role:`radiogroup`,"aria-label":h(`run.attest.outcomeLabel`),children:[(0,m.jsxs)(`label`,{className:`inline-flex items-center gap-2 min-h-[44px]`,children:[(0,m.jsx)(`input`,{type:`radio`,name:`attest-outcome`,value:`success`,checked:t===`success`,onChange:()=>n(`success`)}),(0,m.jsx)(`span`,{className:`text-sm text-[var(--color-text)]`,children:h(`run.attest.success`)})]}),(0,m.jsxs)(`label`,{className:`inline-flex items-center gap-2 min-h-[44px]`,children:[(0,m.jsx)(`input`,{type:`radio`,name:`attest-outcome`,value:`failure`,checked:t===`failure`,onChange:()=>n(`failure`)}),(0,m.jsx)(`span`,{className:`text-sm text-[var(--color-text)]`,children:h(`run.attest.failure`)})]})]}),(0,m.jsxs)(`div`,{className:`mb-4`,children:[(0,m.jsx)(`label`,{htmlFor:`run-attest-message`,className:`block font-medium text-[var(--color-text-heading)] mb-2`,children:h(`run.attest.message`)}),(0,m.jsx)(`textarea`,{id:`run-attest-message`,value:r,onChange:e=>i(e.target.value),className:`w-full min-h-[8rem] px-4 py-3 border border-[var(--color-border)] rounded-[var(--radius-md)] text-[var(--color-text)] bg-[var(--color-surface)] resize-y focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--color-focus-ring)] focus-visible:outline-offset-2`})]}),(0,m.jsx)(`button`,{type:`button`,onClick:l,disabled:p,className:`min-h-[44px] min-w-[44px] px-4 py-2 rounded-[var(--radius-md)] font-medium bg-[var(--color-primary)] text-white border-0 cursor-pointer disabled:opacity-60 disabled:cursor-not-allowed hover:bg-[var(--color-primary-hover)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--color-focus-ring)] focus-visible:outline-offset-2`,children:h(p?`run.attest.submitting`:`run.attest.submit`)})]})]}),e.history.length>0&&(0,m.jsxs)(`section`,{"aria-labelledby":`run-history`,className:`mb-6`,children:[(0,m.jsx)(`h2`,{id:`run-history`,className:`text-lg font-semibold text-[var(--color-text-heading)] mb-2`,children:h(`run.history`)}),(0,m.jsx)(`ul`,{className:`list-none p-0 m-0 space-y-2`,"aria-label":h(`run.historyLabel`),children:e.history.slice().reverse().map((e,t)=>(0,m.jsxs)(`li`,{className:`rounded-[var(--radius-md)] border border-[var(--color-border)] bg-[var(--color-surface-elevated)] p-4`,children:[(0,m.jsxs)(`div`,{className:`text-sm text-[var(--color-text-muted)]`,children:[new Date(e.submitted_at).toLocaleString(),` · `,e.challenge.type,` ·`,` `,(0,m.jsx)(`span`,{className:`font-mono break-all`,children:e.step.uri})]}),e.server_message&&(0,m.jsx)(`div`,{className:`text-sm text-[var(--color-text)] mt-1`,children:e.server_message})]},`${e.step.uri}:${t}`))})]}),e.status===`completed`&&(0,m.jsxs)(`div`,{className:`rounded-[var(--radius-md)] border border-[var(--color-border)] bg-[#dcfce7] text-[#166534] p-4`,children:[(0,m.jsx)(`strong`,{className:`block`,children:h(`run.completed`)}),e.last_message&&(0,m.jsx)(`div`,{className:`text-sm mt-1`,children:e.last_message})]})]})}async function v(e){let t=await c(`/api/kairos_begin`,{method:`POST`,body:JSON.stringify({uri:e})});if(!t.ok){let e=await t.json().catch(()=>({}));throw Error(e.message??t.statusText)}return t.json()}function y(){return r({mutationFn:e=>v(e)})}async function b(e){let t=await c(`/api/kairos_next`,{method:`POST`,body:JSON.stringify(e)});if(!t.ok){let e=await t.json().catch(()=>({}));throw Error(e.message??t.statusText)}return t.json()}function x(){return r({mutationFn:e=>b(e)})}async function S(e){let t=await c(`/api/kairos_attest`,{method:`POST`,body:JSON.stringify(e)});if(!t.ok){let e=await t.json().catch(()=>({}));throw Error(e.message??t.statusText)}return t.json()}function C(){return r({mutationFn:e=>S(e)})}function w(e){if(e)return e.match(/kairos:\/\/mem\/[0-9a-fA-F-]{36}/)?.[0]}function T(){return new Date().toISOString()}function E(){let{t:e}=a(),{uri:r}=n(),[o]=i(),s=r?decodeURIComponent(r):void 0,{session:c}=f(o.get(`session`)),{upsert:u}=d(),h=y(),g=x(),v=C(),[b,S]=(0,p.useState)(null),[E,D]=(0,p.useState)(`success`),[O,k]=(0,p.useState)(``),[A,j]=(0,p.useState)(null);(0,p.useEffect)(()=>{c&&!b&&(S(c),D(`success`),k(``))},[c,b]);let M=e=>{S(e),u(e)},N=async()=>{if(s)try{let e=await h.mutateAsync(s),t=T(),n=`${s}:${t}`,r=e.next_action?.includes(`kairos_attest`)?`ready_to_attest`:`running`,i=w(e.next_action);M({id:n,protocol_uri:s,started_at:t,updated_at:t,status:r,current_step:e.current_step??null,challenge:e.challenge,next_action:e.next_action,last_message:e.message,previous_proof_hash:e.proof_hash,attest_uri:r===`ready_to_attest`?i:void 0,history:[]})}catch{S(null)}};return s?(0,m.jsxs)(`div`,{children:[(0,m.jsx)(`h1`,{className:`text-[var(--color-text-heading)] text-2xl font-semibold mb-1`,children:e(`run.title`)}),(0,m.jsxs)(`p`,{className:`text-sm text-[var(--color-text-muted)] mb-4`,children:[e(`run.protocolUri`),`:`,` `,(0,m.jsx)(`span`,{className:`font-mono break-all`,children:s})]}),(0,m.jsxs)(`div`,{className:`flex flex-wrap gap-2 mb-6`,children:[(0,m.jsx)(t,{to:`/protocols/${encodeURIComponent(s)}`,className:`min-h-[44px] min-w-[44px] inline-flex items-center justify-center px-4 py-2 rounded-[var(--radius-md)] font-medium border border-[var(--color-border)] text-[var(--color-text)] no-underline hover:bg-[var(--color-surface-elevated)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--color-focus-ring)] focus-visible:outline-offset-2`,children:e(`run.backToProtocol`)}),!b&&(0,m.jsx)(`button`,{type:`button`,onClick:N,disabled:h.isPending,className:`min-h-[44px] min-w-[44px] px-4 py-2 rounded-[var(--radius-md)] font-medium bg-[var(--color-primary)] text-white border-0 cursor-pointer disabled:opacity-60 disabled:cursor-not-allowed hover:bg-[var(--color-primary-hover)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--color-focus-ring)] focus-visible:outline-offset-2`,children:h.isPending?e(`run.starting`):e(`run.start`)})]}),(0,m.jsxs)(`div`,{className:`rounded-[var(--radius-md)] border border-[var(--color-border)] bg-[var(--color-surface-elevated)] p-4 mb-6`,children:[(0,m.jsx)(`strong`,{className:`block text-[var(--color-text-heading)] mb-1`,children:e(`run.safety.title`)}),(0,m.jsx)(`p`,{className:`text-sm text-[var(--color-text-muted)]`,children:e(`run.safety.copy`)})]}),h.isError&&(0,m.jsx)(l,{message:h.error instanceof Error?h.error.message:String(h.error),onRetry:()=>N(),showGoBack:!0}),b?.status===`error`&&b.last_message&&(0,m.jsx)(`div`,{className:`mb-6`,children:(0,m.jsx)(l,{message:b.last_message,onRetry:()=>N(),showGoBack:!0})}),b&&b.status!==`error`&&(0,m.jsx)(_,{run:b,attestOutcome:E,setAttestOutcome:D,attestMessage:O,setAttestMessage:k,copyStatus:A,onCopy:async t=>{j(null);try{await navigator.clipboard.writeText(t),j(e(`run.copied`)),setTimeout(()=>j(null),1500)}catch(e){j(e instanceof Error?e.message:String(e))}},onSubmitStep:async e=>{if(!b?.current_step)return;let t=b.challenge.nonce,n=b.previous_proof_hash??b.challenge.proof_hash,r={...e,...t?{nonce:t}:{},...n?{proof_hash:n}:{}};try{let e=await g.mutateAsync({uri:b.current_step.uri,solution:r}),t=T(),n=e.next_action?.includes(`kairos_attest`)||(e.message?.toLowerCase().includes(`call kairos_attest`)??!1),i=w(e.next_action)??b.attest_uri;M({...b,updated_at:t,status:n?`ready_to_attest`:`running`,current_step:e.current_step??null,challenge:e.challenge,next_action:e.next_action,last_message:e.message,previous_proof_hash:e.proof_hash??b.previous_proof_hash,attest_uri:n?i:void 0,history:[...b.history,{step:b.current_step,challenge:b.challenge,solution:r,submitted_at:t,proof_hash:e.proof_hash,server_message:e.message}]})}catch(e){M({...b,updated_at:T(),status:`error`,last_message:e instanceof Error?e.message:String(e)})}},onAttest:async()=>{if(!b)return;let t=b.attest_uri??b.current_step?.uri;if(t)try{let n=await v.mutateAsync({uri:t,outcome:E,message:O.trim()||e(`run.attest.defaultMessage`)});M({...b,updated_at:T(),status:`completed`,last_message:n.results[0]?.message??b.last_message})}catch(e){M({...b,updated_at:T(),status:`error`,last_message:e instanceof Error?e.message:String(e)})}},isNextPending:g.isPending,isBeginPending:h.isPending,isAttestPending:v.isPending})]}):(0,m.jsx)(l,{message:e(`run.missingUri`),showGoBack:!0})}export{E as RunGuidedPage};
|
|
1
|
+
import{r as e}from"./rolldown-runtime-Dw2cE7zH.js";import{a as t,f as n,h as r,p as i,y as a}from"./vendor-GiUVcjs7.js";import{i as o,t as s}from"./react-BdWJx0XL.js";import"./tiptap-kMFBDujG.js";import{t as c}from"./api-D88c6lbH.js";import{t as l}from"./ErrorAlert-ME7tEJ6X.js";import{t as u}from"./RenderedMarkdown-DjbuQlBl.js";import{n as d,t as f}from"./useRunSession-CciNdgs6.js";var p=e(o(),1),m=s();function h(e){let t=e.trim();return t?JSON.parse(t):null}function g({challenge:e,disabled:t,onSubmit:n}){let{t:r}=a(),i=e.type,[o,s]=(0,p.useState)(0),[c,l]=(0,p.useState)(``),[u,d]=(0,p.useState)(``),f=e.mcp?.tool_name??``,[g,_]=(0,p.useState)(!0),[v,y]=(0,p.useState)(``),[b,x]=(0,p.useState)(``),S=e.user_input?.prompt??``,[C,w]=(0,p.useState)(``),T=e.comment?.min_length??10,[E,D]=(0,p.useState)(``),[O,k]=(0,p.useState)(null);(0,p.useEffect)(()=>{k(null),s(0),l(``),d(``),_(!0),y(``),x(``),w(``),D(``)},[i,f,S,T]);let A=(0,p.useMemo)(()=>i===`shell`?Number.isFinite(o):i===`mcp`?f.trim().length>0:i===`user_input`?C.trim().length>0:i===`comment`?E.trim().length>=T:!1,[i,o,f,C,E,T]);return(0,m.jsxs)(`form`,{onSubmit:e=>{if(e.preventDefault(),k(null),A)try{if(i===`shell`){n({type:i,shell:{exit_code:o,...c.trim()?{stdout:c}:{},...u.trim()?{stderr:u}:{}}});return}if(i===`mcp`){let e=h(v),t=h(b);n({type:i,mcp:{tool_name:f,...e===null?{}:{arguments:e},result:t,success:g}});return}if(i===`user_input`){n({type:i,user_input:{confirmation:C.trim(),timestamp:new Date().toISOString()}});return}if(i===`comment`){n({type:i,comment:{text:E.trim()}});return}}catch(e){k(e instanceof Error?e.message:String(e))}},"aria-label":r(`run.solutionFormLabel`),children:[O&&(0,m.jsx)(`div`,{className:`mb-4 p-4 rounded-[var(--radius-md)] bg-[var(--color-error-bg)] text-[var(--color-error)]`,role:`alert`,children:O}),i===`shell`&&(0,m.jsxs)(`div`,{className:`space-y-4`,children:[(0,m.jsxs)(`div`,{children:[(0,m.jsx)(`label`,{htmlFor:`run-shell-exit-code`,className:`block font-medium text-[var(--color-text-heading)] mb-2`,children:r(`run.shell.exitCode`)}),(0,m.jsx)(`input`,{id:`run-shell-exit-code`,type:`number`,inputMode:`numeric`,value:o,onChange:e=>s(Number(e.target.value)),className:`w-full min-h-[44px] px-4 py-2 border border-[var(--color-border)] rounded-[var(--radius-md)] text-[var(--color-text)] bg-[var(--color-surface)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--color-focus-ring)] focus-visible:outline-offset-2`,disabled:t,required:!0})]}),(0,m.jsxs)(`div`,{children:[(0,m.jsx)(`label`,{htmlFor:`run-shell-stdout`,className:`block font-medium text-[var(--color-text-heading)] mb-2`,children:r(`run.shell.stdout`)}),(0,m.jsx)(`textarea`,{id:`run-shell-stdout`,value:c,onChange:e=>l(e.target.value),className:`w-full min-h-[8rem] px-4 py-3 border border-[var(--color-border)] rounded-[var(--radius-md)] text-[var(--color-text)] bg-[var(--color-surface)] font-mono text-sm resize-y`,disabled:t})]}),(0,m.jsxs)(`div`,{children:[(0,m.jsx)(`label`,{htmlFor:`run-shell-stderr`,className:`block font-medium text-[var(--color-text-heading)] mb-2`,children:r(`run.shell.stderr`)}),(0,m.jsx)(`textarea`,{id:`run-shell-stderr`,value:u,onChange:e=>d(e.target.value),className:`w-full min-h-[6rem] px-4 py-3 border border-[var(--color-border)] rounded-[var(--radius-md)] text-[var(--color-text)] bg-[var(--color-surface)] font-mono text-sm resize-y`,disabled:t})]})]}),i===`mcp`&&(0,m.jsxs)(`div`,{className:`space-y-4`,children:[(0,m.jsxs)(`div`,{className:`rounded-[var(--radius-md)] border border-[var(--color-border)] bg-[var(--color-surface)] p-4`,children:[(0,m.jsx)(`div`,{className:`text-sm text-[var(--color-text-muted)]`,children:r(`run.mcp.toolName`)}),(0,m.jsx)(`div`,{className:`font-medium text-[var(--color-text-heading)] break-all`,children:f||r(`run.mcp.toolMissing`)})]}),(0,m.jsxs)(`label`,{className:`inline-flex items-center gap-2 min-h-[44px]`,children:[(0,m.jsx)(`input`,{type:`checkbox`,checked:g,onChange:e=>_(e.target.checked),disabled:t,className:`h-4 w-4`}),(0,m.jsx)(`span`,{className:`text-sm text-[var(--color-text)]`,children:r(`run.mcp.success`)})]}),(0,m.jsxs)(`div`,{children:[(0,m.jsx)(`label`,{htmlFor:`run-mcp-args`,className:`block font-medium text-[var(--color-text-heading)] mb-2`,children:r(`run.mcp.arguments`)}),(0,m.jsx)(`textarea`,{id:`run-mcp-args`,value:v,onChange:e=>y(e.target.value),placeholder:`{ "example": true }`,className:`w-full min-h-[6rem] px-4 py-3 border border-[var(--color-border)] rounded-[var(--radius-md)] text-[var(--color-text)] bg-[var(--color-surface)] font-mono text-sm resize-y`,disabled:t})]}),(0,m.jsxs)(`div`,{children:[(0,m.jsx)(`label`,{htmlFor:`run-mcp-result`,className:`block font-medium text-[var(--color-text-heading)] mb-2`,children:r(`run.mcp.result`)}),(0,m.jsx)(`textarea`,{id:`run-mcp-result`,value:b,onChange:e=>x(e.target.value),placeholder:`{ "ok": true }`,className:`w-full min-h-[10rem] px-4 py-3 border border-[var(--color-border)] rounded-[var(--radius-md)] text-[var(--color-text)] bg-[var(--color-surface)] font-mono text-sm resize-y`,disabled:t,required:!0})]})]}),i===`user_input`&&(0,m.jsxs)(`div`,{className:`space-y-4`,children:[(0,m.jsxs)(`div`,{className:`rounded-[var(--radius-md)] border border-[var(--color-border)] bg-[var(--color-surface)] p-4`,children:[(0,m.jsx)(`div`,{className:`text-sm text-[var(--color-text-muted)]`,children:r(`run.userInput.prompt`)}),(0,m.jsx)(`div`,{className:`font-medium text-[var(--color-text-heading)]`,children:S||r(`run.userInput.promptMissing`)})]}),(0,m.jsxs)(`div`,{children:[(0,m.jsx)(`label`,{htmlFor:`run-user-confirmation`,className:`block font-medium text-[var(--color-text-heading)] mb-2`,children:r(`run.userInput.confirmation`)}),(0,m.jsx)(`textarea`,{id:`run-user-confirmation`,value:C,onChange:e=>w(e.target.value),className:`w-full min-h-[6rem] px-4 py-3 border border-[var(--color-border)] rounded-[var(--radius-md)] text-[var(--color-text)] bg-[var(--color-surface)] resize-y`,disabled:t,required:!0})]})]}),i===`comment`&&(0,m.jsxs)(`div`,{className:`space-y-2`,children:[(0,m.jsxs)(`div`,{className:`text-sm text-[var(--color-text-muted)]`,children:[r(`run.comment.minLength`,{count:T}),` · `,r(`run.comment.count`,{count:E.length})]}),(0,m.jsxs)(`div`,{children:[(0,m.jsx)(`label`,{htmlFor:`run-comment-text`,className:`block font-medium text-[var(--color-text-heading)] mb-2`,children:r(`run.comment.text`)}),(0,m.jsx)(`textarea`,{id:`run-comment-text`,value:E,onChange:e=>D(e.target.value),className:`w-full min-h-[10rem] px-4 py-3 border border-[var(--color-border)] rounded-[var(--radius-md)] text-[var(--color-text)] bg-[var(--color-surface)] resize-y`,disabled:t,required:!0,"aria-invalid":E.trim().length>0&&E.trim().length<T})]})]}),(0,m.jsx)(`button`,{type:`submit`,disabled:t||!A,className:`mt-4 min-h-[44px] min-w-[44px] px-4 py-2 rounded-[var(--radius-md)] font-medium bg-[var(--color-primary)] text-white border-0 cursor-pointer disabled:opacity-60 disabled:cursor-not-allowed hover:bg-[var(--color-primary-hover)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--color-focus-ring)] focus-visible:outline-offset-2`,children:r(`run.submitStep`)})]})}function _({run:e,attestOutcome:t,setAttestOutcome:n,attestMessage:r,setAttestMessage:i,copyStatus:o,onCopy:s,onSubmitStep:c,onAttest:l,isNextPending:d,isBeginPending:f,isAttestPending:p}){let{t:h}=a();return(0,m.jsxs)(m.Fragment,{children:[e.status===`running`&&(0,m.jsx)(`div`,{className:`mb-4 flex items-center gap-2 text-sm text-[var(--color-text-muted)]`,role:`status`,"aria-live":`polite`,children:(0,m.jsx)(`span`,{className:`font-medium text-[var(--color-text-heading)]`,children:h(`run.stepperProgress`,{completed:e.history.length})})}),e.last_message&&(0,m.jsxs)(`div`,{className:`mb-4 p-4 rounded-[var(--radius-md)] border border-[var(--color-border)] bg-[var(--color-surface)]`,role:`status`,"aria-live":`polite`,children:[(0,m.jsx)(`div`,{className:`text-sm text-[var(--color-text-muted)]`,children:h(`run.serverMessage`)}),(0,m.jsx)(`div`,{className:`text-[var(--color-text)]`,children:e.last_message})]}),(0,m.jsxs)(`section`,{"aria-labelledby":`run-current-step`,className:`mb-6`,children:[(0,m.jsx)(`h2`,{id:`run-current-step`,className:`text-lg font-semibold text-[var(--color-text-heading)] mb-2`,children:h(`run.currentStep`)}),(0,m.jsx)(`div`,{className:`rounded-[var(--radius-md)] border border-[var(--color-border)] bg-[var(--color-surface-elevated)] p-4`,children:e.current_step?(0,m.jsxs)(m.Fragment,{children:[(0,m.jsxs)(`div`,{className:`text-sm text-[var(--color-text-muted)] mb-2`,children:[h(`run.stepUri`),`: `,(0,m.jsx)(`span`,{className:`font-mono break-all`,children:e.current_step.uri})]}),e.current_step.content?(0,m.jsx)(u,{content:e.current_step.content}):(0,m.jsx)(`p`,{className:`text-sm text-[var(--color-text-muted)] m-0`,children:h(`run.noStepContent`)})]}):(0,m.jsx)(`p`,{className:`text-sm text-[var(--color-text-muted)] m-0`,children:h(`run.noStepContent`)})})]}),(0,m.jsxs)(`section`,{"aria-labelledby":`run-challenge`,className:`mb-6`,children:[(0,m.jsx)(`h2`,{id:`run-challenge`,className:`text-lg font-semibold text-[var(--color-text-heading)] mb-2`,children:h(`run.challenge`)}),(0,m.jsxs)(`div`,{className:`rounded-[var(--radius-md)] border border-[var(--color-border)] bg-[var(--color-surface-elevated)] p-4`,children:[(0,m.jsxs)(`div`,{className:`flex items-start justify-between gap-4`,children:[(0,m.jsxs)(`div`,{children:[(0,m.jsx)(`div`,{className:`text-sm text-[var(--color-text-muted)]`,children:h(`run.challengeType`)}),(0,m.jsx)(`div`,{className:`font-medium text-[var(--color-text-heading)]`,children:e.challenge.type})]}),(0,m.jsxs)(`details`,{className:`text-sm`,children:[(0,m.jsx)(`summary`,{className:`cursor-pointer text-[var(--color-primary)]`,children:h(`run.advanced`)}),(0,m.jsxs)(`div`,{className:`mt-2 space-y-1 text-[var(--color-text-muted)]`,children:[e.challenge.nonce&&(0,m.jsxs)(`div`,{children:[h(`run.nonce`),`: `,(0,m.jsx)(`span`,{className:`font-mono break-all`,children:e.challenge.nonce})]}),e.challenge.proof_hash&&(0,m.jsxs)(`div`,{children:[h(`run.proofHash`),`: `,(0,m.jsx)(`span`,{className:`font-mono break-all`,children:e.challenge.proof_hash})]}),e.previous_proof_hash&&(0,m.jsxs)(`div`,{children:[h(`run.previousProofHash`),`: `,(0,m.jsx)(`span`,{className:`font-mono break-all`,children:e.previous_proof_hash})]})]})]})]}),e.challenge.description&&(0,m.jsx)(`p`,{className:`text-sm text-[var(--color-text-muted)] mt-3`,children:e.challenge.description}),e.challenge.type===`shell`&&e.challenge.shell?.cmd&&(0,m.jsxs)(`div`,{className:`mt-4 rounded-[var(--radius-md)] border border-[var(--color-border)] bg-[var(--color-surface)] p-4`,children:[(0,m.jsxs)(`div`,{className:`flex items-center justify-between gap-3`,children:[(0,m.jsxs)(`div`,{className:`min-w-0`,children:[(0,m.jsx)(`div`,{className:`text-sm text-[var(--color-text-muted)]`,children:h(`run.shell.command`)}),(0,m.jsx)(`div`,{className:`font-mono text-sm text-[var(--color-text)] break-all`,children:e.challenge.shell.cmd})]}),(0,m.jsx)(`button`,{type:`button`,onClick:()=>s(e.challenge.shell.cmd),className:`min-h-[44px] min-w-[44px] px-4 py-2 rounded-[var(--radius-md)] font-medium border border-[var(--color-border)] text-[var(--color-text)] bg-transparent flex-shrink-0 hover:bg-[var(--color-surface-elevated)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--color-focus-ring)] focus-visible:outline-offset-2`,children:h(`run.copy`)})]}),o&&(0,m.jsx)(`div`,{className:`text-xs text-[var(--color-text-muted)] mt-2`,children:o})]})]})]}),e.status!==`completed`&&e.status!==`ready_to_attest`&&(0,m.jsxs)(`section`,{"aria-labelledby":`run-solution`,className:`mb-6`,children:[(0,m.jsx)(`h2`,{id:`run-solution`,className:`text-lg font-semibold text-[var(--color-text-heading)] mb-2`,children:h(`run.solution`)}),(0,m.jsx)(`div`,{className:`rounded-[var(--radius-md)] border border-[var(--color-border)] bg-[var(--color-surface-elevated)] p-4`,children:(0,m.jsx)(g,{challenge:e.challenge,disabled:d||f,onSubmit:c})})]}),e.status===`ready_to_attest`&&(0,m.jsxs)(`section`,{"aria-labelledby":`run-attest`,className:`mb-6`,children:[(0,m.jsx)(`h2`,{id:`run-attest`,className:`text-lg font-semibold text-[var(--color-text-heading)] mb-2`,children:h(`run.attest.title`)}),(0,m.jsxs)(`div`,{className:`rounded-[var(--radius-md)] border border-[var(--color-border)] bg-[var(--color-surface-elevated)] p-4`,children:[(0,m.jsx)(`div`,{className:`text-sm text-[var(--color-text-muted)] mb-4`,children:h(`run.attest.subtitle`)}),(0,m.jsxs)(`div`,{className:`flex flex-wrap gap-4 mb-4`,role:`radiogroup`,"aria-label":h(`run.attest.outcomeLabel`),children:[(0,m.jsxs)(`label`,{className:`inline-flex items-center gap-2 min-h-[44px]`,children:[(0,m.jsx)(`input`,{type:`radio`,name:`attest-outcome`,value:`success`,checked:t===`success`,onChange:()=>n(`success`)}),(0,m.jsx)(`span`,{className:`text-sm text-[var(--color-text)]`,children:h(`run.attest.success`)})]}),(0,m.jsxs)(`label`,{className:`inline-flex items-center gap-2 min-h-[44px]`,children:[(0,m.jsx)(`input`,{type:`radio`,name:`attest-outcome`,value:`failure`,checked:t===`failure`,onChange:()=>n(`failure`)}),(0,m.jsx)(`span`,{className:`text-sm text-[var(--color-text)]`,children:h(`run.attest.failure`)})]})]}),(0,m.jsxs)(`div`,{className:`mb-4`,children:[(0,m.jsx)(`label`,{htmlFor:`run-attest-message`,className:`block font-medium text-[var(--color-text-heading)] mb-2`,children:h(`run.attest.message`)}),(0,m.jsx)(`textarea`,{id:`run-attest-message`,value:r,onChange:e=>i(e.target.value),className:`w-full min-h-[8rem] px-4 py-3 border border-[var(--color-border)] rounded-[var(--radius-md)] text-[var(--color-text)] bg-[var(--color-surface)] resize-y focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--color-focus-ring)] focus-visible:outline-offset-2`})]}),(0,m.jsx)(`button`,{type:`button`,onClick:l,disabled:p,className:`min-h-[44px] min-w-[44px] px-4 py-2 rounded-[var(--radius-md)] font-medium bg-[var(--color-primary)] text-white border-0 cursor-pointer disabled:opacity-60 disabled:cursor-not-allowed hover:bg-[var(--color-primary-hover)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--color-focus-ring)] focus-visible:outline-offset-2`,children:h(p?`run.attest.submitting`:`run.attest.submit`)})]})]}),e.history.length>0&&(0,m.jsxs)(`section`,{"aria-labelledby":`run-history`,className:`mb-6`,children:[(0,m.jsx)(`h2`,{id:`run-history`,className:`text-lg font-semibold text-[var(--color-text-heading)] mb-2`,children:h(`run.history`)}),(0,m.jsx)(`ul`,{className:`list-none p-0 m-0 space-y-2`,"aria-label":h(`run.historyLabel`),children:e.history.slice().reverse().map((e,t)=>(0,m.jsxs)(`li`,{className:`rounded-[var(--radius-md)] border border-[var(--color-border)] bg-[var(--color-surface-elevated)] p-4`,children:[(0,m.jsxs)(`div`,{className:`text-sm text-[var(--color-text-muted)]`,children:[new Date(e.submitted_at).toLocaleString(),` · `,e.challenge.type,` ·`,` `,(0,m.jsx)(`span`,{className:`font-mono break-all`,children:e.step.uri})]}),e.server_message&&(0,m.jsx)(`div`,{className:`text-sm text-[var(--color-text)] mt-1`,children:e.server_message})]},`${e.step.uri}:${t}`))})]}),e.status===`completed`&&(0,m.jsxs)(`div`,{className:`rounded-[var(--radius-md)] border border-[var(--color-border)] bg-[#dcfce7] text-[#166534] p-4`,children:[(0,m.jsx)(`strong`,{className:`block`,children:h(`run.completed`)}),e.last_message&&(0,m.jsx)(`div`,{className:`text-sm mt-1`,children:e.last_message})]})]})}async function v(e){let t=await c(`/api/kairos_begin`,{method:`POST`,body:JSON.stringify({uri:e})});if(!t.ok){let e=await t.json().catch(()=>({}));throw Error(e.message??t.statusText)}return t.json()}function y(){return r({mutationFn:e=>v(e)})}async function b(e){let t=await c(`/api/kairos_next`,{method:`POST`,body:JSON.stringify(e)});if(!t.ok){let e=await t.json().catch(()=>({}));throw Error(e.message??t.statusText)}return t.json()}function x(){return r({mutationFn:e=>b(e)})}async function S(e){let t=await c(`/api/kairos_attest`,{method:`POST`,body:JSON.stringify(e)});if(!t.ok){let e=await t.json().catch(()=>({}));throw Error(e.message??t.statusText)}return t.json()}function C(){return r({mutationFn:e=>S(e)})}function w(e){if(e)return e.match(/kairos:\/\/mem\/[0-9a-fA-F-]{36}/)?.[0]}function T(){return new Date().toISOString()}function E(){let{t:e}=a(),{uri:r}=n(),[o]=i(),s=r?decodeURIComponent(r):void 0,{session:c}=f(o.get(`session`)),{upsert:u}=d(),h=y(),g=x(),v=C(),[b,S]=(0,p.useState)(null),[E,D]=(0,p.useState)(`success`),[O,k]=(0,p.useState)(``),[A,j]=(0,p.useState)(null);(0,p.useEffect)(()=>{c&&!b&&(S(c),D(`success`),k(``))},[c,b]);let M=e=>{S(e),u(e)},N=async()=>{if(s)try{let e=await h.mutateAsync(s),t=T(),n=`${s}:${t}`,r=e.next_action?.includes(`kairos_attest`)?`ready_to_attest`:`running`,i=w(e.next_action);M({id:n,protocol_uri:s,started_at:t,updated_at:t,status:r,current_step:e.current_step??null,challenge:e.challenge,next_action:e.next_action,last_message:e.message,previous_proof_hash:e.proof_hash,attest_uri:r===`ready_to_attest`?i:void 0,history:[]})}catch{S(null)}};return s?(0,m.jsxs)(`div`,{children:[(0,m.jsx)(`h1`,{className:`text-[var(--color-text-heading)] text-2xl font-semibold mb-1`,children:e(`run.title`)}),(0,m.jsxs)(`p`,{className:`text-sm text-[var(--color-text-muted)] mb-4`,children:[e(`run.protocolUri`),`:`,` `,(0,m.jsx)(`span`,{className:`font-mono break-all`,children:s})]}),(0,m.jsxs)(`div`,{className:`flex flex-wrap gap-2 mb-6`,children:[(0,m.jsx)(t,{to:`/protocols/${encodeURIComponent(s)}`,className:`min-h-[44px] min-w-[44px] inline-flex items-center justify-center px-4 py-2 rounded-[var(--radius-md)] font-medium border border-[var(--color-border)] text-[var(--color-text)] no-underline hover:bg-[var(--color-surface-elevated)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--color-focus-ring)] focus-visible:outline-offset-2`,children:e(`run.backToProtocol`)}),!b&&(0,m.jsx)(`button`,{type:`button`,onClick:N,disabled:h.isPending,className:`min-h-[44px] min-w-[44px] px-4 py-2 rounded-[var(--radius-md)] font-medium bg-[var(--color-primary)] text-white border-0 cursor-pointer disabled:opacity-60 disabled:cursor-not-allowed hover:bg-[var(--color-primary-hover)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--color-focus-ring)] focus-visible:outline-offset-2`,children:h.isPending?e(`run.starting`):e(`run.start`)})]}),(0,m.jsxs)(`div`,{className:`rounded-[var(--radius-md)] border border-[var(--color-border)] bg-[var(--color-surface-elevated)] p-4 mb-6`,children:[(0,m.jsx)(`strong`,{className:`block text-[var(--color-text-heading)] mb-1`,children:e(`run.safety.title`)}),(0,m.jsx)(`p`,{className:`text-sm text-[var(--color-text-muted)]`,children:e(`run.safety.copy`)})]}),h.isError&&(0,m.jsx)(l,{message:h.error instanceof Error?h.error.message:String(h.error),onRetry:()=>N(),showGoBack:!0}),b?.status===`error`&&b.last_message&&(0,m.jsx)(`div`,{className:`mb-6`,children:(0,m.jsx)(l,{message:b.last_message,onRetry:()=>N(),showGoBack:!0})}),b&&b.status!==`error`&&(0,m.jsx)(_,{run:b,attestOutcome:E,setAttestOutcome:D,attestMessage:O,setAttestMessage:k,copyStatus:A,onCopy:async t=>{j(null);try{await navigator.clipboard.writeText(t),j(e(`run.copied`)),setTimeout(()=>j(null),1500)}catch(e){j(e instanceof Error?e.message:String(e))}},onSubmitStep:async e=>{if(!b?.current_step)return;let t=b.challenge.nonce,n=b.previous_proof_hash??b.challenge.proof_hash,r={...e,...t?{nonce:t}:{},...n?{proof_hash:n}:{}};try{let e=await g.mutateAsync({uri:b.current_step.uri,solution:r}),t=T(),n=e.next_action?.includes(`kairos_attest`)||(e.message?.toLowerCase().includes(`call kairos_attest`)??!1),i=w(e.next_action)??b.attest_uri;M({...b,updated_at:t,status:n?`ready_to_attest`:`running`,current_step:e.current_step??null,challenge:e.challenge,next_action:e.next_action,last_message:e.message,previous_proof_hash:e.proof_hash??b.previous_proof_hash,attest_uri:n?i:void 0,history:[...b.history,{step:b.current_step,challenge:b.challenge,solution:r,submitted_at:t,proof_hash:e.proof_hash,server_message:e.message}]})}catch(e){M({...b,updated_at:T(),status:`error`,last_message:e instanceof Error?e.message:String(e)})}},onAttest:async()=>{if(!b)return;let t=b.attest_uri??b.current_step?.uri;if(t)try{let n=await v.mutateAsync({uri:t,outcome:E,message:O.trim()||e(`run.attest.defaultMessage`)});M({...b,updated_at:T(),status:`completed`,last_message:n.results[0]?.message??b.last_message})}catch(e){M({...b,updated_at:T(),status:`error`,last_message:e instanceof Error?e.message:String(e)})}},isNextPending:g.isPending,isBeginPending:h.isPending,isAttestPending:v.isPending})]}):(0,m.jsx)(l,{message:e(`run.missingUri`),showGoBack:!0})}export{E as RunGuidedPage};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as e,y as t}from"./vendor-
|
|
1
|
+
import{a as e,y as t}from"./vendor-GiUVcjs7.js";import{t as n}from"./react-BdWJx0XL.js";import"./tiptap-kMFBDujG.js";import{n as r}from"./useRunSession-CciNdgs6.js";var i=n();function a(){let{t:n}=t(),{sessions:a,remove:o}=r();return(0,i.jsxs)(`div`,{children:[(0,i.jsx)(`h1`,{className:`text-[var(--color-text-heading)] text-2xl font-semibold mb-1`,children:n(`runs.title`)}),(0,i.jsx)(`p`,{className:`text-sm text-[var(--color-text-muted)] mb-6`,children:n(`runs.subtitle`)}),a.length===0?(0,i.jsx)(`div`,{className:`rounded-[var(--radius-md)] border border-[var(--color-border)] bg-[var(--color-surface-elevated)] p-6`,children:(0,i.jsx)(`p`,{className:`text-[var(--color-text-muted)]`,children:n(`runs.empty`)})}):(0,i.jsx)(`ul`,{className:`list-none p-0 m-0 space-y-2`,"aria-label":n(`runs.listLabel`),children:a.map(t=>(0,i.jsxs)(`li`,{className:`rounded-[var(--radius-md)] border border-[var(--color-border)] bg-[var(--color-surface-elevated)] p-4 flex items-start justify-between gap-4`,children:[(0,i.jsxs)(`div`,{className:`min-w-0`,children:[(0,i.jsx)(`div`,{className:`font-medium text-[var(--color-text-heading)] truncate`,children:t.protocol_uri}),(0,i.jsxs)(`div`,{className:`text-sm text-[var(--color-text-muted)] mt-1`,children:[n(`runs.status`),`: `,t.status,` · `,n(`runs.updated`),`: `,new Date(t.updated_at).toLocaleString(),` · `,n(`runs.stepsDone`,{count:t.history.length})]}),t.last_message&&(0,i.jsx)(`div`,{className:`text-sm text-[var(--color-text-muted)] mt-1`,children:t.last_message})]}),(0,i.jsxs)(`div`,{className:`flex flex-wrap gap-2 flex-shrink-0`,children:[(0,i.jsx)(e,{to:`/protocols/${encodeURIComponent(t.protocol_uri)}/run?session=${encodeURIComponent(t.id)}`,className:`min-h-[44px] min-w-[44px] inline-flex items-center justify-center px-4 py-2 rounded-[var(--radius-md)] font-medium bg-[var(--color-primary)] text-white no-underline hover:bg-[var(--color-primary-hover)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--color-focus-ring)] focus-visible:outline-offset-2`,children:n(`runs.resume`)}),(0,i.jsx)(`button`,{type:`button`,onClick:()=>o(t.id),className:`min-h-[44px] min-w-[44px] px-4 py-2 rounded-[var(--radius-md)] font-medium border border-[var(--color-border)] text-[var(--color-text)] bg-transparent hover:bg-[var(--color-surface-elevated)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--color-focus-ring)] focus-visible:outline-offset-2`,children:n(`runs.remove`)})]})]},t.id))})]})}export{a as RunsPage};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as e}from"./rolldown-runtime-Dw2cE7zH.js";import{a as t,f as n,y as r}from"./vendor-
|
|
1
|
+
import{r as e}from"./rolldown-runtime-Dw2cE7zH.js";import{a as t,f as n,y as r}from"./vendor-GiUVcjs7.js";import{i,t as a}from"./react-BdWJx0XL.js";import"./tiptap-kMFBDujG.js";import{i as o,n as s}from"./useProtocol-BruWpIzq.js";var c=e(i(),1),l=a();function u(){let{t:e}=r(),{uri:i}=n(),{data:a,isLoading:u,isError:d,error:f}=o(i?decodeURIComponent(i):void 0,!0),[p,m]=(0,c.useState)(``),[h,g]=(0,c.useState)(``),[_,v]=(0,c.useState)(``),[y,b]=(0,c.useState)(!0);if(u&&!a)return(0,l.jsx)(`p`,{className:`text-[var(--color-text-muted)]`,children:e(`protocol.loading`)});if(d||!a)return(0,l.jsxs)(`div`,{role:`alert`,className:`rounded-[var(--radius-md)] bg-[var(--color-error-bg)] p-4 text-[var(--color-error)]`,children:[f instanceof Error?f.message:e(`protocol.notFound`),(0,l.jsx)(t,{to:`/`,className:`mt-2 block text-[var(--color-primary)] underline hover:no-underline focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--color-focus-ring)] focus-visible:outline-offset-2`,children:e(`notFound.goHome`)})]});let{title:x}=s(a.markdown_doc),S=p.trim()||x,C=S.replace(/[^a-zA-Z0-9]+/g,`-`).replace(/^-|-$/g,``)||`skill`;return(0,l.jsxs)(`div`,{children:[(0,l.jsx)(`h1`,{className:`mb-1 text-2xl font-semibold text-[var(--color-text-heading)]`,children:e(`skill.title`)}),(0,l.jsx)(`p`,{className:`mb-6 text-sm text-[var(--color-text-muted)]`,children:e(`skill.subtitle`)}),(0,l.jsxs)(`div`,{className:`mb-6 grid gap-4 xl:grid-cols-[1.3fr_1fr]`,children:[(0,l.jsxs)(`div`,{className:`space-y-4`,children:[(0,l.jsxs)(`div`,{children:[(0,l.jsx)(`label`,{htmlFor:`skill-name`,className:`mb-2 block font-medium text-[var(--color-text-heading)]`,children:e(`skill.skillName`)}),(0,l.jsx)(`input`,{id:`skill-name`,type:`text`,value:p,onChange:e=>m(e.target.value),placeholder:x,className:`min-h-[44px] w-full rounded-[var(--radius-md)] border border-[var(--color-border)] bg-[var(--color-surface)] px-4 py-3 text-sm text-[var(--color-text)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--color-focus-ring)] focus-visible:outline-offset-2`})]}),(0,l.jsxs)(`div`,{children:[(0,l.jsx)(`label`,{htmlFor:`skill-desc`,className:`mb-2 block font-medium text-[var(--color-text-heading)]`,children:e(`skill.description`)}),(0,l.jsx)(`textarea`,{id:`skill-desc`,value:h,onChange:e=>g(e.target.value),placeholder:x,rows:3,className:`w-full rounded-[var(--radius-md)] border border-[var(--color-border)] bg-[var(--color-surface)] px-4 py-3 text-sm text-[var(--color-text)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--color-focus-ring)] focus-visible:outline-offset-2`})]}),(0,l.jsxs)(`div`,{children:[(0,l.jsx)(`label`,{htmlFor:`skill-when`,className:`mb-2 block font-medium text-[var(--color-text-heading)]`,children:e(`skill.whenToUse`)}),(0,l.jsx)(`textarea`,{id:`skill-when`,value:_,onChange:e=>v(e.target.value),placeholder:`e.g. deploy and test, run tests before release`,rows:2,className:`w-full rounded-[var(--radius-md)] border border-[var(--color-border)] bg-[var(--color-surface)] px-4 py-3 text-sm text-[var(--color-text)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--color-focus-ring)] focus-visible:outline-offset-2`})]}),(0,l.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,l.jsx)(`input`,{id:`skill-refs`,type:`checkbox`,checked:y,onChange:e=>b(e.target.checked),className:`h-4 w-4 rounded border-[var(--color-border)] text-[var(--color-primary)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--color-focus-ring)]`}),(0,l.jsx)(`label`,{htmlFor:`skill-refs`,className:`text-sm text-[var(--color-text)]`,children:e(`skill.includeReferences`)})]}),(0,l.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[(0,l.jsx)(`button`,{type:`button`,onClick:()=>{let e=`# ${S}\n\n${h.trim()||x}\n\n## When to use it\n\n${_.trim()||`Use when this protocol applies.`}\n\n## Protocol\n\n${a.markdown_doc}`,t=new Blob([e],{type:`text/markdown;charset=utf-8`}),n=URL.createObjectURL(t),r=document.createElement(`a`);r.href=n,r.download=`${C}-skill.md`,r.click(),URL.revokeObjectURL(n)},className:`min-h-[44px] min-w-[44px] inline-flex items-center justify-center rounded-[var(--radius-md)] bg-[var(--color-primary)] px-4 py-2 font-medium text-white hover:bg-[var(--color-primary-hover)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--color-focus-ring)] focus-visible:outline-offset-2`,children:e(`skill.downloadAsSkill`)}),(0,l.jsx)(t,{to:`/protocols/${encodeURIComponent(a.uri)}`,className:`min-h-[44px] min-w-[44px] inline-flex items-center justify-center rounded-[var(--radius-md)] border border-[var(--color-border)] bg-[var(--color-surface)] px-4 py-2 font-medium text-[var(--color-text)] no-underline hover:bg-[var(--color-surface-elevated)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--color-focus-ring)] focus-visible:outline-offset-2`,children:e(`skill.backToProtocol`)})]})]}),(0,l.jsxs)(`div`,{className:`rounded-[var(--radius-md)] border border-[var(--color-border)] bg-[var(--color-surface-elevated)] p-4`,children:[(0,l.jsx)(`div`,{className:`text-sm font-medium text-[var(--color-text-heading)]`,children:`Bundle preview`}),(0,l.jsxs)(`p`,{className:`mt-2 text-sm text-[var(--color-text-muted)]`,children:[C,`-skill.md (and optionally references/) will be included in the download. Full ZIP packaging can be added later.`]})]})]})]})}export{u as SkillBundlePage};
|