@kontourai/flow-agents 1.1.0 → 1.2.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 (75) hide show
  1. package/.github/workflows/runtime-compat.yml +5 -2
  2. package/CHANGELOG.md +26 -0
  3. package/README.md +26 -5
  4. package/build/src/cli/{flow-kit.js → kit.js} +122 -108
  5. package/build/src/cli/validate-source-tree.js +4 -4
  6. package/build/src/cli.js +3 -3
  7. package/build/src/flow-kit/validate.js +58 -62
  8. package/build/src/tools/build-universal-bundles.js +64 -17
  9. package/build/src/tools/generate-context-map.js +49 -7
  10. package/build/src/tools/validate-source-tree.js +32 -1
  11. package/docs/adr/0007-flow-skill-kit-tool-boundary.md +169 -0
  12. package/docs/adr/0007-skill-audit.md +112 -0
  13. package/docs/adr/0008-kit-operation-boundary.md +88 -0
  14. package/docs/context-map.md +18 -22
  15. package/docs/flow-kit-repository-contract.md +5 -5
  16. package/docs/getting-started.md +177 -0
  17. package/docs/index.md +19 -8
  18. package/docs/kit-authoring-guide.md +26 -7
  19. package/docs/knowledge-kit.md +2 -2
  20. package/docs/spec/runtime-hook-surface.md +1 -1
  21. package/docs/vision.md +1 -1
  22. package/docs/workflow-usage-guide.md +1 -1
  23. package/evals/fixtures/builder-kit-workflow-state/happy-path.json +2 -2
  24. package/evals/fixtures/builder-kit-workflow-state/mid-work-resume.json +2 -2
  25. package/evals/fixtures/console-learning-projection/artifacts/console-learning-correction/learning.json +1 -1
  26. package/evals/fixtures/pull-work-provider/github-issues.json +5 -5
  27. package/evals/integration/test_activate_npx_context.sh +2 -2
  28. package/evals/integration/test_bundle_install.sh +17 -12
  29. package/evals/integration/test_console_learning_projection.sh +1 -1
  30. package/evals/integration/test_flow_kit_install_git.sh +7 -7
  31. package/evals/integration/test_flow_kit_repository.sh +4 -4
  32. package/evals/integration/test_kit_conformance_levels.sh +1 -1
  33. package/evals/integration/test_local_flow_kit_install.sh +7 -7
  34. package/evals/integration/test_publish_change_helper.sh +1 -1
  35. package/evals/integration/test_pull_work_provider.sh +1 -1
  36. package/evals/integration/test_runtime_adapter_activation.sh +3 -3
  37. package/evals/lib/node.sh +2 -2
  38. package/evals/static/test_workflow_skills.sh +15 -15
  39. package/integrations/strands/flow_agents_strands/steering.py +1 -1
  40. package/integrations/strands-ts/src/hooks.ts +1 -1
  41. package/kits/builder/kit.json +17 -0
  42. package/{skills → kits/builder/skills}/builder-shape/SKILL.md +4 -4
  43. package/{skills → kits/builder/skills}/idea-to-backlog/SKILL.md +1 -1
  44. package/kits/knowledge/kit.json +16 -9
  45. package/package.json +8 -5
  46. package/packaging/packs.json +1 -21
  47. package/scripts/README.md +1 -1
  48. package/scripts/kit.js +2 -0
  49. package/skills/README.md +23 -0
  50. package/src/cli/{flow-kit.ts → kit.ts} +124 -109
  51. package/src/cli/validate-source-tree.ts +4 -4
  52. package/src/cli.ts +3 -3
  53. package/src/flow-kit/validate.ts +63 -57
  54. package/src/tools/build-universal-bundles.ts +60 -13
  55. package/src/tools/generate-context-map.ts +36 -6
  56. package/src/tools/validate-source-tree.ts +27 -1
  57. package/scripts/flow-kit.js +0 -2
  58. package/skills/context-budget/SKILL.md +0 -40
  59. package/skills/explore/SKILL.md +0 -137
  60. package/skills/feedback-loop/SKILL.md +0 -87
  61. package/skills/frontend-design/SKILL.md +0 -80
  62. /package/{skills → kits/builder/skills}/deliver/SKILL.md +0 -0
  63. /package/{skills → kits/builder/skills}/design-probe/SKILL.md +0 -0
  64. /package/{skills → kits/builder/skills}/evidence-gate/SKILL.md +0 -0
  65. /package/{skills → kits/builder/skills}/execute-plan/SKILL.md +0 -0
  66. /package/{skills → kits/builder/skills}/fix-bug/SKILL.md +0 -0
  67. /package/{skills → kits/builder/skills}/learning-review/SKILL.md +0 -0
  68. /package/{skills → kits/builder/skills}/pickup-probe/SKILL.md +0 -0
  69. /package/{skills → kits/builder/skills}/plan-work/SKILL.md +0 -0
  70. /package/{skills → kits/builder/skills}/pull-work/SKILL.md +0 -0
  71. /package/{skills → kits/builder/skills}/release-readiness/SKILL.md +0 -0
  72. /package/{skills → kits/builder/skills}/review-work/SKILL.md +0 -0
  73. /package/{skills → kits/builder/skills}/tdd-workflow/SKILL.md +0 -0
  74. /package/{skills → kits/builder/skills}/verify-work/SKILL.md +0 -0
  75. /package/{skills → kits/knowledge/skills}/knowledge-capture/SKILL.md +0 -0
@@ -310,20 +310,20 @@ NODE
310
310
  done
311
311
 
312
312
  for dir in "$KIRO_DEST" "$BASE_DEST" "$CLAUDE_DEST" "$CODEX_DEST"; do
313
- if [[ -f "$dir/scripts/flow-kit.js" ]] \
314
- && node "$dir/scripts/flow-kit.js" list --dest "$dir" >/tmp/flow-kit-list.out 2>&1 \
315
- && node "$dir/scripts/flow-kit.js" status --dest "$dir" >/tmp/flow-kit-status.out 2>&1 \
316
- && rg -q 'No local Flow Kits installed' /tmp/flow-kit-list.out \
317
- && rg -q 'No local Flow Kits installed' /tmp/flow-kit-status.out; then
313
+ if [[ -f "$dir/scripts/kit.js" ]] \
314
+ && node "$dir/scripts/kit.js" list --dest "$dir" >/tmp/kit-list.out 2>&1 \
315
+ && node "$dir/scripts/kit.js" status --dest "$dir" >/tmp/kit-status.out 2>&1 \
316
+ && rg -q 'No local Flow Kits installed' /tmp/kit-list.out \
317
+ && rg -q 'No local Flow Kits installed' /tmp/kit-status.out; then
318
318
  _pass "$dir includes local Flow Kit CLI and empty list/status works"
