@cogenta/agents 0.2.1 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agents/builtins.d.ts +51 -0
- package/dist/agents/builtins.d.ts.map +1 -0
- package/dist/agents/builtins.js +190 -0
- package/dist/agents/builtins.js.map +1 -0
- package/dist/agents/orchestrator.d.ts +95 -0
- package/dist/agents/orchestrator.d.ts.map +1 -0
- package/dist/agents/orchestrator.js +285 -0
- package/dist/agents/orchestrator.js.map +1 -0
- package/dist/agents/store.d.ts +71 -0
- package/dist/agents/store.d.ts.map +1 -0
- package/dist/agents/store.js +211 -0
- package/dist/agents/store.js.map +1 -0
- package/dist/agents/types.d.ts +10 -0
- package/dist/agents/types.d.ts.map +1 -1
- package/dist/assist/agent-identity.d.ts +44 -0
- package/dist/assist/agent-identity.d.ts.map +1 -0
- package/dist/assist/agent-identity.js +136 -0
- package/dist/assist/agent-identity.js.map +1 -0
- package/dist/assist/chat.d.ts +2 -0
- package/dist/assist/chat.d.ts.map +1 -1
- package/dist/assist/chat.js +14 -5
- package/dist/assist/chat.js.map +1 -1
- package/dist/assist/classify.d.ts +3 -2
- package/dist/assist/classify.d.ts.map +1 -1
- package/dist/assist/classify.js +30 -11
- package/dist/assist/classify.js.map +1 -1
- package/dist/assist/faq.d.ts +3 -2
- package/dist/assist/faq.d.ts.map +1 -1
- package/dist/assist/faq.js +31 -13
- package/dist/assist/faq.js.map +1 -1
- package/dist/assist/runtime.d.ts +8 -2
- package/dist/assist/runtime.d.ts.map +1 -1
- package/dist/assist/runtime.js +2 -2
- package/dist/assist/runtime.js.map +1 -1
- package/dist/assist/toolset.d.ts +10 -0
- package/dist/assist/toolset.d.ts.map +1 -1
- package/dist/assist/toolset.js +36 -8
- package/dist/assist/toolset.js.map +1 -1
- package/dist/assist/usage.d.ts +58 -0
- package/dist/assist/usage.d.ts.map +1 -0
- package/dist/assist/usage.js +53 -0
- package/dist/assist/usage.js.map +1 -0
- package/dist/assist/writing.d.ts +10 -9
- package/dist/assist/writing.d.ts.map +1 -1
- package/dist/assist/writing.js +126 -58
- package/dist/assist/writing.js.map +1 -1
- package/dist/audit/with-audit.d.ts +13 -0
- package/dist/audit/with-audit.d.ts.map +1 -1
- package/dist/audit/with-audit.js +6 -0
- package/dist/audit/with-audit.js.map +1 -1
- package/dist/autonomy/levels.d.ts +37 -0
- package/dist/autonomy/levels.d.ts.map +1 -0
- package/dist/autonomy/levels.js +51 -0
- package/dist/autonomy/levels.js.map +1 -0
- package/dist/conversations/store.d.ts +62 -0
- package/dist/conversations/store.d.ts.map +1 -0
- package/dist/conversations/store.js +0 -0
- package/dist/conversations/store.js.map +1 -0
- package/dist/identity/context.d.ts +8 -0
- package/dist/identity/context.d.ts.map +1 -1
- package/dist/identity/context.js +19 -4
- package/dist/identity/context.js.map +1 -1
- package/dist/identity/markdown.d.ts +38 -0
- package/dist/identity/markdown.d.ts.map +1 -0
- package/dist/identity/markdown.js +85 -0
- package/dist/identity/markdown.js.map +1 -0
- package/dist/index.d.ts +56 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +30 -3
- package/dist/index.js.map +1 -1
- package/dist/prompts/render.d.ts +23 -0
- package/dist/prompts/render.d.ts.map +1 -0
- package/dist/prompts/render.js +35 -0
- package/dist/prompts/render.js.map +1 -0
- package/dist/prompts/seeds.d.ts +34 -0
- package/dist/prompts/seeds.d.ts.map +1 -0
- package/dist/prompts/seeds.js +166 -0
- package/dist/prompts/seeds.js.map +1 -0
- package/dist/prompts/store.d.ts +8 -0
- package/dist/prompts/store.d.ts.map +1 -0
- package/dist/prompts/store.js +153 -0
- package/dist/prompts/store.js.map +1 -0
- package/dist/prompts/types.d.ts +51 -0
- package/dist/prompts/types.d.ts.map +1 -0
- package/dist/prompts/types.js +24 -0
- package/dist/prompts/types.js.map +1 -0
- package/dist/providers/anthropic.d.ts +21 -3
- package/dist/providers/anthropic.d.ts.map +1 -1
- package/dist/providers/anthropic.js +60 -12
- package/dist/providers/anthropic.js.map +1 -1
- package/dist/providers/catalog.d.ts +41 -0
- package/dist/providers/catalog.d.ts.map +1 -0
- package/dist/providers/catalog.js +85 -0
- package/dist/providers/catalog.js.map +1 -0
- package/dist/providers/content-parts.d.ts +12 -0
- package/dist/providers/content-parts.d.ts.map +1 -0
- package/dist/providers/content-parts.js +18 -0
- package/dist/providers/content-parts.js.map +1 -0
- package/dist/providers/defaults.d.ts +15 -0
- package/dist/providers/defaults.d.ts.map +1 -0
- package/dist/providers/defaults.js +15 -0
- package/dist/providers/defaults.js.map +1 -0
- package/dist/providers/google.d.ts +16 -3
- package/dist/providers/google.d.ts.map +1 -1
- package/dist/providers/google.js +54 -12
- package/dist/providers/google.js.map +1 -1
- package/dist/providers/openai.d.ts +32 -4
- package/dist/providers/openai.d.ts.map +1 -1
- package/dist/providers/openai.js +114 -21
- package/dist/providers/openai.js.map +1 -1
- package/dist/providers/registry.d.ts +31 -20
- package/dist/providers/registry.d.ts.map +1 -1
- package/dist/providers/registry.js +49 -7
- package/dist/providers/registry.js.map +1 -1
- package/dist/providers/request-signal.d.ts +23 -0
- package/dist/providers/request-signal.d.ts.map +1 -0
- package/dist/providers/request-signal.js +26 -0
- package/dist/providers/request-signal.js.map +1 -0
- package/dist/providers/resolve.d.ts +13 -0
- package/dist/providers/resolve.d.ts.map +1 -0
- package/dist/providers/resolve.js +30 -0
- package/dist/providers/resolve.js.map +1 -0
- package/dist/providers/store.d.ts +70 -0
- package/dist/providers/store.d.ts.map +1 -0
- package/dist/providers/store.js +308 -0
- package/dist/providers/store.js.map +1 -0
- package/dist/providers/tool-names.d.ts +9 -0
- package/dist/providers/tool-names.d.ts.map +1 -0
- package/dist/providers/tool-names.js +56 -0
- package/dist/providers/tool-names.js.map +1 -0
- package/dist/providers/types.d.ts +78 -3
- package/dist/providers/types.d.ts.map +1 -1
- package/dist/rag/reference-documents/ingest.d.ts +22 -0
- package/dist/rag/reference-documents/ingest.d.ts.map +1 -0
- package/dist/rag/reference-documents/ingest.js +69 -0
- package/dist/rag/reference-documents/ingest.js.map +1 -0
- package/dist/rag/reference-documents/store.d.ts +23 -0
- package/dist/rag/reference-documents/store.d.ts.map +1 -0
- package/dist/rag/reference-documents/store.js +140 -0
- package/dist/rag/reference-documents/store.js.map +1 -0
- package/dist/rag/reference-documents/types.d.ts +52 -0
- package/dist/rag/reference-documents/types.d.ts.map +1 -0
- package/dist/rag/reference-documents/types.js +32 -0
- package/dist/rag/reference-documents/types.js.map +1 -0
- package/dist/runtime/loop.d.ts +29 -7
- package/dist/runtime/loop.d.ts.map +1 -1
- package/dist/runtime/loop.js +200 -42
- package/dist/runtime/loop.js.map +1 -1
- package/dist/runtime/types.d.ts +4 -3
- package/dist/runtime/types.d.ts.map +1 -1
- package/dist/site-plan/analyse-brief.d.ts +8 -0
- package/dist/site-plan/analyse-brief.d.ts.map +1 -1
- package/dist/site-plan/analyse-brief.js +18 -7
- package/dist/site-plan/analyse-brief.js.map +1 -1
- package/dist/site-plan/approval.d.ts +2 -2
- package/dist/site-plan/approval.d.ts.map +1 -1
- package/dist/site-plan/approval.js +34 -4
- package/dist/site-plan/approval.js.map +1 -1
- package/dist/site-plan/content-model.d.ts +14 -0
- package/dist/site-plan/content-model.d.ts.map +1 -1
- package/dist/site-plan/content-model.js +52 -8
- package/dist/site-plan/content-model.js.map +1 -1
- package/dist/site-plan/demo-content.js +2 -3
- package/dist/site-plan/demo-content.js.map +1 -1
- package/dist/site-plan/propose-plan.d.ts +10 -0
- package/dist/site-plan/propose-plan.d.ts.map +1 -1
- package/dist/site-plan/propose-plan.js +25 -1
- package/dist/site-plan/propose-plan.js.map +1 -1
- package/dist/site-plan/site-context.d.ts +81 -0
- package/dist/site-plan/site-context.d.ts.map +1 -0
- package/dist/site-plan/site-context.js +76 -0
- package/dist/site-plan/site-context.js.map +1 -0
- package/dist/site-plan/skin-candidates.d.ts +7 -0
- package/dist/site-plan/skin-candidates.d.ts.map +1 -1
- package/dist/site-plan/skin-candidates.js +6 -0
- package/dist/site-plan/skin-candidates.js.map +1 -1
- package/dist/site-plan/structural-gaps.d.ts +32 -0
- package/dist/site-plan/structural-gaps.d.ts.map +1 -0
- package/dist/site-plan/structural-gaps.js +77 -0
- package/dist/site-plan/structural-gaps.js.map +1 -0
- package/dist/site-plan/types.d.ts +7 -0
- package/dist/site-plan/types.d.ts.map +1 -1
- package/dist/skills/frontmatter.d.ts +19 -1
- package/dist/skills/frontmatter.d.ts.map +1 -1
- package/dist/skills/frontmatter.js +29 -5
- package/dist/skills/frontmatter.js.map +1 -1
- package/dist/skills/library.d.ts +133 -0
- package/dist/skills/library.d.ts.map +1 -0
- package/dist/skills/library.js +332 -0
- package/dist/skills/library.js.map +1 -0
- package/dist/skills/types.d.ts +8 -1
- package/dist/skills/types.d.ts.map +1 -1
- package/dist/skin/generate.d.ts +10 -0
- package/dist/skin/generate.d.ts.map +1 -1
- package/dist/skin/generate.js +43 -4
- package/dist/skin/generate.js.map +1 -1
- package/dist/theme-creator/propose-theme.d.ts +77 -0
- package/dist/theme-creator/propose-theme.d.ts.map +1 -0
- package/dist/theme-creator/propose-theme.js +228 -0
- package/dist/theme-creator/propose-theme.js.map +1 -0
- package/dist/tools/core/agent-delegate.d.ts +8 -5
- package/dist/tools/core/agent-delegate.d.ts.map +1 -1
- package/dist/tools/core/agent-delegate.js +16 -6
- package/dist/tools/core/agent-delegate.js.map +1 -1
- package/dist/tools/core/content-browse.d.ts +74 -0
- package/dist/tools/core/content-browse.d.ts.map +1 -0
- package/dist/tools/core/content-browse.js +63 -0
- package/dist/tools/core/content-browse.js.map +1 -0
- package/dist/tools/core/content-schema.d.ts +86 -0
- package/dist/tools/core/content-schema.d.ts.map +1 -0
- package/dist/tools/core/content-schema.js +83 -0
- package/dist/tools/core/content-schema.js.map +1 -0
- package/dist/tools/core/deps-scan.d.ts +25 -0
- package/dist/tools/core/deps-scan.d.ts.map +1 -0
- package/dist/tools/core/deps-scan.js +85 -0
- package/dist/tools/core/deps-scan.js.map +1 -0
- package/dist/tools/core/media.d.ts +18 -2
- package/dist/tools/core/media.d.ts.map +1 -1
- package/dist/tools/core/media.js +8 -2
- package/dist/tools/core/media.js.map +1 -1
- package/dist/tools/core/not-found-log.d.ts +44 -0
- package/dist/tools/core/not-found-log.d.ts.map +1 -0
- package/dist/tools/core/not-found-log.js +32 -0
- package/dist/tools/core/not-found-log.js.map +1 -0
- package/dist/tools/core/redirects.d.ts +51 -0
- package/dist/tools/core/redirects.d.ts.map +1 -0
- package/dist/tools/core/redirects.js +50 -0
- package/dist/tools/core/redirects.js.map +1 -0
- package/package.json +6 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"site-context.js","sourceRoot":"","sources":["../../src/site-plan/site-context.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { ProviderClient } from '../providers/types.js';
|
|
2
|
+
import { type ExistingSiteSnapshot } from './site-context.js';
|
|
2
3
|
import type { SkinCandidate } from './types.js';
|
|
3
4
|
/**
|
|
4
5
|
* L19 task 3 — "l'utilisateur voit et choisit explicitement entre deux et
|
|
@@ -40,6 +41,12 @@ export interface GenerateSkinCandidatesOptions {
|
|
|
40
41
|
readonly count?: number;
|
|
41
42
|
/** Passed to each candidate's own validation loop. */
|
|
42
43
|
readonly maxAttemptsPerCandidate?: number;
|
|
44
|
+
/**
|
|
45
|
+
* Fiche 60 task 3 — the site these candidates would style, when one
|
|
46
|
+
* already exists. Threaded to every `generateSkin` call as tagged,
|
|
47
|
+
* escaped data (R8), never folded into `description`.
|
|
48
|
+
*/
|
|
49
|
+
readonly existingSite?: ExistingSiteSnapshot;
|
|
43
50
|
}
|
|
44
51
|
export interface SkinCandidateFailure {
|
|
45
52
|
readonly id: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skin-candidates.d.ts","sourceRoot":"","sources":["../../src/site-plan/skin-candidates.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAE3D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAE/C;;;;;;;;;;;;GAYG;AAEH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,6EAA6E;IAC7E,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAC3B;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,eAAe,EAAE,SAAS,aAAa,EA+BnD,CAAA;AAED,eAAO,MAAM,mBAAmB,IAAI,CAAA;AACpC,eAAO,MAAM,mBAAmB,IAAI,CAAA;AAEpC,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAA;IAC/B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,uGAAuG;IACvG,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;IAC/B,sCAAsC;IACtC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB,sDAAsD;IACtD,QAAQ,CAAC,uBAAuB,CAAC,EAAE,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"skin-candidates.d.ts","sourceRoot":"","sources":["../../src/site-plan/skin-candidates.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAE3D,OAAO,EACL,KAAK,oBAAoB,EAG1B,MAAM,mBAAmB,CAAA;AAC1B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAE/C;;;;;;;;;;;;GAYG;AAEH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,6EAA6E;IAC7E,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAC3B;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,eAAe,EAAE,SAAS,aAAa,EA+BnD,CAAA;AAED,eAAO,MAAM,mBAAmB,IAAI,CAAA;AACpC,eAAO,MAAM,mBAAmB,IAAI,CAAA;AAEpC,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAA;IAC/B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,uGAAuG;IACvG,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;IAC/B,sCAAsC;IACtC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB,sDAAsD;IACtD,QAAQ,CAAC,uBAAuB,CAAC,EAAE,MAAM,CAAA;IACzC;;;;OAIG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,oBAAoB,CAAA;CAC7C;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CACxB;AAED,MAAM,MAAM,4BAA4B,GACpC;IACE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAA;IACjB,QAAQ,CAAC,UAAU,EAAE,SAAS,aAAa,EAAE,CAAA;IAC7C,QAAQ,CAAC,QAAQ,EAAE,SAAS,oBAAoB,EAAE,CAAA;CACnD,GACD;IACE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAA;IAClB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,8FAA8F;IAC9F,QAAQ,CAAC,UAAU,EAAE,SAAS,aAAa,EAAE,CAAA;IAC7C,QAAQ,CAAC,QAAQ,EAAE,SAAS,oBAAoB,EAAE,CAAA;CACnD,CAAA;AAOL,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,6BAA6B,GACrC,OAAO,CAAC,4BAA4B,CAAC,CAoEvC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { generateSkin } from '../skin/generate.js';
|
|
2
|
+
import { isExistingSiteEmpty, renderExistingSiteForPrompt, } from './site-context.js';
|
|
2
3
|
/**
|
|
3
4
|
* Five directions, ordered. Asking one model for "three different skins"
|
|
4
5
|
* in one call reliably produces three near-identical ones; asking three
|
|
@@ -43,6 +44,10 @@ function clampCount(count) {
|
|
|
43
44
|
}
|
|
44
45
|
export async function generateSkinCandidates(options) {
|
|
45
46
|
const directions = SKIN_DIRECTIONS.slice(0, clampCount(options.count));
|
|
47
|
+
const hasExistingSite = options.existingSite !== undefined && !isExistingSiteEmpty(options.existingSite);
|
|
48
|
+
const context = hasExistingSite && options.existingSite !== undefined
|
|
49
|
+
? [{ source: 'current site', content: renderExistingSiteForPrompt(options.existingSite) }]
|
|
50
|
+
: undefined;
|
|
46
51
|
// Run in parallel: the installer's whole promise is measured in seconds,
|
|
47
52
|
// and five sequential three-attempt loops is a minute of staring at a
|
|
48
53
|
// spinner. Each call is independent — no candidate reads another's result.
|
|
@@ -55,6 +60,7 @@ export async function generateSkinCandidates(options) {
|
|
|
55
60
|
...(options.maxAttemptsPerCandidate === undefined
|
|
56
61
|
? {}
|
|
57
62
|
: { maxAttempts: options.maxAttemptsPerCandidate }),
|
|
63
|
+
...(context === undefined ? {} : { context }),
|
|
58
64
|
});
|
|
59
65
|
return { direction, result };
|
|
60
66
|
}));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skin-candidates.js","sourceRoot":"","sources":["../../src/site-plan/skin-candidates.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"skin-candidates.js","sourceRoot":"","sources":["../../src/site-plan/skin-candidates.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { ExistingSiteSnapshot } from './site-context.js';
|
|
2
|
+
import type { ProposedPage } from './types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Fiche 60 task 5 — "un site sans page « contact » reçoit une suggestion
|
|
5
|
+
* nommée comme telle, refusable comme tout le reste."
|
|
6
|
+
*
|
|
7
|
+
* Deterministic, like `./constraints.js`: this never asks a model. It
|
|
8
|
+
* compares what the plan already proposes, plus what the site already
|
|
9
|
+
* declares, against a closed list of pages most sites need — and says
|
|
10
|
+
* nothing about the ones already covered. A suggestion is never applied by
|
|
11
|
+
* itself (R6): it becomes its own reviewable item (`./approval.js`'s
|
|
12
|
+
* `structuralGaps` section), accepted or rejected exactly like a proposed
|
|
13
|
+
* collection or a proposed page.
|
|
14
|
+
*/
|
|
15
|
+
export declare const STRUCTURAL_GAP_TOPICS: readonly ['contact', 'legal', 'privacy'];
|
|
16
|
+
export type StructuralGapTopic = (typeof STRUCTURAL_GAP_TOPICS)[number];
|
|
17
|
+
export interface StructuralGapSuggestion {
|
|
18
|
+
/** Stable within a draft — one topic can appear at most once. */
|
|
19
|
+
readonly id: StructuralGapTopic;
|
|
20
|
+
readonly topic: StructuralGapTopic;
|
|
21
|
+
readonly title: string;
|
|
22
|
+
readonly slug: string;
|
|
23
|
+
readonly reason: string;
|
|
24
|
+
}
|
|
25
|
+
export interface DetectStructuralGapsInput {
|
|
26
|
+
readonly proposedPages: readonly ProposedPage[];
|
|
27
|
+
readonly existingSite: ExistingSiteSnapshot;
|
|
28
|
+
/** Which language to phrase a suggestion's title/reason in. Defaults to `en`. */
|
|
29
|
+
readonly locale?: string;
|
|
30
|
+
}
|
|
31
|
+
export declare function detectStructuralGaps(input: DetectStructuralGapsInput): readonly StructuralGapSuggestion[];
|
|
32
|
+
//# sourceMappingURL=structural-gaps.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"structural-gaps.d.ts","sourceRoot":"","sources":["../../src/site-plan/structural-gaps.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAA;AAC7D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAE9C;;;;;;;;;;;GAWG;AAEH,eAAO,MAAM,qBAAqB,YAAI,SAAS,EAAE,OAAO,EAAE,SAAS,CAAU,CAAA;AAC7E,MAAM,MAAM,kBAAkB,GAAG,CAAC,OAAO,qBAAqB,CAAC,CAAC,MAAM,CAAC,CAAA;AAEvE,MAAM,WAAW,uBAAuB;IACtC,iEAAiE;IACjE,QAAQ,CAAC,EAAE,EAAE,kBAAkB,CAAA;IAC/B,QAAQ,CAAC,KAAK,EAAE,kBAAkB,CAAA;IAClC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CACxB;AAyDD,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,aAAa,EAAE,SAAS,YAAY,EAAE,CAAA;IAC/C,QAAQ,CAAC,YAAY,EAAE,oBAAoB,CAAA;IAC3C,iFAAiF;IACjF,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CACzB;AAED,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,yBAAyB,GAC/B,SAAS,uBAAuB,EAAE,CAuBpC"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { fold } from './constraints.js';
|
|
2
|
+
/**
|
|
3
|
+
* Fiche 60 task 5 — "un site sans page « contact » reçoit une suggestion
|
|
4
|
+
* nommée comme telle, refusable comme tout le reste."
|
|
5
|
+
*
|
|
6
|
+
* Deterministic, like `./constraints.js`: this never asks a model. It
|
|
7
|
+
* compares what the plan already proposes, plus what the site already
|
|
8
|
+
* declares, against a closed list of pages most sites need — and says
|
|
9
|
+
* nothing about the ones already covered. A suggestion is never applied by
|
|
10
|
+
* itself (R6): it becomes its own reviewable item (`./approval.js`'s
|
|
11
|
+
* `structuralGaps` section), accepted or rejected exactly like a proposed
|
|
12
|
+
* collection or a proposed page.
|
|
13
|
+
*/
|
|
14
|
+
export const STRUCTURAL_GAP_TOPICS = ['contact', 'legal', 'privacy'];
|
|
15
|
+
const GAP_TEMPLATES = [
|
|
16
|
+
{
|
|
17
|
+
topic: 'contact',
|
|
18
|
+
pattern: /\b(contact|nous contacter|contactez[- ]nous|reach us|get in touch)\b/,
|
|
19
|
+
title: { en: 'Contact', fr: 'Contact' },
|
|
20
|
+
slug: { en: 'contact', fr: 'contact' },
|
|
21
|
+
reason: {
|
|
22
|
+
en: 'Most sites need a way for a visitor to reach the site owner.',
|
|
23
|
+
fr: 'La plupart des sites ont besoin d’un moyen pour qu’un visiteur puisse joindre le responsable du site.',
|
|
24
|
+
},
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
topic: 'legal',
|
|
28
|
+
pattern: /\b(mentions legales|legal notice|imprint|impressum)\b/,
|
|
29
|
+
title: { en: 'Legal notice', fr: 'Mentions légales' },
|
|
30
|
+
slug: { en: 'legal-notice', fr: 'mentions-legales' },
|
|
31
|
+
reason: {
|
|
32
|
+
en: 'Legally required in most jurisdictions once a site names an identified owner.',
|
|
33
|
+
fr: 'Obligatoire dans la plupart des juridictions dès qu’un site nomme un responsable identifié.',
|
|
34
|
+
},
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
topic: 'privacy',
|
|
38
|
+
pattern: /\b(politique de confidentialite|vie privee|privacy policy|donnees personnelles)\b/,
|
|
39
|
+
title: { en: 'Privacy policy', fr: 'Politique de confidentialité' },
|
|
40
|
+
slug: { en: 'privacy-policy', fr: 'politique-de-confidentialite' },
|
|
41
|
+
reason: {
|
|
42
|
+
en: 'Expected wherever the site collects any personal data — a contact form, an account, analytics.',
|
|
43
|
+
fr: 'Attendue dès que le site collecte des données personnelles — un formulaire de contact, un compte, des statistiques de visite.',
|
|
44
|
+
},
|
|
45
|
+
},
|
|
46
|
+
];
|
|
47
|
+
function covered(pattern, texts) {
|
|
48
|
+
return texts.some((text) => pattern.test(fold(text)));
|
|
49
|
+
}
|
|
50
|
+
function pick(text, locale) {
|
|
51
|
+
return locale.toLowerCase().startsWith('fr') ? text.fr : text.en;
|
|
52
|
+
}
|
|
53
|
+
export function detectStructuralGaps(input) {
|
|
54
|
+
const locale = input.locale ?? 'en';
|
|
55
|
+
const known = [
|
|
56
|
+
...input.proposedPages.flatMap((page) => [page.title, page.slug]),
|
|
57
|
+
...input.existingSite.collections.flatMap((collection) => [
|
|
58
|
+
collection.name,
|
|
59
|
+
collection.labels.singular,
|
|
60
|
+
collection.labels.plural,
|
|
61
|
+
]),
|
|
62
|
+
];
|
|
63
|
+
const suggestions = [];
|
|
64
|
+
for (const template of GAP_TEMPLATES) {
|
|
65
|
+
if (covered(template.pattern, known))
|
|
66
|
+
continue;
|
|
67
|
+
suggestions.push({
|
|
68
|
+
id: template.topic,
|
|
69
|
+
topic: template.topic,
|
|
70
|
+
title: pick(template.title, locale),
|
|
71
|
+
slug: pick(template.slug, locale),
|
|
72
|
+
reason: pick(template.reason, locale),
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
return suggestions;
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=structural-gaps.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"structural-gaps.js","sourceRoot":"","sources":["../../src/site-plan/structural-gaps.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,7 @@ import type { SkinTokens } from '@cogenta/render';
|
|
|
2
2
|
import type { CollectionDefinition } from '@cogenta/schema';
|
|
3
3
|
import type { DocumentFormat } from '../documents/extract-text.js';
|
|
4
4
|
import type { DetectedConstraint } from './constraints.js';
|
|
5
|
+
import type { StructuralGapSuggestion } from './structural-gaps.js';
|
|
5
6
|
/**
|
|
6
7
|
* The shapes L19's four agents pass between each other.
|
|
7
8
|
*
|
|
@@ -80,6 +81,12 @@ export interface SitePlanDraft {
|
|
|
80
81
|
readonly demoContent: readonly DemoEntry[];
|
|
81
82
|
/** What was removed or flagged because it contradicted an explicit constraint. */
|
|
82
83
|
readonly violations: readonly ConstraintViolation[];
|
|
84
|
+
/**
|
|
85
|
+
* Usual pages this plan, and the site it would join, still lack —
|
|
86
|
+
* contact, a legal notice, a privacy policy (fiche 60 task 5). Its own
|
|
87
|
+
* reviewable section, never applied on its own (R6).
|
|
88
|
+
*/
|
|
89
|
+
readonly structuralGaps: readonly StructuralGapSuggestion[];
|
|
83
90
|
readonly warnings: readonly string[];
|
|
84
91
|
}
|
|
85
92
|
export interface ConstraintViolation {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/site-plan/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAA;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAClE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/site-plan/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,29 @@
|
|
|
1
1
|
import type { SkillMetadata } from './types.js';
|
|
2
2
|
/**
|
|
3
|
-
* Deliberately not a YAML parser (R9: no new dependency for
|
|
3
|
+
* Deliberately not a YAML parser (R9: no new dependency for a handful of flat
|
|
4
4
|
* string fields) — `---\nkey: value\n---\nbody`, one `key: value` per line,
|
|
5
5
|
* nothing nested.
|
|
6
|
+
*
|
|
7
|
+
* `version` is deliberately **not** required (L24 task 4): a real
|
|
8
|
+
* Claude Code/Codex `SKILL.md` — see any `SKILL.md` under this very repo's
|
|
9
|
+
* `.claude/skills/` directory — only ever carries `name` and `description`.
|
|
10
|
+
* Requiring a third field
|
|
11
|
+
* this format doesn't have would refuse the exact copy-paste this task exists
|
|
12
|
+
* to support. `file-store.ts`'s marketplace registry (L7) still writes a
|
|
13
|
+
* `version` (it needs one, to compare installed-vs-available), so this parser
|
|
14
|
+
* keeps reading it when present — it is just never demanded.
|
|
6
15
|
*/
|
|
7
16
|
export declare function parseSkillFile(path: string, raw: string): {
|
|
8
17
|
readonly metadata: SkillMetadata;
|
|
9
18
|
readonly instructions: string;
|
|
10
19
|
};
|
|
20
|
+
/**
|
|
21
|
+
* The inverse of `parseSkillFile` — renders a skill back to `SKILL.md` text.
|
|
22
|
+
* Used by `library.ts` to write the canonical on-disk form of a skill edited
|
|
23
|
+
* through the structured `AgentSkillStore` contract. Field order (`name`,
|
|
24
|
+
* `description`, then `version` only if present) matches every real
|
|
25
|
+
* Claude Code/Codex skill this project has seen, so a file this function
|
|
26
|
+
* writes reads exactly like one a human would have written by hand.
|
|
27
|
+
*/
|
|
28
|
+
export declare function renderSkillFile(metadata: SkillMetadata, instructions: string): string;
|
|
11
29
|
//# sourceMappingURL=frontmatter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"frontmatter.d.ts","sourceRoot":"","sources":["../../src/skills/frontmatter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAI/C
|
|
1
|
+
{"version":3,"file":"frontmatter.d.ts","sourceRoot":"","sources":["../../src/skills/frontmatter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAI/C;;;;;;;;;;;;;GAaG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,GACV;IAAE,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;IAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CAsCrE;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAKrF"}
|
|
@@ -1,9 +1,18 @@
|
|
|
1
1
|
import { CogentaError } from '@cogenta/core';
|
|
2
|
-
const REQUIRED_FIELDS = ['name', '
|
|
2
|
+
const REQUIRED_FIELDS = ['name', 'description'];
|
|
3
3
|
/**
|
|
4
|
-
* Deliberately not a YAML parser (R9: no new dependency for
|
|
4
|
+
* Deliberately not a YAML parser (R9: no new dependency for a handful of flat
|
|
5
5
|
* string fields) — `---\nkey: value\n---\nbody`, one `key: value` per line,
|
|
6
6
|
* nothing nested.
|
|
7
|
+
*
|
|
8
|
+
* `version` is deliberately **not** required (L24 task 4): a real
|
|
9
|
+
* Claude Code/Codex `SKILL.md` — see any `SKILL.md` under this very repo's
|
|
10
|
+
* `.claude/skills/` directory — only ever carries `name` and `description`.
|
|
11
|
+
* Requiring a third field
|
|
12
|
+
* this format doesn't have would refuse the exact copy-paste this task exists
|
|
13
|
+
* to support. `file-store.ts`'s marketplace registry (L7) still writes a
|
|
14
|
+
* `version` (it needs one, to compare installed-vs-available), so this parser
|
|
15
|
+
* keeps reading it when present — it is just never demanded.
|
|
7
16
|
*/
|
|
8
17
|
export function parseSkillFile(path, raw) {
|
|
9
18
|
const match = /^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/.exec(raw);
|
|
@@ -11,7 +20,7 @@ export function parseSkillFile(path, raw) {
|
|
|
11
20
|
throw new CogentaError({
|
|
12
21
|
code: 'SKILL_DEFINITION_INVALID',
|
|
13
22
|
message: `"${path}" has no --- frontmatter block.`,
|
|
14
|
-
hint: 'Start the file with --- \\n name: ... \\n
|
|
23
|
+
hint: 'Start the file with --- \\n name: ... \\n description: ... \\n ---',
|
|
15
24
|
});
|
|
16
25
|
}
|
|
17
26
|
const [, frontmatter = '', body = ''] = match;
|
|
@@ -31,16 +40,31 @@ export function parseSkillFile(path, raw) {
|
|
|
31
40
|
throw new CogentaError({
|
|
32
41
|
code: 'SKILL_DEFINITION_INVALID',
|
|
33
42
|
message: `"${path}" is missing required frontmatter field(s): ${missing.join(', ')}.`,
|
|
34
|
-
hint: 'A skill needs name
|
|
43
|
+
hint: 'A skill needs at least name and description in its frontmatter.',
|
|
35
44
|
});
|
|
36
45
|
}
|
|
37
46
|
return {
|
|
38
47
|
metadata: {
|
|
39
48
|
name: fields.name,
|
|
40
|
-
version: fields.version,
|
|
41
49
|
description: fields.description,
|
|
50
|
+
...(fields.version === undefined ? {} : { version: fields.version }),
|
|
42
51
|
},
|
|
43
52
|
instructions: body.trim(),
|
|
44
53
|
};
|
|
45
54
|
}
|
|
55
|
+
/**
|
|
56
|
+
* The inverse of `parseSkillFile` — renders a skill back to `SKILL.md` text.
|
|
57
|
+
* Used by `library.ts` to write the canonical on-disk form of a skill edited
|
|
58
|
+
* through the structured `AgentSkillStore` contract. Field order (`name`,
|
|
59
|
+
* `description`, then `version` only if present) matches every real
|
|
60
|
+
* Claude Code/Codex skill this project has seen, so a file this function
|
|
61
|
+
* writes reads exactly like one a human would have written by hand.
|
|
62
|
+
*/
|
|
63
|
+
export function renderSkillFile(metadata, instructions) {
|
|
64
|
+
const lines = [`name: ${metadata.name}`, `description: ${metadata.description}`];
|
|
65
|
+
if (metadata.version !== undefined)
|
|
66
|
+
lines.splice(1, 0, `version: ${metadata.version}`);
|
|
67
|
+
const body = instructions.trim();
|
|
68
|
+
return `---\n${lines.join('\n')}\n---\n\n${body}\n`;
|
|
69
|
+
}
|
|
46
70
|
//# sourceMappingURL=frontmatter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"frontmatter.js","sourceRoot":"","sources":["../../src/skills/frontmatter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAG5C,MAAM,eAAe,GAAG,CAAC,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"frontmatter.js","sourceRoot":"","sources":["../../src/skills/frontmatter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAG5C,MAAM,eAAe,GAAG,CAAC,MAAM,EAAE,aAAa,CAAU,CAAA;AAExD;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,cAAc,CAC5B,IAAY,EACZ,GAAW;IAEX,MAAM,KAAK,GAAG,6CAA6C,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACrE,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACnB,MAAM,IAAI,YAAY,CAAC;YACrB,IAAI,EAAE,0BAA0B;YAChC,OAAO,EAAE,IAAI,IAAI,iCAAiC;YAClD,IAAI,EAAE,oEAAoE;SAC3E,CAAC,CAAA;IACJ,CAAC;IACD,MAAM,CAAC,EAAE,WAAW,GAAG,EAAE,EAAE,IAAI,GAAG,EAAE,CAAC,GAAG,KAAK,CAAA;IAE7C,MAAM,MAAM,GAA2B,EAAE,CAAA;IACzC,KAAK,MAAM,IAAI,IAAI,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3C,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE;YAAE,SAAQ;QAChC,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;QACxC,IAAI,cAAc,KAAK,CAAC,CAAC;YAAE,SAAQ;QACnC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,IAAI,EAAE,CAAA;QAChD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;QACnD,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;IACrB,CAAC;IAED,MAAM,OAAO,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,SAAS,CAAC,CAAA;IAC9E,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,YAAY,CAAC;YACrB,IAAI,EAAE,0BAA0B;YAChC,OAAO,EAAE,IAAI,IAAI,+CAA+C,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;YACrF,IAAI,EAAE,iEAAiE;SACxE,CAAC,CAAA;IACJ,CAAC;IAED,OAAO;QACL,QAAQ,EAAE;YACR,IAAI,EAAE,MAAM,CAAC,IAAc;YAC3B,WAAW,EAAE,MAAM,CAAC,WAAqB;YACzC,GAAG,CAAC,MAAM,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;SACrE;QACD,YAAY,EAAE,IAAI,CAAC,IAAI,EAAE;KAC1B,CAAA;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,eAAe,CAAC,QAAuB,EAAE,YAAoB;IAC3E,MAAM,KAAK,GAAG,CAAC,SAAS,QAAQ,CAAC,IAAI,EAAE,EAAE,gBAAgB,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAA;IAChF,IAAI,QAAQ,CAAC,OAAO,KAAK,SAAS;QAAE,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,YAAY,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAA;IACtF,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,EAAE,CAAA;IAChC,OAAO,QAAQ,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,IAAI,CAAA;AACrD,CAAC"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The standard reference-folder layout (fiche 57), matching the real Claude
|
|
3
|
+
* Code/Anthropic skill convention: sub-folders under a skill's own
|
|
4
|
+
* directory, all optional, `SKILL.md` the only thing required at the root.
|
|
5
|
+
* `references/` is documents consulted on demand, `scripts/` executable
|
|
6
|
+
* utilities, `assets/` templates/images/files used as-is — none of these are
|
|
7
|
+
* automatically read into an agent's context (see `AgentSkillStore`'s module
|
|
8
|
+
* doc for why); they exist for a human, or a future `skill.read_resource`
|
|
9
|
+
* tool, to reach for on purpose.
|
|
10
|
+
*/
|
|
11
|
+
export declare const SKILL_RESOURCE_DIRS: readonly ['references', 'scripts', 'assets'];
|
|
12
|
+
export type SkillResourceDir = (typeof SKILL_RESOURCE_DIRS)[number];
|
|
13
|
+
export interface SkillResource {
|
|
14
|
+
/** Relative to the skill's own directory, e.g. `"references/style-guide.md"`. Forward slashes always, on every OS. */
|
|
15
|
+
readonly path: string;
|
|
16
|
+
readonly size: number;
|
|
17
|
+
readonly updatedAt: string;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* L22 task 1bis's "Skills" screen — a **different concept** from
|
|
21
|
+
* `skills/file-store.ts`'s `SkillStore`/`Skill`, which is L7's marketplace
|
|
22
|
+
* registry (a signed, distributable folder with resource files, gated by
|
|
23
|
+
* pre-check + review). This one is what the lot actually describes: "un
|
|
24
|
+
* skill est un texte d'instruction nommé... qu'un agent charge dans son
|
|
25
|
+
* contexte" — a short, site-authored piece of prompt text ("comment rédiger
|
|
26
|
+
* un article"), never installed from anywhere, never signed, edited
|
|
27
|
+
* in-place from the admin. Naming it `AgentSkill`/`AgentSkillStore` (this
|
|
28
|
+
* file lives in the same `skills/` directory as the marketplace one on
|
|
29
|
+
* purpose — they are siblings, not a replacement) keeps the two distinct in
|
|
30
|
+
* every import site rather than overloading `Skill`/`SkillStore`.
|
|
31
|
+
*
|
|
32
|
+
* **Storage format, changed in L24 task 4**: originally one JSON file per
|
|
33
|
+
* record (`<id>.json`). Now `<dir>/<id>/SKILL.md` (frontmatter + body),
|
|
34
|
+
* reusing `parseSkillFile`/`renderSkillFile` from `frontmatter.ts` rather
|
|
35
|
+
* than a second parser — the same format `file-store.ts`'s marketplace
|
|
36
|
+
* registry already speaks, and the format a real Claude Code/Codex skill
|
|
37
|
+
* ships in. This is what makes L24 task 4's acceptance criterion possible:
|
|
38
|
+
* a `SKILL.md` copied verbatim from `.claude/skills/` (or any other
|
|
39
|
+
* standard agent) is a valid `name`+`description`+body skill the moment it
|
|
40
|
+
* is dropped into this store's directory and given a matching `.meta.json`
|
|
41
|
+
* (or, read without one at all — see `readRecord` below).
|
|
42
|
+
*
|
|
43
|
+
* The fields this store needs that a portable `SKILL.md` has no room for
|
|
44
|
+
* (`enabledByDefault`, `builtin`, `createdAt`, `updatedAt`) are **not**
|
|
45
|
+
* folded into the frontmatter. Two options were open here (see
|
|
46
|
+
* `docs/lots/L24-langgraph-agents-avances.md` task 4): extra frontmatter
|
|
47
|
+
* keys (the parser already ignores keys it does not know), or a sidecar
|
|
48
|
+
* meta file. This store picks the sidecar (`.meta.json`, next to
|
|
49
|
+
* `SKILL.md`) **on purpose**: the whole point of this migration is
|
|
50
|
+
* portability — a skill authored here should export as a clean `SKILL.md`
|
|
51
|
+
* with nothing Cogenta-specific in it, and a `SKILL.md` imported here
|
|
52
|
+
* should not have its author's own frontmatter fields overwritten by this
|
|
53
|
+
* store's bookkeeping. Gluing `enabledByDefault`/`builtin`/timestamps into
|
|
54
|
+
* the frontmatter would make every skill this store ever touches carry
|
|
55
|
+
* Cogenta-only keys forever, defeating that.
|
|
56
|
+
*/
|
|
57
|
+
export interface AgentSkill {
|
|
58
|
+
readonly id: string;
|
|
59
|
+
readonly name: string;
|
|
60
|
+
readonly description: string;
|
|
61
|
+
readonly instructions: string;
|
|
62
|
+
/**
|
|
63
|
+
* The exact `SKILL.md` text on disk (frontmatter + body), rendered by
|
|
64
|
+
* `renderSkillFile` — what the admin's raw-Markdown editor (L24 task 4)
|
|
65
|
+
* reads and writes, and what a "copy this skill out" action would hand
|
|
66
|
+
* someone verbatim. Always the canonical rendering of `name`/`description`/
|
|
67
|
+
* `instructions` below: this store has one source of truth (the structured
|
|
68
|
+
* fields on `AgentSkillStore`'s contract, kept stable for its 11 existing
|
|
69
|
+
* call sites), and `content` is a derived, always-consistent view of it —
|
|
70
|
+
* never a second, independently-edited copy that could drift.
|
|
71
|
+
*/
|
|
72
|
+
readonly content: string;
|
|
73
|
+
/**
|
|
74
|
+
* "Par défaut, un nouvel agent hérite de tous les skills du site" (L22 task
|
|
75
|
+
* 1bis) — a new agent's `AgentDeclaration.skills` is seeded with every
|
|
76
|
+
* skill whose `enabledByDefault` is true at the moment it is created
|
|
77
|
+
* (`agents/orchestrator.ts`'s creation path reads this), so the field stays
|
|
78
|
+
* a plain inclusion list (contract C's own documented shape) while still
|
|
79
|
+
* producing the lot's "inherit everything, exclude what you don't want"
|
|
80
|
+
* behaviour from the admin's point of view.
|
|
81
|
+
*/
|
|
82
|
+
readonly enabledByDefault: boolean;
|
|
83
|
+
readonly builtin: boolean;
|
|
84
|
+
readonly createdAt: string;
|
|
85
|
+
readonly updatedAt: string;
|
|
86
|
+
}
|
|
87
|
+
export interface AgentSkillInput {
|
|
88
|
+
readonly name: string;
|
|
89
|
+
readonly description: string;
|
|
90
|
+
readonly instructions: string;
|
|
91
|
+
readonly enabledByDefault?: boolean;
|
|
92
|
+
}
|
|
93
|
+
export type AgentSkillPatch = Partial<AgentSkillInput>;
|
|
94
|
+
export interface AgentSkillStore {
|
|
95
|
+
list(): Promise<readonly AgentSkill[]>;
|
|
96
|
+
get(id: string): Promise<AgentSkill | undefined>;
|
|
97
|
+
create(input: AgentSkillInput, builtin?: boolean): Promise<AgentSkill>;
|
|
98
|
+
update(id: string, patch: AgentSkillPatch): Promise<AgentSkill>;
|
|
99
|
+
/** Refuses to remove a builtin (`AGENT_SKILL_BUILTIN_UNDELETABLE`). */
|
|
100
|
+
remove(id: string): Promise<void>;
|
|
101
|
+
/**
|
|
102
|
+
* Every file under the skill's directory except `SKILL.md`/`.meta.json` —
|
|
103
|
+
* `references/`, `scripts/`, `assets/`, and (for a skill imported from
|
|
104
|
+
* outside this store, which never had to follow the standard layout) any
|
|
105
|
+
* other file that happens to sit there too. Throws `AGENT_SKILL_UNKNOWN`
|
|
106
|
+
* for an unknown id. A skill created before this fiche, with no
|
|
107
|
+
* sub-folders yet, returns an empty list — never an error.
|
|
108
|
+
*/
|
|
109
|
+
listResources(id: string): Promise<readonly SkillResource[]>;
|
|
110
|
+
/**
|
|
111
|
+
* Writes (or overwrites) a reference file. `relativePath` must start with
|
|
112
|
+
* one of `SKILL_RESOURCE_DIRS` — anything else, or a path that tries to
|
|
113
|
+
* escape the skill's own directory, is refused with
|
|
114
|
+
* `AGENT_SKILL_RESOURCE_INVALID`. Throws `AGENT_SKILL_UNKNOWN` for an
|
|
115
|
+
* unknown skill id.
|
|
116
|
+
*/
|
|
117
|
+
addResource(id: string, relativePath: string, content: string | Uint8Array): Promise<SkillResource>;
|
|
118
|
+
/**
|
|
119
|
+
* Throws `AGENT_SKILL_RESOURCE_INVALID` for a path outside the three
|
|
120
|
+
* standard folders, `AGENT_SKILL_RESOURCE_UNKNOWN` for a path that names
|
|
121
|
+
* no file, and `AGENT_SKILL_UNKNOWN` for an unknown skill id.
|
|
122
|
+
*/
|
|
123
|
+
removeResource(id: string, relativePath: string): Promise<void>;
|
|
124
|
+
}
|
|
125
|
+
export interface FileAgentSkillStoreOptions {
|
|
126
|
+
readonly dir: string;
|
|
127
|
+
readonly now?: () => Date;
|
|
128
|
+
}
|
|
129
|
+
export declare function createFileAgentSkillStore(options: FileAgentSkillStoreOptions): AgentSkillStore;
|
|
130
|
+
/** L22 task 1bis: "au minimum ces trois" — content writing, a basic security review, and site-structure/menu management. */
|
|
131
|
+
export declare function builtinAgentSkillSeeds(): readonly AgentSkillInput[];
|
|
132
|
+
export declare function ensureBuiltinAgentSkills(store: AgentSkillStore): Promise<void>;
|
|
133
|
+
//# sourceMappingURL=library.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"library.d.ts","sourceRoot":"","sources":["../../src/skills/library.ts"],"names":[],"mappings":"AASA;;;;;;;;;GASG;AACH,eAAO,MAAM,mBAAmB,YAAI,YAAY,EAAE,SAAS,EAAE,QAAQ,CAAU,CAAA;AAC/E,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,mBAAmB,CAAC,CAAC,MAAM,CAAC,CAAA;AAEnE,MAAM,WAAW,aAAa;IAC5B,sHAAsH;IACtH,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAC3B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAEH,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAC7B;;;;;;;;;OASG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB;;;;;;;;OAQG;IACH,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAA;IAClC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAC3B;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,gBAAgB,CAAC,EAAE,OAAO,CAAA;CACpC;AAED,MAAM,MAAM,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,CAAA;AAEtD,MAAM,WAAW,eAAe;IAC9B,IAAI,IAAI,OAAO,CAAC,SAAS,UAAU,EAAE,CAAC,CAAA;IACtC,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAAA;IAChD,MAAM,CAAC,KAAK,EAAE,eAAe,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;IACtE,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;IAC/D,uEAAuE;IACvE,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACjC;;;;;;;OAOG;IACH,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,aAAa,EAAE,CAAC,CAAA;IAC5D;;;;;;OAMG;IACH,WAAW,CACT,EAAE,EAAE,MAAM,EACV,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,MAAM,GAAG,UAAU,GAC3B,OAAO,CAAC,aAAa,CAAC,CAAA;IACzB;;;;OAIG;IACH,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CAChE;AAiED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,IAAI,CAAA;CAC1B;AAED,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,0BAA0B,GAAG,eAAe,CA6O9F;AAED,4HAA4H;AAC5H,wBAAgB,sBAAsB,IAAI,SAAS,eAAe,EAAE,CAkCnE;AAED,wBAAsB,wBAAwB,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAMpF"}
|