@jterrats/open-orchestra 0.4.2-beta.1 → 0.5.0-beta.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.
Files changed (170) hide show
  1. package/AGENTS.md +5 -3
  2. package/README.md +29 -5
  3. package/dist/advisory-artifacts.d.ts +20 -0
  4. package/dist/advisory-artifacts.js +136 -0
  5. package/dist/advisory-artifacts.js.map +1 -0
  6. package/dist/assets/web-console.js +436 -4
  7. package/dist/cli.js +16 -117
  8. package/dist/cli.js.map +1 -1
  9. package/dist/command-manifest.d.ts +6 -0
  10. package/dist/command-manifest.js +141 -43
  11. package/dist/command-manifest.js.map +1 -1
  12. package/dist/command-utils.d.ts +5 -0
  13. package/dist/command-utils.js +23 -0
  14. package/dist/command-utils.js.map +1 -1
  15. package/dist/commands.d.ts +7 -42
  16. package/dist/commands.js +214 -1356
  17. package/dist/commands.js.map +1 -1
  18. package/dist/constants.js +3 -0
  19. package/dist/constants.js.map +1 -1
  20. package/dist/context-budget.d.ts +4 -0
  21. package/dist/context-budget.js +119 -0
  22. package/dist/context-budget.js.map +1 -0
  23. package/dist/delivery-commands.d.ts +10 -0
  24. package/dist/delivery-commands.js +152 -0
  25. package/dist/delivery-commands.js.map +1 -0
  26. package/dist/github.d.ts +50 -1
  27. package/dist/github.js +234 -0
  28. package/dist/github.js.map +1 -1
  29. package/dist/health-checks.d.ts +1 -0
  30. package/dist/health-checks.js +11 -1
  31. package/dist/health-checks.js.map +1 -1
  32. package/dist/health-commands.js +2 -0
  33. package/dist/health-commands.js.map +1 -1
  34. package/dist/mcp-oauth-proxy.d.ts +32 -0
  35. package/dist/mcp-oauth-proxy.js +120 -0
  36. package/dist/mcp-oauth-proxy.js.map +1 -1
  37. package/dist/memory.d.ts +2 -1
  38. package/dist/memory.js +71 -10
  39. package/dist/memory.js.map +1 -1
  40. package/dist/package-update-check.d.ts +5 -1
  41. package/dist/package-update-check.js +20 -8
  42. package/dist/package-update-check.js.map +1 -1
  43. package/dist/planning-commands.d.ts +14 -0
  44. package/dist/planning-commands.js +372 -0
  45. package/dist/planning-commands.js.map +1 -0
  46. package/dist/release-candidate.d.ts +2 -0
  47. package/dist/release-candidate.js +9 -14
  48. package/dist/release-candidate.js.map +1 -1
  49. package/dist/release-commands.d.ts +2 -0
  50. package/dist/release-commands.js +58 -6
  51. package/dist/release-commands.js.map +1 -1
  52. package/dist/release-readiness.d.ts +49 -0
  53. package/dist/release-readiness.js +172 -0
  54. package/dist/release-readiness.js.map +1 -0
  55. package/dist/runtime-commands.js +11 -4
  56. package/dist/runtime-commands.js.map +1 -1
  57. package/dist/runtime-execution-renderer.js +2 -0
  58. package/dist/runtime-execution-renderer.js.map +1 -1
  59. package/dist/runtime-execution.d.ts +4 -2
  60. package/dist/runtime-execution.js +11 -4
  61. package/dist/runtime-execution.js.map +1 -1
  62. package/dist/setup-agents-import.d.ts +42 -0
  63. package/dist/setup-agents-import.js +335 -0
  64. package/dist/setup-agents-import.js.map +1 -0
  65. package/dist/skills-catalog-service.d.ts +2 -0
  66. package/dist/skills-catalog-service.js +8 -0
  67. package/dist/skills-catalog-service.js.map +1 -0
  68. package/dist/skills-catalog.d.ts +2 -0
  69. package/dist/skills-catalog.js +389 -0
  70. package/dist/skills-catalog.js.map +1 -0
  71. package/dist/skills-commands.js +1 -11
  72. package/dist/skills-commands.js.map +1 -1
  73. package/dist/skills-events.d.ts +9 -0
  74. package/dist/skills-events.js +50 -0
  75. package/dist/skills-events.js.map +1 -0
  76. package/dist/skills-memory.d.ts +18 -0
  77. package/dist/skills-memory.js +127 -0
  78. package/dist/skills-memory.js.map +1 -0
  79. package/dist/skills-planning.d.ts +2 -0
  80. package/dist/skills-planning.js +87 -0
  81. package/dist/skills-planning.js.map +1 -0
  82. package/dist/skills-render.d.ts +14 -0
  83. package/dist/skills-render.js +83 -0
  84. package/dist/skills-render.js.map +1 -0
  85. package/dist/skills-validation.d.ts +2 -0
  86. package/dist/skills-validation.js +49 -0
  87. package/dist/skills-validation.js.map +1 -0
  88. package/dist/skills.d.ts +6 -42
  89. package/dist/skills.js +6 -773
  90. package/dist/skills.js.map +1 -1
  91. package/dist/task-graph-commands.d.ts +14 -0
  92. package/dist/task-graph-commands.js +367 -0
  93. package/dist/task-graph-commands.js.map +1 -0
  94. package/dist/tool-commands.js +8 -0
  95. package/dist/tool-commands.js.map +1 -1
  96. package/dist/types/context.d.ts +12 -0
  97. package/dist/types/context.js +2 -0
  98. package/dist/types/context.js.map +1 -0
  99. package/dist/types/metrics.d.ts +114 -0
  100. package/dist/types/metrics.js +2 -0
  101. package/dist/types/metrics.js.map +1 -0
  102. package/dist/types/model-config.d.ts +212 -0
  103. package/dist/types/model-config.js +2 -0
  104. package/dist/types/model-config.js.map +1 -0
  105. package/dist/types/runtime.d.ts +93 -0
  106. package/dist/types/runtime.js +2 -0
  107. package/dist/types/runtime.js.map +1 -0
  108. package/dist/types/skills.d.ts +147 -0
  109. package/dist/types/skills.js +2 -0
  110. package/dist/types/skills.js.map +1 -0
  111. package/dist/types/tasks.d.ts +171 -0
  112. package/dist/types/tasks.js +2 -0
  113. package/dist/types/tasks.js.map +1 -0
  114. package/dist/types/workflow-run.d.ts +79 -0
  115. package/dist/types/workflow-run.js +2 -0
  116. package/dist/types/workflow-run.js.map +1 -0
  117. package/dist/types.d.ts +13 -798
  118. package/dist/types.js +1 -1
  119. package/dist/types.js.map +1 -1
  120. package/dist/upgrade-commands.d.ts +2 -0
  121. package/dist/upgrade-commands.js +65 -0
  122. package/dist/upgrade-commands.js.map +1 -0
  123. package/dist/web-api-read-routes.d.ts +5 -0
  124. package/dist/web-api-read-routes.js +37 -0
  125. package/dist/web-api-read-routes.js.map +1 -0
  126. package/dist/web-api.d.ts +1 -3
  127. package/dist/web-api.js +145 -44
  128. package/dist/web-api.js.map +1 -1
  129. package/dist/web-console-sections.d.ts +2 -0
  130. package/dist/web-console-sections.js +7 -0
  131. package/dist/web-console-sections.js.map +1 -0
  132. package/dist/web-console.js +23 -3
  133. package/dist/web-console.js.map +1 -1
  134. package/dist/workflow-approval-service.d.ts +9 -0
  135. package/dist/workflow-approval-service.js +126 -0
  136. package/dist/workflow-approval-service.js.map +1 -0
  137. package/dist/workflow-approval-utils.d.ts +10 -0
  138. package/dist/workflow-approval-utils.js +82 -0
  139. package/dist/workflow-approval-utils.js.map +1 -0
  140. package/dist/workflow-budget-utils.d.ts +7 -0
  141. package/dist/workflow-budget-utils.js +96 -0
  142. package/dist/workflow-budget-utils.js.map +1 -0
  143. package/dist/workflow-evidence-service.d.ts +7 -0
  144. package/dist/workflow-evidence-service.js +100 -0
  145. package/dist/workflow-evidence-service.js.map +1 -0
  146. package/dist/workflow-run-commands.d.ts +8 -0
  147. package/dist/workflow-run-commands.js +479 -0
  148. package/dist/workflow-run-commands.js.map +1 -0
  149. package/dist/workflow-services.d.ts +8 -18
  150. package/dist/workflow-services.js +30 -481
  151. package/dist/workflow-services.js.map +1 -1
  152. package/dist/workflow-summary-service.d.ts +4 -0
  153. package/dist/workflow-summary-service.js +82 -0
  154. package/dist/workflow-summary-service.js.map +1 -0
  155. package/dist/workflow-templates.d.ts +1 -0
  156. package/dist/workflow-templates.js +1 -0
  157. package/dist/workflow-templates.js.map +1 -1
  158. package/dist/workspace.d.ts +18 -1
  159. package/dist/workspace.js +72 -4
  160. package/dist/workspace.js.map +1 -1
  161. package/docs/command-contracts.md +22 -0
  162. package/docs/mcp-oauth-proxy-evaluation.md +14 -0
  163. package/docs/orchestra-mvp.md +158 -114
  164. package/docs/package-naming.md +20 -0
  165. package/docs/persona-workflows.md +209 -0
  166. package/docs/runtime-adapters.md +19 -14
  167. package/docs/runtime-llm-flow.md +29 -28
  168. package/docs/setup-agents-bridge.md +61 -0
  169. package/docs/traceability-flow.md +89 -0
  170. package/package.json +9 -7
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills-memory.js","sourceRoot":"","sources":["../src/skills-memory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { SkillPlan } from "./types.js";
2
+ export declare function planSkillsForTask(taskId: string, root?: string): Promise<SkillPlan>;
@@ -0,0 +1,87 @@
1
+ import { loadWorkspace } from "./workspace.js";
2
+ import { listSkills } from "./skills-catalog-service.js";
3
+ export async function planSkillsForTask(taskId, root = process.cwd()) {
4
+ const workspace = await loadWorkspace(root);
5
+ const task = workspace.tasks.find((candidate) => candidate.id === taskId);
6
+ if (!task) {
7
+ throw new Error(`unknown task: ${taskId}`);
8
+ }
9
+ const role = workspace.roles.find((candidate) => candidate.id === task.ownerRole);
10
+ const scored = listSkills().map((skill) => scoreSkill(skill, task, role?.capabilities ?? []));
11
+ const selected = scored
12
+ .filter((item) => item.score > 0 || item.skill.id === "source-of-truth")
13
+ .sort((left, right) => right.score - left.score || left.skill.id.localeCompare(right.skill.id));
14
+ const skipped = scored
15
+ .filter((item) => !selected.some((selectedItem) => selectedItem.skill.id === item.skill.id))
16
+ .map(({ skill }) => ({
17
+ skill,
18
+ score: 0,
19
+ rationale: ["No matching task signal, role, capability, or risk area."],
20
+ }));
21
+ return {
22
+ taskId,
23
+ selected: selected.map(toPlanItem),
24
+ skipped: skipped.map(toPlanItem),
25
+ sourceGroups: unique(selected.flatMap((item) => item.skill.sourceGroups)),
26
+ };
27
+ }
28
+ function scoreSkill(skill, task, roleCapabilities) {
29
+ const text = taskText(task);
30
+ const rationale = [];
31
+ let score = 0;
32
+ if (skill.roles.includes(task.ownerRole)) {
33
+ score += 3;
34
+ rationale.push(`owner role matches ${task.ownerRole}`);
35
+ }
36
+ const matchedTriggers = skill.triggers.filter((trigger) => text.includes(trigger.toLowerCase()));
37
+ if (matchedTriggers.length > 0) {
38
+ score += matchedTriggers.length * 2;
39
+ rationale.push(`task text matches triggers: ${matchedTriggers.join(", ")}`);
40
+ }
41
+ const risks = [
42
+ ...(task.risks ?? []),
43
+ ...(task.riskGate?.impactAreas ?? []),
44
+ ].map((risk) => risk.toLowerCase());
45
+ const matchedRisks = skill.riskAreas.filter((risk) => risks.some((taskRisk) => taskRisk.includes(risk)));
46
+ if (matchedRisks.length > 0) {
47
+ score += matchedRisks.length * 2;
48
+ rationale.push(`risk areas match: ${matchedRisks.join(", ")}`);
49
+ }
50
+ const matchedCapabilities = skill.capabilities.filter((capability) => roleCapabilities.includes(capability));
51
+ if (matchedCapabilities.length > 0) {
52
+ score += matchedCapabilities.length;
53
+ rationale.push(`role capabilities match: ${matchedCapabilities.join(", ")}`);
54
+ }
55
+ if (skill.id === "prompt-registry" && (task.paths?.length ?? 0) > 0) {
56
+ score += 1;
57
+ rationale.push("task touches files, so prompt registry can preserve artifact intent");
58
+ }
59
+ if (skill.id === "source-of-truth" && score === 0) {
60
+ rationale.push("baseline source selection should run for every task");
61
+ }
62
+ return { skill, score, rationale };
63
+ }
64
+ function toPlanItem({ skill, score, rationale, }) {
65
+ return { skill, score, rationale };
66
+ }
67
+ function taskText(task) {
68
+ return [
69
+ task.id,
70
+ task.title,
71
+ task.backlogItem,
72
+ task.goal,
73
+ task.scope,
74
+ task.testStrategy,
75
+ ...(task.acceptanceCriteria ?? []),
76
+ ...(task.assumptions ?? []),
77
+ ...(task.risks ?? []),
78
+ ...(task.paths ?? []),
79
+ ]
80
+ .filter(Boolean)
81
+ .join(" ")
82
+ .toLowerCase();
83
+ }
84
+ function unique(values) {
85
+ return [...new Set(values)].sort();
86
+ }
87
+ //# sourceMappingURL=skills-planning.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills-planning.js","sourceRoot":"","sources":["../src/skills-planning.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { MemoryPacket, Skill, SkillRenderTarget } from "./types.js";
2
+ export declare function renderSkills({ target, taskId, skillIds, root, }: {
3
+ target: SkillRenderTarget;
4
+ taskId: string | undefined;
5
+ skillIds: string[] | undefined;
6
+ root?: string;
7
+ }): Promise<{
8
+ target: SkillRenderTarget;
9
+ taskId: string | undefined;
10
+ skills: Skill[];
11
+ sourceGroups: string[];
12
+ memory: MemoryPacket;
13
+ content: string;
14
+ }>;
@@ -0,0 +1,83 @@
1
+ import { queryMemory, recordMemoryEvent, renderMemoryPacket, } from "./memory.js";
2
+ import { listSkills } from "./skills-catalog-service.js";
3
+ import { planSkillsForTask } from "./skills-planning.js";
4
+ export async function renderSkills({ target, taskId, skillIds, root = process.cwd(), }) {
5
+ const skills = await resolveRenderSkills({ taskId, skillIds, root });
6
+ const sourceGroups = unique(skills.flatMap((skill) => skill.sourceGroups));
7
+ const memoryQuery = skillIds?.join(" ");
8
+ const memory = await queryMemory({
9
+ ...(taskId ? { taskId } : {}),
10
+ hook: "before_implementation",
11
+ ...(memoryQuery ? { query: memoryQuery } : {}),
12
+ root,
13
+ });
14
+ if (taskId) {
15
+ await recordMemoryEvent(root, memory, "MEMORY_QUERIED");
16
+ }
17
+ return {
18
+ target,
19
+ taskId,
20
+ skills,
21
+ sourceGroups,
22
+ memory,
23
+ content: renderForTarget(target, skills, sourceGroups, taskId, memory),
24
+ };
25
+ }
26
+ async function resolveRenderSkills({ taskId, skillIds, root, }) {
27
+ if (skillIds && skillIds.length > 0) {
28
+ const catalog = listSkills();
29
+ return skillIds.map((id) => {
30
+ const skill = catalog.find((candidate) => candidate.id === id);
31
+ if (!skill) {
32
+ throw new Error(`unknown skill: ${id}`);
33
+ }
34
+ return skill;
35
+ });
36
+ }
37
+ if (!taskId) {
38
+ throw new Error("missing --task or --skills");
39
+ }
40
+ const plan = await planSkillsForTask(taskId, root);
41
+ return plan.selected.map((item) => item.skill);
42
+ }
43
+ function renderForTarget(target, skills, sourceGroups, taskId, memory) {
44
+ if (target === "cursor") {
45
+ return renderMarkdown(skills, sourceGroups, taskId, "Cursor Skill Context", "Use these Open Orchestra skills as task-scoped Cursor rules.", memory);
46
+ }
47
+ if (target === "windsurf") {
48
+ return renderMarkdown(skills, sourceGroups, taskId, "Windsurf Skill Context", "Use these Open Orchestra skills as task-scoped Windsurf rules.", memory);
49
+ }
50
+ if (target === "claude") {
51
+ return renderMarkdown(skills, sourceGroups, taskId, "Claude Skill Context", "Load only these Open Orchestra skills for this task.", memory);
52
+ }
53
+ if (target === "codex") {
54
+ return renderMarkdown(skills, sourceGroups, taskId, "Codex Skill Context", "Apply these Open Orchestra skills while preserving AGENTS.md instructions.", memory);
55
+ }
56
+ if (target === "vscode") {
57
+ return JSON.stringify({ taskId, sourceGroups, skills, memory }, null, 2);
58
+ }
59
+ return renderMarkdown(skills, sourceGroups, taskId, "Open Orchestra Skill Context", "Provider-agnostic skill context for this task.", memory);
60
+ }
61
+ function renderMarkdown(skills, sourceGroups, taskId, title, intro, memory) {
62
+ const lines = [
63
+ `# ${title}`,
64
+ "",
65
+ intro,
66
+ "",
67
+ `Task: ${taskId ?? "explicit skill selection"}`,
68
+ "",
69
+ "## Source Groups",
70
+ "",
71
+ ...sourceGroups.map((group) => `- ${group}`),
72
+ "",
73
+ ...(memory ? [renderMemoryPacket(memory), ""] : []),
74
+ ];
75
+ for (const skill of skills) {
76
+ lines.push(`## ${skill.name}`, "", `ID: ${skill.id}`, "", skill.summary, "", "### Load From", "", `- ${skill.entry}`, "", "### Procedure", "", ...skill.instructions.map((instruction) => `- ${instruction}`), "", "### Evidence", "", ...skill.evidence.map((evidence) => `- ${evidence}`), "");
77
+ }
78
+ return lines.join("\n");
79
+ }
80
+ function unique(values) {
81
+ return [...new Set(values)].sort();
82
+ }
83
+ //# sourceMappingURL=skills-render.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills-render.js","sourceRoot":"","sources":["../src/skills-render.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { SkillValidationReport } from "./types.js";
2
+ export declare function validateSkills(root?: string): Promise<SkillValidationReport>;
@@ -0,0 +1,49 @@
1
+ import { dirname } from "node:path";
2
+ import path from "node:path";
3
+ import { fileURLToPath } from "node:url";
4
+ import { exists, readJson } from "./fs-utils.js";
5
+ import { listSkills } from "./skills-catalog-service.js";
6
+ const PACKAGE_ROOT = dirname(dirname(fileURLToPath(import.meta.url)));
7
+ export async function validateSkills(root = PACKAGE_ROOT) {
8
+ const errors = [];
9
+ const warnings = [];
10
+ const ids = new Set();
11
+ for (const skill of listSkills()) {
12
+ if (ids.has(skill.id)) {
13
+ errors.push(`duplicate skill id: ${skill.id}`);
14
+ }
15
+ ids.add(skill.id);
16
+ if (!(await exists(path.join(root, skill.entry)))) {
17
+ errors.push(`missing skill entry: ${skill.entry}`);
18
+ }
19
+ const manifestPath = path.join(root, "skills", skill.id, "manifest.json");
20
+ if (!(await exists(manifestPath))) {
21
+ errors.push(`missing skill manifest: skills/${skill.id}/manifest.json`);
22
+ continue;
23
+ }
24
+ const manifest = await readJson(manifestPath, {});
25
+ if (manifest.id !== skill.id) {
26
+ errors.push(`manifest id mismatch for ${skill.id}`);
27
+ }
28
+ for (const required of [
29
+ "name",
30
+ "summary",
31
+ "triggers",
32
+ "roles",
33
+ "capabilities",
34
+ "sourceGroups",
35
+ "entry",
36
+ "evidence",
37
+ "loadBudget",
38
+ ]) {
39
+ if (!(required in manifest)) {
40
+ errors.push(`manifest ${skill.id} missing ${required}`);
41
+ }
42
+ }
43
+ if (skill.instructions.length === 0) {
44
+ warnings.push(`skill ${skill.id} has no instructions`);
45
+ }
46
+ }
47
+ return { valid: errors.length === 0, errors, warnings };
48
+ }
49
+ //# sourceMappingURL=skills-validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills-validation.js","sourceRoot":"","sources":["../src/skills-validation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAGzD,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAEtE,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,IAAI,GAAG,YAAY;IAEnB,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;IAC9B,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,EAAE,CAAC;QACjC,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;YACtB,MAAM,CAAC,IAAI,CAAC,uBAAuB,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;QACjD,CAAC;QACD,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClB,IAAI,CAAC,CAAC,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;YAClD,MAAM,CAAC,IAAI,CAAC,wBAAwB,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;QACrD,CAAC;QACD,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,EAAE,eAAe,CAAC,CAAC;QAC1E,IAAI,CAAC,CAAC,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC;YAClC,MAAM,CAAC,IAAI,CAAC,kCAAkC,KAAK,CAAC,EAAE,gBAAgB,CAAC,CAAC;YACxE,SAAS;QACX,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAA0B,YAAY,EAAE,EAAE,CAAC,CAAC;QAC3E,IAAI,QAAQ,CAAC,EAAE,KAAK,KAAK,CAAC,EAAE,EAAE,CAAC;YAC7B,MAAM,CAAC,IAAI,CAAC,4BAA4B,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;QACtD,CAAC;QACD,KAAK,MAAM,QAAQ,IAAI;YACrB,MAAM;YACN,SAAS;YACT,UAAU;YACV,OAAO;YACP,cAAc;YACd,cAAc;YACd,OAAO;YACP,UAAU;YACV,YAAY;SACb,EAAE,CAAC;YACF,IAAI,CAAC,CAAC,QAAQ,IAAI,QAAQ,CAAC,EAAE,CAAC;gBAC5B,MAAM,CAAC,IAAI,CAAC,YAAY,KAAK,CAAC,EAAE,YAAY,QAAQ,EAAE,CAAC,CAAC;YAC1D,CAAC;QACH,CAAC;QACD,IAAI,KAAK,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACpC,QAAQ,CAAC,IAAI,CAAC,SAAS,KAAK,CAAC,EAAE,sBAAsB,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;AAC1D,CAAC"}
package/dist/skills.d.ts CHANGED
@@ -1,42 +1,6 @@
1
- import type { AgentLesson, AgentLessonInput, MemoryPacket, Skill, SkillPlan, SkillRenderTarget, SkillValidationReport } from "./types.js";
2
- export declare function listSkills(): Skill[];
3
- export declare function planSkillsForTask(taskId: string, root?: string): Promise<SkillPlan>;
4
- export declare function renderSkills({ target, taskId, skillIds, root, }: {
5
- target: SkillRenderTarget;
6
- taskId: string | undefined;
7
- skillIds: string[] | undefined;
8
- root?: string;
9
- }): Promise<{
10
- target: SkillRenderTarget;
11
- taskId: string | undefined;
12
- skills: Skill[];
13
- sourceGroups: string[];
14
- memory: MemoryPacket;
15
- content: string;
16
- }>;
17
- export declare function readAgentLessons(root?: string): Promise<string[]>;
18
- export declare function readSourceOfTruth(root?: string): Promise<unknown[]>;
19
- export declare function validateSkills(root?: string): Promise<SkillValidationReport>;
20
- export declare function recordSkillPlan(plan: SkillPlan, root?: string): Promise<void>;
21
- export declare function recordSkillRender(rendered: {
22
- target: SkillRenderTarget;
23
- taskId: string | undefined;
24
- skills: Skill[];
25
- sourceGroups: string[];
26
- memory?: MemoryPacket;
27
- }, root?: string): Promise<void>;
28
- export declare function addAgentLesson(input: AgentLessonInput, root?: string): Promise<AgentLesson>;
29
- export declare function listAgentLessons(root?: string): Promise<AgentLesson[]>;
30
- export declare function deleteAgentLesson(id: string, root?: string): Promise<{
31
- deleted: true;
32
- id: string;
33
- }>;
34
- export declare function promoteAgentLessons({ to, filter, root, }: {
35
- to: "skill" | "rule" | "doc";
36
- filter?: string;
37
- root?: string;
38
- }): Promise<{
39
- artifact: string;
40
- lessons: AgentLesson[];
41
- }>;
42
- export declare function writeSourceOfTruth(entries: unknown[], root?: string): Promise<void>;
1
+ export { listSkills } from "./skills-catalog-service.js";
2
+ export { planSkillsForTask } from "./skills-planning.js";
3
+ export { renderSkills } from "./skills-render.js";
4
+ export { validateSkills } from "./skills-validation.js";
5
+ export { recordSkillPlan, recordSkillRender } from "./skills-events.js";
6
+ export { addAgentLesson, deleteAgentLesson, listAgentLessons, promoteAgentLessons, readAgentLessons, readSourceOfTruth, writeSourceOfTruth, } from "./skills-memory.js";