319
319
  else
320
320
  _fail "$dir local Flow Kit CLI list/status smoke failed"
321
321
  fi
322
322
  done
323
323
 
324
- if [[ -f "$CODEX_DEST/scripts/flow-kit.js" ]] \
324
+ if [[ -f "$CODEX_DEST/scripts/kit.js" ]] \
325
325
  && [[ -f "$CODEX_DEST/build/src/runtime-adapters.js" ]] \
326
- && node "$CODEX_DEST/scripts/flow-kit.js" activate --dest "$CODEX_DEST" --format json >/tmp/codex-runtime-activation.json 2>&1 \
326
+ && node "$CODEX_DEST/scripts/kit.js" activate --dest "$CODEX_DEST" --format json >/tmp/codex-runtime-activation.json 2>&1 \
327
327
  && node - "$CODEX_DEST" /tmp/codex-runtime-activation.json <<'NODE'
328
328
  const fs = require("node:fs");
329
329
  const path = require("node:path");
@@ -344,7 +344,6 @@ then
344
344
  _pass "Codex installed bundle activates Builder Kit through codex-local"
345
345
  else
346
346
  _fail "Codex installed bundle runtime activation failed"
347
- sed -n '1,180p' /tmp/codex-runtime-activation.json 2>/dev/null || true
348
347
  fi
349
348
 
350
349
  if node - "$KIRO_DEST" "$BASE_DEST" "$CLAUDE_DEST" "$CODEX_DEST" <<'NODE'
@@ -714,8 +713,11 @@ else
714
713
  _fail "Codex core-pack agent filtering failed"
715
714
  fi
716
715
 
717
- if [[ -d "$CODEX_CORE_DEST/.codex/skills/plan-work" && ! -d "$CODEX_CORE_DEST/.codex/skills/deliver" ]]; then
718
- _pass "Codex core-pack install keeps core skills and prunes optional skills"
716
+ # Kit-owned skills (plan-work, deliver) are always present regardless of pack filter.
717
+ # Pack filtering only prunes skills declared in packs.json (the tool-skills).
718
+ # The development-pack tool-skill agentic-engineering should be pruned in a core-only install.
719
+ if [[ -d "$CODEX_CORE_DEST/.codex/skills/plan-work" && -d "$CODEX_CORE_DEST/.codex/skills/deliver" && ! -d "$CODEX_CORE_DEST/.codex/skills/agentic-engineering" ]]; then
720
+ _pass "Codex core-pack install: kit-skills present, dev-only tool-skill pruned"
719
721
  else
720
722
  _fail "Codex core-pack skill filtering failed"
721
723
  fi
@@ -746,8 +748,11 @@ else
746
748
  _fail "opencode core-pack agent filtering failed (tool-planner.md missing)"
747
749
  fi
748
750
 
749
- if [[ -d "$OPENCODE_CORE_DEST/.opencode/skills/plan-work" && ! -d "$OPENCODE_CORE_DEST/.opencode/skills/deliver" ]]; then
750
- _pass "opencode core-pack install keeps core skills and prunes optional skills"
751
+ # Kit-owned skills (plan-work, deliver) are always present regardless of pack filter.
752
+ # Pack filtering only prunes skills declared in packs.json (the tool-skills).
753
+ # The development-pack tool-skill agentic-engineering should be pruned in a core-only install.
754
+ if [[ -d "$OPENCODE_CORE_DEST/.opencode/skills/plan-work" && -d "$OPENCODE_CORE_DEST/.opencode/skills/deliver" && ! -d "$OPENCODE_CORE_DEST/.opencode/skills/agentic-engineering" ]]; then
755
+ _pass "opencode core-pack install: kit-skills present, dev-only tool-skill pruned"
751
756
  else
752
757
  _fail "opencode core-pack skill filtering failed"
753
758
  fi
@@ -146,7 +146,7 @@ if jq -e '
146
146
  $ext.routing.deferred == 1 and
147
147
  ($ext.routing.targets | sort) == ["eval", "skill"] and
148
148
  ($ext.routing.statuses | sort) == ["deferred", "open"] and
149
- ($ext.routing.refs | sort) == ["github:kontourai/flow-agents#96", "skills/learning-review/SKILL.md"] and
149
+ ($ext.routing.refs | sort) == ["github:kontourai/flow-agents#96", "kits/builder/skills/learning-review/SKILL.md"] and
150
150
  $ext.correction.needed == true and
151
151
  $ext.correction.type == "workflow" and
152
152
  $ext.correction.recurrence_key == "console-learning-projection.recurrence-metadata" and
@@ -14,7 +14,7 @@ trap 'rm -rf "$TMP_DIR"' EXIT
14
14
  pass() { echo " ✓ $1"; }
15
15
  fail() { echo " ✗ $1"; errors=$((errors + 1)); }
16
16
 
17
- CLI="$ROOT/scripts/flow-kit.js"
17
+ CLI="$ROOT/scripts/kit.js"
18
18
  VALID_SRC="$ROOT/evals/fixtures/flow-kit-repository/valid-local-kit"
19
19
  DEST="$TMP_DIR/install-dest"
20
20
  mkdir -p "$DEST"
@@ -33,7 +33,7 @@ echo " (fixture repo: $FILE_URL)"
33
33
 
34
34
  # --- Test 1: basic install-git from file:// URL ---
35
35
  install_out="$TMP_DIR/install-git.out"
36
- if flow_agents_node "$CLI" install-git "$FILE_URL" --dest "$DEST" >"$install_out" 2>&1; then
36
+ if flow_agents_node "$CLI" install "$FILE_URL" --dest "$DEST" >"$install_out" 2>&1; then
37
37
  pass "install-git from file:// URL succeeds"
38
38
  else
39
39
  fail "install-git from file:// URL failed"
@@ -72,7 +72,7 @@ fi
72
72
  # --- Test 2: idempotent re-install from same URL ---
73
73
  idempotent_out="$TMP_DIR/idempotent.out"
74
74
  registry_hash_before="$(shasum -a 256 "$REGISTRY" | awk '{print $1}')"
75
- if flow_agents_node "$CLI" install-git "$FILE_URL" --dest "$DEST" >"$idempotent_out" 2>&1 \
75
+ if flow_agents_node "$CLI" install "$FILE_URL" --dest "$DEST" >"$idempotent_out" 2>&1 \
76
76
  && grep -q "already installed" "$idempotent_out" \
77
77
  && [[ "$registry_hash_before" == "$(shasum -a 256 "$REGISTRY" | awk '{print $1}')" ]]; then
78
78
  pass "install-git same-URL reinstall is idempotent"
@@ -93,7 +93,7 @@ cp -R "$VALID_SRC" "$FIXTURE_WORKING2"
93
93
  git clone -q --bare "$FIXTURE_WORKING2" "$FIXTURE_REPO2"
94
94
  FILE_URL2="file://$FIXTURE_REPO2"
95
95
 
96
- if flow_agents_node "$CLI" install-git "${FILE_URL2}#v1.0" --dest "$DEST2" >"$ref_out" 2>&1; then
96
+ if flow_agents_node "$CLI" install "${FILE_URL2}#v1.0" --dest "$DEST2" >"$ref_out" 2>&1; then
97
97
  pass "install-git with #ref fragment succeeds"
98
98
  else
99
99
  fail "install-git with #ref fragment failed"
@@ -119,7 +119,7 @@ fi
119
119
  ref_flag_out="$TMP_DIR/ref-flag.out"
120
120
  DEST3="$TMP_DIR/dest-with-ref-flag"
121
121
  mkdir -p "$DEST3"
122
- if flow_agents_node "$CLI" install-git "$FILE_URL2" --ref v1.0 --dest "$DEST3" >"$ref_flag_out" 2>&1; then
122
+ if flow_agents_node "$CLI" install "$FILE_URL2" --ref v1.0 --dest "$DEST3" >"$ref_flag_out" 2>&1; then
123
123
  pass "install-git with --ref flag succeeds"
124
124
  else
125
125
  fail "install-git with --ref flag failed"
@@ -128,7 +128,7 @@ fi
128
128
 
129
129
  # --- Test 5: missing git URL exits non-zero ---
130
130
  missing_url_out="$TMP_DIR/missing-url.out"
131
- if flow_agents_node "$CLI" install-git --dest "$DEST" >"$missing_url_out" 2>&1; then
131
+ if flow_agents_node "$CLI" install --dest "$DEST" >"$missing_url_out" 2>&1; then
132
132
  fail "install-git with no URL should exit non-zero"
133
133
  sed -n '1,40p' "$missing_url_out"
134
134
  else
@@ -137,7 +137,7 @@ fi
137
137
 
138
138
  # --- Test 6: invalid git URL exits non-zero ---
139
139
  invalid_url_out="$TMP_DIR/invalid-url.out"
140
- if flow_agents_node "$CLI" install-git "file:///nonexistent-repo-that-does-not-exist" --dest "$DEST" >"$invalid_url_out" 2>&1; then
140
+ if flow_agents_node "$CLI" install "file:///nonexistent-repo-that-does-not-exist" --dest "$DEST" >"$invalid_url_out" 2>&1; then
141
141
  fail "install-git with invalid URL should exit non-zero"
142
142
  sed -n '1,40p' "$invalid_url_out"
143
143
  else
@@ -55,15 +55,15 @@ echo "=== Flow Kit Repository Fixture Checks ==="
55
55
  expect_pass "valid-local-kit"
56
56
  expect_fail "invalid-schema-version" '\.schema_version must be "1\.0"'
57
57
  expect_fail "invalid-missing-schema-version" '\.schema_version must be "1\.0"'
58
- expect_fail "invalid-id" '\.id must be a stable kebab-case string'
59
- expect_fail "invalid-missing-id" '\.id must be a stable kebab-case string'
58
+ expect_fail "invalid-id" '\.id must be a kebab-case string'
59
+ expect_fail "invalid-missing-id" '\.id must be a kebab-case string'
60
60
  expect_fail "invalid-name" '\.name must be a non-empty string'
61
61
  expect_fail "invalid-missing-flow" 'flows\[0\]\.path points at missing Flow Definition'
62
62
  expect_fail "invalid-absolute-path" 'flows\[0\]\.path must be relative'
63
- expect_fail "invalid-traversal" "flows\\[0\\]\\.path must stay inside the kit directory"
63
+ expect_fail "invalid-traversal" "flows\\[0\\]\\.path must not contain"
64
64
  expect_fail "invalid-malformed-json" 'invalid JSON'
65
65
  expect_fail "invalid-asset-section" '\.docs must be a list'
66
- expect_fail "invalid-duplicate-flow" "flows\\[1\\]\\.id duplicates"
66
+ expect_fail "invalid-duplicate-flow" "flows\\[1\\]\\.path duplicates"
67
67
 
68
68
  echo ""
69
69
  echo "=== Builder Kit Shared Validation Check ==="
@@ -23,7 +23,7 @@ run_inspect() {
23
23
  local output="$2"
24
24
  # Route through the main CLI to avoid import.meta.url path-resolution issues.
25
25
  flow_agents_build_ts 2>/dev/null
26
- node "$FLOW_AGENTS_EVAL_ROOT/build/src/cli.js" flow-kit inspect "$kit_dir" >"$output" 2>&1
26
+ node "$FLOW_AGENTS_EVAL_ROOT/build/src/cli.js" kit inspect "$kit_dir" >"$output" 2>&1
27
27
  }
28
28
 
29
29
  # ===================================================================
@@ -12,7 +12,7 @@ trap 'rm -rf "$TMP_DIR"' EXIT
12
12
  pass() { echo " ✓ $1"; }
13
13
  fail() { echo " ✗ $1"; errors=$((errors + 1)); }
14
14
 
15
- CLI="$ROOT/scripts/flow-kit.js"
15
+ CLI="$ROOT/scripts/kit.js"
16
16
  VALID_SRC="$ROOT/evals/fixtures/flow-kit-repository/valid-local-kit"
17
17
  INVALID_SRC="$ROOT/evals/fixtures/flow-kit-repository/invalid-missing-flow"
18
18
  DEST="$TMP_DIR/install-dest"
@@ -23,7 +23,7 @@ mkdir -p "$DEST"
23
23
  echo "=== Local Flow Kit Install Checks ==="
24
24
 
25
25
  install_output="$TMP_DIR/install.out"
26
- if flow_agents_node "$CLI" install-local "$VALID_SRC" --dest "$DEST" >"$install_output" 2>&1; then
26
+ if flow_agents_node "$CLI" install "$VALID_SRC" --dest "$DEST" >"$install_output" 2>&1; then
27
27
  pass "valid local kit installs into temp destination"
28
28
  else
29
29
  fail "valid local kit install failed"
@@ -52,7 +52,7 @@ fi
52
52
 
53
53
  registry_hash_before_invalid="$(shasum -a 256 "$REGISTRY" | awk '{print $1}')"
54
54
  invalid_output="$TMP_DIR/invalid.out"
55
- if flow_agents_node "$CLI" install-local "$INVALID_SRC" --dest "$DEST" >"$invalid_output" 2>&1; then
55
+ if flow_agents_node "$CLI" install "$INVALID_SRC" --dest "$DEST" >"$invalid_output" 2>&1; then
56
56
  fail "invalid local kit install should fail"
57
57
  sed -n '1,160p' "$invalid_output"
58
58
  elif rg -q 'Flow Kit repository validation failed' "$invalid_output" \
@@ -65,7 +65,7 @@ fi
65
65
 
66
66
  registry_hash_before_idempotent="$(shasum -a 256 "$REGISTRY" | awk '{print $1}')"
67
67
  idempotent_output="$TMP_DIR/idempotent.out"
68
- if flow_agents_node "$CLI" install-local "$VALID_SRC" --dest "$DEST" >"$idempotent_output" 2>&1 \
68
+ if flow_agents_node "$CLI" install "$VALID_SRC" --dest "$DEST" >"$idempotent_output" 2>&1 \
69
69
  && rg -q "already installed" "$idempotent_output" \
70
70
  && [[ "$registry_hash_before_idempotent" == "$(shasum -a 256 "$REGISTRY" | awk '{print $1}')" ]]; then
71
71
  pass "same-source reinstall is idempotent"
@@ -79,7 +79,7 @@ cp -R "$VALID_SRC" "$CONFLICT_SRC"
79
79
  printf '\nconflict copy\n' >> "$CONFLICT_SRC/docs/README.md"
80
80
  conflict_output="$TMP_DIR/conflict.out"
81
81
  registry_hash_before_conflict="$(shasum -a 256 "$REGISTRY" | awk '{print $1}')"
82
- if flow_agents_node "$CLI" install-local "$CONFLICT_SRC" --dest "$DEST" >"$conflict_output" 2>&1; then
82
+ if flow_agents_node "$CLI" install "$CONFLICT_SRC" --dest "$DEST" >"$conflict_output" 2>&1; then
83
83
  fail "different source with existing kit id should conflict"
84
84
  sed -n '1,160p' "$conflict_output"
85
85
  elif rg -q 'conflict: kit' "$conflict_output" \
@@ -91,7 +91,7 @@ else
91
91
  fi
92
92
 
93
93
  force_conflict_output="$TMP_DIR/force-conflict.out"
94
- if flow_agents_node "$CLI" install-local "$CONFLICT_SRC" --dest "$DEST" --force >"$force_conflict_output" 2>&1; then
94
+ if flow_agents_node "$CLI" install "$CONFLICT_SRC" --dest "$DEST" --force >"$force_conflict_output" 2>&1; then
95
95
  fail "--force should not replace a different-source duplicate id"
96
96
  sed -n '1,160p' "$force_conflict_output"
97
97
  elif rg -q 'conflict: kit' "$force_conflict_output" \
@@ -103,7 +103,7 @@ else
103
103
  fi
104
104
 
105
105
  update_output="$TMP_DIR/update.out"
106
- if flow_agents_node "$CLI" install-local "$CONFLICT_SRC" --dest "$DEST" --update >"$update_output" 2>&1 \
106
+ if flow_agents_node "$CLI" install "$CONFLICT_SRC" --dest "$DEST" --update >"$update_output" 2>&1 \
107
107
  && rg -q "updated local kit" "$update_output" \
108
108
  && rg -q "$CONFLICT_SRC" "$REGISTRY"; then
109
109
  pass "explicit update replaces duplicate id source"
@@ -112,7 +112,7 @@ status=$?
112
112
 
113
113
  for risk in runtime schema package hook security; do
114
114
  case "$risk" in
115
- runtime) path="scripts/flow-kit.js" ;;
115
+ runtime) path="scripts/kit.js" ;;
116
116
  schema) path="schemas/workflow-evidence.schema.json" ;;
117
117
  package) path="package.json" ;;
118
118
  hook) path="scripts/hooks/quality-gate.js" ;;
@@ -52,7 +52,7 @@ status=$?
52
52
  [[ "$(json_query "$TMPDIR_EVAL/normalized.json" "items.5.planned_base_sha")" == "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" ]] && pass "marker normalizes planned_base_sha" || fail "marker normalizes planned_base_sha"
53
53
  [[ "$(json_query "$TMPDIR_EVAL/normalized.json" "items.5.planned_at")" == "2026-06-03T03:23:14Z" ]] && pass "marker normalizes planned_at" || fail "marker normalizes planned_at"
54
54
  [[ "$(json_query "$TMPDIR_EVAL/normalized.json" "items.5.planning_artifact_ref")" == ".flow-agents/idea-to-backlog-source-revision-structured-blockers/idea-to-backlog-source-revision-structured-blockers--plan.md" ]] && pass "marker normalizes planning_artifact_ref" || fail "marker normalizes planning_artifact_ref"
55
- [[ "$(json_query "$TMPDIR_EVAL/normalized.json" "items.5.planning_scope_refs.0")" == "skills/idea-to-backlog/SKILL.md" ]] && pass "marker normalizes planning_scope_refs" || fail "marker normalizes planning_scope_refs"
55
+ [[ "$(json_query "$TMPDIR_EVAL/normalized.json" "items.5.planning_scope_refs.0")" == "kits/builder/skills/idea-to-backlog/SKILL.md" ]] && pass "marker normalizes planning_scope_refs" || fail "marker normalizes planning_scope_refs"
56
56
  [[ "$(json_query "$TMPDIR_EVAL/normalized.json" "items.5.source_revisions.1.repo")" == "kontourai/flow" ]] && pass "marker preserves repo-scoped source_revisions" || fail "marker preserves repo-scoped source_revisions"
57
57
  [[ "$(json_query "$TMPDIR_EVAL/normalized.json" "items.5.blockers.0.ref.owner")" == "kontourai" ]] && pass "structured blocker preserves provider owner" || fail "structured blocker preserves provider owner"
58
58
  [[ "$(json_query "$TMPDIR_EVAL/normalized.json" "items.5.blockers.0.ref.repo")" == "flow" ]] && pass "structured blocker preserves provider repo" || fail "structured blocker preserves provider repo"
@@ -12,7 +12,7 @@ trap 'rm -rf "$TMP_DIR"' EXIT
12
12
  pass() { echo " ✓ $1"; }
13
13
  fail() { echo " ✗ $1"; errors=$((errors + 1)); }
14
14
 
15
- CLI="$ROOT/scripts/flow-kit.js"
15
+ CLI="$ROOT/scripts/kit.js"
16
16
  DEST="$TMP_DIR/runtime-dest"
17
17
  MIXED_SRC="$ROOT/evals/fixtures/flow-kit-repository/mixed-runtime-kit"
18
18
  OUT="$TMP_DIR/activation.json"
@@ -22,7 +22,7 @@ mkdir -p "$DEST"
22
22
 
23
23
  echo "=== Runtime Adapter Activation Checks ==="
24
24
 
25
- if flow_agents_node "$CLI" install-local "$MIXED_SRC" --dest "$DEST" >"$TMP_DIR/install.out" 2>&1; then
25
+ if flow_agents_node "$CLI" install "$MIXED_SRC" --dest "$DEST" >"$TMP_DIR/install.out" 2>&1; then
26
26
  pass "mixed local kit installs into temp destination"
27
27
  else
28
28
  fail "mixed local kit install failed"
@@ -146,7 +146,7 @@ STRANDS_OUT="$TMP_DIR/strands-activation.json"
146
146
  mkdir -p "$STRANDS_DEST"
147
147
 
148
148
  # Install the mixed kit into strands dest so we can assert skills land there too
149
- if flow_agents_node "$CLI" install-local "$MIXED_SRC" --dest "$STRANDS_DEST" >"$TMP_DIR/strands-install.out" 2>&1; then
149
+ if flow_agents_node "$CLI" install "$MIXED_SRC" --dest "$STRANDS_DEST" >"$TMP_DIR/strands-install.out" 2>&1; then
150
150
  pass "mixed local kit installs into strands temp destination"
151
151
  else
152
152
  fail "mixed local kit install failed (strands dest)"
package/evals/lib/node.sh CHANGED
@@ -45,10 +45,10 @@ flow_agents_node() {
45
45
  node "$FLOW_AGENTS_EVAL_ROOT/build/src/cli/validate-source-tree.js" "$@"
46
46
  return
47
47
  ;;
48
- */scripts/flow-kit.js|scripts/flow-kit.js)
48
+ */scripts/kit.js|scripts/kit.js)
49
49
  shift
50
50
  flow_agents_build_ts || return
51
- node "$FLOW_AGENTS_EVAL_ROOT/build/src/cli/flow-kit.js" "$@"
51
+ node "$FLOW_AGENTS_EVAL_ROOT/build/src/cli/kit.js" "$@"
52
52
  return
53
53
  ;;
54
54
  */scripts/effective-backlog-settings.js|scripts/effective-backlog-settings.js)
@@ -52,19 +52,19 @@ require_status() {
52
52
 
53
53
  echo "=== Workflow Skill Contract Checks ==="
54
54
 
55
- IDEA="$ROOT/skills/idea-to-backlog/SKILL.md"
56
- BUILDER_SHAPE="$ROOT/skills/builder-shape/SKILL.md"
57
- PULL="$ROOT/skills/pull-work/SKILL.md"
58
- DESIGN_PROBE="$ROOT/skills/design-probe/SKILL.md"
59
- PICKUP_PROBE="$ROOT/skills/pickup-probe/SKILL.md"
60
- EVIDENCE="$ROOT/skills/evidence-gate/SKILL.md"
61
- RELEASE="$ROOT/skills/release-readiness/SKILL.md"
62
- LEARNING="$ROOT/skills/learning-review/SKILL.md"
63
- DELIVER="$ROOT/skills/deliver/SKILL.md"
64
- PLAN_WORK="$ROOT/skills/plan-work/SKILL.md"
65
- EXECUTE_PLAN="$ROOT/skills/execute-plan/SKILL.md"
66
- REVIEW_WORK="$ROOT/skills/review-work/SKILL.md"
67
- VERIFY_WORK="$ROOT/skills/verify-work/SKILL.md"
55
+ IDEA="$ROOT/kits/builder/skills/idea-to-backlog/SKILL.md"
56
+ BUILDER_SHAPE="$ROOT/kits/builder/skills/builder-shape/SKILL.md"
57
+ PULL="$ROOT/kits/builder/skills/pull-work/SKILL.md"
58
+ DESIGN_PROBE="$ROOT/kits/builder/skills/design-probe/SKILL.md"
59
+ PICKUP_PROBE="$ROOT/kits/builder/skills/pickup-probe/SKILL.md"
60
+ EVIDENCE="$ROOT/kits/builder/skills/evidence-gate/SKILL.md"
61
+ RELEASE="$ROOT/kits/builder/skills/release-readiness/SKILL.md"
62
+ LEARNING="$ROOT/kits/builder/skills/learning-review/SKILL.md"
63
+ DELIVER="$ROOT/kits/builder/skills/deliver/SKILL.md"
64
+ PLAN_WORK="$ROOT/kits/builder/skills/plan-work/SKILL.md"
65
+ EXECUTE_PLAN="$ROOT/kits/builder/skills/execute-plan/SKILL.md"
66
+ REVIEW_WORK="$ROOT/kits/builder/skills/review-work/SKILL.md"
67
+ VERIFY_WORK="$ROOT/kits/builder/skills/verify-work/SKILL.md"
68
68
  MAP="$ROOT/docs/skills-map.md"
69
69
  ROOT_CONTEXT="$ROOT/CONTEXT.md"
70
70
  CONTEXT_MAP="$ROOT/docs/context-map.md"
@@ -146,6 +146,7 @@ while IFS= read -r guidance_surface; do
146
146
  done < <(
147
147
  {
148
148
  find "$ROOT/skills" -type f -name '*.md'
149
+ find "$ROOT/kits" -path "*/skills/*/SKILL.md" -type f
149
150
  find "$ROOT/context/contracts" -maxdepth 1 -type f -name '*.md'
150
151
  find "$ROOT/agents" -maxdepth 1 -type f -name '*.json'
151
152
  printf '%s\n' "$ROOT/packaging/manifest.json"
@@ -553,7 +554,7 @@ echo ""
553
554
  echo "--- builder-shape ---"
554
555
  require_text "$BUILDER_SHAPE" '^name: "builder-shape"$' "frontmatter name"
555
556
  require_text "$BUILDER_SHAPE" 'Builder Kit `shape` flow' "defines Builder Kit shape product surface"
556
- require_text "$BUILDER_SHAPE" 'skills/idea-to-backlog/SKILL.md' "delegates to idea-to-backlog"
557
+ require_text "$BUILDER_SHAPE" 'kits/builder/skills/idea-to-backlog/SKILL.md' "delegates to idea-to-backlog"
557
558
  require_text "$BUILDER_SHAPE" 'kits/builder/flows/shape.flow.json' "links Builder Kit Flow Definition"
558
559
  require_text "$BUILDER_SHAPE" 'raw idea.*current conversation context|current conversation context.*raw idea' "accepts raw idea or conversation context"
559
560
  require_text "$BUILDER_SHAPE" 'Probe/alignment' "uses Probe alignment language"
@@ -1102,7 +1103,6 @@ require_text "$PACKS_MANIFEST" '"name": "core"' "pack manifest defines core pack
1102
1103
  require_text "$PACKS_MANIFEST" '"default": true' "pack manifest defines default pack"
1103
1104
  require_text "$PACKS_MANIFEST" '"name": "development"' "pack manifest defines development pack"
1104
1105
  require_text "$PACKS_MANIFEST" '"eval-rebuild"' "pack manifest includes eval-rebuild"
1105
- require_text "$PACKS_MANIFEST" '"explore"' "pack manifest includes explore"
1106
1106
  require_text "$ROOT/scripts/build-universal-bundles.js" 'FLOW_AGENTS_PACKS' "bundle installer supports pack filtering"
1107
1107
  require_text "$ROOT/evals/integration/test_bundle_install.sh" 'core-pack install keeps core agents' "bundle install test covers pack filtering"
1108
1108
  require_text "$CONTEXT_MAP" 'Context Loading Rules' "context map includes loading rules"
@@ -211,7 +211,7 @@ class SteeringContext:
211
211
  """
212
212
  Surface activated kit flows from the strands-local runtime path.
213
213
 
214
- Reads .flow-agents/runtime/strands/flows/ (written by `flow-kit activate
214
+ Reads .flow-agents/runtime/strands/flows/ (written by `flow-agents kit activate
215
215
  --adapter strands-local`) and emits a brief hint listing active kit flows
216
216
  by id and description so the agent is aware of available workflow guidance.
217
217
  """
@@ -189,7 +189,7 @@ export class FlowAgentsHooks {
189
189
  *
190
190
  * Includes activated kit flows discovered from the strands-local runtime
191
191
  * path (.flow-agents/runtime/strands/flows/) written by
192
- * `flow-kit activate --adapter strands-local`.
192
+ * `flow-agents kit activate --adapter strands-local`.
193
193
  *
194
194
  * Callers should prepend this to the Agent's system prompt:
195
195
  *
@@ -15,5 +15,22 @@
15
15
  "path": "flows/build.flow.json",
16
16
  "description": "Pull ready work through design probing, planning, implementation, verification, pull request readiness, merge readiness, and learning."
17
17
  }
18
+ ],
19
+ "skills": [
20
+ { "id": "builder.builder-shape", "path": "skills/builder-shape/SKILL.md", "description": "Invoke Builder Kit shape from a raw idea or the current conversation context." },
21
+ { "id": "builder.deliver", "path": "skills/deliver/SKILL.md", "description": "Delivery workflow — selected work to delivered code." },
22
+ { "id": "builder.design-probe", "path": "skills/design-probe/SKILL.md", "description": "One-question-at-a-time design probing interview." },
23
+ { "id": "builder.evidence-gate", "path": "skills/evidence-gate/SKILL.md", "description": "Evaluate whether completed work is trustworthy enough for human review, merge, or release." },
24
+ { "id": "builder.execute-plan", "path": "skills/execute-plan/SKILL.md", "description": "Parallel execution primitive — plan artifact path to implemented code." },
25
+ { "id": "builder.fix-bug", "path": "skills/fix-bug/SKILL.md", "description": "Bug fix orchestrator — diagnose, plan, execute, review, verify, loop." },
26
+ { "id": "builder.idea-to-backlog", "path": "skills/idea-to-backlog/SKILL.md", "description": "Turn raw ideas into shaped, prioritized, executable GitHub issue backlog." },
27
+ { "id": "builder.learning-review", "path": "skills/learning-review/SKILL.md", "description": "Capture post-merge learnings and feed them back into backlog, skills, tests, or knowledge." },
28
+ { "id": "builder.pickup-probe", "path": "skills/pickup-probe/SKILL.md", "description": "Builder Kit work-item/docs/provider-grounded Probe specialization before plan-work." },
29
+ { "id": "builder.plan-work", "path": "skills/plan-work/SKILL.md", "description": "Code planning primitive — goal + directory to structured execution plan." },
30
+ { "id": "builder.pull-work", "path": "skills/pull-work/SKILL.md", "description": "Select ready GitHub issues from the executable backlog for implementation." },
31
+ { "id": "builder.release-readiness", "path": "skills/release-readiness/SKILL.md", "description": "Decide whether evidence-backed work is ready to merge, release, deploy, or hold." },
32
+ { "id": "builder.review-work", "path": "skills/review-work/SKILL.md", "description": "Review primitive — code, security, dependency, architecture critique before verification." },
33
+ { "id": "builder.tdd-workflow", "path": "skills/tdd-workflow/SKILL.md", "description": "Test-driven development — RED, GREEN, REFACTOR with git checkpoints." },
34
+ { "id": "builder.verify-work", "path": "skills/verify-work/SKILL.md", "description": "Verification primitive — session file path to structured evidence verdict." }
18
35
  ]
19
36
  }
@@ -11,7 +11,7 @@ Invoke the Builder Kit `shape` flow for raw product ideas, vague build goals, cu
11
11
 
12
12
  - Product surface: let the user ask for "Builder Kit shape", "builder shape", or "shape this with Builder Kit" without naming `idea-to-backlog`.
13
13
  - Proactive suggestion: when a user starts planning a feature, product, PRD, roadmap item, or vague build idea without naming a workflow, briefly suggest Builder Kit shape as the structured path before implementation. Phrase it as an option, not a forced gate, unless the request is too ambiguous to plan responsibly.
14
- - Delegation: use `skills/idea-to-backlog/SKILL.md` as the shaping primitive. Do not duplicate or replace its workflow, artifact contract, issue shape, or gate rules.
14
+ - Delegation: use `kits/builder/skills/idea-to-backlog/SKILL.md` as the shaping primitive. Do not duplicate or replace its workflow, artifact contract, issue shape, or gate rules.
15
15
  - Product-level auto-guidance: when the user invokes Builder Kit shape, guide them through `design-probe` alignment and then the `idea-to-backlog` workflow directly; do not require them to type `design-probe` or `idea-to-backlog` as additional skill names.
16
16
  - do not require them to type `idea-to-backlog`; Builder Kit shape owns the user-facing route into that primitive.
17
17
  - Flow reference: link every Builder Kit shape artifact to the Builder Kit Flow Definition at `kits/builder/flows/shape.flow.json`.
@@ -19,7 +19,7 @@ Invoke the Builder Kit `shape` flow for raw product ideas, vague build goals, cu
19
19
  - Probe/alignment: when the idea, user outcome, constraints, non-goals, success signal, risk, or bundle relationship is unclear, run `design-probe` style alignment before continuing.
20
20
  - Default stop: stop at the backlog gate by default. Do not create GitHub issues, sync to a project, or hand off to `pull-work` unless the user explicitly asks for that next step.
21
21
  - Boundary: do not run Builder Kit build execution, remote kit install, package extraction, downstream delivery workflows, `plan-work`, `execute-plan`, `review-work`, `verify-work`, `evidence-gate`, or release workflows from this invocation.
22
- - Compatibility: Direct `idea-to-backlog` usage remains valid and should behave exactly as described in `skills/idea-to-backlog/SKILL.md`.
22
+ - Compatibility: Direct `idea-to-backlog` usage remains valid and should behave exactly as described in `kits/builder/skills/idea-to-backlog/SKILL.md`.
23
23
  - Primitive recovery: if a user invokes `idea-to-backlog` or another primitive with missing shaping context and appears to want the product flow, explain that Builder Kit shape is the entry point and offer to route there.
24
24
 
25
25
  ## Invocation
@@ -33,7 +33,7 @@ Use this skill when the user says things like:
33
33
 
34
34
  When activated:
35
35
 
36
- 1. Read `skills/idea-to-backlog/SKILL.md`.
36
+ 1. Read `kits/builder/skills/idea-to-backlog/SKILL.md`.
37
37
  2. State that Builder Kit shape delegates to `idea-to-backlog` and uses `kits/builder/flows/shape.flow.json`.
38
38
  3. Gather the raw idea or current conversation context.
39
39
  4. If needed, use `design-probe`: ask one Probe/alignment question at a time before shaping. Prefer questions that clarify user outcome, constraints, non-goals, success criteria, risk, or whether bundled ideas truly belong together.
@@ -72,5 +72,5 @@ For Builder Kit shape invocations, also include:
72
72
  Issue sync is explicit-only.
73
73
 
74
74
  - If the user did not ask to create or sync issues, set `backlog_links` to `not_requested` or an empty recorded status and stop at the backlog gate.
75
- - If the user asks to create or sync issues, follow the GitHub issue rules in `skills/idea-to-backlog/SKILL.md`.
75
+ - If the user asks to create or sync issues, follow the GitHub issue rules in `kits/builder/skills/idea-to-backlog/SKILL.md`.
76
76
  - If provider details are missing, ask for them instead of assuming a GitHub repository, project, labels, milestone, or assignee.
@@ -217,7 +217,7 @@ Provider-neutral marker example:
217
217
  "planned_at": "2026-06-03T03:23:14Z",
218
218
  "planning_artifact_ref": ".flow-agents/example/example--idea-to-backlog.md",
219
219
  "planning_scope_refs": [
220
- "skills/idea-to-backlog/SKILL.md",
220
+ "kits/builder/skills/idea-to-backlog/SKILL.md",
221
221
  "context/contracts/work-item-contract.md"
222
222
  ]
223
223
  }
@@ -3,7 +3,7 @@
3
3
  "id": "knowledge",
4
4
  "name": "Knowledge Kit",
5
5
  "product_name": "Knowledge Kit",
6
- "description": "A Flow Kit for durable, gated knowledge storage. Provides a store contract with defined record types, mutation operations, and provenance rules \u2014 plus a default adapter backed by markdown files, YAML frontmatter, wikilinks, and a graph index.",
6
+ "description": "A Flow Kit for durable, gated knowledge storage. Provides a store contract with defined record types, mutation operations, and provenance rules plus a default adapter backed by markdown files, YAML frontmatter, wikilinks, and a graph index.",
7
7
  "flows": [
8
8
  {
9
9
  "id": "knowledge.store-contract",
@@ -13,17 +13,17 @@
13
13
  {
14
14
  "id": "knowledge.ingest",
15
15
  "path": "flows/ingest.flow.json",
16
- "description": "Ingest raw captures: capture \u2192 classify \u2192 route. Gate on classify requires category + type='raw' classification evidence per the store contract create op."
16
+ "description": "Ingest raw captures: capture classify route. Gate on classify requires category + type='raw' classification evidence per the store contract create op."
17
17
  },
18
18
  {
19
19
  "id": "knowledge.compile",
20
20
  "path": "flows/compile.flow.json",
21
- "description": "Compile classified raws into durable notes: select-raws \u2192 compile \u2192 link. Gate on compile requires provenance refs to every consumed raw record."
21
+ "description": "Compile classified raws into durable notes: select-raws compile link. Gate on compile requires provenance refs to every consumed raw record."
22
22
  },
23
23
  {
24
24
  "id": "knowledge.synthesize",
25
25
  "path": "flows/synthesize.flow.json",
26
- "description": "Synthesize compiled sources into concept summaries: detect-cluster \u2192 propose \u2192 evidence-gate \u2192 apply-or-reject. Mutation-gate policy: no summary mutates without an approved proposal carrying source refs; rejection leaves store untouched."
26
+ "description": "Synthesize compiled sources into concept summaries: detect-cluster propose evidence-gate apply-or-reject. Mutation-gate policy: no summary mutates without an approved proposal carrying source refs; rejection leaves store untouched."
27
27
  },
28
28
  {
29
29
  "id": "knowledge.consolidate",
@@ -33,7 +33,7 @@
33
33
  {
34
34
  "id": "knowledge.retire",
35
35
  "path": "flows/retire.flow.json",
36
- "description": "Retire implemented or obsolete records from the working set via gated lifecycle: identify \u2192 propose-retirement \u2192 evidence-gate \u2192 apply-or-reject. Evidence required: retirement rationale + implementedByRef (when targeting 'implemented' status) or supersededByRef (optional, for 'retired'). Rejection leaves record status byte-identical. Retired records remain fully queryable with provenance via includeRetired flag."
36
+ "description": "Retire implemented or obsolete records from the working set via gated lifecycle: identify propose-retirement evidence-gate apply-or-reject. Evidence required: retirement rationale + implementedByRef (when targeting 'implemented' status) or supersededByRef (optional, for 'retired'). Rejection leaves record status byte-identical. Retired records remain fully queryable with provenance via includeRetired flag."
37
37
  }
38
38
  ],
39
39
  "docs": [
@@ -55,7 +55,7 @@
55
55
  {
56
56
  "id": "knowledge.flow-runner",
57
57
  "path": "adapters/flow-runner/index.js",
58
- "description": "Executable flow logic: capture(rawText, meta) \u2192 classified raw record; compile(rawIds[]) \u2192 compiled record with provenance links; synthesize(conceptId | topicSelector, options) \u2192 concept summary proposal with mutation gate; consolidate(snapshotId | topicSelector, options) \u2192 decision snapshot consolidation with supersede-not-delete; retire(recordId, options) \u2192 gated status lifecycle transition (active\u2192implemented\u2192retired) with working-set exclusion. Emits canonical telemetry events at gate points."
58
+ "description": "Executable flow logic: capture(rawText, meta) classified raw record; compile(rawIds[]) compiled record with provenance links; synthesize(conceptId | topicSelector, options) concept summary proposal with mutation gate; consolidate(snapshotId | topicSelector, options) decision snapshot consolidation with supersede-not-delete; retire(recordId, options) gated status lifecycle transition (active→implemented→retired) with working-set exclusion. Emits canonical telemetry events at gate points."
59
59
  },
60
60
  {
61
61
  "id": "knowledge.similarity-vector",
@@ -82,7 +82,7 @@
82
82
  {
83
83
  "id": "knowledge.synthesis-suite",
84
84
  "path": "evals/synthesis/suite.test.js",
85
- "description": "Eval cases for synthesize: AC1 (similar source \u2192 proposal not mutation), AC2 (rejection leaves concept byte-identical), AC3 (apply updates with provenance to all contributing sources), pluggable-similarity interface test, gate telemetry."
85
+ "description": "Eval cases for synthesize: AC1 (similar source proposal not mutation), AC2 (rejection leaves concept byte-identical), AC3 (apply updates with provenance to all contributing sources), pluggable-similarity interface test, gate telemetry."
86
86
  },
87
87
  {
88
88
  "id": "knowledge.consolidation-suite",
@@ -92,7 +92,7 @@
92
92
  {
93
93
  "id": "knowledge.similarity-vector-suite",
94
94
  "path": "evals/similarity-vector/suite.test.js",
95
- "description": "Eval cases for the vector similarity adapter: unit tests (cosineSimilarity math, injectable embed, threshold, fail-closed), drop-in proof (runner.synthesize with injected embed produces valid proposals), and live-gated tests (real ollama nomic-embed-text round-trip \u2014 skipped when ollama unavailable)."
95
+ "description": "Eval cases for the vector similarity adapter: unit tests (cosineSimilarity math, injectable embed, threshold, fail-closed), drop-in proof (runner.synthesize with injected embed produces valid proposals), and live-gated tests (real ollama nomic-embed-text round-trip skipped when ollama unavailable)."
96
96
  },
97
97
  {
98
98
  "id": "knowledge.retirement-suite",
@@ -102,7 +102,14 @@
102
102
  {
103
103
  "id": "knowledge.entity-cards-suite",
104
104
  "path": "evals/entities/suite.test.js",
105
- "description": "Eval cases for person/entity cards (issue #48): AC1-AC4 \u2014 entity extraction from Attendees lines, exact-match resolution, possible-duplicate detection, merge via propose/apply/reject (union aliases+backlinks, supersede duplicate), Obsidian people/ folder rendering, and extended contract suite (person type validity) on both adapters."
105
+ "description": "Eval cases for person/entity cards (issue #48): AC1-AC4 entity extraction from Attendees lines, exact-match resolution, possible-duplicate detection, merge via propose/apply/reject (union aliases+backlinks, supersede duplicate), Obsidian people/ folder rendering, and extended contract suite (person type validity) on both adapters."
106
+ }
107
+ ],
108
+ "skills": [
109
+ {
110
+ "id": "knowledge.knowledge-capture",
111
+ "path": "skills/knowledge-capture/SKILL.md",
112
+ "description": "Save durable knowledge, lightweight pointers, user corrections, decisions, lessons, and source references into the knowledge base."
106
113
  }
107
114
  ]
108
115
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kontourai/flow-agents",
3
- "version": "1.1.0",
3
+ "version": "1.2.0",
4
4
  "description": "Flow Agents — a Kontour product that applies Flow and Veritas discipline as a portable process layer inside the agent tools you already use: Claude Code, Codex, Kiro, opencode, pi, and GitHub Actions — with framework adapters (AWS Strands preview) on the same policy-engine contract.",
5
5
  "keywords": [
6
6
  "agents",
@@ -36,7 +36,6 @@
36
36
  "flow-agents-context-map": "build/src/cli.js",
37
37
  "flow-agents-effective-backlog-settings": "build/src/cli.js",
38
38
  "flow-agents-filter-installed-packs": "build/src/cli.js",
39
- "flow-agents-flow-kit": "build/src/cli.js",
40
39
  "flow-agents-fixture-retirement-audit": "build/src/cli.js",
41
40
  "flow-agents-promote-workflow-artifact": "build/src/cli.js",
42
41
  "flow-agents-publish-change": "build/src/cli.js",
@@ -49,7 +48,8 @@
49
48
  "flow-agents-validate-hook-influence": "build/src/cli.js",
50
49
  "flow-agents-validate-source": "build/src/cli.js",
51
50
  "flow-agents-workflow-artifact-cleanup-audit": "build/src/cli.js",
52
- "flow-agents-workflow-sidecar": "build/src/cli/workflow-sidecar.js"
51
+ "flow-agents-workflow-sidecar": "build/src/cli/workflow-sidecar.js",
52
+ "flow-agents-kit": "build/src/cli.js"
53
53
  },
54
54
  "files": [
55
55
  ".github/",
@@ -100,7 +100,6 @@
100
100
  "validate:package": "npm run build --silent && node build/src/cli.js validate-package",
101
101
  "workflow:sidecar": "npm run build --silent && node build/src/cli/workflow-sidecar.js",
102
102
  "workflow:validate-artifacts": "npm run build --silent && node build/src/cli/validate-workflow-artifacts.js",
103
- "flow-kit": "npm run build --silent && node build/src/cli.js flow-kit",
104
103
  "effective-backlog-settings": "npm run build --silent && node build/src/cli.js effective-backlog-settings",
105
104
  "pull-work-provider": "npm run build --silent && node build/src/cli.js pull-work-provider",
106
105
  "publish-change": "npm run build --silent && node build/src/cli.js publish-change",
@@ -125,11 +124,15 @@
125
124
  "promptfoo": "PROMPTFOO_CONFIG_DIR=.promptfoo PROMPTFOO_DISABLE_WAL_MODE=true PROMPTFOO_DISABLE_TELEMETRY=true promptfoo",
126
125
  "promptfoo:view": "PROMPTFOO_CONFIG_DIR=.promptfoo PROMPTFOO_DISABLE_WAL_MODE=true PROMPTFOO_DISABLE_TELEMETRY=true promptfoo view",
127
126
  "check:content-boundary": "node scripts/check-content-boundary.cjs",
128
- "prepack": "npm run build --silent && npm run validate:source --"
127
+ "prepack": "npm run build --silent && npm run validate:source --",
128
+ "kit": "npm run build --silent && node build/src/cli.js kit"
129
129
  },
130
130
  "devDependencies": {
131
131
  "@types/node": "^22.19.19",
132
132
  "promptfoo": "^0.121.15",
133
133
  "typescript": "^6.0.3"
134
+ },
135
+ "dependencies": {
136
+ "@kontourai/flow": "^1.2.0"
134
137
  }
135
138
  }